chore: move analytics to platform (#2960)
This commit is contained in:
@@ -50,7 +50,6 @@
|
|||||||
"buffer": "^6.0.3",
|
"buffer": "^6.0.3",
|
||||||
"esprima": "^4.0.1",
|
"esprima": "^4.0.1",
|
||||||
"events": "^3.3.0",
|
"events": "^3.3.0",
|
||||||
"firebase": "^9.8.4",
|
|
||||||
"fp-ts": "^2.12.1",
|
"fp-ts": "^2.12.1",
|
||||||
"fuse.js": "^6.6.2",
|
"fuse.js": "^6.6.2",
|
||||||
"globalthis": "^1.0.3",
|
"globalthis": "^1.0.3",
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { logHoppRequestRunToAnalytics } from "~/helpers/fb/analytics"
|
import { platform } from "~/platform"
|
||||||
import { GQLConnection } from "~/helpers/GQLConnection"
|
import { GQLConnection } from "~/helpers/GQLConnection"
|
||||||
import { getCurrentStrategyID } from "~/helpers/network"
|
import { getCurrentStrategyID } from "~/helpers/network"
|
||||||
import { useReadonlyStream, useStream } from "@composables/stream"
|
import { useReadonlyStream, useStream } from "@composables/stream"
|
||||||
@@ -48,7 +48,7 @@ const onConnectClick = () => {
|
|||||||
if (!connected.value) {
|
if (!connected.value) {
|
||||||
props.conn.connect(url.value, headers.value as any)
|
props.conn.connect(url.value, headers.value as any)
|
||||||
|
|
||||||
logHoppRequestRunToAnalytics({
|
platform.analytics?.logHoppRequestRunToAnalytics({
|
||||||
platform: "graphql-schema",
|
platform: "graphql-schema",
|
||||||
strategy: getCurrentStrategyID(),
|
strategy: getCurrentStrategyID(),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -379,7 +379,7 @@ import {
|
|||||||
import { commonHeaders } from "~/helpers/headers"
|
import { commonHeaders } from "~/helpers/headers"
|
||||||
import { GQLConnection } from "~/helpers/GQLConnection"
|
import { GQLConnection } from "~/helpers/GQLConnection"
|
||||||
import { makeGQLHistoryEntry, addGraphqlHistoryEntry } from "~/newstore/history"
|
import { makeGQLHistoryEntry, addGraphqlHistoryEntry } from "~/newstore/history"
|
||||||
import { logHoppRequestRunToAnalytics } from "~/helpers/fb/analytics"
|
import { platform } from "~/platform"
|
||||||
import { getCurrentStrategyID } from "~/helpers/network"
|
import { getCurrentStrategyID } from "~/helpers/network"
|
||||||
import { useCodemirror } from "@composables/codemirror"
|
import { useCodemirror } from "@composables/codemirror"
|
||||||
import jsonLinter from "~/helpers/editor/linting/json"
|
import jsonLinter from "~/helpers/editor/linting/json"
|
||||||
@@ -748,7 +748,7 @@ const runQuery = async () => {
|
|||||||
console.error(e)
|
console.error(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
logHoppRequestRunToAnalytics({
|
platform.analytics?.logHoppRequestRunToAnalytics({
|
||||||
platform: "graphql-query",
|
platform: "graphql-query",
|
||||||
strategy: getCurrentStrategyID(),
|
strategy: getCurrentStrategyID(),
|
||||||
})
|
})
|
||||||
|
|||||||
21
packages/hoppscotch-common/src/helpers/app/index.ts
Normal file
21
packages/hoppscotch-common/src/helpers/app/index.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import { platform } from "~/platform"
|
||||||
|
|
||||||
|
let initialized = false
|
||||||
|
|
||||||
|
export function initializeApp() {
|
||||||
|
if (!initialized) {
|
||||||
|
try {
|
||||||
|
platform.auth.performAuthInit()
|
||||||
|
platform.sync.settings.initSettingsSync()
|
||||||
|
platform.sync.collections.initCollectionsSync()
|
||||||
|
platform.sync.history.initHistorySync()
|
||||||
|
platform.sync.environments.initEnvironmentsSync()
|
||||||
|
platform.analytics?.initAnalytics()
|
||||||
|
|
||||||
|
initialized = true
|
||||||
|
} catch (e) {
|
||||||
|
// initializeApp throws exception if we reinitialize
|
||||||
|
initialized = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
import { initializeApp } from "firebase/app"
|
|
||||||
import { platform } from "~/platform"
|
|
||||||
import { initAnalytics } from "./analytics"
|
|
||||||
|
|
||||||
const firebaseConfig = {
|
|
||||||
apiKey: import.meta.env.VITE_API_KEY,
|
|
||||||
authDomain: import.meta.env.VITE_AUTH_DOMAIN,
|
|
||||||
databaseURL: import.meta.env.VITE_DATABASE_URL,
|
|
||||||
projectId: import.meta.env.VITE_PROJECT_ID,
|
|
||||||
storageBucket: import.meta.env.VITE_STORAGE_BUCKET,
|
|
||||||
messagingSenderId: import.meta.env.VITE_MESSAGING_SENDER_ID,
|
|
||||||
appId: import.meta.env.VITE_APP_ID,
|
|
||||||
measurementId: import.meta.env.VITE_MEASUREMENT_ID,
|
|
||||||
}
|
|
||||||
|
|
||||||
let initialized = false
|
|
||||||
|
|
||||||
export function initializeFirebase() {
|
|
||||||
if (!initialized) {
|
|
||||||
try {
|
|
||||||
initializeApp(firebaseConfig)
|
|
||||||
|
|
||||||
platform.auth.performAuthInit()
|
|
||||||
platform.sync.settings.initSettingsSync()
|
|
||||||
platform.sync.collections.initCollectionsSync()
|
|
||||||
platform.sync.history.initHistorySync()
|
|
||||||
platform.sync.environments.initEnvironmentsSync()
|
|
||||||
initAnalytics()
|
|
||||||
|
|
||||||
initialized = true
|
|
||||||
} catch (e) {
|
|
||||||
// initializeApp throws exception if we reinitialize
|
|
||||||
initialized = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
import {
|
|
||||||
collection,
|
|
||||||
doc,
|
|
||||||
getFirestore,
|
|
||||||
onSnapshot,
|
|
||||||
setDoc,
|
|
||||||
} from "firebase/firestore"
|
|
||||||
import { platform } from "~/platform"
|
|
||||||
import { applySetting, settingsStore, SettingsDef } from "~/newstore/settings"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used locally to prevent infinite loop when settings sync update
|
|
||||||
* is applied to the store which then fires the store sync listener.
|
|
||||||
* When you want to update settings and not want to fire the update listener,
|
|
||||||
* set this to true and then set it back to false once it is done
|
|
||||||
*/
|
|
||||||
let loadedSettings = false
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write Transform
|
|
||||||
*/
|
|
||||||
async function writeSettings(setting: string, value: any) {
|
|
||||||
const currentUser = platform.auth.getCurrentUser()
|
|
||||||
|
|
||||||
if (currentUser === null)
|
|
||||||
throw new Error("Cannot write setting, user not signed in")
|
|
||||||
|
|
||||||
const st = {
|
|
||||||
updatedOn: new Date(),
|
|
||||||
author: currentUser.uid,
|
|
||||||
author_name: currentUser.displayName,
|
|
||||||
author_image: currentUser.photoURL,
|
|
||||||
name: setting,
|
|
||||||
value,
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
await setDoc(
|
|
||||||
doc(getFirestore(), "users", currentUser.uid, "settings", setting),
|
|
||||||
st
|
|
||||||
)
|
|
||||||
} catch (e) {
|
|
||||||
console.error("error updating", st, e)
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function initSettings() {
|
|
||||||
const currentUser$ = platform.auth.getCurrentUserStream()
|
|
||||||
|
|
||||||
settingsStore.dispatches$.subscribe((dispatch) => {
|
|
||||||
const currentUser = platform.auth.getCurrentUser()
|
|
||||||
|
|
||||||
if (currentUser && loadedSettings) {
|
|
||||||
if (dispatch.dispatcher === "bulkApplySettings") {
|
|
||||||
Object.keys(dispatch.payload).forEach((key) => {
|
|
||||||
writeSettings(key, dispatch.payload[key])
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
writeSettings(
|
|
||||||
dispatch.payload.settingKey,
|
|
||||||
settingsStore.value[dispatch.payload.settingKey as keyof SettingsDef]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
let snapshotStop: (() => void) | null = null
|
|
||||||
|
|
||||||
// Subscribe and unsubscribe event listeners
|
|
||||||
currentUser$.subscribe((user) => {
|
|
||||||
if (!user && snapshotStop) {
|
|
||||||
// User logged out
|
|
||||||
snapshotStop()
|
|
||||||
snapshotStop = null
|
|
||||||
} else if (user) {
|
|
||||||
snapshotStop = onSnapshot(
|
|
||||||
collection(getFirestore(), "users", user.uid, "settings"),
|
|
||||||
(settingsRef) => {
|
|
||||||
const settings: any[] = []
|
|
||||||
|
|
||||||
settingsRef.forEach((doc) => {
|
|
||||||
const setting = doc.data()
|
|
||||||
setting.id = doc.id
|
|
||||||
settings.push(setting)
|
|
||||||
})
|
|
||||||
|
|
||||||
loadedSettings = false
|
|
||||||
settings.forEach((e) => {
|
|
||||||
if (e && e.name && e.value != null) {
|
|
||||||
applySetting(e.name, e.value)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
loadedSettings = true
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import Paho, { ConnectionOptions } from "paho-mqtt"
|
import Paho, { ConnectionOptions } from "paho-mqtt"
|
||||||
import { BehaviorSubject, Subject } from "rxjs"
|
import { BehaviorSubject, Subject } from "rxjs"
|
||||||
import { logHoppRequestRunToAnalytics } from "../fb/analytics"
|
import { platform } from "~/platform"
|
||||||
|
|
||||||
export type MQTTConnectionConfig = {
|
export type MQTTConnectionConfig = {
|
||||||
username?: string
|
username?: string
|
||||||
@@ -105,7 +105,7 @@ export class MQTTConnection {
|
|||||||
this.handleError(e)
|
this.handleError(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
logHoppRequestRunToAnalytics({
|
platform.analytics?.logHoppRequestRunToAnalytics({
|
||||||
platform: "mqtt",
|
platform: "mqtt",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { BehaviorSubject, Subject } from "rxjs"
|
import { BehaviorSubject, Subject } from "rxjs"
|
||||||
import { logHoppRequestRunToAnalytics } from "../fb/analytics"
|
|
||||||
import { SIOClientV2, SIOClientV3, SIOClientV4, SIOClient } from "./SIOClients"
|
import { SIOClientV2, SIOClientV3, SIOClientV4, SIOClient } from "./SIOClients"
|
||||||
import { SIOClientVersion } from "~/newstore/SocketIOSession"
|
import { SIOClientVersion } from "~/newstore/SocketIOSession"
|
||||||
|
import { platform } from "~/platform"
|
||||||
|
|
||||||
export const SOCKET_CLIENTS = {
|
export const SOCKET_CLIENTS = {
|
||||||
v2: SIOClientV2,
|
v2: SIOClientV2,
|
||||||
@@ -113,7 +113,7 @@ export class SIOConnection {
|
|||||||
this.handleError(error, "CONNECTION")
|
this.handleError(error, "CONNECTION")
|
||||||
}
|
}
|
||||||
|
|
||||||
logHoppRequestRunToAnalytics({
|
platform.analytics?.logHoppRequestRunToAnalytics({
|
||||||
platform: "socketio",
|
platform: "socketio",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { BehaviorSubject, Subject } from "rxjs"
|
import { BehaviorSubject, Subject } from "rxjs"
|
||||||
import { logHoppRequestRunToAnalytics } from "../fb/analytics"
|
import { platform } from "~/platform"
|
||||||
|
|
||||||
export type SSEEvent = { time: number } & (
|
export type SSEEvent = { time: number } & (
|
||||||
| { type: "STARTING" }
|
| { type: "STARTING" }
|
||||||
@@ -63,7 +63,7 @@ export class SSEConnection {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
logHoppRequestRunToAnalytics({
|
platform.analytics?.logHoppRequestRunToAnalytics({
|
||||||
platform: "sse",
|
platform: "sse",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { BehaviorSubject, Subject } from "rxjs"
|
import { BehaviorSubject, Subject } from "rxjs"
|
||||||
import { logHoppRequestRunToAnalytics } from "../fb/analytics"
|
import { platform } from "~/platform"
|
||||||
|
|
||||||
export type WSErrorMessage = SyntaxError | Event
|
export type WSErrorMessage = SyntaxError | Event
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ export class WSConnection {
|
|||||||
this.handleError(error as SyntaxError)
|
this.handleError(error as SyntaxError)
|
||||||
}
|
}
|
||||||
|
|
||||||
logHoppRequestRunToAnalytics({
|
platform.analytics?.logHoppRequestRunToAnalytics({
|
||||||
platform: "wss",
|
platform: "wss",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { createApp } from "vue"
|
|||||||
import { PlatformDef, setPlatformDef } from "./platform"
|
import { PlatformDef, setPlatformDef } from "./platform"
|
||||||
import { setupLocalPersistence } from "./newstore/localpersistence"
|
import { setupLocalPersistence } from "./newstore/localpersistence"
|
||||||
import { performMigrations } from "./helpers/migrations"
|
import { performMigrations } from "./helpers/migrations"
|
||||||
import { initializeFirebase } from "./helpers/fb"
|
import { initializeApp } from "./helpers/app"
|
||||||
import { initBackendGQLClient } from "./helpers/backend/GQLClient"
|
import { initBackendGQLClient } from "./helpers/backend/GQLClient"
|
||||||
import { HOPP_MODULES } from "@modules/."
|
import { HOPP_MODULES } from "@modules/."
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ export function createHoppApp(el: string | Element, platformDef: PlatformDef) {
|
|||||||
|
|
||||||
// Some basic work that needs to be done before module inits even
|
// Some basic work that needs to be done before module inits even
|
||||||
initBackendGQLClient()
|
initBackendGQLClient()
|
||||||
initializeFirebase()
|
initializeApp()
|
||||||
setupLocalPersistence()
|
setupLocalPersistence()
|
||||||
performMigrations()
|
performMigrations()
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import {
|
|||||||
} from "vue-router"
|
} from "vue-router"
|
||||||
import { setupLayouts } from "virtual:generated-layouts"
|
import { setupLayouts } from "virtual:generated-layouts"
|
||||||
import generatedRoutes from "virtual:generated-pages"
|
import generatedRoutes from "virtual:generated-pages"
|
||||||
import { logPageView } from "~/helpers/fb/analytics"
|
|
||||||
import { readonly, ref } from "vue"
|
import { readonly, ref } from "vue"
|
||||||
|
import { platform } from "~/platform"
|
||||||
|
|
||||||
const routes = setupLayouts(generatedRoutes)
|
const routes = setupLayouts(generatedRoutes)
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ export default <HoppModule>{
|
|||||||
// module to expose a stream of router events that can be independently
|
// module to expose a stream of router events that can be independently
|
||||||
// subbed to
|
// subbed to
|
||||||
router.afterEach((to) => {
|
router.afterEach((to) => {
|
||||||
logPageView(to.fullPath)
|
platform.analytics?.logPageView(to.fullPath)
|
||||||
|
|
||||||
_isLoadingInitialRoute.value = false
|
_isLoadingInitialRoute.value = false
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent } from "vue"
|
import { defineComponent } from "vue"
|
||||||
import { useI18n } from "@composables/i18n"
|
import { useI18n } from "@composables/i18n"
|
||||||
import { initializeFirebase } from "~/helpers/fb"
|
import { initializeApp } from "~/helpers/app"
|
||||||
import { platform } from "~/platform"
|
import { platform } from "~/platform"
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
@@ -25,7 +25,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
initializeFirebase()
|
initializeApp()
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
this.signingInWithEmail = true
|
this.signingInWithEmail = true
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ import {
|
|||||||
GetInviteDetailsQueryVariables,
|
GetInviteDetailsQueryVariables,
|
||||||
} from "~/helpers/backend/graphql"
|
} from "~/helpers/backend/graphql"
|
||||||
import { acceptTeamInvitation } from "~/helpers/backend/mutations/TeamInvitation"
|
import { acceptTeamInvitation } from "~/helpers/backend/mutations/TeamInvitation"
|
||||||
import { initializeFirebase } from "~/helpers/fb"
|
import { initializeApp } from "~/helpers/app"
|
||||||
import { platform } from "~/platform"
|
import { platform } from "~/platform"
|
||||||
import { onLoggedIn } from "@composables/auth"
|
import { onLoggedIn } from "@composables/auth"
|
||||||
import { useReadonlyStream } from "@composables/stream"
|
import { useReadonlyStream } from "@composables/stream"
|
||||||
@@ -234,7 +234,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
initializeFirebase()
|
initializeApp()
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
if (typeof this.$route.query.id === "string") {
|
if (typeof this.$route.query.id === "string") {
|
||||||
|
|||||||
12
packages/hoppscotch-common/src/platform/analytics.ts
Normal file
12
packages/hoppscotch-common/src/platform/analytics.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
export type HoppRequestEvent =
|
||||||
|
| {
|
||||||
|
platform: "rest" | "graphql-query" | "graphql-schema"
|
||||||
|
strategy: "normal" | "proxy" | "extension"
|
||||||
|
}
|
||||||
|
| { platform: "wss" | "sse" | "socketio" | "mqtt" }
|
||||||
|
|
||||||
|
export type AnalyticsPlatformDef = {
|
||||||
|
initAnalytics: () => void
|
||||||
|
logHoppRequestRunToAnalytics: (ev: HoppRequestEvent) => void
|
||||||
|
logPageView: (pagePath: string) => void
|
||||||
|
}
|
||||||
@@ -5,10 +5,12 @@ import { CollectionsPlatformDef } from "./collections"
|
|||||||
import { SettingsPlatformDef } from "./settings"
|
import { SettingsPlatformDef } from "./settings"
|
||||||
import { HistoryPlatformDef } from "./history"
|
import { HistoryPlatformDef } from "./history"
|
||||||
import { TabStatePlatformDef } from "./tab"
|
import { TabStatePlatformDef } from "./tab"
|
||||||
|
import { AnalyticsPlatformDef } from "./analytics"
|
||||||
|
|
||||||
export type PlatformDef = {
|
export type PlatformDef = {
|
||||||
ui?: UIPlatformDef
|
ui?: UIPlatformDef
|
||||||
auth: AuthPlatformDef
|
auth: AuthPlatformDef
|
||||||
|
analytics?: AnalyticsPlatformDef
|
||||||
sync: {
|
sync: {
|
||||||
environments: EnvironmentsPlatformDef
|
environments: EnvironmentsPlatformDef
|
||||||
collections: CollectionsPlatformDef
|
collections: CollectionsPlatformDef
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
import {
|
||||||
|
AnalyticsPlatformDef,
|
||||||
|
HoppRequestEvent,
|
||||||
|
} from "@hoppscotch/common/platform/analytics"
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Analytics,
|
Analytics,
|
||||||
getAnalytics,
|
getAnalytics,
|
||||||
@@ -6,13 +11,13 @@ import {
|
|||||||
setUserId,
|
setUserId,
|
||||||
setUserProperties,
|
setUserProperties,
|
||||||
} from "firebase/analytics"
|
} from "firebase/analytics"
|
||||||
import { platform } from "~/platform"
|
import { def as platformAuth } from "./firebase/auth"
|
||||||
import {
|
import {
|
||||||
HoppAccentColor,
|
HoppAccentColor,
|
||||||
HoppBgColor,
|
HoppBgColor,
|
||||||
settings$,
|
settings$,
|
||||||
settingsStore,
|
settingsStore,
|
||||||
} from "~/newstore/settings"
|
} from "@hoppscotch/common/newstore/settings"
|
||||||
|
|
||||||
let analytics: Analytics | null = null
|
let analytics: Analytics | null = null
|
||||||
|
|
||||||
@@ -27,13 +32,6 @@ type SettingsCustomDimensions = {
|
|||||||
usesTelemetry: boolean
|
usesTelemetry: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
type HoppRequestEvent =
|
|
||||||
| {
|
|
||||||
platform: "rest" | "graphql-query" | "graphql-schema"
|
|
||||||
strategy: "normal" | "proxy" | "extension"
|
|
||||||
}
|
|
||||||
| { platform: "wss" | "sse" | "socketio" | "mqtt" }
|
|
||||||
|
|
||||||
export function initAnalytics() {
|
export function initAnalytics() {
|
||||||
analytics = getAnalytics()
|
analytics = getAnalytics()
|
||||||
|
|
||||||
@@ -42,7 +40,7 @@ export function initAnalytics() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function initLoginListeners() {
|
function initLoginListeners() {
|
||||||
const authEvents$ = platform.auth.getAuthEventsStream()
|
const authEvents$ = platformAuth.getAuthEventsStream()
|
||||||
|
|
||||||
authEvents$.subscribe((ev) => {
|
authEvents$.subscribe((ev) => {
|
||||||
if (ev.event === "login") {
|
if (ev.event === "login") {
|
||||||
@@ -107,3 +105,9 @@ export function logPageView(pagePath: string) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const def: AnalyticsPlatformDef = {
|
||||||
|
initAnalytics,
|
||||||
|
logHoppRequestRunToAnalytics,
|
||||||
|
logPageView,
|
||||||
|
}
|
||||||
@@ -5,9 +5,11 @@ import { def as collectionsDef } from "./collections"
|
|||||||
import { def as settingsDef } from "./settings"
|
import { def as settingsDef } from "./settings"
|
||||||
import { def as historyDef } from "./history"
|
import { def as historyDef } from "./history"
|
||||||
import { def as tabStateDef } from "./tab"
|
import { def as tabStateDef } from "./tab"
|
||||||
|
import { def as analyticsDef } from "./analytics"
|
||||||
|
|
||||||
createHoppApp("#app", {
|
createHoppApp("#app", {
|
||||||
auth: authDef,
|
auth: authDef,
|
||||||
|
analytics: analyticsDef,
|
||||||
sync: {
|
sync: {
|
||||||
environments: envDef,
|
environments: envDef,
|
||||||
collections: collectionsDef,
|
collections: collectionsDef,
|
||||||
|
|||||||
101
pnpm-lock.yaml
generated
101
pnpm-lock.yaml
generated
@@ -159,7 +159,6 @@ importers:
|
|||||||
eslint-plugin-vue: ^9.5.1
|
eslint-plugin-vue: ^9.5.1
|
||||||
esprima: ^4.0.1
|
esprima: ^4.0.1
|
||||||
events: ^3.3.0
|
events: ^3.3.0
|
||||||
firebase: ^9.8.4
|
|
||||||
fp-ts: ^2.12.1
|
fp-ts: ^2.12.1
|
||||||
fuse.js: ^6.6.2
|
fuse.js: ^6.6.2
|
||||||
globalthis: ^1.0.3
|
globalthis: ^1.0.3
|
||||||
@@ -255,7 +254,6 @@ importers:
|
|||||||
buffer: 6.0.3
|
buffer: 6.0.3
|
||||||
esprima: 4.0.1
|
esprima: 4.0.1
|
||||||
events: 3.3.0
|
events: 3.3.0
|
||||||
firebase: 9.8.4
|
|
||||||
fp-ts: 2.12.1
|
fp-ts: 2.12.1
|
||||||
fuse.js: 6.6.2
|
fuse.js: 6.6.2
|
||||||
globalthis: 1.0.3
|
globalthis: 1.0.3
|
||||||
@@ -347,7 +345,7 @@ importers:
|
|||||||
vite-plugin-inspect: 0.7.4_vite@3.1.4
|
vite-plugin-inspect: 0.7.4_vite@3.1.4
|
||||||
vite-plugin-pages: 0.26.0_vnheu5mvzzbfbuhqo4shkhdhei
|
vite-plugin-pages: 0.26.0_vnheu5mvzzbfbuhqo4shkhdhei
|
||||||
vite-plugin-pages-sitemap: 1.4.0
|
vite-plugin-pages-sitemap: 1.4.0
|
||||||
vite-plugin-pwa: 0.13.1_bg4cnt4dy3xq3a47wkujd6ryzq
|
vite-plugin-pwa: 0.13.1_vite@3.1.4
|
||||||
vite-plugin-vue-layouts: 0.7.0_oewzdqozxqnqgsrjzmwikx34vi
|
vite-plugin-vue-layouts: 0.7.0_oewzdqozxqnqgsrjzmwikx34vi
|
||||||
vite-plugin-windicss: 1.8.8_vite@3.1.4
|
vite-plugin-windicss: 1.8.8_vite@3.1.4
|
||||||
vue-tsc: 0.38.2_typescript@4.7.4
|
vue-tsc: 0.38.2_typescript@4.7.4
|
||||||
@@ -3498,9 +3496,9 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@intlify/bundle-utils/4.0.0:
|
/@intlify/bundle-utils/6.0.0:
|
||||||
resolution: {integrity: sha512-klXrYT9VXyKEXsD6UY3pShg0O5MPC07n0TZ5RrSs5ry6T1eZVolIFGJi9c3qcDrh1qjJxgikRnPBmD7qGDqbjw==}
|
resolution: {integrity: sha512-c8nTDgsTrBqVk3LPoF/YEarqeqcW0XAY5Y0UmFl5VKWKRNQh47jzvHRDmeRWhos5bUw1zIdiTixrs99FMJ9j5g==}
|
||||||
engines: {node: '>= 12'}
|
engines: {node: '>= 14.16'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
petite-vue-i18n: '*'
|
petite-vue-i18n: '*'
|
||||||
vue-i18n: '*'
|
vue-i18n: '*'
|
||||||
@@ -3510,16 +3508,21 @@ packages:
|
|||||||
vue-i18n:
|
vue-i18n:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@intlify/message-compiler': 9.3.0-beta.16
|
'@intlify/message-compiler': 9.3.0-beta.17
|
||||||
'@intlify/shared': 9.3.0-beta.16
|
'@intlify/shared': 9.3.0-beta.17
|
||||||
|
acorn: 8.8.2
|
||||||
|
escodegen: 2.0.0
|
||||||
|
estree-walker: 2.0.2
|
||||||
jsonc-eslint-parser: 1.4.1
|
jsonc-eslint-parser: 1.4.1
|
||||||
|
magic-string: 0.30.0
|
||||||
|
mlly: 1.2.0
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
yaml-eslint-parser: 0.3.2
|
yaml-eslint-parser: 0.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@intlify/bundle-utils/5.2.0_vue-i18n@9.2.2:
|
/@intlify/bundle-utils/6.0.0_vue-i18n@9.2.2:
|
||||||
resolution: {integrity: sha512-rIfoNUTBoZK6IfaEeuoYMQZSuAXhPyZoy+UsdZj+V4eM632ynN1bGt5ttkpGO8xe0c+esfYslgJxBz//bdu4qg==}
|
resolution: {integrity: sha512-c8nTDgsTrBqVk3LPoF/YEarqeqcW0XAY5Y0UmFl5VKWKRNQh47jzvHRDmeRWhos5bUw1zIdiTixrs99FMJ9j5g==}
|
||||||
engines: {node: '>= 12'}
|
engines: {node: '>= 14.16'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
petite-vue-i18n: '*'
|
petite-vue-i18n: '*'
|
||||||
vue-i18n: '*'
|
vue-i18n: '*'
|
||||||
@@ -3529,11 +3532,14 @@ packages:
|
|||||||
vue-i18n:
|
vue-i18n:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@intlify/message-compiler': 9.3.0-beta.16
|
'@intlify/message-compiler': 9.3.0-beta.17
|
||||||
'@intlify/shared': 9.3.0-beta.16
|
'@intlify/shared': 9.3.0-beta.17
|
||||||
acorn: 8.8.2
|
acorn: 8.8.2
|
||||||
|
escodegen: 2.0.0
|
||||||
estree-walker: 2.0.2
|
estree-walker: 2.0.2
|
||||||
jsonc-eslint-parser: 1.4.1
|
jsonc-eslint-parser: 1.4.1
|
||||||
|
magic-string: 0.30.0
|
||||||
|
mlly: 1.2.0
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
vue-i18n: 9.2.2_vue@3.2.37
|
vue-i18n: 9.2.2_vue@3.2.37
|
||||||
yaml-eslint-parser: 0.3.2
|
yaml-eslint-parser: 0.3.2
|
||||||
@@ -3561,11 +3567,11 @@ packages:
|
|||||||
'@intlify/shared': 9.2.2
|
'@intlify/shared': 9.2.2
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
|
|
||||||
/@intlify/message-compiler/9.3.0-beta.16:
|
/@intlify/message-compiler/9.3.0-beta.17:
|
||||||
resolution: {integrity: sha512-CGQI3xRcs1ET75eDQ0DUy3MRYOqTauRIIgaMoISKiF83gqRWg93FqN8lGMKcpBqaF4tI0JhsfosCaGiBL9+dnw==}
|
resolution: {integrity: sha512-i7hvVIRk1Ax2uKa9xLRJCT57to08OhFMhFXXjWN07rmx5pWQYQ23MfX1xgggv9drnWTNhqEiD+u4EJeHoS5+Ww==}
|
||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 14'}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@intlify/shared': 9.3.0-beta.16
|
'@intlify/shared': 9.3.0-beta.17
|
||||||
source-map: 0.6.1
|
source-map: 0.6.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@@ -3573,8 +3579,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
|
resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
|
||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 14'}
|
||||||
|
|
||||||
/@intlify/shared/9.3.0-beta.16:
|
/@intlify/shared/9.3.0-beta.17:
|
||||||
resolution: {integrity: sha512-kXbm4svALe3lX+EjdJxfnabOphqS4yQ1Ge/iIlR8tvUiYRCoNz3hig1M4336iY++Dfx5ytEQJPNjIcknNIuvig==}
|
resolution: {integrity: sha512-mscf7RQsUTOil35jTij4KGW1RC9SWQjYScwLxP53Ns6g24iEd5HN7ksbt9O6FvTmlQuX77u+MXpBdfJsGqizLQ==}
|
||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 14'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@@ -3593,8 +3599,8 @@ packages:
|
|||||||
vue-i18n:
|
vue-i18n:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@intlify/bundle-utils': 5.2.0_vue-i18n@9.2.2
|
'@intlify/bundle-utils': 6.0.0_vue-i18n@9.2.2
|
||||||
'@intlify/shared': 9.3.0-beta.16
|
'@intlify/shared': 9.3.0-beta.17
|
||||||
'@rollup/pluginutils': 4.2.1
|
'@rollup/pluginutils': 4.2.1
|
||||||
debug: 4.3.4
|
debug: 4.3.4
|
||||||
fast-glob: 3.2.11
|
fast-glob: 3.2.11
|
||||||
@@ -3620,8 +3626,8 @@ packages:
|
|||||||
vue-i18n:
|
vue-i18n:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@intlify/bundle-utils': 4.0.0
|
'@intlify/bundle-utils': 6.0.0
|
||||||
'@intlify/shared': 9.3.0-beta.16
|
'@intlify/shared': 9.3.0-beta.17
|
||||||
'@rollup/pluginutils': 4.2.1
|
'@rollup/pluginutils': 4.2.1
|
||||||
debug: 4.3.4
|
debug: 4.3.4
|
||||||
fast-glob: 3.2.11
|
fast-glob: 3.2.11
|
||||||
@@ -5729,7 +5735,7 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/after/0.8.2:
|
/after/0.8.2:
|
||||||
resolution: {integrity: sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=}
|
resolution: {integrity: sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/agent-base/6.0.2:
|
/agent-base/6.0.2:
|
||||||
@@ -6086,7 +6092,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||||
|
|
||||||
/base64-arraybuffer/0.1.4:
|
/base64-arraybuffer/0.1.4:
|
||||||
resolution: {integrity: sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=}
|
resolution: {integrity: sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==}
|
||||||
engines: {node: '>= 0.6.0'}
|
engines: {node: '>= 0.6.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
@@ -6548,7 +6554,7 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/component-bind/1.0.0:
|
/component-bind/1.0.0:
|
||||||
resolution: {integrity: sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=}
|
resolution: {integrity: sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/component-emitter/1.3.0:
|
/component-emitter/1.3.0:
|
||||||
@@ -6556,7 +6562,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/component-inherit/0.0.3:
|
/component-inherit/0.0.3:
|
||||||
resolution: {integrity: sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=}
|
resolution: {integrity: sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/concat-map/0.0.1:
|
/concat-map/0.0.1:
|
||||||
@@ -8960,7 +8966,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/has-cors/1.1.0:
|
/has-cors/1.1.0:
|
||||||
resolution: {integrity: sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=}
|
resolution: {integrity: sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/has-flag/3.0.0:
|
/has-flag/3.0.0:
|
||||||
@@ -9264,7 +9270,7 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
/indexof/0.0.1:
|
/indexof/0.0.1:
|
||||||
resolution: {integrity: sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=}
|
resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/inflight/1.0.6:
|
/inflight/1.0.6:
|
||||||
@@ -10770,6 +10776,13 @@ packages:
|
|||||||
'@jridgewell/sourcemap-codec': 1.4.14
|
'@jridgewell/sourcemap-codec': 1.4.14
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/magic-string/0.30.0:
|
||||||
|
resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
dependencies:
|
||||||
|
'@jridgewell/sourcemap-codec': 1.4.14
|
||||||
|
dev: true
|
||||||
|
|
||||||
/make-dir/3.1.0:
|
/make-dir/3.1.0:
|
||||||
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
|
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -10987,6 +11000,15 @@ packages:
|
|||||||
ufo: 1.0.1
|
ufo: 1.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/mlly/1.2.0:
|
||||||
|
resolution: {integrity: sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==}
|
||||||
|
dependencies:
|
||||||
|
acorn: 8.8.2
|
||||||
|
pathe: 1.1.0
|
||||||
|
pkg-types: 1.0.2
|
||||||
|
ufo: 1.1.1
|
||||||
|
dev: true
|
||||||
|
|
||||||
/mocha/9.2.2:
|
/mocha/9.2.2:
|
||||||
resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
|
resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==}
|
||||||
engines: {node: '>= 12.0.0'}
|
engines: {node: '>= 12.0.0'}
|
||||||
@@ -11485,6 +11507,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==}
|
resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/pathe/1.1.0:
|
||||||
|
resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/pause-stream/0.0.11:
|
/pause-stream/0.0.11:
|
||||||
resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
|
resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -11550,6 +11576,14 @@ packages:
|
|||||||
pathe: 1.0.0
|
pathe: 1.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/pkg-types/1.0.2:
|
||||||
|
resolution: {integrity: sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==}
|
||||||
|
dependencies:
|
||||||
|
jsonc-parser: 3.2.0
|
||||||
|
mlly: 1.2.0
|
||||||
|
pathe: 1.1.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/portfinder/1.0.32:
|
/portfinder/1.0.32:
|
||||||
resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==}
|
resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==}
|
||||||
engines: {node: '>= 0.12.0'}
|
engines: {node: '>= 0.12.0'}
|
||||||
@@ -12959,7 +12993,7 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/to-array/0.1.4:
|
/to-array/0.1.4:
|
||||||
resolution: {integrity: sha1-F+bBH3PdTz10zaek/zI46a2b+JA=}
|
resolution: {integrity: sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/to-fast-properties/2.0.0:
|
/to-fast-properties/2.0.0:
|
||||||
@@ -13301,6 +13335,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA==}
|
resolution: {integrity: sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/ufo/1.1.1:
|
||||||
|
resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/unbox-primitive/1.0.2:
|
/unbox-primitive/1.0.2:
|
||||||
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
|
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -14029,11 +14067,10 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/vite-plugin-pwa/0.13.1_bg4cnt4dy3xq3a47wkujd6ryzq:
|
/vite-plugin-pwa/0.13.1_vite@3.1.4:
|
||||||
resolution: {integrity: sha512-NR3dIa+o2hzlzo4lF4Gu0cYvoMjSw2DdRc6Epw1yjmCqWaGuN86WK9JqZie4arNlE1ZuWT3CLiMdiX5wcmmUmg==}
|
resolution: {integrity: sha512-NR3dIa+o2hzlzo4lF4Gu0cYvoMjSw2DdRc6Epw1yjmCqWaGuN86WK9JqZie4arNlE1ZuWT3CLiMdiX5wcmmUmg==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
vite: ^3.1.0
|
vite: ^3.1.0
|
||||||
workbox-window: ^6.5.4
|
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.3.4
|
debug: 4.3.4
|
||||||
fast-glob: 3.2.11
|
fast-glob: 3.2.11
|
||||||
@@ -15087,7 +15124,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/yeast/0.1.2:
|
/yeast/0.1.2:
|
||||||
resolution: {integrity: sha1-AI4G2AlDIMNy28L47XagymyKxBk=}
|
resolution: {integrity: sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/yn/3.1.1:
|
/yn/3.1.1:
|
||||||
|
|||||||
Reference in New Issue
Block a user