From 43cb141971afff9c9d2ad6a4d8a7adeb00646c99 Mon Sep 17 00:00:00 2001 From: Charles Hudson Date: Thu, 16 Oct 2025 16:27:02 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A5=20feat(mocks):=20Creating=20a=20sy?= =?UTF-8?q?stem=20to=20generate=20and=20use=20fixtures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [[NT-1588](https://contentful.atlassian.net/browse/NT-1588)] --- .gitignore | 1 + implementations/node/.env.example | 2 + implementations/node/tsconfig.json | 3 + implementations/node/vitest.config.ts | 4 + implementations/web-vanilla/.env.example | 2 + implementations/web-vanilla/package.json | 2 +- lib/mocks/.contentfulrc.example.json | 7 + lib/mocks/package.json | 16 +- lib/mocks/scripts/fetchEntries.ts | 261 + lib/mocks/src/contentful-handlers.ts | 74 + .../data/entries/1MwiFl4z7gkwqGYdvCmr8c.json | 131 + .../data/entries/2Z2WLOx07InSewC3LUB3eX.json | 443 ++ .../data/entries/4ib0hsHWoSOnCVdDkizE8d.json | 426 ++ .../data/entries/5XHssysWUDECHzKLzoIsg1.json | 227 + .../data/entries/6zqoWXyiSrf0ja7I2WGtYj.json | 241 + .../data/entries/7pa5bOx8Z9NmNcr7mISvD.json | 241 + .../data/entries/xFwgG3oNaOcjzWiGe4vXo.json | 663 +++ .../data/space/ctfl-space-data.json | 4352 +++++++++++++++++ lib/mocks/src/experience-handlers.ts | 266 +- .../experience/data/identified-visitor.json | 204 + .../src/experience/data/new-visitor.json | 127 + lib/mocks/src/insights-handlers.ts | 22 +- lib/mocks/src/server.ts | 6 + lib/mocks/tsconfig.json | 2 +- platforms/javascript/api-client/package.json | 1 + .../api-client/src/builders/EventBuilder.ts | 18 +- .../experience/ExperienceApiClient.test.ts | 7 +- .../src/experience/ExperienceApiClient.ts | 9 +- .../api-client/src/experience/index.ts | 1 - platforms/javascript/api-client/src/index.ts | 1 + .../src/insights/InsightsApiClient.test.ts | 2 +- .../src/insights/InsightsApiClient.ts | 2 +- .../api-client/src/insights/index.ts | 1 - .../javascript/api-client/tsconfig.cjs.json | 1 + .../javascript/api-client/tsconfig.esm.json | 1 + .../javascript/api-client/vitest.config.ts | 6 + platforms/javascript/api-schemas/README.md | 0 platforms/javascript/api-schemas/package.json | 41 + .../src/contentful}/AudienceEntry.ts | 0 .../src/contentful}/Entry.ts | 0 .../src/contentful}/PersonalizationConfig.ts | 0 .../src/contentful}/PersonalizationEntry.ts | 0 .../src/contentful}/PersonalizedEntry.ts | 0 .../src/contentful}/index.ts | 0 .../experience}/BatchExperienceResponse.ts | 0 .../src/experience}/ExperienceRequest.ts | 0 .../src/experience}/ExperienceResponse.ts | 0 .../src/experience}/ResponseEnvelope.ts | 0 .../src/experience}/change/Change.ts | 0 .../src/experience}/change/index.ts | 0 .../src/experience}/event/AliasEvent.ts | 0 .../experience}/event/BatchExperienceEvent.ts | 0 .../experience}/event/ComponentViewEvent.ts | 0 .../src/experience}/event/ExperienceEvent.ts | 0 .../src/experience}/event/GroupEvent.ts | 0 .../src/experience}/event/IdentifyEvent.ts | 0 .../src/experience}/event/PageViewEvent.ts | 0 .../src/experience}/event/ScreenEvent.ts | 0 .../src/experience}/event/TrackEvent.ts | 0 .../event/UniversalEventProperties.ts | 0 .../src/experience}/event/index.ts | 0 .../src/experience}/event/properties/App.ts | 0 .../experience}/event/properties/Campaign.ts | 0 .../experience}/event/properties/Channel.ts | 0 .../event/properties/GeoLocation.ts | 0 .../experience}/event/properties/Library.ts | 0 .../src/experience}/event/properties/Page.ts | 0 .../event/properties/Properties.ts | 0 .../src/experience}/event/properties/Query.ts | 0 .../experience}/event/properties/Traits.ts | 0 .../src/experience}/event/properties/index.ts | 0 .../src/experience}/index.ts | 0 .../SelectedPersonalizations.ts | 0 .../src/experience}/personalization/index.ts | 0 .../src/experience}/profile/Profile.ts | 0 .../src/experience}/profile/index.ts | 0 .../profile/properties/SessionStatistics.ts | 0 .../experience}/profile/properties/index.ts | 0 platforms/javascript/api-schemas/src/index.ts | 3 + .../src/insights}/event/BatchInsightsEvent.ts | 2 +- .../src/insights}/event/InsightsEvent.ts | 2 +- .../src/insights}/event/index.ts | 0 .../dto => api-schemas/src/insights}/index.ts | 0 .../javascript/api-schemas/tsconfig.cjs.json | 16 + .../javascript/api-schemas/tsconfig.esm.json | 15 + .../javascript/api-schemas/tsconfig.json | 4 + platforms/javascript/core/package.json | 4 +- .../src/personalization/Personalization.ts | 8 + .../resolvers/PersonalizedEntryResolver.ts | 14 +- platforms/javascript/core/vitest.config.ts | 1 + platforms/javascript/node/vitest.config.ts | 7 +- .../javascript/react-native/vitest.config.ts | 6 +- platforms/javascript/web/.env.example | 5 + platforms/javascript/web/index.html | 33 +- platforms/javascript/web/vite.config.ts | 1 + pnpm-lock.yaml | 2409 ++++++++- pnpm-workspace.yaml | 4 + tsconfig.base.json | 1 + 98 files changed, 9987 insertions(+), 362 deletions(-) create mode 100644 lib/mocks/.contentfulrc.example.json create mode 100644 lib/mocks/scripts/fetchEntries.ts create mode 100644 lib/mocks/src/contentful-handlers.ts create mode 100644 lib/mocks/src/contentful/data/entries/1MwiFl4z7gkwqGYdvCmr8c.json create mode 100644 lib/mocks/src/contentful/data/entries/2Z2WLOx07InSewC3LUB3eX.json create mode 100644 lib/mocks/src/contentful/data/entries/4ib0hsHWoSOnCVdDkizE8d.json create mode 100644 lib/mocks/src/contentful/data/entries/5XHssysWUDECHzKLzoIsg1.json create mode 100644 lib/mocks/src/contentful/data/entries/6zqoWXyiSrf0ja7I2WGtYj.json create mode 100644 lib/mocks/src/contentful/data/entries/7pa5bOx8Z9NmNcr7mISvD.json create mode 100644 lib/mocks/src/contentful/data/entries/xFwgG3oNaOcjzWiGe4vXo.json create mode 100644 lib/mocks/src/contentful/data/space/ctfl-space-data.json create mode 100644 lib/mocks/src/experience/data/identified-visitor.json create mode 100644 lib/mocks/src/experience/data/new-visitor.json create mode 100644 platforms/javascript/api-schemas/README.md create mode 100644 platforms/javascript/api-schemas/package.json rename platforms/javascript/{core/src/personalization/resolvers/personalized-entry => api-schemas/src/contentful}/AudienceEntry.ts (100%) rename platforms/javascript/{core/src/personalization/resolvers/personalized-entry => api-schemas/src/contentful}/Entry.ts (100%) rename platforms/javascript/{core/src/personalization/resolvers/personalized-entry => api-schemas/src/contentful}/PersonalizationConfig.ts (100%) rename platforms/javascript/{core/src/personalization/resolvers/personalized-entry => api-schemas/src/contentful}/PersonalizationEntry.ts (100%) rename platforms/javascript/{core/src/personalization/resolvers/personalized-entry => api-schemas/src/contentful}/PersonalizedEntry.ts (100%) rename platforms/javascript/{core/src/personalization/resolvers/personalized-entry => api-schemas/src/contentful}/index.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/BatchExperienceResponse.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/ExperienceRequest.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/ExperienceResponse.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/ResponseEnvelope.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/change/Change.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/change/index.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/AliasEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/BatchExperienceEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/ComponentViewEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/ExperienceEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/GroupEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/IdentifyEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/PageViewEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/ScreenEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/TrackEvent.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/UniversalEventProperties.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/index.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/App.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/Campaign.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/Channel.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/GeoLocation.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/Library.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/Page.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/Properties.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/Query.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/Traits.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/event/properties/index.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/index.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/personalization/SelectedPersonalizations.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/personalization/index.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/profile/Profile.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/profile/index.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/profile/properties/SessionStatistics.ts (100%) rename platforms/javascript/{api-client/src/experience/dto => api-schemas/src/experience}/profile/properties/index.ts (100%) create mode 100644 platforms/javascript/api-schemas/src/index.ts rename platforms/javascript/{api-client/src/insights/dto => api-schemas/src/insights}/event/BatchInsightsEvent.ts (87%) rename platforms/javascript/{api-client/src/insights/dto => api-schemas/src/insights}/event/InsightsEvent.ts (81%) rename platforms/javascript/{api-client/src/insights/dto => api-schemas/src/insights}/event/index.ts (100%) rename platforms/javascript/{api-client/src/insights/dto => api-schemas/src/insights}/index.ts (100%) create mode 100644 platforms/javascript/api-schemas/tsconfig.cjs.json create mode 100644 platforms/javascript/api-schemas/tsconfig.esm.json create mode 100644 platforms/javascript/api-schemas/tsconfig.json diff --git a/.gitignore b/.gitignore index 1f342d38..4b308147 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ *.pid.lock *.seed *.tsbuildinfo +.contentfulrc.json .DS_Store .env .temp diff --git a/implementations/node/.env.example b/implementations/node/.env.example index 6e164b35..eb49fa29 100644 --- a/implementations/node/.env.example +++ b/implementations/node/.env.example @@ -8,3 +8,5 @@ VITE_CONTENTFUL_SPACE_ID= VITE_EXPERIENCE_API_BASE_URL= VITE_INSIGHTS_API_BASE_URL= +VITE_CONTENTFUL_CDA_HOST= +VITE_CONTENTFUL_BASE_PATH= diff --git a/implementations/node/tsconfig.json b/implementations/node/tsconfig.json index c6a3e6a2..c0b1ef29 100644 --- a/implementations/node/tsconfig.json +++ b/implementations/node/tsconfig.json @@ -8,6 +8,9 @@ "outDir": "./dist", "paths": { "@contentful/optimization-api-client": ["../../platforms/javascript/api-client/src/index.ts"], + "@contentful/optimization-api-schemas": [ + "../../platforms/javascript/api-schemas/src/index.ts" + ], "@contentful/optimization-core": ["../../platforms/javascript/core/src/index.ts"], "@contentful/optimization-node": ["../../platforms/javascript/node/src/index.ts"] }, diff --git a/implementations/node/vitest.config.ts b/implementations/node/vitest.config.ts index 251921c7..5689e920 100644 --- a/implementations/node/vitest.config.ts +++ b/implementations/node/vitest.config.ts @@ -8,6 +8,10 @@ export default defineConfig({ __dirname, '../../platforms/javascript/api-client/src/', ), + '@contentful/optimization-api-schemas': resolve( + __dirname, + '../../platforms/javascript/api-schemas/src/', + ), '@contentful/optimization-core': resolve(__dirname, '../../platforms/javascript/core/src/'), '@contentful/optimization-node': resolve(__dirname, '../../platforms/javascript/node/src/'), }, diff --git a/implementations/web-vanilla/.env.example b/implementations/web-vanilla/.env.example index 6e164b35..eb49fa29 100644 --- a/implementations/web-vanilla/.env.example +++ b/implementations/web-vanilla/.env.example @@ -8,3 +8,5 @@ VITE_CONTENTFUL_SPACE_ID= VITE_EXPERIENCE_API_BASE_URL= VITE_INSIGHTS_API_BASE_URL= +VITE_CONTENTFUL_CDA_HOST= +VITE_CONTENTFUL_BASE_PATH= diff --git a/implementations/web-vanilla/package.json b/implementations/web-vanilla/package.json index 41046734..898b8fb7 100644 --- a/implementations/web-vanilla/package.json +++ b/implementations/web-vanilla/package.json @@ -5,7 +5,7 @@ "license": "MIT", "scripts": { "build": "pnpm clean; pnpm build:sdk", - "build:sdk": "pnpm --filter '../../platforms/javascript/(api-client|core|web)' build && cp -r ../../platforms/javascript/web/dist ./public/dist", + "build:sdk": "pnpm --filter '../../platforms/javascript/(api-schemas|api-client|core|web)' build && cp -r ../../platforms/javascript/web/dist ./public/dist", "clean": "rimraf ./public/dist ./coverage ./playwright-report ./test-results tsconfig.tsbuildinfo", "serve": "pnpm serve:mocks && pnpm serve:app", "serve:app": "pnpm build && docker compose up -d", diff --git a/lib/mocks/.contentfulrc.example.json b/lib/mocks/.contentfulrc.example.json new file mode 100644 index 00000000..9b626bc2 --- /dev/null +++ b/lib/mocks/.contentfulrc.example.json @@ -0,0 +1,7 @@ +{ + "deliveryToken": "[CDA Access Token]", + "contentFile": "./src/contentful/data/space/ctfl-space-data.json", + "environmentId": "[Environment ID]", + "managementToken": "[CMA Token (PAT)]", + "spaceId": "[Space ID]" +} diff --git a/lib/mocks/package.json b/lib/mocks/package.json index 19e8686e..6f0be4fa 100644 --- a/lib/mocks/package.json +++ b/lib/mocks/package.json @@ -5,17 +5,29 @@ "license": "MIT", "main": "src/index.ts", "scripts": { - "mocks:serve": "tsx ./src/server.ts" + "config:ctfl:list": "contentful config list", + "fetch:ctfl": "pnpm fetch:ctfl:space && pnpm fetch:ctfl:entries", + "fetch:ctfl:entries": "tsx ./scripts/fetchEntries.ts", + "fetch:ctfl:space": "contentful space export --config .contentfulrc.json", + "serve": "tsx ./src/server.ts", + "upload:ctfl:space": "read -p 'This will overwrite your space data! Do you really want to do this? (y/N)' yn && [ \"$yn\" = 'y' ] && pnpm import:ctfl:confirmed", + "upload:ctfl:space:confirmed": "contentful space import --config .contentfulrc.json" }, "dependencies": { - "@contentful/optimization-core": "workspace:*", + "@contentful/optimization-api-schemas": "workspace:*", "@mswjs/http-middleware": "0.10.3", "msw": "catalog:", "tslib": "catalog:" }, "devDependencies": { + "@types/fs-extra": "^11.0.4", "@types/node": "catalog:", + "contentful": "catalog:", + "contentful-cli": "^3.9.4", "dotenv": "catalog:", + "es-toolkit": "catalog:", + "fs-extra": "^11.3.2", + "p-retry": "catalog:", "tsx": "catalog:", "typescript": "catalog:" } diff --git a/lib/mocks/scripts/fetchEntries.ts b/lib/mocks/scripts/fetchEntries.ts new file mode 100644 index 00000000..fa68bead --- /dev/null +++ b/lib/mocks/scripts/fetchEntries.ts @@ -0,0 +1,261 @@ +/* eslint-disable no-console -- CLI */ + +import type { Entry } from 'contentful' +import { get } from 'es-toolkit/compat' +import fs from 'fs-extra' +import path from 'node:path' +import process from 'node:process' +import retry from 'p-retry' + +// ----------------------------------- +// Constants +// ----------------------------------- + +const MAX_BACKOFF_MS = 8000 +const DEFAULT_RETRY_DELAY_MS = 500 +const MAX_RETRIES = 5 +const BASE_TWO = 2 +const ENV_FALLBACK = 'master' +const EXPORT_JSON_PATH = './src/contentful/data/space/ctfl-space-data.json' +const OUTPUT_DIRECTORY = './src/contentful/data/entries' +const CONTENTFUL_CONFIG_PATH = './.contentfulrc.json' + +// ----------------------------------- +// Type guards & safe accessors +// ----------------------------------- + +function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} + +function isEntry(value: unknown): value is Entry { + return isRecord(value) && 'fields' in value +} + +function firstLocaleValue(valueByLocale: unknown): unknown { + if (!isRecord(valueByLocale)) return undefined + if (Object.hasOwn(valueByLocale, 'en-US')) { + const { 'en-US': v } = valueByLocale + return v + } + const keys = Object.keys(valueByLocale) + const [firstKey] = keys + if (!firstKey) return undefined + const { [firstKey]: firstValue } = valueByLocale + return firstValue +} + +function getField(entry: Entry, fieldId: string): unknown { + const { fields } = entry + if (!isRecord(fields)) return undefined + const { [fieldId]: localized } = fields + return firstLocaleValue(localized) +} + +function normalizeEntryId(candidate: unknown): string | undefined { + if (typeof candidate === 'string') return candidate + if (isRecord(candidate)) { + const id: unknown = get(candidate, ['sys', 'id']) + return typeof id === 'string' ? id : undefined + } + return undefined +} + +function getSysId(entry: Entry): string | undefined { + const { sys } = entry + const id = get(sys, ['id']) + return typeof id === 'string' ? id : undefined +} + +function getContentTypeId(entry: Entry): string | undefined { + const { sys } = entry + const id = get(sys, ['contentType', 'sys', 'id']) + return typeof id === 'string' ? id : undefined +} + +function getStringField(entry: Entry, fieldId: string): string | undefined { + const v = getField(entry, fieldId) + return typeof v === 'string' ? v : undefined +} + +function getRecordField(entry: Entry, fieldId: string): Record | undefined { + const v = getField(entry, fieldId) + return isRecord(v) ? v : undefined +} + +// ----------------------------------- +// Retry helper +// ----------------------------------- + +async function executeWithRetry(action: () => Promise): Promise { + return await retry(action, { + retries: MAX_RETRIES, + factor: BASE_TWO, + minTimeout: DEFAULT_RETRY_DELAY_MS, + maxTimeout: MAX_BACKOFF_MS, + onFailedAttempt: (context) => { + console.warn(`Attempt ${context.attemptNumber} failed. ${context.retriesLeft} retries left.`) + }, + }) +} + +// ----------------------------------- +// IO & client builders +// ----------------------------------- + +async function getContentfulConfig(): Promise<{ + spaceId: string + environmentId: string + deliveryToken: string +}> { + const configExists = await fs.pathExists(CONTENTFUL_CONFIG_PATH) + if (!configExists) { + throw new Error(`Missing .contentfulrc.json at ${CONTENTFUL_CONFIG_PATH}`) + } + const raw = await fs.readFile(CONTENTFUL_CONFIG_PATH, 'utf8') + const parsed: unknown = JSON.parse(raw) + if (!isRecord(parsed)) throw new Error('Invalid .contentfulrc.json format') + + const spaceId = typeof parsed.spaceId === 'string' ? parsed.spaceId : undefined + const environmentId = + typeof parsed.environmentId === 'string' ? parsed.environmentId : ENV_FALLBACK + const deliveryToken = typeof parsed.deliveryToken === 'string' ? parsed.deliveryToken : undefined + + if (!spaceId || !deliveryToken) { + throw new Error('Missing required Contentful configuration fields: spaceId or accessToken') + } + return { spaceId, environmentId, deliveryToken } +} + +function getEntriesFromExport(parsed: unknown): readonly Entry[] { + const entries: unknown = get(parsed, ['entries']) + if (!Array.isArray(entries)) return [] as const + const result: Entry[] = [] + for (const item of entries) { + if (isEntry(item)) result.push(item) + } + return result +} + +async function readExportEntries(): Promise { + const raw = await fs.readFile(EXPORT_JSON_PATH, 'utf8') + const parsed: unknown = JSON.parse(raw) + return getEntriesFromExport(parsed) +} + +async function ensureOutputDir(dir: string): Promise { + await fs.ensureDir(dir) +} + +async function fetchEntryJSON(entryId: string): Promise { + const { spaceId, environmentId, deliveryToken } = await getContentfulConfig() + + const url = new URL( + `https://cdn.contentful.com/spaces/${spaceId}/environments/${environmentId}/entries`, + ) + url.searchParams.set('sys.id', entryId) + url.searchParams.set('include', '10') + + const text = await executeWithRetry(async () => { + const response = await fetch(url.toString(), { + headers: { + Authorization: `Bearer ${deliveryToken}`, + }, + }) + + return await response.text() + }) + + return text +} + +async function writeJsonFile(filePath: string, data: string): Promise { + await fs.writeJson(filePath, JSON.parse(data), { spaces: BASE_TWO }) +} + +// ----------------------------------- +// Domain logic +// ----------------------------------- + +function collectBaselineIds(entries: readonly Entry[]): readonly string[] { + const ids: string[] = [] + const seen = new Set() + + for (const entry of entries) { + const ntType = getStringField(entry, 'nt_type') + if (ntType !== 'nt_personalization' && ntType !== 'nt_experiment') continue + + const config = getRecordField(entry, 'nt_config') + if (!config) continue + + const baselineId = normalizeEntryId(get(config, 'components[0].baseline.id')) + + if (!baselineId) continue + + const key = `${ntType}:${baselineId}` + if (seen.has(key)) continue + seen.add(key) + + ids.push(baselineId) + } + + return ids +} + +function collectMergeTagIds(entries: readonly Entry[]): readonly string[] { + const ids: string[] = [] + const seen = new Set() + for (const entry of entries) { + const typeId = getContentTypeId(entry) + if (typeId !== 'mergeTagContent') continue + const id = getSysId(entry) + if (id && !seen.has(id)) { + seen.add(id) + ids.push(id) + } + } + return ids +} + +async function processEntries(entryIds: readonly string[], outputDir: string): Promise { + for (const id of entryIds) { + const outPath = path.join(outputDir, `${id}.json`) + + try { + const data = await fetchEntryJSON(id) + await writeJsonFile(outPath, data) + + console.info(`Saved entry → ${outPath}`) + } catch (err: unknown) { + const message = err instanceof Error ? err.message : String(err) + + console.error(`Failed to fetch entry ${id}: ${message}`) + } + } +} + +// ----------------------------------- +// Main orchestrator +// ----------------------------------- + +async function main(): Promise { + const outRoot = path.resolve(OUTPUT_DIRECTORY) + await ensureOutputDir(outRoot) + + const entries = await readExportEntries() + if (entries.length === 0) { + console.warn('No entries found in export. Is this a valid Contentful export JSON?') + } + + const baselineIds = collectBaselineIds(entries) + const mergeTagIds = collectMergeTagIds(entries) + await processEntries([...baselineIds, ...mergeTagIds], outRoot) + + console.info('Done.') +} + +main().catch((err: unknown) => { + const message = err instanceof Error ? (err.stack ?? err.message) : String(err) + console.error(message) + process.exit(1) +}) diff --git a/lib/mocks/src/contentful-handlers.ts b/lib/mocks/src/contentful-handlers.ts new file mode 100644 index 00000000..3cdaf185 --- /dev/null +++ b/lib/mocks/src/contentful-handlers.ts @@ -0,0 +1,74 @@ +import { http, type HttpHandler, HttpResponse } from 'msw' +import { readFile } from 'node:fs/promises' +import path from 'node:path' + +const BASE_DIR = './src/contentful/data/entries' + +function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value) +} + +// TODO: Figure out how to make fixtures available from both server (this package) and test (dependent packages) contexts +export function getHandlers(baseUrl = '*'): HttpHandler[] { + return [ + // CORS preflight for Beacon/fetch + http.options('*', () => + HttpResponse.text('', { + status: 204, + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS', + 'Access-Control-Allow-Headers': 'Content-Type, Authorization, x-contentful-user-agent', + }, + }), + ), + + http.get( + `${baseUrl}spaces/:spaceId/environments/:environmentId/entries`, + async ({ request }) => { + const url = new URL(request.url) + const entryId = url.searchParams.get('sys.id') + + if (!entryId) { + return HttpResponse.json( + { error: 'Missing "sys.id" query parameter.' }, + { headers: { 'Access-Control-Allow-Origin': '*' }, status: 400 }, + ) + } + + const filePath = path.join(BASE_DIR, `${entryId}.json`) + + try { + const text = await readFile(filePath, 'utf8') + const json: unknown = JSON.parse(text) + + if (!isRecord(json)) throw new Error() + + return HttpResponse.json(json, { + headers: { 'Access-Control-Allow-Origin': '*' }, + status: 200, + }) + } catch (err) { + if (typeof err === 'object' && err && 'code' in err && err.code === 'ENOENT') { + return HttpResponse.json( + { error: `No JSON found for Entry ID "${entryId}".` }, + { headers: { 'Access-Control-Allow-Origin': '*' }, status: 404 }, + ) + } + + if (err instanceof SyntaxError) { + return HttpResponse.json( + { error: `Malformed JSON for Entry ID "${entryId}".` }, + { headers: { 'Access-Control-Allow-Origin': '*' }, status: 500 }, + ) + } + + return HttpResponse.json( + { error: 'Internal server error.' }, + { headers: { 'Access-Control-Allow-Origin': '*' }, status: 500 }, + ) + } + }, + ), + ] +} diff --git a/lib/mocks/src/contentful/data/entries/1MwiFl4z7gkwqGYdvCmr8c.json b/lib/mocks/src/contentful/data/entries/1MwiFl4z7gkwqGYdvCmr8c.json new file mode 100644 index 00000000..1a08a912 --- /dev/null +++ b/lib/mocks/src/contentful/data/entries/1MwiFl4z7gkwqGYdvCmr8c.json @@ -0,0 +1,131 @@ +{ + "sys": { + "type": "Array" + }, + "total": 1, + "skip": 0, + "limit": 100, + "items": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1MwiFl4z7gkwqGYdvCmr8c", + "type": "Entry", + "createdAt": "2025-10-15T15:17:39.795Z", + "updatedAt": "2025-10-15T15:20:53.843Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 18, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "mergeTagContent" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Merge Tag Content] Entry With Continent", + "text": { + "nodeType": "document", + "data": {}, + "content": [ + { + "nodeType": "paragraph", + "data": {}, + "content": [ + { + "nodeType": "text", + "value": "This is a merge tag content entry that displays the visitor's continent \"", + "marks": [], + "data": {} + }, + { + "nodeType": "embedded-entry-inline", + "data": { + "target": { + "sys": { + "id": "nM127uVevlpDWytfZRyum", + "type": "Link", + "linkType": "Entry" + } + } + }, + "content": [] + }, + { + "nodeType": "text", + "value": "\" embedded within the text.", + "marks": [], + "data": {} + } + ] + } + ] + } + } + } + ], + "includes": { + "Entry": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "nM127uVevlpDWytfZRyum", + "type": "Entry", + "createdAt": "2025-10-15T15:08:43.051Z", + "updatedAt": "2025-10-15T15:08:52.541Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 6, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_mergetag" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Merge Tag] Continent", + "nt_fallback": "Nowhere", + "nt_mergetag_id": "location.continent" + } + } + ] + } +} diff --git a/lib/mocks/src/contentful/data/entries/2Z2WLOx07InSewC3LUB3eX.json b/lib/mocks/src/contentful/data/entries/2Z2WLOx07InSewC3LUB3eX.json new file mode 100644 index 00000000..648e2184 --- /dev/null +++ b/lib/mocks/src/contentful/data/entries/2Z2WLOx07InSewC3LUB3eX.json @@ -0,0 +1,443 @@ +{ + "sys": { + "type": "Array" + }, + "total": 1, + "skip": 0, + "limit": 100, + "items": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2Z2WLOx07InSewC3LUB3eX", + "type": "Entry", + "createdAt": "2025-10-13T10:21:46.206Z", + "updatedAt": "2025-10-13T11:51:51.477Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 22, + "revision": 8, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Baseline] All New or Return Visitors", + "text": "This is a baseline content entry for all users.", + "nt_experiences": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "603SW4mLeYB4AkPhdU2Jvj" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2cSY1TX0nDfYe4fuIrGQ1K" + } + } + ] + } + } + ], + "includes": { + "Entry": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1UFf7qr4mHET3HYuYmcpEj", + "type": "Entry", + "createdAt": "2025-10-13T10:30:20.193Z", + "updatedAt": "2025-10-13T10:30:20.193Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 5, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] New Visitors", + "text": "This is a variant content entry for new visitors." + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2cSY1TX0nDfYe4fuIrGQ1K", + "type": "Entry", + "createdAt": "2025-10-13T10:23:14.486Z", + "updatedAt": "2025-10-13T10:38:55.495Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 30, + "revision": 5, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] New Visitors", + "nt_description": "This is a personalization based on whether a user is new or returning", + "nt_type": "nt_personalization", + "nt_config": { + "traffic": 1, + "components": [ + { + "baseline": { + "id": "2Z2WLOx07InSewC3LUB3eX" + }, + "variants": [ + { + "id": "1UFf7qr4mHET3HYuYmcpEj", + "hidden": false + } + ] + } + ], + "distribution": [0, 1], + "primaryMetric": "" + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "3UTxzKhiki1xeHAdSCJBCS" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "1UFf7qr4mHET3HYuYmcpEj" + } + } + ], + "nt_experience_id": "2cSY1TX0nDfYe4fuIrGQ1K", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "3UTxzKhiki1xeHAdSCJBCS", + "type": "Entry", + "createdAt": "2025-10-13T09:18:15.564Z", + "updatedAt": "2025-10-13T09:27:55.973Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 10, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "New Visitors", + "nt_description": "Visitors who have never visited the site", + "nt_rules": { + "any": [ + { + "all": [ + { + "key": "", + "type": "isReturningVisitor", + "count": "1", + "value": false, + "operator": "equal", + "conditions": [] + } + ] + } + ] + }, + "nt_audience_id": "3UTxzKhiki1xeHAdSCJBCS", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "3VBvwg9ysjjmnJRTQtIYK4", + "type": "Entry", + "createdAt": "2025-10-13T10:31:00.367Z", + "updatedAt": "2025-10-13T10:35:33.195Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 8, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] Return Visitors", + "text": "This is a variant content entry for return visitors." + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "46fHDG7vjxwTbYee5JNVOQ", + "type": "Entry", + "createdAt": "2025-10-13T09:19:35.294Z", + "updatedAt": "2025-10-13T09:28:30.370Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "Return Visitors", + "nt_description": "Visitors who have previously visited the site", + "nt_rules": { + "any": [ + { + "all": [ + { + "key": "", + "type": "isReturningVisitor", + "count": "1", + "value": true, + "operator": "equal", + "conditions": [ + { + "key": { + "id": "session_count", + "key": "session_count", + "label": "session_count", + "value": "session_count", + "useOnce": true, + "category": { + "name": "session_count", + "type": "session_count", + "label": "session_count" + } + }, + "value": "1", + "operator": "greaterThan" + } + ] + } + ] + } + ] + }, + "nt_audience_id": "46fHDG7vjxwTbYee5JNVOQ", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "603SW4mLeYB4AkPhdU2Jvj", + "type": "Entry", + "createdAt": "2025-10-13T10:40:23.022Z", + "updatedAt": "2025-10-13T10:40:23.022Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] Return Visitors", + "nt_type": "nt_personalization", + "nt_config": { + "distribution": [0.1, 0.9], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "2Z2WLOx07InSewC3LUB3eX" + }, + "variants": [ + { + "id": "3VBvwg9ysjjmnJRTQtIYK4", + "hidden": false + } + ] + } + ] + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "46fHDG7vjxwTbYee5JNVOQ" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "3VBvwg9ysjjmnJRTQtIYK4" + } + } + ], + "nt_experience_id": "603SW4mLeYB4AkPhdU2Jvj", + "nt_metadata": { + "type": "origin" + } + } + } + ] + } +} diff --git a/lib/mocks/src/contentful/data/entries/4ib0hsHWoSOnCVdDkizE8d.json b/lib/mocks/src/contentful/data/entries/4ib0hsHWoSOnCVdDkizE8d.json new file mode 100644 index 00000000..aa475105 --- /dev/null +++ b/lib/mocks/src/contentful/data/entries/4ib0hsHWoSOnCVdDkizE8d.json @@ -0,0 +1,426 @@ +{ + "sys": { + "type": "Array" + }, + "total": 1, + "skip": 0, + "limit": 100, + "items": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4ib0hsHWoSOnCVdDkizE8d", + "type": "Entry", + "createdAt": "2025-10-13T11:59:56.556Z", + "updatedAt": "2025-10-14T08:28:15.913Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Baseline] All Visitors from a Continent", + "text": "This is a baseline content entry for visitors from any continent.", + "nt_experiences": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2qVK4T5lnScbswoyBuGipd" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "6KfLDCdA75BGwr5HfSeXac" + } + } + ] + } + } + ], + "includes": { + "Entry": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2WzXDaWtDmstHl9p8Wufpp", + "type": "Entry", + "createdAt": "2025-10-13T09:11:33.088Z", + "updatedAt": "2025-10-13T09:11:33.088Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 9, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "Europe Visitors", + "nt_description": "Visitors located in Europe", + "nt_rules": { + "any": [ + { + "all": [ + { + "key": "continent", + "type": "location", + "count": "1", + "value": "EU", + "operator": "equal", + "conditions": [] + } + ] + } + ] + }, + "nt_audience_id": "2WzXDaWtDmstHl9p8Wufpp", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2qVK4T5lnScbswoyBuGipd", + "type": "Entry", + "createdAt": "2025-10-13T12:00:52.906Z", + "updatedAt": "2025-10-13T12:04:17.168Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] Visitors from Europe", + "nt_type": "nt_personalization", + "nt_config": { + "traffic": 1, + "components": [ + { + "baseline": { + "id": "4ib0hsHWoSOnCVdDkizE8d" + }, + "variants": [ + { + "id": "4k6ZyFQnR2POY5IJLLlJRb", + "hidden": false + } + ] + } + ], + "distribution": [0, 1], + "primaryMetric": "" + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2WzXDaWtDmstHl9p8Wufpp" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "4k6ZyFQnR2POY5IJLLlJRb" + } + } + ], + "nt_experience_id": "2qVK4T5lnScbswoyBuGipd", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4k6ZyFQnR2POY5IJLLlJRb", + "type": "Entry", + "createdAt": "2025-10-13T12:00:42.658Z", + "updatedAt": "2025-10-13T12:00:42.658Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 5, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] Visitors from Europe", + "text": "This is a variant content entry for visitors from Europe." + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5P8sJgSXhjNUlUfk7ee88u", + "type": "Entry", + "createdAt": "2025-10-13T09:12:58.836Z", + "updatedAt": "2025-10-13T09:12:58.836Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 10, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "North America Visitors", + "nt_description": "Visitors located in North America", + "nt_rules": { + "any": [ + { + "all": [ + { + "type": "location", + "count": "1", + "key": "continent", + "operator": "equal", + "value": "NA", + "conditions": [] + } + ] + } + ] + }, + "nt_audience_id": "5P8sJgSXhjNUlUfk7ee88u", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "6KfLDCdA75BGwr5HfSeXac", + "type": "Entry", + "createdAt": "2025-10-14T08:26:44.114Z", + "updatedAt": "2025-10-14T08:26:44.114Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] Visitors from North America", + "nt_type": "nt_personalization", + "nt_config": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "4ib0hsHWoSOnCVdDkizE8d" + }, + "variants": [ + { + "id": "7Ae0ke0e3YqRLutG35d4Ve", + "hidden": false + } + ] + } + ], + "primaryMetric": "" + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5P8sJgSXhjNUlUfk7ee88u" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "7Ae0ke0e3YqRLutG35d4Ve" + } + } + ], + "nt_experience_id": "6KfLDCdA75BGwr5HfSeXac", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "7Ae0ke0e3YqRLutG35d4Ve", + "type": "Entry", + "createdAt": "2025-10-14T08:26:28.160Z", + "updatedAt": "2025-10-14T08:26:28.160Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] Visitors from North America", + "text": "This is a variant content entry for visitors from North America." + } + } + ] + } +} diff --git a/lib/mocks/src/contentful/data/entries/5XHssysWUDECHzKLzoIsg1.json b/lib/mocks/src/contentful/data/entries/5XHssysWUDECHzKLzoIsg1.json new file mode 100644 index 00000000..d7c49591 --- /dev/null +++ b/lib/mocks/src/contentful/data/entries/5XHssysWUDECHzKLzoIsg1.json @@ -0,0 +1,227 @@ +{ + "sys": { + "type": "Array" + }, + "total": 1, + "skip": 0, + "limit": 100, + "items": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5XHssysWUDECHzKLzoIsg1", + "type": "Entry", + "createdAt": "2025-10-17T11:04:27.939Z", + "updatedAt": "2025-10-17T11:04:27.939Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 9, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Baseline] A", + "text": "This is a baseline content entry for an A/B/C experiment: A", + "nt_experiences": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5kuc9KgA9q9RXnlbDxDlY" + } + } + ] + } + } + ], + "includes": { + "Entry": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4bmHsNUaEibELHwWCon3dt", + "type": "Entry", + "createdAt": "2025-10-17T11:04:59.561Z", + "updatedAt": "2025-10-17T11:04:59.561Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 3, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] B", + "text": "This is a variant content entry for an A/B/C experiment: B" + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5CwnS3VDOncGMK83M3tNfz", + "type": "Entry", + "createdAt": "2025-10-17T11:05:23.054Z", + "updatedAt": "2025-10-17T11:05:23.054Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 3, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] C", + "text": "This is a variant content entry for an A/B/C experiment: C" + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5kuc9KgA9q9RXnlbDxDlY", + "type": "Entry", + "createdAt": "2025-10-17T11:05:42.251Z", + "updatedAt": "2025-10-17T11:05:42.251Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Experiment] A/B/C", + "nt_type": "nt_experiment", + "nt_config": { + "distribution": [0.3333333333333333, 0.3333333333333333, 0.3333333333333333], + "traffic": 1, + "components": [ + { + "type": "EntryReplacement", + "baseline": { + "id": "5XHssysWUDECHzKLzoIsg1" + }, + "variants": [ + { + "id": "4bmHsNUaEibELHwWCon3dt", + "hidden": false + }, + { + "id": "5CwnS3VDOncGMK83M3tNfz", + "hidden": false + } + ] + } + ], + "primaryMetric": "fececd8c-d0bd-4a37-bea7-b2f68b782923", + "distributionType": "even-split" + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "4bmHsNUaEibELHwWCon3dt" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5CwnS3VDOncGMK83M3tNfz" + } + } + ], + "nt_experience_id": "5kuc9KgA9q9RXnlbDxDlY", + "nt_metadata": { + "type": "origin" + } + } + } + ] + } +} diff --git a/lib/mocks/src/contentful/data/entries/6zqoWXyiSrf0ja7I2WGtYj.json b/lib/mocks/src/contentful/data/entries/6zqoWXyiSrf0ja7I2WGtYj.json new file mode 100644 index 00000000..21255788 --- /dev/null +++ b/lib/mocks/src/contentful/data/entries/6zqoWXyiSrf0ja7I2WGtYj.json @@ -0,0 +1,241 @@ +{ + "sys": { + "type": "Array" + }, + "total": 1, + "skip": 0, + "limit": 100, + "items": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "6zqoWXyiSrf0ja7I2WGtYj", + "type": "Entry", + "createdAt": "2025-10-13T12:21:38.146Z", + "updatedAt": "2025-10-13T12:24:38.546Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 16, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Baseline] All Visitors With or Without a Custom Event", + "text": "This is a baseline content entry for all visitors with or without a custom event.", + "nt_experiences": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5us1xFZCsHyIYuzINJMeSV" + } + } + ] + } + } + ], + "includes": { + "Entry": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "56gfPS3OIl77DbH5PZigtr", + "type": "Entry", + "createdAt": "2025-10-13T09:27:27.439Z", + "updatedAt": "2025-10-13T09:27:27.439Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "Users with a Custom Event", + "nt_description": "Users for whom a `custom` event has been triggered at least once", + "nt_rules": { + "any": [ + { + "all": [ + { + "key": "", + "type": "track", + "count": "1", + "value": "custom", + "operator": "greaterThanInclusive", + "conditions": [] + } + ] + } + ] + }, + "nt_audience_id": "56gfPS3OIl77DbH5PZigtr", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5us1xFZCsHyIYuzINJMeSV", + "type": "Entry", + "createdAt": "2025-10-13T12:23:00.196Z", + "updatedAt": "2025-10-13T12:24:02.494Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 16, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] Visitors With a Custom Event", + "nt_type": "nt_personalization", + "nt_config": { + "traffic": 1, + "components": [ + { + "baseline": { + "id": "6zqoWXyiSrf0ja7I2WGtYj" + }, + "variants": [ + { + "id": "7upHpduBBaKCWUqB27oTmX", + "hidden": false + } + ] + } + ], + "distribution": [0, 1], + "primaryMetric": "" + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "56gfPS3OIl77DbH5PZigtr" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "7upHpduBBaKCWUqB27oTmX" + } + } + ], + "nt_experience_id": "5us1xFZCsHyIYuzINJMeSV", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "7upHpduBBaKCWUqB27oTmX", + "type": "Entry", + "createdAt": "2025-10-13T12:22:45.756Z", + "updatedAt": "2025-10-13T12:22:45.756Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 8, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] Visitors With a Custom Event", + "text": "This is a variant content entry for visitors with a custom event." + } + } + ] + } +} diff --git a/lib/mocks/src/contentful/data/entries/7pa5bOx8Z9NmNcr7mISvD.json b/lib/mocks/src/contentful/data/entries/7pa5bOx8Z9NmNcr7mISvD.json new file mode 100644 index 00000000..656699d0 --- /dev/null +++ b/lib/mocks/src/contentful/data/entries/7pa5bOx8Z9NmNcr7mISvD.json @@ -0,0 +1,241 @@ +{ + "sys": { + "type": "Array" + }, + "total": 1, + "skip": 0, + "limit": 100, + "items": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "7pa5bOx8Z9NmNcr7mISvD", + "type": "Entry", + "createdAt": "2025-10-13T11:40:26.837Z", + "updatedAt": "2025-10-13T11:51:51.432Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Baseline] All Identified or Unidentified Users", + "text": "This is a baseline content entry for all identified or unidentified users.", + "nt_experiences": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "53yERfkqYXkg2B18EcdtK5" + } + } + ] + } + } + ], + "includes": { + "Entry": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4yIqY7AWtzeehCZxtQSDB", + "type": "Entry", + "createdAt": "2025-10-13T09:32:31.720Z", + "updatedAt": "2025-10-13T09:32:31.720Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 10, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "Identified Users", + "nt_description": "Users who have been identified with an `identified` trait set to `true`", + "nt_rules": { + "any": [ + { + "all": [ + { + "key": "identified", + "type": "identify", + "count": "1", + "value": "true", + "operator": "equal", + "conditions": [] + } + ] + } + ] + }, + "nt_audience_id": "4yIqY7AWtzeehCZxtQSDB", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "53yERfkqYXkg2B18EcdtK5", + "type": "Entry", + "createdAt": "2025-10-13T11:37:27.018Z", + "updatedAt": "2025-10-13T11:41:13.578Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 21, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] Identified Users", + "nt_type": "nt_personalization", + "nt_config": { + "distribution": [0.1, 0.9], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "7pa5bOx8Z9NmNcr7mISvD" + }, + "variants": [ + { + "id": "5daRHDDD7sj0Jm9kutAGou", + "hidden": false + } + ] + } + ], + "primaryMetric": "" + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "4yIqY7AWtzeehCZxtQSDB" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5daRHDDD7sj0Jm9kutAGou" + } + } + ], + "nt_experience_id": "53yERfkqYXkg2B18EcdtK5", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5daRHDDD7sj0Jm9kutAGou", + "type": "Entry", + "createdAt": "2025-10-13T11:37:01.721Z", + "updatedAt": "2025-10-13T11:37:18.919Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] Identified Users", + "text": "This is a variant content entry for identified users." + } + } + ] + } +} diff --git a/lib/mocks/src/contentful/data/entries/xFwgG3oNaOcjzWiGe4vXo.json b/lib/mocks/src/contentful/data/entries/xFwgG3oNaOcjzWiGe4vXo.json new file mode 100644 index 00000000..6447897c --- /dev/null +++ b/lib/mocks/src/contentful/data/entries/xFwgG3oNaOcjzWiGe4vXo.json @@ -0,0 +1,663 @@ +{ + "sys": { + "type": "Array" + }, + "total": 1, + "skip": 0, + "limit": 100, + "items": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "xFwgG3oNaOcjzWiGe4vXo", + "type": "Entry", + "createdAt": "2025-10-14T08:11:40.694Z", + "updatedAt": "2025-10-14T08:23:55.718Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Baseline] All Visitors Using Any Device", + "text": "This is a baseline content entry for all visitors using any device.", + "nt_experiences": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "6ZjRMMvtP9MOfWYrON0yxz" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2SDKJ8KrTCyGA26ZN8Snzz" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "BBvRD6Uv03k69wPwB9Ou6" + } + } + ] + } + } + ], + "includes": { + "Entry": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1JfZr0bOCufTDFSljIwcdh", + "type": "Entry", + "createdAt": "2025-10-14T08:16:03.175Z", + "updatedAt": "2025-10-14T08:16:03.175Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] Visitors Using a Tablet Browser", + "text": "This is a variant content entry for visitors using a tablet browser." + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2SDKJ8KrTCyGA26ZN8Snzz", + "type": "Entry", + "createdAt": "2025-10-14T08:16:07.579Z", + "updatedAt": "2025-10-14T08:27:19.812Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] Visitors Using a Tablet Browser", + "nt_type": "nt_personalization", + "nt_config": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "xFwgG3oNaOcjzWiGe4vXo" + }, + "variants": [ + { + "id": "1JfZr0bOCufTDFSljIwcdh", + "hidden": false + } + ] + } + ], + "primaryMetric": "" + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "tuEoGEpoGK9n4ZUljuFz9" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "1JfZr0bOCufTDFSljIwcdh" + } + } + ], + "nt_experience_id": "2SDKJ8KrTCyGA26ZN8Snzz", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2y72M2RTXnMpp9GPG8xSzf", + "type": "Entry", + "createdAt": "2025-10-13T09:23:36.156Z", + "updatedAt": "2025-10-13T09:30:02.493Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "Desktop Users", + "nt_description": "Users who have visited the site with a desktop browser", + "nt_rules": { + "any": [ + { + "all": [ + { + "key": "", + "type": "device", + "count": "1", + "value": "", + "operator": "equal", + "conditions": [ + { + "key": { + "id": "type", + "key": "type", + "label": "type", + "value": "type", + "useOnce": true, + "category": { + "name": "type", + "type": "type", + "label": "type" + } + }, + "value": "desktop", + "operator": "equal" + } + ] + } + ] + } + ] + }, + "nt_audience_id": "2y72M2RTXnMpp9GPG8xSzf", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "3MRuZPQ5EdwDqzUDRgOo7c", + "type": "Entry", + "createdAt": "2025-10-13T09:21:05.092Z", + "updatedAt": "2025-10-13T09:29:04.634Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "Mobile Users", + "nt_description": "Users who have visited the site from a mobile browser", + "nt_rules": { + "any": [ + { + "all": [ + { + "key": "", + "type": "device", + "count": "1", + "value": "", + "operator": "equal", + "conditions": [ + { + "key": { + "id": "type", + "key": "type", + "label": "type", + "value": "type", + "useOnce": true, + "category": { + "name": "type", + "type": "type", + "label": "type" + } + }, + "value": "mobile", + "operator": "equal" + } + ] + } + ] + } + ] + }, + "nt_audience_id": "3MRuZPQ5EdwDqzUDRgOo7c", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "61KKjYYmSR9IukqA0u9Pwd", + "type": "Entry", + "createdAt": "2025-10-14T08:13:02.977Z", + "updatedAt": "2025-10-14T08:13:02.977Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 8, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] Visitors using a Mobile Browser", + "text": "This is a variant content entry for visitors using a mobile browser." + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "6ZjRMMvtP9MOfWYrON0yxz", + "type": "Entry", + "createdAt": "2025-10-14T08:13:32.216Z", + "updatedAt": "2025-10-15T12:23:40.308Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 18, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] Visitors using a Mobile Browser", + "nt_type": "nt_personalization", + "nt_config": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "xFwgG3oNaOcjzWiGe4vXo" + }, + "variants": [ + { + "id": "61KKjYYmSR9IukqA0u9Pwd", + "hidden": false + } + ], + "type": "EntryReplacement" + } + ], + "primaryMetric": "" + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "3MRuZPQ5EdwDqzUDRgOo7c" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "61KKjYYmSR9IukqA0u9Pwd" + } + } + ], + "nt_experience_id": "6ZjRMMvtP9MOfWYrON0yxz", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "6iyPl6vfDH5AoClf3MtYlh", + "type": "Entry", + "createdAt": "2025-10-14T08:23:23.916Z", + "updatedAt": "2025-10-14T08:23:23.916Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + }, + "locale": "en-US" + }, + "fields": { + "internalTitle": "[Variant] Visitors Using a Desktop Browser", + "text": "This is a variant content entry for visitors using a desktop browser." + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "BBvRD6Uv03k69wPwB9Ou6", + "type": "Entry", + "createdAt": "2025-10-14T08:23:35.930Z", + "updatedAt": "2025-10-14T08:23:35.930Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 12, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "[Personalization] Visitors using a Desktop Browser", + "nt_type": "nt_personalization", + "nt_config": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "xFwgG3oNaOcjzWiGe4vXo" + }, + "variants": [ + { + "id": "6iyPl6vfDH5AoClf3MtYlh", + "hidden": false + } + ] + } + ], + "primaryMetric": "" + }, + "nt_audience": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2y72M2RTXnMpp9GPG8xSzf" + } + }, + "nt_variants": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "6iyPl6vfDH5AoClf3MtYlh" + } + } + ], + "nt_experience_id": "BBvRD6Uv03k69wPwB9Ou6", + "nt_metadata": { + "type": "origin" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "tuEoGEpoGK9n4ZUljuFz9", + "type": "Entry", + "createdAt": "2025-10-13T09:22:17.545Z", + "updatedAt": "2025-10-13T09:29:29.375Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 12, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + }, + "locale": "en-US" + }, + "fields": { + "nt_name": "Tablet Users", + "nt_description": "Users who have visited the site from a tablet browser", + "nt_rules": { + "any": [ + { + "all": [ + { + "key": "", + "type": "device", + "count": "1", + "value": "", + "operator": "equal", + "conditions": [ + { + "key": { + "id": "type", + "key": "type", + "label": "type", + "value": "type", + "useOnce": true, + "category": { + "name": "type", + "type": "type", + "label": "type" + } + }, + "value": "tablet", + "operator": "equal" + } + ] + } + ] + } + ] + }, + "nt_audience_id": "tuEoGEpoGK9n4ZUljuFz9", + "nt_metadata": { + "type": "origin" + } + } + } + ] + } +} diff --git a/lib/mocks/src/contentful/data/space/ctfl-space-data.json b/lib/mocks/src/contentful/data/space/ctfl-space-data.json new file mode 100644 index 00000000..9b255d7e --- /dev/null +++ b/lib/mocks/src/contentful/data/space/ctfl-space-data.json @@ -0,0 +1,4352 @@ +{ + "contentTypes": [ + { + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "nt_audience", + "type": "ContentType", + "createdAt": "2025-10-06T12:55:28.972Z", + "updatedAt": "2025-10-06T12:55:29.231Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 1, + "publishedAt": "2025-10-06T12:55:29.231Z", + "firstPublishedAt": "2025-10-06T12:55:29.231Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "publishedCounter": 1, + "version": 2, + "publishedBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "urn": "crn:contentful:::content:spaces/uelxcuo7v97l/environments/master/content_types/nt_audience" + }, + "displayField": "nt_name", + "name": "Ninetailed Audience", + "description": "Ninetailed Audience", + "fields": [ + { + "id": "nt_name", + "name": "Name", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "nt_description", + "name": "Description", + "type": "Text", + "localized": false, + "required": false, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "nt_rules", + "name": "Rules", + "type": "Object", + "localized": false, + "required": true, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "nt_audience_id", + "name": "Audience Id", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [ + { + "unique": true + } + ], + "disabled": false, + "omitted": false + }, + { + "id": "nt_metadata", + "name": "Metadata", + "type": "Object", + "localized": false, + "required": false, + "validations": [], + "disabled": true, + "omitted": false + } + ] + }, + { + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "nt_mergetag", + "type": "ContentType", + "createdAt": "2025-10-06T12:55:29.978Z", + "updatedAt": "2025-10-06T12:55:30.221Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 1, + "publishedAt": "2025-10-06T12:55:30.221Z", + "firstPublishedAt": "2025-10-06T12:55:30.221Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "publishedCounter": 1, + "version": 2, + "publishedBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "urn": "crn:contentful:::content:spaces/uelxcuo7v97l/environments/master/content_types/nt_mergetag" + }, + "displayField": "nt_name", + "name": "Ninetailed Merge Tag", + "description": "Ninetailed Merge Tag", + "fields": [ + { + "id": "nt_name", + "name": "Name", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "nt_fallback", + "name": "Fallback", + "type": "Symbol", + "localized": false, + "required": false, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "nt_mergetag_id", + "name": "Merge Tag Id", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [ + { + "unique": true + } + ], + "disabled": false, + "omitted": false + } + ] + }, + { + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "nt_experience", + "type": "ContentType", + "createdAt": "2025-10-06T12:55:30.900Z", + "updatedAt": "2025-10-06T12:55:31.163Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 1, + "publishedAt": "2025-10-06T12:55:31.163Z", + "firstPublishedAt": "2025-10-06T12:55:31.163Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "publishedCounter": 1, + "version": 2, + "publishedBy": { + "sys": { + "type": "Link", + "linkType": "AppDefinition", + "id": "4QYnIIKna8TpXegJp3oSBi" + } + }, + "urn": "crn:contentful:::content:spaces/uelxcuo7v97l/environments/master/content_types/nt_experience" + }, + "displayField": "nt_name", + "name": "Ninetailed Experience", + "description": "Ninetailed Experience", + "fields": [ + { + "id": "nt_name", + "name": "Name", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [ + { + "unique": true + } + ], + "disabled": false, + "omitted": false + }, + { + "id": "nt_description", + "name": "Description", + "type": "Text", + "localized": false, + "required": false, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "nt_type", + "name": "Type", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [ + { + "in": ["nt_experiment", "nt_personalization"] + } + ], + "disabled": true, + "omitted": false + }, + { + "id": "nt_config", + "name": "Config", + "type": "Object", + "localized": false, + "required": true, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "nt_audience", + "name": "Audience", + "type": "Link", + "localized": false, + "required": false, + "validations": [ + { + "linkContentType": ["nt_audience"] + } + ], + "disabled": true, + "omitted": false, + "linkType": "Entry" + }, + { + "id": "nt_variants", + "name": "Variants", + "type": "Array", + "localized": false, + "required": false, + "validations": [], + "disabled": true, + "omitted": false, + "items": { + "type": "Link", + "validations": [], + "linkType": "Entry" + } + }, + { + "id": "nt_experience_id", + "name": "Experience Id", + "type": "Symbol", + "localized": false, + "required": false, + "validations": [ + { + "unique": true + } + ], + "disabled": false, + "omitted": false + }, + { + "id": "nt_metadata", + "name": "Experience Metadata", + "type": "Object", + "localized": false, + "required": false, + "validations": [], + "disabled": true, + "omitted": false + } + ] + }, + { + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "content", + "type": "ContentType", + "createdAt": "2025-10-13T10:08:18.049Z", + "updatedAt": "2025-10-13T10:28:44.344Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "publishedAt": "2025-10-13T10:28:44.344Z", + "firstPublishedAt": "2025-10-13T10:08:18.399Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "publishedCounter": 6, + "version": 12, + "publishedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "urn": "crn:contentful:::content:spaces/uelxcuo7v97l/environments/master/content_types/content" + }, + "displayField": "internalTitle", + "name": "Content", + "description": "Generic content type", + "fields": [ + { + "id": "internalTitle", + "name": "Internal Title", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "text", + "name": "Text", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "nt_experiences", + "name": "Ninetailed", + "type": "Array", + "localized": false, + "required": false, + "validations": [], + "disabled": false, + "omitted": false, + "items": { + "type": "Link", + "validations": [ + { + "linkContentType": ["nt_experience"] + } + ], + "linkType": "Entry" + } + } + ] + }, + { + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "mergeTagContent", + "type": "ContentType", + "createdAt": "2025-10-15T15:15:35.439Z", + "updatedAt": "2025-10-15T15:15:35.812Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 1, + "publishedAt": "2025-10-15T15:15:35.812Z", + "firstPublishedAt": "2025-10-15T15:15:35.812Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "publishedCounter": 1, + "version": 2, + "publishedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "urn": "crn:contentful:::content:spaces/uelxcuo7v97l/environments/master/content_types/mergeTagContent" + }, + "displayField": "internalTitle", + "name": "Merge Tag Content", + "description": "Content type that can handle Merge Tags", + "fields": [ + { + "id": "internalTitle", + "name": "Internal Title", + "type": "Symbol", + "localized": false, + "required": true, + "validations": [], + "disabled": false, + "omitted": false + }, + { + "id": "text", + "name": "Text", + "type": "RichText", + "localized": false, + "required": false, + "validations": [ + { + "enabledMarks": [ + "bold", + "italic", + "underline", + "code", + "superscript", + "subscript", + "strikethrough" + ], + "message": "Only bold, italic, underline, code, superscript, subscript, and strikethrough marks are allowed" + }, + { + "enabledNodeTypes": [ + "heading-1", + "heading-2", + "heading-3", + "heading-4", + "heading-5", + "heading-6", + "ordered-list", + "unordered-list", + "hr", + "blockquote", + "embedded-entry-block", + "embedded-asset-block", + "table", + "asset-hyperlink", + "embedded-entry-inline", + "entry-hyperlink", + "hyperlink" + ], + "message": "Only heading 1, heading 2, heading 3, heading 4, heading 5, heading 6, ordered list, unordered list, horizontal rule, quote, block entry, asset, table, link to asset, inline entry, link to entry, and link to Url nodes are allowed" + }, + { + "nodes": { + "embedded-entry-inline": [ + { + "linkContentType": ["nt_mergetag"], + "message": null + } + ] + } + } + ], + "disabled": false, + "omitted": false + } + ] + } + ], + "tags": [], + "editorInterfaces": [ + { + "sys": { + "id": "default", + "type": "EditorInterface", + "space": { + "sys": { + "id": "uelxcuo7v97l", + "type": "Link", + "linkType": "Space" + } + }, + "version": 2, + "createdAt": "2025-10-06T12:55:29.411Z", + "createdBy": { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "Link", + "linkType": "AppDefinition" + } + }, + "updatedAt": "2025-10-06T12:55:31.961Z", + "updatedBy": { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "Link", + "linkType": "AppDefinition" + } + }, + "contentType": { + "sys": { + "id": "nt_audience", + "type": "Link", + "linkType": "ContentType" + } + }, + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + } + }, + "controls": [ + { + "fieldId": "nt_metadata" + }, + { + "fieldId": "nt_rules", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + }, + { + "fieldId": "nt_audience_id", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + }, + { + "fieldId": "nt_description", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + }, + { + "fieldId": "nt_name", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + } + ] + }, + { + "sys": { + "id": "default", + "type": "EditorInterface", + "space": { + "sys": { + "id": "uelxcuo7v97l", + "type": "Link", + "linkType": "Space" + } + }, + "version": 1, + "createdAt": "2025-10-06T12:55:30.344Z", + "createdBy": { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "Link", + "linkType": "AppDefinition" + } + }, + "updatedAt": "2025-10-06T12:55:30.345Z", + "updatedBy": { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "Link", + "linkType": "AppDefinition" + } + }, + "contentType": { + "sys": { + "id": "nt_mergetag", + "type": "Link", + "linkType": "ContentType" + } + }, + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + } + }, + "controls": [ + { + "fieldId": "nt_name" + }, + { + "fieldId": "nt_fallback" + }, + { + "fieldId": "nt_mergetag_id" + } + ] + }, + { + "sys": { + "id": "default", + "type": "EditorInterface", + "space": { + "sys": { + "id": "uelxcuo7v97l", + "type": "Link", + "linkType": "Space" + } + }, + "version": 2, + "createdAt": "2025-10-06T12:55:31.336Z", + "createdBy": { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "Link", + "linkType": "AppDefinition" + } + }, + "updatedAt": "2025-10-06T12:55:31.678Z", + "updatedBy": { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "Link", + "linkType": "AppDefinition" + } + }, + "contentType": { + "sys": { + "id": "nt_experience", + "type": "Link", + "linkType": "ContentType" + } + }, + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + } + }, + "controls": [ + { + "fieldId": "nt_type" + }, + { + "fieldId": "nt_audience" + }, + { + "fieldId": "nt_variants" + }, + { + "fieldId": "nt_experience_id", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + }, + { + "fieldId": "nt_config", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + }, + { + "fieldId": "nt_metadata", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + }, + { + "fieldId": "nt_description", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + }, + { + "fieldId": "nt_name", + "widgetId": "4QYnIIKna8TpXegJp3oSBi", + "widgetNamespace": "app" + } + ] + }, + { + "sys": { + "id": "default", + "type": "EditorInterface", + "space": { + "sys": { + "id": "uelxcuo7v97l", + "type": "Link", + "linkType": "Space" + } + }, + "version": 12, + "createdAt": "2025-10-13T10:08:18.708Z", + "createdBy": { + "sys": { + "id": "2ThAHYPA8kj7F1sHxUzXVt", + "type": "Link", + "linkType": "User" + } + }, + "updatedAt": "2025-10-13T10:28:44.959Z", + "updatedBy": { + "sys": { + "id": "2ThAHYPA8kj7F1sHxUzXVt", + "type": "Link", + "linkType": "User" + } + }, + "contentType": { + "sys": { + "id": "content", + "type": "Link", + "linkType": "ContentType" + } + }, + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + } + }, + "controls": [ + { + "fieldId": "internalTitle", + "widgetId": "singleLine", + "widgetNamespace": "builtin" + }, + { + "fieldId": "text", + "widgetId": "singleLine", + "widgetNamespace": "builtin" + }, + { + "fieldId": "nt_experiences", + "widgetId": "entryLinksEditor", + "widgetNamespace": "builtin" + } + ] + }, + { + "sys": { + "id": "default", + "type": "EditorInterface", + "space": { + "sys": { + "id": "uelxcuo7v97l", + "type": "Link", + "linkType": "Space" + } + }, + "version": 2, + "createdAt": "2025-10-15T15:15:35.985Z", + "createdBy": { + "sys": { + "id": "2ThAHYPA8kj7F1sHxUzXVt", + "type": "Link", + "linkType": "User" + } + }, + "updatedAt": "2025-10-15T15:15:36.439Z", + "updatedBy": { + "sys": { + "id": "2ThAHYPA8kj7F1sHxUzXVt", + "type": "Link", + "linkType": "User" + } + }, + "contentType": { + "sys": { + "id": "mergeTagContent", + "type": "Link", + "linkType": "ContentType" + } + }, + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + } + }, + "controls": [ + { + "fieldId": "internalTitle", + "widgetId": "singleLine", + "widgetNamespace": "builtin" + }, + { + "fieldId": "text", + "widgetId": "richTextEditor", + "widgetNamespace": "builtin" + } + ] + } + ], + "entries": [ + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2WzXDaWtDmstHl9p8Wufpp", + "type": "Entry", + "createdAt": "2025-10-13T09:11:33.088Z", + "updatedAt": "2025-10-13T09:11:33.088Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 9, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Europe Visitors" + }, + "nt_description": { + "en-US": "Visitors located in Europe" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "continent", + "type": "location", + "count": "1", + "value": "EU", + "operator": "equal", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "2WzXDaWtDmstHl9p8Wufpp" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5P8sJgSXhjNUlUfk7ee88u", + "type": "Entry", + "createdAt": "2025-10-13T09:12:58.836Z", + "updatedAt": "2025-10-13T09:12:58.836Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 10, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "North America Visitors" + }, + "nt_description": { + "en-US": "Visitors located in North America" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "type": "location", + "count": "1", + "key": "continent", + "operator": "equal", + "value": "NA", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "5P8sJgSXhjNUlUfk7ee88u" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "716kDnZAaRC8jQwllThSSd", + "type": "Entry", + "createdAt": "2025-10-13T09:14:00.752Z", + "updatedAt": "2025-10-13T09:14:00.752Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 8, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "South America Visitors" + }, + "nt_description": { + "en-US": "Visitors located in South America" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "type": "location", + "count": "1", + "key": "continent", + "operator": "equal", + "value": "SA", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "716kDnZAaRC8jQwllThSSd" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "aQ6NF4I6qkhcEdnst0uWt", + "type": "Entry", + "createdAt": "2025-10-13T09:14:54.040Z", + "updatedAt": "2025-10-13T09:14:54.040Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Asia Visitors" + }, + "nt_description": { + "en-US": "Visitors located in Asia" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "type": "location", + "count": "1", + "key": "continent", + "operator": "equal", + "value": "AS", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "aQ6NF4I6qkhcEdnst0uWt" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "3gYGBfUtLw331jrtgnbIqg", + "type": "Entry", + "createdAt": "2025-10-13T09:15:50.553Z", + "updatedAt": "2025-10-13T09:15:50.553Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Oceania Visitors" + }, + "nt_description": { + "en-US": "Visitors located in Oceania" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "type": "location", + "count": "1", + "key": "continent", + "operator": "equal", + "value": "OC", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "3gYGBfUtLw331jrtgnbIqg" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1AO5WTwDq75JD9xpJ9EsDv", + "type": "Entry", + "createdAt": "2025-10-13T09:16:59.956Z", + "updatedAt": "2025-10-13T09:16:59.956Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Africa Visitors" + }, + "nt_description": { + "en-US": "Visitors located in Africa" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "type": "location", + "count": "1", + "key": "continent", + "operator": "equal", + "value": "AF", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "1AO5WTwDq75JD9xpJ9EsDv" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "3UTxzKhiki1xeHAdSCJBCS", + "type": "Entry", + "createdAt": "2025-10-13T09:18:15.564Z", + "updatedAt": "2025-10-13T09:27:55.973Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 10, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "New Visitors" + }, + "nt_description": { + "en-US": "Visitors who have never visited the site" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "", + "type": "isReturningVisitor", + "count": "1", + "value": false, + "operator": "equal", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "3UTxzKhiki1xeHAdSCJBCS" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "46fHDG7vjxwTbYee5JNVOQ", + "type": "Entry", + "createdAt": "2025-10-13T09:19:35.294Z", + "updatedAt": "2025-10-13T09:28:30.370Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Return Visitors" + }, + "nt_description": { + "en-US": "Visitors who have previously visited the site" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "", + "type": "isReturningVisitor", + "count": "1", + "value": true, + "operator": "equal", + "conditions": [ + { + "key": { + "id": "session_count", + "key": "session_count", + "label": "session_count", + "value": "session_count", + "useOnce": true, + "category": { + "name": "session_count", + "type": "session_count", + "label": "session_count" + } + }, + "value": "1", + "operator": "greaterThan" + } + ] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "46fHDG7vjxwTbYee5JNVOQ" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "3MRuZPQ5EdwDqzUDRgOo7c", + "type": "Entry", + "createdAt": "2025-10-13T09:21:05.092Z", + "updatedAt": "2025-10-13T09:29:04.634Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Mobile Users" + }, + "nt_description": { + "en-US": "Users who have visited the site from a mobile browser" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "", + "type": "device", + "count": "1", + "value": "", + "operator": "equal", + "conditions": [ + { + "key": { + "id": "type", + "key": "type", + "label": "type", + "value": "type", + "useOnce": true, + "category": { + "name": "type", + "type": "type", + "label": "type" + } + }, + "value": "mobile", + "operator": "equal" + } + ] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "3MRuZPQ5EdwDqzUDRgOo7c" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "tuEoGEpoGK9n4ZUljuFz9", + "type": "Entry", + "createdAt": "2025-10-13T09:22:17.545Z", + "updatedAt": "2025-10-13T09:29:29.375Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 12, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Tablet Users" + }, + "nt_description": { + "en-US": "Users who have visited the site from a tablet browser" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "", + "type": "device", + "count": "1", + "value": "", + "operator": "equal", + "conditions": [ + { + "key": { + "id": "type", + "key": "type", + "label": "type", + "value": "type", + "useOnce": true, + "category": { + "name": "type", + "type": "type", + "label": "type" + } + }, + "value": "tablet", + "operator": "equal" + } + ] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "tuEoGEpoGK9n4ZUljuFz9" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2y72M2RTXnMpp9GPG8xSzf", + "type": "Entry", + "createdAt": "2025-10-13T09:23:36.156Z", + "updatedAt": "2025-10-13T09:30:02.493Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Desktop Users" + }, + "nt_description": { + "en-US": "Users who have visited the site with a desktop browser" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "", + "type": "device", + "count": "1", + "value": "", + "operator": "equal", + "conditions": [ + { + "key": { + "id": "type", + "key": "type", + "label": "type", + "value": "type", + "useOnce": true, + "category": { + "name": "type", + "type": "type", + "label": "type" + } + }, + "value": "desktop", + "operator": "equal" + } + ] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "2y72M2RTXnMpp9GPG8xSzf" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2lsqsLEx700GuBvvucafX3", + "type": "Entry", + "createdAt": "2025-10-13T09:24:45.919Z", + "updatedAt": "2025-10-13T09:30:31.776Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Unknown Device Users" + }, + "nt_description": { + "en-US": "Users who have visited the site with a browser on an unknown device type" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "", + "type": "device", + "count": "1", + "value": "", + "operator": "equal", + "conditions": [ + { + "key": { + "id": "type", + "key": "type", + "label": "type", + "value": "type", + "useOnce": true, + "category": { + "name": "type", + "type": "type", + "label": "type" + } + }, + "value": "unknown", + "operator": "equal" + } + ] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "2lsqsLEx700GuBvvucafX3" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "56gfPS3OIl77DbH5PZigtr", + "type": "Entry", + "createdAt": "2025-10-13T09:27:27.439Z", + "updatedAt": "2025-10-13T09:27:27.439Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Users with a Custom Event" + }, + "nt_description": { + "en-US": "Users for whom a `custom` event has been triggered at least once" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "", + "type": "track", + "count": "1", + "value": "custom", + "operator": "greaterThanInclusive", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "56gfPS3OIl77DbH5PZigtr" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4yIqY7AWtzeehCZxtQSDB", + "type": "Entry", + "createdAt": "2025-10-13T09:32:31.720Z", + "updatedAt": "2025-10-13T09:32:31.720Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 10, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "Identified Users" + }, + "nt_description": { + "en-US": "Users who have been identified with an `identified` trait set to `true`" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "key": "identified", + "type": "identify", + "count": "1", + "value": "true", + "operator": "equal", + "conditions": [] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "4yIqY7AWtzeehCZxtQSDB" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2Z2WLOx07InSewC3LUB3eX", + "type": "Entry", + "createdAt": "2025-10-13T10:21:46.206Z", + "updatedAt": "2025-10-13T11:51:51.477Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 22, + "revision": 8, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Baseline] All New or Return Visitors" + }, + "text": { + "en-US": "This is a baseline content entry for all users." + }, + "nt_experiences": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "603SW4mLeYB4AkPhdU2Jvj" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2cSY1TX0nDfYe4fuIrGQ1K" + } + } + ] + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2cSY1TX0nDfYe4fuIrGQ1K", + "type": "Entry", + "createdAt": "2025-10-13T10:23:14.486Z", + "updatedAt": "2025-10-13T10:38:55.495Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 30, + "revision": 5, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] New Visitors" + }, + "nt_description": { + "en-US": "This is a personalization based on whether a user is new or returning" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "traffic": 1, + "components": [ + { + "baseline": { + "id": "2Z2WLOx07InSewC3LUB3eX" + }, + "variants": [ + { + "id": "1UFf7qr4mHET3HYuYmcpEj", + "hidden": false + } + ] + } + ], + "distribution": [0, 1], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "3UTxzKhiki1xeHAdSCJBCS" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "1UFf7qr4mHET3HYuYmcpEj" + } + } + ] + }, + "nt_experience_id": { + "en-US": "2cSY1TX0nDfYe4fuIrGQ1K" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1UFf7qr4mHET3HYuYmcpEj", + "type": "Entry", + "createdAt": "2025-10-13T10:30:20.193Z", + "updatedAt": "2025-10-13T10:30:20.193Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 5, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] New Visitors" + }, + "text": { + "en-US": "This is a variant content entry for new visitors." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "3VBvwg9ysjjmnJRTQtIYK4", + "type": "Entry", + "createdAt": "2025-10-13T10:31:00.367Z", + "updatedAt": "2025-10-13T10:35:33.195Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 8, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] Return Visitors" + }, + "text": { + "en-US": "This is a variant content entry for return visitors." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "603SW4mLeYB4AkPhdU2Jvj", + "type": "Entry", + "createdAt": "2025-10-13T10:40:23.022Z", + "updatedAt": "2025-10-13T10:40:23.022Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] Return Visitors" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0.1, 0.9], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "2Z2WLOx07InSewC3LUB3eX" + }, + "variants": [ + { + "id": "3VBvwg9ysjjmnJRTQtIYK4", + "hidden": false + } + ] + } + ] + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "46fHDG7vjxwTbYee5JNVOQ" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "3VBvwg9ysjjmnJRTQtIYK4" + } + } + ] + }, + "nt_experience_id": { + "en-US": "603SW4mLeYB4AkPhdU2Jvj" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5daRHDDD7sj0Jm9kutAGou", + "type": "Entry", + "createdAt": "2025-10-13T11:37:01.721Z", + "updatedAt": "2025-10-13T11:37:18.919Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 11, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] Identified Users" + }, + "text": { + "en-US": "This is a variant content entry for identified users." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "53yERfkqYXkg2B18EcdtK5", + "type": "Entry", + "createdAt": "2025-10-13T11:37:27.018Z", + "updatedAt": "2025-10-13T11:41:13.578Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 21, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] Identified Users" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0.1, 0.9], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "7pa5bOx8Z9NmNcr7mISvD" + }, + "variants": [ + { + "id": "5daRHDDD7sj0Jm9kutAGou", + "hidden": false + } + ] + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "4yIqY7AWtzeehCZxtQSDB" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5daRHDDD7sj0Jm9kutAGou" + } + } + ] + }, + "nt_experience_id": { + "en-US": "53yERfkqYXkg2B18EcdtK5" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "7pa5bOx8Z9NmNcr7mISvD", + "type": "Entry", + "createdAt": "2025-10-13T11:40:26.837Z", + "updatedAt": "2025-10-13T11:51:51.432Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Baseline] All Identified or Unidentified Users" + }, + "text": { + "en-US": "This is a baseline content entry for all identified or unidentified users." + }, + "nt_experiences": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "53yERfkqYXkg2B18EcdtK5" + } + } + ] + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4ib0hsHWoSOnCVdDkizE8d", + "type": "Entry", + "createdAt": "2025-10-13T11:59:56.556Z", + "updatedAt": "2025-10-14T08:28:15.913Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Baseline] All Visitors from a Continent" + }, + "text": { + "en-US": "This is a baseline content entry for visitors from any continent." + }, + "nt_experiences": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2qVK4T5lnScbswoyBuGipd" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "6KfLDCdA75BGwr5HfSeXac" + } + } + ] + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4k6ZyFQnR2POY5IJLLlJRb", + "type": "Entry", + "createdAt": "2025-10-13T12:00:42.658Z", + "updatedAt": "2025-10-13T12:00:42.658Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 5, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] Visitors from Europe" + }, + "text": { + "en-US": "This is a variant content entry for visitors from Europe." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2qVK4T5lnScbswoyBuGipd", + "type": "Entry", + "createdAt": "2025-10-13T12:00:52.906Z", + "updatedAt": "2025-10-13T12:04:17.168Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] Visitors from Europe" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "traffic": 1, + "components": [ + { + "baseline": { + "id": "4ib0hsHWoSOnCVdDkizE8d" + }, + "variants": [ + { + "id": "4k6ZyFQnR2POY5IJLLlJRb", + "hidden": false + } + ] + } + ], + "distribution": [0, 1], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2WzXDaWtDmstHl9p8Wufpp" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "4k6ZyFQnR2POY5IJLLlJRb" + } + } + ] + }, + "nt_experience_id": { + "en-US": "2qVK4T5lnScbswoyBuGipd" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "6zqoWXyiSrf0ja7I2WGtYj", + "type": "Entry", + "createdAt": "2025-10-13T12:21:38.146Z", + "updatedAt": "2025-10-13T12:24:38.546Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 16, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Baseline] All Visitors With or Without a Custom Event" + }, + "text": { + "en-US": "This is a baseline content entry for all visitors with or without a custom event." + }, + "nt_experiences": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5us1xFZCsHyIYuzINJMeSV" + } + } + ] + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "7upHpduBBaKCWUqB27oTmX", + "type": "Entry", + "createdAt": "2025-10-13T12:22:45.756Z", + "updatedAt": "2025-10-13T12:22:45.756Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 8, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] Visitors With a Custom Event" + }, + "text": { + "en-US": "This is a variant content entry for visitors with a custom event." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5us1xFZCsHyIYuzINJMeSV", + "type": "Entry", + "createdAt": "2025-10-13T12:23:00.196Z", + "updatedAt": "2025-10-13T12:24:02.494Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 16, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] Visitors With a Custom Event" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "traffic": 1, + "components": [ + { + "baseline": { + "id": "6zqoWXyiSrf0ja7I2WGtYj" + }, + "variants": [ + { + "id": "7upHpduBBaKCWUqB27oTmX", + "hidden": false + } + ] + } + ], + "distribution": [0, 1], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "56gfPS3OIl77DbH5PZigtr" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "7upHpduBBaKCWUqB27oTmX" + } + } + ] + }, + "nt_experience_id": { + "en-US": "5us1xFZCsHyIYuzINJMeSV" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "xFwgG3oNaOcjzWiGe4vXo", + "type": "Entry", + "createdAt": "2025-10-14T08:11:40.694Z", + "updatedAt": "2025-10-14T08:23:55.718Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Baseline] All Visitors Using Any Device" + }, + "text": { + "en-US": "This is a baseline content entry for all visitors using any device." + }, + "nt_experiences": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "6ZjRMMvtP9MOfWYrON0yxz" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2SDKJ8KrTCyGA26ZN8Snzz" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "BBvRD6Uv03k69wPwB9Ou6" + } + } + ] + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "61KKjYYmSR9IukqA0u9Pwd", + "type": "Entry", + "createdAt": "2025-10-14T08:13:02.977Z", + "updatedAt": "2025-10-14T08:13:02.977Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 8, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] Visitors using a Mobile Browser" + }, + "text": { + "en-US": "This is a variant content entry for visitors using a mobile browser." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "6ZjRMMvtP9MOfWYrON0yxz", + "type": "Entry", + "createdAt": "2025-10-14T08:13:32.216Z", + "updatedAt": "2025-10-15T12:23:40.308Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 18, + "revision": 3, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] Visitors using a Mobile Browser" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "xFwgG3oNaOcjzWiGe4vXo" + }, + "variants": [ + { + "id": "61KKjYYmSR9IukqA0u9Pwd", + "hidden": false + } + ], + "type": "EntryReplacement" + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "3MRuZPQ5EdwDqzUDRgOo7c" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "61KKjYYmSR9IukqA0u9Pwd" + } + } + ] + }, + "nt_experience_id": { + "en-US": "6ZjRMMvtP9MOfWYrON0yxz" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1JfZr0bOCufTDFSljIwcdh", + "type": "Entry", + "createdAt": "2025-10-14T08:16:03.175Z", + "updatedAt": "2025-10-14T08:16:03.175Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] Visitors Using a Tablet Browser" + }, + "text": { + "en-US": "This is a variant content entry for visitors using a tablet browser." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "2SDKJ8KrTCyGA26ZN8Snzz", + "type": "Entry", + "createdAt": "2025-10-14T08:16:07.579Z", + "updatedAt": "2025-10-14T08:27:19.812Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] Visitors Using a Tablet Browser" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "xFwgG3oNaOcjzWiGe4vXo" + }, + "variants": [ + { + "id": "1JfZr0bOCufTDFSljIwcdh", + "hidden": false + } + ] + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "tuEoGEpoGK9n4ZUljuFz9" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "1JfZr0bOCufTDFSljIwcdh" + } + } + ] + }, + "nt_experience_id": { + "en-US": "2SDKJ8KrTCyGA26ZN8Snzz" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "6iyPl6vfDH5AoClf3MtYlh", + "type": "Entry", + "createdAt": "2025-10-14T08:23:23.916Z", + "updatedAt": "2025-10-14T08:23:23.916Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] Visitors Using a Desktop Browser" + }, + "text": { + "en-US": "This is a variant content entry for visitors using a desktop browser." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "BBvRD6Uv03k69wPwB9Ou6", + "type": "Entry", + "createdAt": "2025-10-14T08:23:35.930Z", + "updatedAt": "2025-10-14T08:23:35.930Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 12, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] Visitors using a Desktop Browser" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "xFwgG3oNaOcjzWiGe4vXo" + }, + "variants": [ + { + "id": "6iyPl6vfDH5AoClf3MtYlh", + "hidden": false + } + ] + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "2y72M2RTXnMpp9GPG8xSzf" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "6iyPl6vfDH5AoClf3MtYlh" + } + } + ] + }, + "nt_experience_id": { + "en-US": "BBvRD6Uv03k69wPwB9Ou6" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "7Ae0ke0e3YqRLutG35d4Ve", + "type": "Entry", + "createdAt": "2025-10-14T08:26:28.160Z", + "updatedAt": "2025-10-14T08:26:28.160Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 7, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] Visitors from North America" + }, + "text": { + "en-US": "This is a variant content entry for visitors from North America." + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "6KfLDCdA75BGwr5HfSeXac", + "type": "Entry", + "createdAt": "2025-10-14T08:26:44.114Z", + "updatedAt": "2025-10-14T08:26:44.114Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Personalization] Visitors from North America" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "baseline": { + "id": "4ib0hsHWoSOnCVdDkizE8d" + }, + "variants": [ + { + "id": "7Ae0ke0e3YqRLutG35d4Ve", + "hidden": false + } + ] + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5P8sJgSXhjNUlUfk7ee88u" + } + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "7Ae0ke0e3YqRLutG35d4Ve" + } + } + ] + }, + "nt_experience_id": { + "en-US": "6KfLDCdA75BGwr5HfSeXac" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5I5wZ2b6MeGP7q1aW1mOHG", + "type": "Entry", + "createdAt": "2025-10-15T12:14:48.535Z", + "updatedAt": "2025-10-15T12:14:48.535Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 9, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_audience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "All Visitors" + }, + "nt_rules": { + "en-US": { + "any": [ + { + "all": [ + { + "type": "isReturningVisitor", + "count": "1", + "key": "", + "operator": "equal", + "value": true, + "conditions": [ + { + "key": { + "key": "session_count", + "value": "session_count", + "id": "session_count", + "label": "session_count", + "category": { + "name": "session_count", + "label": "session_count", + "type": "session_count" + }, + "useOnce": true + }, + "operator": "greaterThanInclusive", + "value": "1" + } + ] + } + ] + } + ] + } + }, + "nt_audience_id": { + "en-US": "5I5wZ2b6MeGP7q1aW1mOHG" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1hTtSf1ChvTtBgY6BwBZk1", + "type": "Entry", + "createdAt": "2025-10-15T12:16:15.142Z", + "updatedAt": "2025-10-15T12:20:03.227Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 22, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Custom Flag] Plain Text Flag" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "type": "InlineVariable", + "key": "plain-text", + "valueType": "String", + "baseline": { + "value": "Baseline" + }, + "variants": [ + { + "value": "Plain Text" + } + ] + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5I5wZ2b6MeGP7q1aW1mOHG" + } + } + }, + "nt_experience_id": { + "en-US": "1hTtSf1ChvTtBgY6BwBZk1" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4HpmjxbSGU4KuQNUeGacY1", + "type": "Entry", + "createdAt": "2025-10-15T12:18:28.205Z", + "updatedAt": "2025-10-15T12:18:28.205Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Custom Flag] JSON Flag" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "type": "InlineVariable", + "key": "json", + "valueType": "Object", + "baseline": { + "value": { + "flag": false + } + }, + "variants": [ + { + "value": { + "flag": true + } + } + ] + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5I5wZ2b6MeGP7q1aW1mOHG" + } + } + }, + "nt_experience_id": { + "en-US": "4HpmjxbSGU4KuQNUeGacY1" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "gk5FTARYgB6PEjNMP1jTU", + "type": "Entry", + "createdAt": "2025-10-15T12:19:42.828Z", + "updatedAt": "2025-10-15T12:19:42.828Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Custom Flag] Boolean Flag" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "type": "InlineVariable", + "key": "boolean", + "valueType": "Boolean", + "baseline": { + "value": false + }, + "variants": [ + { + "value": true + } + ] + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5I5wZ2b6MeGP7q1aW1mOHG" + } + } + }, + "nt_experience_id": { + "en-US": "gk5FTARYgB6PEjNMP1jTU" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1TF5UuJZc6sO88byrYZ6f2", + "type": "Entry", + "createdAt": "2025-10-15T12:21:21.409Z", + "updatedAt": "2025-10-15T12:21:21.409Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 15, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Custom Flag] Number Flag" + }, + "nt_type": { + "en-US": "nt_personalization" + }, + "nt_config": { + "en-US": { + "distribution": [0, 1], + "traffic": 1, + "components": [ + { + "type": "InlineVariable", + "key": "number", + "valueType": "Number", + "baseline": { + "value": 0 + }, + "variants": [ + { + "value": 12345 + } + ] + } + ], + "primaryMetric": "" + } + }, + "nt_audience": { + "en-US": { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5I5wZ2b6MeGP7q1aW1mOHG" + } + } + }, + "nt_experience_id": { + "en-US": "1TF5UuJZc6sO88byrYZ6f2" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "nM127uVevlpDWytfZRyum", + "type": "Entry", + "createdAt": "2025-10-15T15:08:43.051Z", + "updatedAt": "2025-10-15T15:08:52.541Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 6, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_mergetag" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Merge Tag] Continent" + }, + "nt_fallback": { + "en-US": "Nowhere" + }, + "nt_mergetag_id": { + "en-US": "location.continent" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "1MwiFl4z7gkwqGYdvCmr8c", + "type": "Entry", + "createdAt": "2025-10-15T15:17:39.795Z", + "updatedAt": "2025-10-15T15:20:53.843Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 18, + "revision": 2, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "mergeTagContent" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Merge Tag Content] Entry With Continent" + }, + "text": { + "en-US": { + "nodeType": "document", + "data": {}, + "content": [ + { + "nodeType": "paragraph", + "data": {}, + "content": [ + { + "nodeType": "text", + "value": "This is a merge tag content entry that displays the visitor's continent \"", + "marks": [], + "data": {} + }, + { + "nodeType": "embedded-entry-inline", + "data": { + "target": { + "sys": { + "id": "nM127uVevlpDWytfZRyum", + "type": "Link", + "linkType": "Entry" + } + } + }, + "content": [] + }, + { + "nodeType": "text", + "value": "\" embedded within the text.", + "marks": [], + "data": {} + } + ] + } + ] + } + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5XHssysWUDECHzKLzoIsg1", + "type": "Entry", + "createdAt": "2025-10-17T11:04:27.939Z", + "updatedAt": "2025-10-17T11:04:27.939Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 9, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Baseline] A" + }, + "text": { + "en-US": "This is a baseline content entry for an A/B/C experiment: A" + }, + "nt_experiences": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5kuc9KgA9q9RXnlbDxDlY" + } + } + ] + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "4bmHsNUaEibELHwWCon3dt", + "type": "Entry", + "createdAt": "2025-10-17T11:04:59.561Z", + "updatedAt": "2025-10-17T11:04:59.561Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 3, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] B" + }, + "text": { + "en-US": "This is a variant content entry for an A/B/C experiment: B" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5CwnS3VDOncGMK83M3tNfz", + "type": "Entry", + "createdAt": "2025-10-17T11:05:23.054Z", + "updatedAt": "2025-10-17T11:05:23.054Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 3, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "content" + } + } + }, + "fields": { + "internalTitle": { + "en-US": "[Variant] C" + }, + "text": { + "en-US": "This is a variant content entry for an A/B/C experiment: C" + } + } + }, + { + "metadata": { + "tags": [], + "concepts": [] + }, + "sys": { + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "id": "5kuc9KgA9q9RXnlbDxDlY", + "type": "Entry", + "createdAt": "2025-10-17T11:05:42.251Z", + "updatedAt": "2025-10-17T11:05:42.251Z", + "environment": { + "sys": { + "id": "master", + "type": "Link", + "linkType": "Environment" + } + }, + "publishedVersion": 13, + "revision": 1, + "contentType": { + "sys": { + "type": "Link", + "linkType": "ContentType", + "id": "nt_experience" + } + } + }, + "fields": { + "nt_name": { + "en-US": "[Experiment] A/B/C" + }, + "nt_type": { + "en-US": "nt_experiment" + }, + "nt_config": { + "en-US": { + "distribution": [0.3333333333333333, 0.3333333333333333, 0.3333333333333333], + "traffic": 1, + "components": [ + { + "type": "EntryReplacement", + "baseline": { + "id": "5XHssysWUDECHzKLzoIsg1" + }, + "variants": [ + { + "id": "4bmHsNUaEibELHwWCon3dt", + "hidden": false + }, + { + "id": "5CwnS3VDOncGMK83M3tNfz", + "hidden": false + } + ] + } + ], + "primaryMetric": "fececd8c-d0bd-4a37-bea7-b2f68b782923", + "distributionType": "even-split" + } + }, + "nt_variants": { + "en-US": [ + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "4bmHsNUaEibELHwWCon3dt" + } + }, + { + "sys": { + "type": "Link", + "linkType": "Entry", + "id": "5CwnS3VDOncGMK83M3tNfz" + } + } + ] + }, + "nt_experience_id": { + "en-US": "5kuc9KgA9q9RXnlbDxDlY" + }, + "nt_metadata": { + "en-US": { + "type": "origin" + } + } + } + } + ], + "assets": [], + "locales": [ + { + "name": "English (United States)", + "code": "en-US", + "fallbackCode": null, + "default": true, + "contentManagementApi": true, + "contentDeliveryApi": true, + "optional": false, + "sys": { + "type": "Locale", + "id": "3mUmVZm5h4Z5pPpJC6vTIT", + "version": 1, + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "environment": { + "sys": { + "type": "Link", + "linkType": "Environment", + "id": "master", + "uuid": "09769e33-6ef9-49b1-818b-92959edfef25" + } + }, + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "createdAt": "2025-10-06T12:53:51Z", + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "updatedAt": "2025-10-06T12:53:51Z" + } + } + ], + "webhooks": [], + "roles": [ + { + "name": "Editor", + "description": "Allows editing, publishing and archiving of content", + "policies": [ + { + "effect": "allow", + "actions": "all", + "constraint": { + "and": [ + { + "equals": [ + { + "doc": "sys.type" + }, + "Entry" + ] + } + ] + } + }, + { + "effect": "allow", + "actions": "all", + "constraint": { + "and": [ + { + "equals": [ + { + "doc": "sys.type" + }, + "Asset" + ] + } + ] + } + } + ], + "permissions": { + "ContentModel": ["read"], + "Settings": [], + "ContentDelivery": [], + "Environments": [], + "EnvironmentAliases": [], + "Tags": [] + }, + "sys": { + "type": "Role", + "id": "3neDjmNDaAZF4BBeT7lqfN", + "version": 0, + "space": { + "sys": { + "type": "Link", + "linkType": "Space", + "id": "uelxcuo7v97l" + } + }, + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "createdAt": "2025-10-06T12:53:51Z", + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2ThAHYPA8kj7F1sHxUzXVt" + } + }, + "updatedAt": "2025-10-06T12:53:51Z" + } + } + ] +} diff --git a/lib/mocks/src/experience-handlers.ts b/lib/mocks/src/experience-handlers.ts index a5ff327d..1868f43a 100644 --- a/lib/mocks/src/experience-handlers.ts +++ b/lib/mocks/src/experience-handlers.ts @@ -1,135 +1,38 @@ -/* eslint-disable @typescript-eslint/no-magic-numbers -- testing */ - -import type { - BatchExperienceEvent, +import { BatchExperienceEventArray, - BatchExperienceResponse, - ExperienceEvent, ExperienceEventArray, - ExperienceRequestData, ExperienceResponse, - GeoLocation, - Page, - Profile, - SelectedPersonalization, - SessionStatistics, - Traits, -} from '@contentful/optimization-core' -import { http, type HttpHandler, HttpResponse } from 'msw' - -// Minimal in-memory store -const profilesStore = new Map() - -// eslint-disable-next-line complexity -- no worries -function makeDefaultSession(page?: Page): SessionStatistics { - const path = page?.path ?? '/' - const url = page?.url ?? 'https://example.com/' - const query = page?.query ?? {} - const referrer = page?.referrer ?? '' - const search = page?.search ?? '' - const title = page?.title ?? '' - return { - id: 'sess_' + crypto.randomUUID(), - isReturningVisitor: false, - landingPage: { path, url, query, referrer, search, title }, - count: 1, - activeSessionLength: 0, - averageSessionLength: 0, - } -} - -function isBatchEvent( - event: ExperienceEvent | BatchExperienceEvent, -): event is BatchExperienceEvent { - return Boolean(Object.keys(event).find((k) => k === 'anonymousId')) -} - -function createProfileFromEvents( - events: ExperienceEventArray | BatchExperienceEventArray, - explicitId?: string, -): Profile { - const [first] = events - - if (!first) throw new Error('At least one event must be supplied') - - const anonymousId = isBatchEvent(first) ? first.anonymousId : 'prf_' + crypto.randomUUID() - const generatedId = explicitId ?? anonymousId - const stableId = generatedId - - // Merge traits from any identify events (last write wins) - const traits = events.reduce((acc, e) => { - if (e.type === 'identify') { - Object.assign(acc, e.traits) - } - return acc - }, {}) - - // Prefer event-provided location if present - const loc: GeoLocation = Object.assign({}, first.context.location) - - const random = seededRandom(stableId) - const { - context: { page }, - } = first - - return { - id: generatedId, - stableId, - random, - audiences: inferAudiences({ traits, page }), - traits, - location: loc, - session: makeDefaultSession(page), - } -} - -function updateProfileWithEvents(profile: Profile, events: ExperienceEventArray): Profile { - for (const e of events) { - if (e.type === 'identify') { - Object.assign(profile.traits, e.traits) - } - // Very simple session math for mocking - profile.session.count += 1 - } - profile.audiences = inferAudiences({ traits: profile.traits }) - return profile -} - -// Deterministic pseudo-random so variants are stable per profile id -function seededRandom(seed: string): number { - let h = 2166136261 >>> 0 - for (let i = 0; i < seed.length; i++) { - h ^= seed.charCodeAt(i) - h = Math.imul(h, 16777619) - } - return ((h >>> 0) % 10000) / 10000 -} - -function inferAudiences({ traits, page }: { traits?: Traits; page?: Page }): string[] { - const out: string[] = [] - if (traits?.countryCode === 'DE') out.push('audience-germany') - if (traits?.plan === 'pro') out.push('audience-pro') - if (page?.query.utm_campaign) out.push(`utm-${page.query.utm_campaign}`) - return out -} - -function chooseExperiences(profile: Profile): SelectedPersonalization[] { - // A tiny decision engine just to demonstrate shape - // You can replace this with any logic or even read from a JSON config. - const variantIndex = profile.traits.beta ? 1 : profile.random > 0.5 ? 1 : 0 - const variants = - variantIndex === 0 - ? { entryA: 'entryA', entryB: 'entryB' } - : { entryA: 'entryC', entryB: 'entryD' } - - return [ - { - experienceId: 'exp-home-hero', - variantIndex, - variants, - }, - ] -} + type ExperienceRequestData, +} from '@contentful/optimization-api-schemas' +import { http, HttpResponse, type HttpHandler } from 'msw' +import { readFile } from 'node:fs/promises' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +const _filename = fileURLToPath(import.meta.url) +const _dirname = dirname(_filename) +const BASE_DIR = resolve(_dirname, './experience/data') +const newVisitorPath = join(BASE_DIR, `new-visitor.json`) +const identifiedVisitorPath = join(BASE_DIR, `identified-visitor.json`) + +// This mock server currently only supports _one visitor_, which may eventually be identified and remain that way +let identified = false + +let newVisitor: ExperienceResponse | undefined = undefined +readFile(newVisitorPath, 'utf8') + .then((data) => ExperienceResponse.parse(JSON.parse(data))) + .then((data) => (newVisitor = data)) + .catch((error: unknown) => { + void error + }) + +let identifiedVisitor: ExperienceResponse | undefined = undefined +readFile(identifiedVisitorPath, 'utf8') + .then((data) => ExperienceResponse.parse(JSON.parse(data))) + .then((data) => (identifiedVisitor = data)) + .catch((error: unknown) => { + void error + }) // Helper to parse JSON whether body is application/json or text/plain async function parseJson(req: Request): Promise { @@ -138,22 +41,29 @@ async function parseJson(req: Request): Promise { // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- no worries return (await req.json()) as T } + // text/plain or others -> try text then JSON.parse const raw = await req.text() + // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- no worries return JSON.parse(raw) as T } -// Common response helper -function buildResponse(profile: Profile | Profile[]): ExperienceResponse | BatchExperienceResponse { - if (Array.isArray(profile)) { - return { data: { profiles: profile.map((p) => p) }, message: 'success', error: null } - } - return { - data: { profile, experiences: chooseExperiences(profile), changes: [] }, - message: 'success', - error: null, +function hasIdentifyEvent(events: ExperienceEventArray | undefined): boolean { + if (!events?.length) return false + + return events.some(({ type }) => type === 'identify') +} + +function getResponseBody(events: ExperienceEventArray | undefined): ExperienceResponse | undefined { + let responseBody: ExperienceResponse | undefined = undefined + if (identified || hasIdentifyEvent(events)) { + identified = true + responseBody = identifiedVisitor + } else { + responseBody = newVisitor } + return responseBody } // --------------------------------- @@ -175,12 +85,19 @@ export function getHandlers(baseUrl = '*'): HttpHandler[] { // Create profile (upsert by events) http.post( - `${baseUrl}v2/organizations/:organizationId/environments/:environmentSlug/profiles`, + `${baseUrl}v2/organizations/:organizationId/environments/:environment/profiles`, async ({ request }) => { const { events } = await parseJson(request) - const profile = createProfileFromEvents(events) - profilesStore.set(profile.id, profile) - return HttpResponse.json(buildResponse(profile), { + const { success: eventsAreValid } = ExperienceEventArray.safeParse(events) + + if (!eventsAreValid) { + return HttpResponse.json( + { error: 'Invalid Event Array' }, + { headers: { 'Access-Control-Allow-Origin': '*' }, status: 400 }, + ) + } + + return HttpResponse.json(getResponseBody(events), { headers: { 'Access-Control-Allow-Origin': '*' }, }) }, @@ -188,27 +105,28 @@ export function getHandlers(baseUrl = '*'): HttpHandler[] { // Update profile by id http.post( - `${baseUrl}v2/organizations/:organizationId/environments/:environmentSlug/profiles/:profileId`, + `${baseUrl}v2/organizations/:organizationId/environments/:environment/profiles/:profileId`, async ({ params, request }) => { const { profileId } = params - const { events } = await parseJson(request) if (!profileId) { return HttpResponse.json( { message: 'Profile not found', data: {}, error: { code: 'ERR_PROFILE_NOT_FOUND' } }, - { status: 404, headers: { 'Access-Control-Allow-Origin': '*' } }, + { headers: { 'Access-Control-Allow-Origin': '*' }, status: 404 }, ) } - let profile = profilesStore.get(profileId.toString()) - if (!profile) { - profile = createProfileFromEvents(events, profileId.toString()) - profilesStore.set(profileId.toString(), profile) - } else { - updateProfileWithEvents(profile, events) + const { events } = await parseJson(request) + const { success: eventsAreValid } = ExperienceEventArray.safeParse(events) + + if (!eventsAreValid) { + return HttpResponse.json( + { error: 'Invalid Event Array' }, + { headers: { 'Access-Control-Allow-Origin': '*' }, status: 400 }, + ) } - return HttpResponse.json(buildResponse(profile), { + return HttpResponse.json(getResponseBody(events), { headers: { 'Access-Control-Allow-Origin': '*' }, }) }, @@ -216,17 +134,22 @@ export function getHandlers(baseUrl = '*'): HttpHandler[] { // Get profile by id http.get( - `${baseUrl}v2/organizations/:organizationId/environments/:environmentSlug/profiles/:profileId`, + `${baseUrl}v2/organizations/:organizationId/environments/:environment/profiles/:profileId`, ({ params }) => { const { profileId } = params - const profile = profileId ? profilesStore.get(profileId.toString()) : undefined - if (!profile) { + + if ( + !profileId || + typeof profileId !== 'string' || + ![identifiedVisitor?.data.profile.id, newVisitor?.data.profile.id].includes(profileId) + ) { return HttpResponse.json( { message: 'Profile not found', data: {}, error: { code: 'ERR_PROFILE_NOT_FOUND' } }, { status: 404, headers: { 'Access-Control-Allow-Origin': '*' } }, ) } - return HttpResponse.json(buildResponse(profile), { + + return HttpResponse.json(identified ? identifiedVisitor : newVisitor, { headers: { 'Access-Control-Allow-Origin': '*' }, }) }, @@ -234,33 +157,20 @@ export function getHandlers(baseUrl = '*'): HttpHandler[] { // Batch upsert profiles (max limits are not enforced in this mock) http.post( - `${baseUrl}v2/organizations/:organizationId/environments/:environmentSlug/events`, + `${baseUrl}v2/organizations/:organizationId/environments/:environment/events`, async ({ request }) => { const { events } = await parseJson<{ events: BatchExperienceEventArray }>(request) + const { success: eventsAreValid } = BatchExperienceEventArray.safeParse(events) - // Group incoming events by anonymousId (or synthesize one per event if missing) - const byId = new Map() - for (const ev of events) { - const { anonymousId: id } = ev - const list = byId.get(id) - if (list) list.push(ev) - else byId.set(id, [ev]) - } - - const changed: Profile[] = [] - - for (const [id, evs] of byId) { - let profile = profilesStore.get(id) - if (!profile) { - profile = createProfileFromEvents(evs, id) - profilesStore.set(id, profile) - } else { - updateProfileWithEvents(profile, evs) - } - changed.push(profile) + if (!eventsAreValid) { + return HttpResponse.json( + { error: 'Invalid Batch Event Array' }, + { headers: { 'Access-Control-Allow-Origin': '*' }, status: 400 }, + ) } - return HttpResponse.json(buildResponse(changed), { + // Just send the identified profile + return HttpResponse.json(identifiedVisitor, { headers: { 'Access-Control-Allow-Origin': '*' }, }) }, diff --git a/lib/mocks/src/experience/data/identified-visitor.json b/lib/mocks/src/experience/data/identified-visitor.json new file mode 100644 index 00000000..58d54e8e --- /dev/null +++ b/lib/mocks/src/experience/data/identified-visitor.json @@ -0,0 +1,204 @@ +{ + "data": { + "profile": { + "id": "89a085900309de9ecef46965112c309d6f00f1aaed7fcb6709eb851c9557ec42", + "stableId": "89a085900309de9ecef46965112c309d6f00f1aaed7fcb6709eb851c9557ec42", + "random": 0.46249140763247654, + "audiences": [ + "2oVAttk4iWnscOyhDRT8Yl", + "2WzXDaWtDmstHl9p8Wufpp", + "2y72M2RTXnMpp9GPG8xSzf", + "46fHDG7vjxwTbYee5JNVOQ", + "4yIqY7AWtzeehCZxtQSDB", + "51AL1dMNXkvx1BkQd3wPR1", + "56gfPS3OIl77DbH5PZigtr", + "5I5wZ2b6MeGP7q1aW1mOHG", + "64ducOq8OgG6N0zK3SuRnq" + ], + "traits": { + "identified": true, + "whatever": true + }, + "location": { + "coordinates": { + "latitude": 52.52437, + "longitude": 13.41053 + }, + "countryCode": "DE", + "city": "Berlin", + "continent": "EU", + "postalCode": "10119", + "region": "State of Berlin" + }, + "session": { + "id": "d262d649-1e06-4ed6-84fe-138818fb8d9e", + "count": 10, + "isReturningVisitor": true, + "landingPage": { + "path": "/", + "query": {}, + "referrer": "", + "search": "", + "url": "http://localhost:5173/" + }, + "activeSessionLength": 195, + "averageSessionLength": 1326.7 + } + }, + "experiences": [ + { + "experienceId": "1hTtSf1ChvTtBgY6BwBZk1", + "variantIndex": 1, + "variants": {} + }, + { + "experienceId": "1lNQ9YUJfDBQLMR6O0jjP8", + "variantIndex": 0, + "variants": { + "5Rn1R8HqsbcdxMx46qLilf": "5Rn1R8HqsbcdxMx46qLilf" + } + }, + { + "experienceId": "1TF5UuJZc6sO88byrYZ6f2", + "variantIndex": 1, + "variants": {} + }, + { + "experienceId": "2kT7B3F1GH3sDBo2glpywy", + "variantIndex": 1, + "variants": { + "4WFNEIlY8bzmZcjmjCCUOm": "6v6IuRsAR2AZoAnISXH8oP" + } + }, + { + "experienceId": "2O4ZmYjJFSn0E8ti8tonut", + "variantIndex": 0, + "variants": { + "qEfH7mk21RnqzUHlL6cIC": "qEfH7mk21RnqzUHlL6cIC" + } + }, + { + "experienceId": "2qVK4T5lnScbswoyBuGipd", + "variantIndex": 1, + "variants": { + "4ib0hsHWoSOnCVdDkizE8d": "4k6ZyFQnR2POY5IJLLlJRb" + } + }, + { + "experienceId": "3xYlmUaVqxwctTZRQUu7SJ", + "variantIndex": 1, + "variants": { + "74PjP6eFEOxD66R88LrL76": "6EkBsBtO4AGn43u0SOq4Sz" + } + }, + { + "experienceId": "44jIanEK8sjH9SoJ5AOa7m", + "variantIndex": 1, + "variants": { + "4LIbcbuqUx6wtfJIvHnyON": "" + } + }, + { + "experienceId": "4aSQ6HYCrSQP2UktnEGq3X", + "variantIndex": 0, + "variants": { + "3n4FIM0bQNZKQwomidlmZ8": "3n4FIM0bQNZKQwomidlmZ8" + } + }, + { + "experienceId": "4HpmjxbSGU4KuQNUeGacY1", + "variantIndex": 1, + "variants": {} + }, + { + "experienceId": "53yERfkqYXkg2B18EcdtK5", + "variantIndex": 1, + "variants": { + "7pa5bOx8Z9NmNcr7mISvD": "5daRHDDD7sj0Jm9kutAGou" + } + }, + { + "experienceId": "5kuc9KgA9q9RXnlbDxDlY", + "variantIndex": 0, + "variants": { + "5XHssysWUDECHzKLzoIsg1": "5XHssysWUDECHzKLzoIsg1" + } + }, + { + "experienceId": "5us1xFZCsHyIYuzINJMeSV", + "variantIndex": 1, + "variants": { + "6zqoWXyiSrf0ja7I2WGtYj": "7upHpduBBaKCWUqB27oTmX" + } + }, + { + "experienceId": "603SW4mLeYB4AkPhdU2Jvj", + "variantIndex": 1, + "variants": { + "2Z2WLOx07InSewC3LUB3eX": "3VBvwg9ysjjmnJRTQtIYK4" + } + }, + { + "experienceId": "6ZbWjihD33P0ZQDi1NBPNj", + "variantIndex": 1, + "variants": { + "74PjP6eFEOxD66R88LrL76": "2ow3EkPI5jKevWoTT2BVG8" + } + }, + { + "experienceId": "BBvRD6Uv03k69wPwB9Ou6", + "variantIndex": 1, + "variants": { + "xFwgG3oNaOcjzWiGe4vXo": "6iyPl6vfDH5AoClf3MtYlh" + } + }, + { + "experienceId": "gk5FTARYgB6PEjNMP1jTU", + "variantIndex": 1, + "variants": {} + } + ], + "changes": [ + { + "key": "plain-text", + "value": "Plain Text", + "type": "Variable", + "meta": { + "experienceId": "1hTtSf1ChvTtBgY6BwBZk1", + "variantIndex": 1 + } + }, + { + "key": "number", + "value": 12345, + "type": "Variable", + "meta": { + "experienceId": "1TF5UuJZc6sO88byrYZ6f2", + "variantIndex": 1 + } + }, + { + "key": "json", + "value": { + "flag": true + }, + "type": "Variable", + "meta": { + "experienceId": "4HpmjxbSGU4KuQNUeGacY1", + "variantIndex": 1 + } + }, + { + "key": "boolean", + "value": true, + "type": "Variable", + "meta": { + "experienceId": "gk5FTARYgB6PEjNMP1jTU", + "variantIndex": 1 + } + } + ] + }, + "error": null, + "message": "ok" +} diff --git a/lib/mocks/src/experience/data/new-visitor.json b/lib/mocks/src/experience/data/new-visitor.json new file mode 100644 index 00000000..744a3352 --- /dev/null +++ b/lib/mocks/src/experience/data/new-visitor.json @@ -0,0 +1,127 @@ +{ + "data": { + "profile": { + "id": "89a085900309de9ecef46965112c309d6f00f1aaed7fcb6709eb851c9557ec42", + "stableId": "89a085900309de9ecef46965112c309d6f00f1aaed7fcb6709eb851c9557ec42", + "random": 0.46249140763247654, + "audiences": [ + "1g2FXnBQzxcQfhnaM2NRkn", + "2WzXDaWtDmstHl9p8Wufpp", + "2y72M2RTXnMpp9GPG8xSzf", + "3UTxzKhiki1xeHAdSCJBCS", + "51AL1dMNXkvx1BkQd3wPR1", + "64ducOq8OgG6N0zK3SuRnq", + "6IZl4qhrtb0exmz0ADP0DR" + ], + "traits": {}, + "location": { + "coordinates": { + "latitude": 52.52437, + "longitude": 13.41053 + }, + "countryCode": "DE", + "city": "Berlin", + "continent": "EU", + "postalCode": "10119", + "region": "State of Berlin" + }, + "session": { + "id": "d262d649-1e06-4ed6-84fe-138818fb8d9e", + "count": 1, + "isReturningVisitor": false, + "landingPage": { + "path": "/", + "query": {}, + "referrer": "", + "search": "", + "url": "http://localhost:5173/" + }, + "activeSessionLength": 26, + "averageSessionLength": 26 + } + }, + "experiences": [ + { + "experienceId": "1lNQ9YUJfDBQLMR6O0jjP8", + "variantIndex": 0, + "variants": { + "5Rn1R8HqsbcdxMx46qLilf": "5Rn1R8HqsbcdxMx46qLilf" + } + }, + { + "experienceId": "2cSY1TX0nDfYe4fuIrGQ1K", + "variantIndex": 1, + "variants": { + "2Z2WLOx07InSewC3LUB3eX": "1UFf7qr4mHET3HYuYmcpEj" + } + }, + { + "experienceId": "2kT7B3F1GH3sDBo2glpywy", + "variantIndex": 1, + "variants": { + "4WFNEIlY8bzmZcjmjCCUOm": "6v6IuRsAR2AZoAnISXH8oP" + } + }, + { + "experienceId": "2O4ZmYjJFSn0E8ti8tonut", + "variantIndex": 0, + "variants": { + "qEfH7mk21RnqzUHlL6cIC": "qEfH7mk21RnqzUHlL6cIC" + } + }, + { + "experienceId": "2qVK4T5lnScbswoyBuGipd", + "variantIndex": 1, + "variants": { + "4ib0hsHWoSOnCVdDkizE8d": "4k6ZyFQnR2POY5IJLLlJRb" + } + }, + { + "experienceId": "44jIanEK8sjH9SoJ5AOa7m", + "variantIndex": 1, + "variants": { + "4LIbcbuqUx6wtfJIvHnyON": "" + } + }, + { + "experienceId": "4aSQ6HYCrSQP2UktnEGq3X", + "variantIndex": 0, + "variants": { + "3n4FIM0bQNZKQwomidlmZ8": "3n4FIM0bQNZKQwomidlmZ8" + } + }, + { + "experienceId": "5kuc9KgA9q9RXnlbDxDlY", + "variantIndex": 0, + "variants": { + "5XHssysWUDECHzKLzoIsg1": "5XHssysWUDECHzKLzoIsg1" + } + }, + { + "experienceId": "6df0DI1BG9GTb9qIcjfkmh", + "variantIndex": 1, + "variants": { + "74PjP6eFEOxD66R88LrL76": "5OYKPG3KHGgKczGtZ5itv9" + }, + "sticky": true + }, + { + "experienceId": "6ZbWjihD33P0ZQDi1NBPNj", + "variantIndex": 1, + "variants": { + "74PjP6eFEOxD66R88LrL76": "2ow3EkPI5jKevWoTT2BVG8" + } + }, + { + "experienceId": "BBvRD6Uv03k69wPwB9Ou6", + "variantIndex": 1, + "variants": { + "xFwgG3oNaOcjzWiGe4vXo": "6iyPl6vfDH5AoClf3MtYlh" + } + } + ], + "changes": [] + }, + "error": null, + "message": "ok" +} diff --git a/lib/mocks/src/insights-handlers.ts b/lib/mocks/src/insights-handlers.ts index 9b25f6d4..cbbbedc9 100644 --- a/lib/mocks/src/insights-handlers.ts +++ b/lib/mocks/src/insights-handlers.ts @@ -1,4 +1,4 @@ -import type { BatchInsightsEventArray } from '@contentful/optimization-core' +import type { BatchInsightsEventArray } from '@contentful/optimization-api-client' import { http, type HttpHandler, HttpResponse } from 'msw' // Minimal in-memory store @@ -24,17 +24,15 @@ async function parseJson(req: Request): Promise { export function getHandlers(baseUrl = '*'): HttpHandler[] { return [ // CORS preflight for Beacon/fetch - http.options( - `${baseUrl}v1/organizations/:organizationId/environments/:environmentSlug/events`, - () => - HttpResponse.text('', { - status: 204, - headers: { - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS', - 'Access-Control-Allow-Headers': 'Content-Type, Authorization', - }, - }), + http.options('*', () => + HttpResponse.text('', { + status: 204, + headers: { + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS', + 'Access-Control-Allow-Headers': 'Content-Type, Authorization', + }, + }), ), http.post( `${baseUrl}v1/organizations/:organizationId/environments/:environmentSlug/events`, diff --git a/lib/mocks/src/server.ts b/lib/mocks/src/server.ts index 5f3b83a0..417d10fe 100644 --- a/lib/mocks/src/server.ts +++ b/lib/mocks/src/server.ts @@ -1,14 +1,17 @@ /* eslint-disable @typescript-eslint/no-magic-numbers -- testing */ import { createServer } from '@mswjs/http-middleware' +import { getHandlers as getContentfulHandlers } from './contentful-handlers' import { getHandlers as getExperienceHandlers } from './experience-handlers' import { getHandlers as getInsightsHandlers } from './insights-handlers' +const CONTENTFUL_BASE_URL = process.env.BASE_URL ?? 'http://localhost/contentful/' const EXPERIENCE_BASE_URL = process.env.BASE_URL ?? 'http://localhost/experience/' const INSIGHTS_BASE_URL = process.env.BASE_URL ?? 'http://localhost/insights/' const PORT = Number(process.env.PORT ?? 80) const app = createServer( + ...getContentfulHandlers(CONTENTFUL_BASE_URL), ...getExperienceHandlers(EXPERIENCE_BASE_URL), ...getInsightsHandlers(INSIGHTS_BASE_URL), ) @@ -19,4 +22,7 @@ app.listen(PORT, () => { // eslint-disable-next-line no-console -- no worries console.log(`Mock Insights API running at "${INSIGHTS_BASE_URL}" on port "${PORT}"`) + + // eslint-disable-next-line no-console -- no worries + console.log(`Mock Contentful CDA running at "${CONTENTFUL_BASE_URL}" on port "${PORT}"`) }) diff --git a/lib/mocks/tsconfig.json b/lib/mocks/tsconfig.json index e8de2504..0c88278e 100644 --- a/lib/mocks/tsconfig.json +++ b/lib/mocks/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../../tsconfig.base.json", - "include": ["./*.ts", "./src/**/*", "./src/**/*.json"] + "include": ["./*.ts", "./scripts/**/*", "./src/**/*", "./src/**/*.json"] } diff --git a/platforms/javascript/api-client/package.json b/platforms/javascript/api-client/package.json index 858b7a40..bbd5b9a9 100644 --- a/platforms/javascript/api-client/package.json +++ b/platforms/javascript/api-client/package.json @@ -30,6 +30,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@contentful/optimization-api-schemas": "workspace:*", "es-toolkit": "catalog:", "logger": "workspace:*", "p-retry": "^6.2.1", diff --git a/platforms/javascript/api-client/src/builders/EventBuilder.ts b/platforms/javascript/api-client/src/builders/EventBuilder.ts index 9d83d2f3..419abb05 100644 --- a/platforms/javascript/api-client/src/builders/EventBuilder.ts +++ b/platforms/javascript/api-client/src/builders/EventBuilder.ts @@ -1,22 +1,20 @@ -import { merge } from 'es-toolkit' -import { z } from 'zod/mini' -import type { - ComponentViewEvent, - IdentifyEvent, - PageViewEvent, - TrackEvent, -} from '../experience/dto/event' import { type App, Campaign, type Channel, + type ComponentViewEvent, GeoLocation, + type IdentifyEvent, type Library, Page, + type PageViewEvent, Properties, + type TrackEvent, Traits, -} from '../experience/dto/event/properties' -import type { UniversalEventProperties } from '../experience/dto/event/UniversalEventProperties' + type UniversalEventProperties, +} from '@contentful/optimization-api-schemas' +import { merge } from 'es-toolkit' +import { z } from 'zod/mini' export interface EventBuilderConfig { app?: App diff --git a/platforms/javascript/api-client/src/experience/ExperienceApiClient.test.ts b/platforms/javascript/api-client/src/experience/ExperienceApiClient.test.ts index 17c6b69d..43e4f189 100644 --- a/platforms/javascript/api-client/src/experience/ExperienceApiClient.test.ts +++ b/platforms/javascript/api-client/src/experience/ExperienceApiClient.test.ts @@ -1,9 +1,12 @@ +import { + BatchExperienceResponse, + ExperienceEventArray, + ExperienceResponse, +} from '@contentful/optimization-api-schemas' import { logger } from 'logger' import { http, HttpResponse } from 'msw' import { afterEach, describe, expect, it, vi } from 'vitest' import { server } from '../test/setup' -import { BatchExperienceResponse, ExperienceResponse } from './dto' -import { ExperienceEventArray } from './dto/event' import ExperienceApiClient, { EXPERIENCE_BASE_URL, type ExperienceApiClientConfig, diff --git a/platforms/javascript/api-client/src/experience/ExperienceApiClient.ts b/platforms/javascript/api-client/src/experience/ExperienceApiClient.ts index fb1039cf..5b3e1e97 100644 --- a/platforms/javascript/api-client/src/experience/ExperienceApiClient.ts +++ b/platforms/javascript/api-client/src/experience/ExperienceApiClient.ts @@ -1,14 +1,15 @@ -import { logger } from 'logger' -import ApiClientBase, { type ApiConfig } from '../ApiClientBase' import { BatchExperienceResponse, + ExperienceEventArray, ExperienceResponse, type BatchExperienceData, + type BatchExperienceEventArray, type ExperienceRequestData, type ExperienceRequestOptions, type OptimizationData, -} from './dto' -import { ExperienceEventArray, type BatchExperienceEventArray } from './dto/event' +} from '@contentful/optimization-api-schemas' +import { logger } from 'logger' +import ApiClientBase, { type ApiConfig } from '../ApiClientBase' type Feature = 'ip-enrichment' | 'location' diff --git a/platforms/javascript/api-client/src/experience/index.ts b/platforms/javascript/api-client/src/experience/index.ts index 5bceaaae..08c2f991 100644 --- a/platforms/javascript/api-client/src/experience/index.ts +++ b/platforms/javascript/api-client/src/experience/index.ts @@ -1,6 +1,5 @@ import ExperienceApiClient from './ExperienceApiClient' -export * from './dto' export * from './ExperienceApiClient' export default ExperienceApiClient diff --git a/platforms/javascript/api-client/src/index.ts b/platforms/javascript/api-client/src/index.ts index a229f20c..1d98088c 100644 --- a/platforms/javascript/api-client/src/index.ts +++ b/platforms/javascript/api-client/src/index.ts @@ -1,5 +1,6 @@ import ApiClient from './ApiClient' +export * from '@contentful/optimization-api-schemas' export * from './ApiClient' export * from './ApiClientBase' export * from './builders' diff --git a/platforms/javascript/api-client/src/insights/InsightsApiClient.test.ts b/platforms/javascript/api-client/src/insights/InsightsApiClient.test.ts index 0613ad97..c4f91732 100644 --- a/platforms/javascript/api-client/src/insights/InsightsApiClient.test.ts +++ b/platforms/javascript/api-client/src/insights/InsightsApiClient.test.ts @@ -1,9 +1,9 @@ +import { BatchInsightsEventArray } from '@contentful/optimization-api-schemas' import { logger } from 'logger' import { http, HttpResponse } from 'msw' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import ApiClientBase from '../ApiClientBase' import { server } from '../test/setup' -import { BatchInsightsEventArray } from './dto/event' import InsightsApiClient, { INSIGHTS_BASE_URL, type InsightsApiClientConfig, diff --git a/platforms/javascript/api-client/src/insights/InsightsApiClient.ts b/platforms/javascript/api-client/src/insights/InsightsApiClient.ts index 84ee00b3..8ea2cde5 100644 --- a/platforms/javascript/api-client/src/insights/InsightsApiClient.ts +++ b/platforms/javascript/api-client/src/insights/InsightsApiClient.ts @@ -1,6 +1,6 @@ +import { BatchInsightsEventArray } from '@contentful/optimization-api-schemas' import { logger } from 'logger' import ApiClientBase, { type ApiConfig } from '../ApiClientBase' -import { BatchInsightsEventArray } from './dto/event' interface RequestOptions { /** diff --git a/platforms/javascript/api-client/src/insights/index.ts b/platforms/javascript/api-client/src/insights/index.ts index f200fbad..938f04d6 100644 --- a/platforms/javascript/api-client/src/insights/index.ts +++ b/platforms/javascript/api-client/src/insights/index.ts @@ -1,6 +1,5 @@ import InsightsApiClient from './InsightsApiClient' -export * from './dto' export * from './InsightsApiClient' export default InsightsApiClient diff --git a/platforms/javascript/api-client/tsconfig.cjs.json b/platforms/javascript/api-client/tsconfig.cjs.json index 77e6f081..4e80dc43 100644 --- a/platforms/javascript/api-client/tsconfig.cjs.json +++ b/platforms/javascript/api-client/tsconfig.cjs.json @@ -8,6 +8,7 @@ "moduleResolution": "Node", "noEmit": false, "outDir": "./dist", + "paths": {}, "rootDir": "./src" }, "include": ["./src/**/*", "./src/**/*.json"], diff --git a/platforms/javascript/api-client/tsconfig.esm.json b/platforms/javascript/api-client/tsconfig.esm.json index b1d6016b..cf0c1f85 100644 --- a/platforms/javascript/api-client/tsconfig.esm.json +++ b/platforms/javascript/api-client/tsconfig.esm.json @@ -7,6 +7,7 @@ "moduleResolution": "bundler", "noEmit": false, "outDir": "./dist", + "paths": {}, "rootDir": "./src" }, "include": ["./src/**/*", "./src/**/*.json"], diff --git a/platforms/javascript/api-client/vitest.config.ts b/platforms/javascript/api-client/vitest.config.ts index fd56af2f..e584f0cc 100644 --- a/platforms/javascript/api-client/vitest.config.ts +++ b/platforms/javascript/api-client/vitest.config.ts @@ -1,6 +1,12 @@ +import { resolve } from 'node:path' import { defineConfig } from 'vitest/config' export default defineConfig({ + resolve: { + alias: { + '@contentful/optimization-api-schemas': resolve(__dirname, '../api-schemas/src/'), + }, + }, test: { coverage: { exclude: ['**/test/*'], diff --git a/platforms/javascript/api-schemas/README.md b/platforms/javascript/api-schemas/README.md new file mode 100644 index 00000000..e69de29b diff --git a/platforms/javascript/api-schemas/package.json b/platforms/javascript/api-schemas/package.json new file mode 100644 index 00000000..6616acc5 --- /dev/null +++ b/platforms/javascript/api-schemas/package.json @@ -0,0 +1,41 @@ +{ + "name": "@contentful/optimization-api-schemas", + "version": "1.0.0", + "license": "MIT", + "type": "commonjs", + "main": "./dist/index.cjs", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.cjs" + } + }, + "files": [ + "dist/**/*" + ], + "publishConfig": { + "directory": "dist" + }, + "scripts": { + "build": "pnpm clean; pnpm build:cjs && pnpm build:esm", + "build:cjs": "tsc -p ./tsconfig.cjs.json && pnpm rename:js:cjs", + "build:esm": "tsc -p ./tsconfig.esm.json && pnpm rename:js:mjs", + "clean": "rimraf ./dist tsconfig.tsbuildinfo", + "rename:js:cjs": "find ./dist -type f -name \"*.js\" ! -name \"*.cjs\" -print0 | while IFS= read -r -d '' file; do mv \"$file\" \"${file%.js}.cjs\"; done && find ./dist -type f -name \"*.js.map\" -print0 | while IFS= read -r -d '' file; do mv \"$file\" \"${file%.js.map}.cjs.map\"; done", + "rename:js:mjs": "find ./dist -type f -name \"*.js\" ! -name \"*.mjs\" -print0 | while IFS= read -r -d '' file; do mv \"$file\" \"${file%.js}.mjs\"; done && find ./dist -type f -name \"*.js.map\" -print0 | while IFS= read -r -d '' file; do mv \"$file\" \"${file%.js.map}.mjs.map\"; done", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@contentful/optimization-api-schemas": "workspace:*", + "contentful": "catalog:", + "zod": "catalog:" + }, + "devDependencies": { + "rimraf": "catalog:", + "tslib": "catalog:", + "typescript": "catalog:" + } +} diff --git a/platforms/javascript/core/src/personalization/resolvers/personalized-entry/AudienceEntry.ts b/platforms/javascript/api-schemas/src/contentful/AudienceEntry.ts similarity index 100% rename from platforms/javascript/core/src/personalization/resolvers/personalized-entry/AudienceEntry.ts rename to platforms/javascript/api-schemas/src/contentful/AudienceEntry.ts diff --git a/platforms/javascript/core/src/personalization/resolvers/personalized-entry/Entry.ts b/platforms/javascript/api-schemas/src/contentful/Entry.ts similarity index 100% rename from platforms/javascript/core/src/personalization/resolvers/personalized-entry/Entry.ts rename to platforms/javascript/api-schemas/src/contentful/Entry.ts diff --git a/platforms/javascript/core/src/personalization/resolvers/personalized-entry/PersonalizationConfig.ts b/platforms/javascript/api-schemas/src/contentful/PersonalizationConfig.ts similarity index 100% rename from platforms/javascript/core/src/personalization/resolvers/personalized-entry/PersonalizationConfig.ts rename to platforms/javascript/api-schemas/src/contentful/PersonalizationConfig.ts diff --git a/platforms/javascript/core/src/personalization/resolvers/personalized-entry/PersonalizationEntry.ts b/platforms/javascript/api-schemas/src/contentful/PersonalizationEntry.ts similarity index 100% rename from platforms/javascript/core/src/personalization/resolvers/personalized-entry/PersonalizationEntry.ts rename to platforms/javascript/api-schemas/src/contentful/PersonalizationEntry.ts diff --git a/platforms/javascript/core/src/personalization/resolvers/personalized-entry/PersonalizedEntry.ts b/platforms/javascript/api-schemas/src/contentful/PersonalizedEntry.ts similarity index 100% rename from platforms/javascript/core/src/personalization/resolvers/personalized-entry/PersonalizedEntry.ts rename to platforms/javascript/api-schemas/src/contentful/PersonalizedEntry.ts diff --git a/platforms/javascript/core/src/personalization/resolvers/personalized-entry/index.ts b/platforms/javascript/api-schemas/src/contentful/index.ts similarity index 100% rename from platforms/javascript/core/src/personalization/resolvers/personalized-entry/index.ts rename to platforms/javascript/api-schemas/src/contentful/index.ts diff --git a/platforms/javascript/api-client/src/experience/dto/BatchExperienceResponse.ts b/platforms/javascript/api-schemas/src/experience/BatchExperienceResponse.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/BatchExperienceResponse.ts rename to platforms/javascript/api-schemas/src/experience/BatchExperienceResponse.ts diff --git a/platforms/javascript/api-client/src/experience/dto/ExperienceRequest.ts b/platforms/javascript/api-schemas/src/experience/ExperienceRequest.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/ExperienceRequest.ts rename to platforms/javascript/api-schemas/src/experience/ExperienceRequest.ts diff --git a/platforms/javascript/api-client/src/experience/dto/ExperienceResponse.ts b/platforms/javascript/api-schemas/src/experience/ExperienceResponse.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/ExperienceResponse.ts rename to platforms/javascript/api-schemas/src/experience/ExperienceResponse.ts diff --git a/platforms/javascript/api-client/src/experience/dto/ResponseEnvelope.ts b/platforms/javascript/api-schemas/src/experience/ResponseEnvelope.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/ResponseEnvelope.ts rename to platforms/javascript/api-schemas/src/experience/ResponseEnvelope.ts diff --git a/platforms/javascript/api-client/src/experience/dto/change/Change.ts b/platforms/javascript/api-schemas/src/experience/change/Change.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/change/Change.ts rename to platforms/javascript/api-schemas/src/experience/change/Change.ts diff --git a/platforms/javascript/api-client/src/experience/dto/change/index.ts b/platforms/javascript/api-schemas/src/experience/change/index.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/change/index.ts rename to platforms/javascript/api-schemas/src/experience/change/index.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/AliasEvent.ts b/platforms/javascript/api-schemas/src/experience/event/AliasEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/AliasEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/AliasEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/BatchExperienceEvent.ts b/platforms/javascript/api-schemas/src/experience/event/BatchExperienceEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/BatchExperienceEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/BatchExperienceEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/ComponentViewEvent.ts b/platforms/javascript/api-schemas/src/experience/event/ComponentViewEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/ComponentViewEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/ComponentViewEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/ExperienceEvent.ts b/platforms/javascript/api-schemas/src/experience/event/ExperienceEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/ExperienceEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/ExperienceEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/GroupEvent.ts b/platforms/javascript/api-schemas/src/experience/event/GroupEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/GroupEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/GroupEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/IdentifyEvent.ts b/platforms/javascript/api-schemas/src/experience/event/IdentifyEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/IdentifyEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/IdentifyEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/PageViewEvent.ts b/platforms/javascript/api-schemas/src/experience/event/PageViewEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/PageViewEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/PageViewEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/ScreenEvent.ts b/platforms/javascript/api-schemas/src/experience/event/ScreenEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/ScreenEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/ScreenEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/TrackEvent.ts b/platforms/javascript/api-schemas/src/experience/event/TrackEvent.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/TrackEvent.ts rename to platforms/javascript/api-schemas/src/experience/event/TrackEvent.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/UniversalEventProperties.ts b/platforms/javascript/api-schemas/src/experience/event/UniversalEventProperties.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/UniversalEventProperties.ts rename to platforms/javascript/api-schemas/src/experience/event/UniversalEventProperties.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/index.ts b/platforms/javascript/api-schemas/src/experience/event/index.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/index.ts rename to platforms/javascript/api-schemas/src/experience/event/index.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/App.ts b/platforms/javascript/api-schemas/src/experience/event/properties/App.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/App.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/App.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/Campaign.ts b/platforms/javascript/api-schemas/src/experience/event/properties/Campaign.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/Campaign.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/Campaign.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/Channel.ts b/platforms/javascript/api-schemas/src/experience/event/properties/Channel.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/Channel.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/Channel.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/GeoLocation.ts b/platforms/javascript/api-schemas/src/experience/event/properties/GeoLocation.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/GeoLocation.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/GeoLocation.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/Library.ts b/platforms/javascript/api-schemas/src/experience/event/properties/Library.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/Library.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/Library.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/Page.ts b/platforms/javascript/api-schemas/src/experience/event/properties/Page.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/Page.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/Page.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/Properties.ts b/platforms/javascript/api-schemas/src/experience/event/properties/Properties.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/Properties.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/Properties.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/Query.ts b/platforms/javascript/api-schemas/src/experience/event/properties/Query.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/Query.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/Query.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/Traits.ts b/platforms/javascript/api-schemas/src/experience/event/properties/Traits.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/Traits.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/Traits.ts diff --git a/platforms/javascript/api-client/src/experience/dto/event/properties/index.ts b/platforms/javascript/api-schemas/src/experience/event/properties/index.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/event/properties/index.ts rename to platforms/javascript/api-schemas/src/experience/event/properties/index.ts diff --git a/platforms/javascript/api-client/src/experience/dto/index.ts b/platforms/javascript/api-schemas/src/experience/index.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/index.ts rename to platforms/javascript/api-schemas/src/experience/index.ts diff --git a/platforms/javascript/api-client/src/experience/dto/personalization/SelectedPersonalizations.ts b/platforms/javascript/api-schemas/src/experience/personalization/SelectedPersonalizations.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/personalization/SelectedPersonalizations.ts rename to platforms/javascript/api-schemas/src/experience/personalization/SelectedPersonalizations.ts diff --git a/platforms/javascript/api-client/src/experience/dto/personalization/index.ts b/platforms/javascript/api-schemas/src/experience/personalization/index.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/personalization/index.ts rename to platforms/javascript/api-schemas/src/experience/personalization/index.ts diff --git a/platforms/javascript/api-client/src/experience/dto/profile/Profile.ts b/platforms/javascript/api-schemas/src/experience/profile/Profile.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/profile/Profile.ts rename to platforms/javascript/api-schemas/src/experience/profile/Profile.ts diff --git a/platforms/javascript/api-client/src/experience/dto/profile/index.ts b/platforms/javascript/api-schemas/src/experience/profile/index.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/profile/index.ts rename to platforms/javascript/api-schemas/src/experience/profile/index.ts diff --git a/platforms/javascript/api-client/src/experience/dto/profile/properties/SessionStatistics.ts b/platforms/javascript/api-schemas/src/experience/profile/properties/SessionStatistics.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/profile/properties/SessionStatistics.ts rename to platforms/javascript/api-schemas/src/experience/profile/properties/SessionStatistics.ts diff --git a/platforms/javascript/api-client/src/experience/dto/profile/properties/index.ts b/platforms/javascript/api-schemas/src/experience/profile/properties/index.ts similarity index 100% rename from platforms/javascript/api-client/src/experience/dto/profile/properties/index.ts rename to platforms/javascript/api-schemas/src/experience/profile/properties/index.ts diff --git a/platforms/javascript/api-schemas/src/index.ts b/platforms/javascript/api-schemas/src/index.ts new file mode 100644 index 00000000..b10470f7 --- /dev/null +++ b/platforms/javascript/api-schemas/src/index.ts @@ -0,0 +1,3 @@ +export * from './contentful' +export * from './experience' +export * from './insights' diff --git a/platforms/javascript/api-client/src/insights/dto/event/BatchInsightsEvent.ts b/platforms/javascript/api-schemas/src/insights/event/BatchInsightsEvent.ts similarity index 87% rename from platforms/javascript/api-client/src/insights/dto/event/BatchInsightsEvent.ts rename to platforms/javascript/api-schemas/src/insights/event/BatchInsightsEvent.ts index f463966a..280311b7 100644 --- a/platforms/javascript/api-client/src/insights/dto/event/BatchInsightsEvent.ts +++ b/platforms/javascript/api-schemas/src/insights/event/BatchInsightsEvent.ts @@ -1,5 +1,5 @@ import { z } from 'zod/mini' -import { Profile } from '../../../experience/dto/profile' +import { Profile } from '../../experience/profile' import { InsightsEventArray } from './InsightsEvent' export const BatchInsightsEvent = z.object({ diff --git a/platforms/javascript/api-client/src/insights/dto/event/InsightsEvent.ts b/platforms/javascript/api-schemas/src/insights/event/InsightsEvent.ts similarity index 81% rename from platforms/javascript/api-client/src/insights/dto/event/InsightsEvent.ts rename to platforms/javascript/api-schemas/src/insights/event/InsightsEvent.ts index c9269927..eea9fdac 100644 --- a/platforms/javascript/api-client/src/insights/dto/event/InsightsEvent.ts +++ b/platforms/javascript/api-schemas/src/insights/event/InsightsEvent.ts @@ -1,5 +1,5 @@ import { z } from 'zod/mini' -import { ComponentViewEvent } from '../../../experience/dto/event' +import { ComponentViewEvent } from '../../experience/event' export const InsightsEvent = z.discriminatedUnion('type', [ComponentViewEvent]) export type InsightsEvent = z.infer diff --git a/platforms/javascript/api-client/src/insights/dto/event/index.ts b/platforms/javascript/api-schemas/src/insights/event/index.ts similarity index 100% rename from platforms/javascript/api-client/src/insights/dto/event/index.ts rename to platforms/javascript/api-schemas/src/insights/event/index.ts diff --git a/platforms/javascript/api-client/src/insights/dto/index.ts b/platforms/javascript/api-schemas/src/insights/index.ts similarity index 100% rename from platforms/javascript/api-client/src/insights/dto/index.ts rename to platforms/javascript/api-schemas/src/insights/index.ts diff --git a/platforms/javascript/api-schemas/tsconfig.cjs.json b/platforms/javascript/api-schemas/tsconfig.cjs.json new file mode 100644 index 00000000..4e80dc43 --- /dev/null +++ b/platforms/javascript/api-schemas/tsconfig.cjs.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "declaration": false, + "declarationMap": false, + "emitDeclarationOnly": false, + "module": "CommonJS", + "moduleResolution": "Node", + "noEmit": false, + "outDir": "./dist", + "paths": {}, + "rootDir": "./src" + }, + "include": ["./src/**/*", "./src/**/*.json"], + "exclude": ["./src/**/*.test.*", "./src/test/**/*"] +} diff --git a/platforms/javascript/api-schemas/tsconfig.esm.json b/platforms/javascript/api-schemas/tsconfig.esm.json new file mode 100644 index 00000000..cf0c1f85 --- /dev/null +++ b/platforms/javascript/api-schemas/tsconfig.esm.json @@ -0,0 +1,15 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "module": "ESNext", + "moduleResolution": "bundler", + "noEmit": false, + "outDir": "./dist", + "paths": {}, + "rootDir": "./src" + }, + "include": ["./src/**/*", "./src/**/*.json"], + "exclude": ["./src/**/*.test.*", "./src/test/**/*"] +} diff --git a/platforms/javascript/api-schemas/tsconfig.json b/platforms/javascript/api-schemas/tsconfig.json new file mode 100644 index 00000000..8eb42c10 --- /dev/null +++ b/platforms/javascript/api-schemas/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../../tsconfig.base.json", + "include": ["./src/**/*", "./src/**/*.json"] +} diff --git a/platforms/javascript/core/package.json b/platforms/javascript/core/package.json index b4157ea5..33970a05 100644 --- a/platforms/javascript/core/package.json +++ b/platforms/javascript/core/package.json @@ -32,10 +32,10 @@ "dependencies": { "@contentful/optimization-api-client": "workspace:*", "@preact/signals-core": "catalog:", - "contentful": "^11.7.19", + "contentful": "catalog:", "es-toolkit": "catalog:", "logger": "workspace:*", - "p-retry": "^6.2.1", + "p-retry": "catalog:", "zod": "catalog:" }, "devDependencies": { diff --git a/platforms/javascript/core/src/personalization/Personalization.ts b/platforms/javascript/core/src/personalization/Personalization.ts index 3094c381..9c0b389d 100644 --- a/platforms/javascript/core/src/personalization/Personalization.ts +++ b/platforms/javascript/core/src/personalization/Personalization.ts @@ -59,6 +59,14 @@ class Personalization extends ProductBase implements ConsentGua return flagsSignal.value } + reset(): void { + batch(() => { + changesSignal.value = undefined + profileSignal.value = undefined + personalizationsSignal.value = undefined + }) + } + personalizeEntry(entry: Entry): Entry { return PersonalizedEntryResolver.resolve(entry) } diff --git a/platforms/javascript/core/src/personalization/resolvers/PersonalizedEntryResolver.ts b/platforms/javascript/core/src/personalization/resolvers/PersonalizedEntryResolver.ts index 6906ae7f..b6b3e8ca 100644 --- a/platforms/javascript/core/src/personalization/resolvers/PersonalizedEntryResolver.ts +++ b/platforms/javascript/core/src/personalization/resolvers/PersonalizedEntryResolver.ts @@ -1,7 +1,3 @@ -import type { SelectedPersonalizationArray } from '@contentful/optimization-api-client' -import type { Entry } from 'contentful' -import { logger } from 'logger' -import { personalizations as personalizationsSignal } from '../../signals' import { type EntryReplacementComponent, type EntryReplacementVariant, @@ -11,7 +7,11 @@ import { isPersonalizedEntry, type PersonalizationEntry, type PersonalizedEntry, -} from './personalized-entry' + type SelectedPersonalizationArray, +} from '@contentful/optimization-api-client' +import type { Entry } from 'contentful' +import { logger } from 'logger' +import { personalizations as personalizationsSignal } from '../../signals' const RESOLUTION_WARNING_BASE = '[Personalization] Could not resolve personalized entry variant:' @@ -125,11 +125,9 @@ const PersonalizedEntryResolver = { return selectedVariantEntry }, - resolve(entry: Entry): Entry { + resolve(entry: Entry, personalizations = personalizationsSignal.value): Entry { logger.info('[Personalization] Resolving personalized entry for baseline entry', entry.sys.id) - const { value: personalizations } = personalizationsSignal - if (!personalizations?.length) { logger.warn(RESOLUTION_WARNING_BASE, 'no personalizations exist for the current profile') return entry diff --git a/platforms/javascript/core/vitest.config.ts b/platforms/javascript/core/vitest.config.ts index 96c9d17d..473770ab 100644 --- a/platforms/javascript/core/vitest.config.ts +++ b/platforms/javascript/core/vitest.config.ts @@ -5,6 +5,7 @@ export default defineConfig({ resolve: { alias: { '@contentful/optimization-api-client': resolve(__dirname, '../api-client/src/'), + '@contentful/optimization-api-schemas': resolve(__dirname, '../api-schemas/src/'), }, }, test: { diff --git a/platforms/javascript/node/vitest.config.ts b/platforms/javascript/node/vitest.config.ts index f80a32d5..ef516824 100644 --- a/platforms/javascript/node/vitest.config.ts +++ b/platforms/javascript/node/vitest.config.ts @@ -1,11 +1,12 @@ -import path from 'node:path' +import { resolve } from 'node:path' import { defineConfig } from 'vitest/config' export default defineConfig({ resolve: { alias: { - '@contentful/optimization-api-client': path.resolve(__dirname, '../api-client/src/'), - '@contentful/optimization-core': path.resolve(__dirname, '../core/src/'), + '@contentful/optimization-api-client': resolve(__dirname, '../api-client/src/'), + '@contentful/optimization-api-schemas': resolve(__dirname, '../api-schemas/src/'), + '@contentful/optimization-core': resolve(__dirname, '../core/src/'), }, }, test: { diff --git a/platforms/javascript/react-native/vitest.config.ts b/platforms/javascript/react-native/vitest.config.ts index b7c6652a..f731cc88 100644 --- a/platforms/javascript/react-native/vitest.config.ts +++ b/platforms/javascript/react-native/vitest.config.ts @@ -1,10 +1,12 @@ -import path from 'node:path' +import { resolve } from 'node:path' import { defineConfig } from 'vitest/config' export default defineConfig({ resolve: { alias: { - '@contentful/optimization-core': path.resolve(__dirname, '../core/src/index.ts'), + '@contentful/optimization-api-client': resolve(__dirname, '../api-client/src/'), + '@contentful/optimization-api-schemas': resolve(__dirname, '../api-schemas/src/'), + '@contentful/optimization-core': resolve(__dirname, '../core/src/index.ts'), }, }, test: { diff --git a/platforms/javascript/web/.env.example b/platforms/javascript/web/.env.example index e980e94b..eb49fa29 100644 --- a/platforms/javascript/web/.env.example +++ b/platforms/javascript/web/.env.example @@ -5,3 +5,8 @@ VITE_CONTENTFUL_TOKEN= VITE_CONTENTFUL_PREVIEW_TOKEN= VITE_CONTENTFUL_ENVIRONMENT= VITE_CONTENTFUL_SPACE_ID= + +VITE_EXPERIENCE_API_BASE_URL= +VITE_INSIGHTS_API_BASE_URL= +VITE_CONTENTFUL_CDA_HOST= +VITE_CONTENTFUL_BASE_PATH= diff --git a/platforms/javascript/web/index.html b/platforms/javascript/web/index.html index b27065ea..99dbb996 100644 --- a/platforms/javascript/web/index.html +++ b/platforms/javascript/web/index.html @@ -97,6 +97,9 @@ accessToken: '%VITE_CONTENTFUL_TOKEN%', environment: '%VITE_CONTENTFUL_ENVIRONMENT%', space: '%VITE_CONTENTFUL_SPACE_ID%', + host: '%VITE_CONTENTFUL_CDA_HOST%', + basePath: '%VITE_CONTENTFUL_BASE_PATH%', + insecure: Boolean('%VITE_CONTENTFUL_CDA_HOST%'), }) const form = document.querySelector('#entry-form') @@ -144,17 +147,11 @@ include: 10, }) } catch (error) { - console.error(error) - - if (showError) - document - .querySelector('#entries') - .prepend( - createDetailsDialog( - `Invalid entry: "${entryId}"`, - 'The entry ID is either wrong, belongs to a different environment, or does not apply to the current profile.', - ), - ) + const message = `Irrelevant entry: "${entryId}" The entry ID is either wrong, belongs to a different environment, or does not apply to the current profile.` + + console.warn(message) + + if (showError) document.querySelector('#entries').prepend(createDetailsDialog(message)) return } @@ -196,15 +193,17 @@ 2, ) - personalizations.forEach((personalization) => { - if (!personalization?.variants) return + Promise.all( + personalizations?.map(async (personalization) => { + if (!personalization?.variants) return - const baselines = Object.keys(personalization.variants) + const baselines = Object.keys(personalization.variants) - if (!baselines.length) return + if (!baselines.length) return - addPersonalizedEntry(baselines[0]) - }) + await addPersonalizedEntry(baselines[0]) + }) ?? [], + ) }) diff --git a/platforms/javascript/web/vite.config.ts b/platforms/javascript/web/vite.config.ts index dc5041aa..15d1501b 100644 --- a/platforms/javascript/web/vite.config.ts +++ b/platforms/javascript/web/vite.config.ts @@ -8,6 +8,7 @@ export default defineConfig({ resolve: { alias: { '@contentful/optimization-api-client': resolve(__dirname, '../api-client/src/'), + '@contentful/optimization-api-schemas': resolve(__dirname, '../api-schemas/src/'), '@contentful/optimization-core': resolve(__dirname, '../core/src/'), }, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b435a7a..f2e1c0c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,6 +12,9 @@ catalogs: '@vitest/coverage-v8': specifier: ^3.2.4 version: 3.2.4 + contentful: + specifier: ^11.7.19 + version: 11.8.5 dotenv: specifier: ^17.2.2 version: 17.2.2 @@ -21,6 +24,9 @@ catalogs: msw: specifier: ^2.10.5 version: 2.10.5 + p-retry: + specifier: ^7.1.0 + version: 7.1.0 pm2: specifier: ^6.0.13 version: 6.0.13 @@ -194,9 +200,9 @@ importers: lib/mocks: dependencies: - '@contentful/optimization-core': + '@contentful/optimization-api-schemas': specifier: workspace:* - version: link:../../platforms/javascript/core/dist + version: link:../../platforms/javascript/api-schemas/dist '@mswjs/http-middleware': specifier: 0.10.3 version: 0.10.3(msw@2.10.5(@types/node@24.2.0)(typescript@5.9.2)) @@ -207,12 +213,30 @@ importers: specifier: 'catalog:' version: 2.8.1 devDependencies: + '@types/fs-extra': + specifier: ^11.0.4 + version: 11.0.4 '@types/node': specifier: ^24.0.13 version: 24.2.0 + contentful: + specifier: 'catalog:' + version: 11.8.5 + contentful-cli: + specifier: ^3.9.4 + version: 3.9.4(enquirer@2.3.6)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@17.21.3(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-promise@7.2.1(eslint@8.57.1)) dotenv: specifier: 'catalog:' version: 17.2.2 + es-toolkit: + specifier: 'catalog:' + version: 1.39.10 + fs-extra: + specifier: ^11.3.2 + version: 11.3.2 + p-retry: + specifier: 'catalog:' + version: 7.1.0 tsx: specifier: 'catalog:' version: 4.20.3 @@ -222,6 +246,9 @@ importers: platforms/javascript/api-client: dependencies: + '@contentful/optimization-api-schemas': + specifier: workspace:* + version: link:../api-schemas/dist es-toolkit: specifier: 'catalog:' version: 1.39.10 @@ -258,6 +285,29 @@ importers: version: 3.2.4(@types/node@24.2.0)(happy-dom@20.0.2)(jiti@2.5.1)(msw@2.10.5(@types/node@24.2.0)(typescript@5.9.2))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1) publishDirectory: dist + platforms/javascript/api-schemas: + dependencies: + '@contentful/optimization-api-schemas': + specifier: workspace:* + version: link:dist + contentful: + specifier: 'catalog:' + version: 11.8.5 + zod: + specifier: 'catalog:' + version: 4.1.5 + devDependencies: + rimraf: + specifier: 'catalog:' + version: 6.0.1 + tslib: + specifier: 'catalog:' + version: 2.8.1 + typescript: + specifier: ^5.8.3 + version: 5.9.2 + publishDirectory: dist + platforms/javascript/core: dependencies: '@contentful/optimization-api-client': @@ -267,7 +317,7 @@ importers: specifier: 'catalog:' version: 1.12.1 contentful: - specifier: ^11.7.19 + specifier: 'catalog:' version: 11.8.5 es-toolkit: specifier: 'catalog:' @@ -276,8 +326,8 @@ importers: specifier: workspace:* version: link:../../../lib/logger p-retry: - specifier: ^6.2.1 - version: 6.2.1 + specifier: 'catalog:' + version: 7.1.0 zod: specifier: 'catalog:' version: 4.1.5 @@ -338,7 +388,7 @@ importers: version: link:../core/dist '@react-native-async-storage/async-storage': specifier: ^2.1.0 - version: 2.2.0(react-native@0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1)) + version: 2.2.0(react-native@0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1)) es-toolkit: specifier: 'catalog:' version: 1.39.10 @@ -347,7 +397,7 @@ importers: version: 18.3.1 react-native: specifier: ^0.76.6 - version: 0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1) + version: 0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1) zod: specifier: 'catalog:' version: 4.1.5 @@ -1134,6 +1184,10 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@commitlint/config-validator@19.8.1': resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==} engines: {node: '>=v18'} @@ -1154,6 +1208,10 @@ packages: resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==} engines: {node: '>=v18'} + '@contentful/app-action-utils@1.4.1': + resolution: {integrity: sha512-jsoA8832fgZj+KGl67k3GZKQDWCxY47p42nJuDpiAnaKRCvWXLo7zY+pQLWvS66OU4OyfwZnwZoBOZ6yu+Jr+w==} + engines: {node: '>=16.13'} + '@contentful/content-source-maps@0.11.36': resolution: {integrity: sha512-J83SuySGJN6WdxBnprfpZRbvZ11q+0CxI7kyjFKC49XN7RzwlACMTIkB4bcKQ9j5sQTrfCoYs7QHiHXBCioyLg==} @@ -1161,6 +1219,10 @@ packages: resolution: {integrity: sha512-q18RJuJCOuYveGiCIjE5xLCQc5lZ3L2Qgxrlg/H2YEobDFqdtmklazRi1XwEWaK3tMg6yVXBzKKkQfLB4qW14A==} engines: {node: '>=6.0.0'} + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} + '@esbuild/aix-ppc64@0.25.8': resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} @@ -1339,10 +1401,18 @@ packages: resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@9.32.0': resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1358,6 +1428,32 @@ packages: '@gerrit0/mini-shiki@3.9.2': resolution: {integrity: sha512-Tvsj+AOO4Z8xLRJK900WkyfxHsZQu+Zm1//oT1w443PO6RiYMoq/4NGOhaNuZoUMYsjKIAPVQ6eOFMddj6yphQ==} + '@hapi/address@5.1.1': + resolution: {integrity: sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==} + engines: {node: '>=14.0.0'} + + '@hapi/formula@3.0.2': + resolution: {integrity: sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==} + + '@hapi/hoek@11.0.7': + resolution: {integrity: sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==} + + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/pinpoint@2.0.1': + resolution: {integrity: sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==} + + '@hapi/tlds@1.1.3': + resolution: {integrity: sha512-QIvUMB5VZ8HMLZF9A2oWr3AFM430QC8oGd0L35y2jHpuW6bIIca6x/xL7zUf4J7L9WJ3qjz+iJII8ncaeMbpSg==} + engines: {node: '>=14.0.0'} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@hapi/topo@6.0.2': + resolution: {integrity: sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==} + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -1366,10 +1462,19 @@ packages: resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} @@ -1421,6 +1526,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@isaacs/ttlcache@1.4.1': resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} @@ -1550,62 +1659,62 @@ packages: peerDependencies: react-native: ^0.0.0-0 || >=0.65 <1.0 - '@react-native/assets-registry@0.76.6': - resolution: {integrity: sha512-YI8HoReYiIwdFQs+k9Q9qpFTnsyYikZxgs/UVtVbhKixXDQF6F9LLvj2naOx4cfV+RGybNKxwmDl1vUok/dRFQ==} + '@react-native/assets-registry@0.76.9': + resolution: {integrity: sha512-pN0Ws5xsjWOZ8P37efh0jqHHQmq+oNGKT4AyAoKRpxBDDDmlAmpaYjer9Qz7PpDKF+IUyRjF/+rBsM50a8JcUg==} engines: {node: '>=18'} - '@react-native/babel-plugin-codegen@0.76.6': - resolution: {integrity: sha512-yFC9I/aDBOBz3ZMlqKn2NY/mDUtCksUNZ7AQmBiTAeVTUP0ujEjE0hTOx5Qd+kok7A7hwZEX87HdSgjiJZfr5g==} + '@react-native/babel-plugin-codegen@0.76.9': + resolution: {integrity: sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==} engines: {node: '>=18'} - '@react-native/babel-preset@0.76.6': - resolution: {integrity: sha512-ojlVWY6S/VE/nb9hIRetPMTsW9ZmGb2R3dnToEXAtQQDz41eHMHXbkw/k2h0THp6qhas25ruNvn3N5n2o+lBzg==} + '@react-native/babel-preset@0.76.9': + resolution: {integrity: sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' - '@react-native/codegen@0.76.6': - resolution: {integrity: sha512-BABb3e5G/+hyQYEYi0AODWh2km2d8ERoASZr6Hv90pVXdUHRYR+yxCatX7vSd9rnDUYndqRTzD0hZWAucPNAKg==} + '@react-native/codegen@0.76.9': + resolution: {integrity: sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==} engines: {node: '>=18'} peerDependencies: '@babel/preset-env': ^7.1.6 - '@react-native/community-cli-plugin@0.76.6': - resolution: {integrity: sha512-nETlc/+U5cESVluzzgN0OcVfcoMijGBaDWzOaJhoYUodcuqnqtu75XsSEc7yzlYjwNQG+vF83mu9CQGezruNMA==} + '@react-native/community-cli-plugin@0.76.9': + resolution: {integrity: sha512-08jx8ixCjjd4jNQwNpP8yqrjrDctN2qvPPlf6ebz1OJQk8e1sbUl3wVn1zhhMvWrYcaraDnatPb5uCPq+dn3NQ==} engines: {node: '>=18'} peerDependencies: - '@react-native-community/cli-server-api': '*' + '@react-native-community/cli': '*' peerDependenciesMeta: - '@react-native-community/cli-server-api': + '@react-native-community/cli': optional: true - '@react-native/debugger-frontend@0.76.6': - resolution: {integrity: sha512-kP97xMQjiANi5/lmf8MakS7d8FTJl+BqYHQMqyvNiY+eeWyKnhqW2GL2v3eEUBAuyPBgJGivuuO4RvjZujduJg==} + '@react-native/debugger-frontend@0.76.9': + resolution: {integrity: sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==} engines: {node: '>=18'} - '@react-native/dev-middleware@0.76.6': - resolution: {integrity: sha512-1bAyd2/X48Nzb45s5l2omM75vy764odx/UnDs4sJfFCuK+cupU4nRPgl0XWIqgdM/2+fbQ3E4QsVS/WIKTFxvQ==} + '@react-native/dev-middleware@0.76.9': + resolution: {integrity: sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==} engines: {node: '>=18'} - '@react-native/gradle-plugin@0.76.6': - resolution: {integrity: sha512-sDzpf4eiynryoS6bpYCweGoxSmWgCSx9lzBoxIIW+S6siyGiTaffzZHWCm8mIn9UZsSPlEO37q62ggnR9Zu/OA==} + '@react-native/gradle-plugin@0.76.9': + resolution: {integrity: sha512-uGzp3dL4GfNDz+jOb8Nik1Vrfq1LHm0zESizrGhHACFiFlUSflVAnWuUAjlZlz5XfLhzGVvunG4Vdrpw8CD2ng==} engines: {node: '>=18'} - '@react-native/js-polyfills@0.76.6': - resolution: {integrity: sha512-cDD7FynxWYxHkErZzAJtzPGhJ13JdOgL+R0riTh0hCovOfIUz9ItffdLQv2nx48lnvMTQ+HZXMnGOZnsFCNzQw==} + '@react-native/js-polyfills@0.76.9': + resolution: {integrity: sha512-s6z6m8cK4SMjIX1hm8LT187aQ6//ujLrjzDBogqDCYXRbfjbAYovw5as/v2a2rhUIyJbS3UjokZm3W0H+Oh/RQ==} engines: {node: '>=18'} - '@react-native/metro-babel-transformer@0.76.6': - resolution: {integrity: sha512-xSBi9jPliThu5HRSJvluqUlDOLLEmf34zY/U7RDDjEbZqC0ufPcPS7c5XsSg0GDPiXc7lgjBVesPZsKFkoIBgA==} + '@react-native/metro-babel-transformer@0.76.9': + resolution: {integrity: sha512-HGq11347UHNiO/NvVbAO35hQCmH8YZRs7in7nVq7SL99pnpZK4WXwLdAXmSuwz5uYqOuwnKYDlpadz8fkE94Mg==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' - '@react-native/normalize-colors@0.76.6': - resolution: {integrity: sha512-1n4udXH2Cla31iA/8eLRdhFHpYUYK1NKWCn4m1Sr9L4SarWKAYuRFliK1fcLvPPALCFoFlWvn8I0ekdUOHMzDQ==} + '@react-native/normalize-colors@0.76.9': + resolution: {integrity: sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==} - '@react-native/virtualized-lists@0.76.6': - resolution: {integrity: sha512-0HUWVwJbRq1BWFOu11eOWGTSmK9nMHhoMPyoI27wyWcl/nqUx7HOxMbRVq0DsTCyATSMPeF+vZ6o1REapcNWKw==} + '@react-native/virtualized-lists@0.76.9': + resolution: {integrity: sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw==} engines: {node: '>=18'} peerDependencies: '@types/react': ^18.2.6 @@ -1718,6 +1827,18 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@samverschueren/stream-to-observable@0.3.1': + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zen-observable: + optional: true + '@shikijs/engine-oniguruma@3.9.2': resolution: {integrity: sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==} @@ -1733,6 +1854,15 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -1742,6 +1872,9 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -1787,6 +1920,9 @@ packages: '@types/express@5.0.3': resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1814,6 +1950,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} @@ -1936,6 +2075,9 @@ packages: resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@vercel/stega@0.1.2': resolution: {integrity: sha512-P7mafQXjkrsoyTRppnt0N21udKS9wUmLXHRyP9saLXLHw32j/FgUJ3FscSWgvSqRs4cj7wKZtwqJEvWJ2jbGmA==} @@ -1977,6 +2119,9 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@yarnpkg/lockfile@1.1.0': + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1999,6 +2144,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -2007,6 +2156,10 @@ packages: resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -2022,10 +2175,17 @@ packages: anser@1.4.10: resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@1.4.0: + resolution: {integrity: sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==} + engines: {node: '>=0.10.0'} + ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} engines: {node: '>=4'} @@ -2038,10 +2198,18 @@ packages: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + ansi-regex@3.0.1: resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} engines: {node: '>=4'} + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2050,6 +2218,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -2066,10 +2238,28 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + ansis@4.0.0-node10: resolution: {integrity: sha512-BRrU0Bo1X9dFGw6KgGz6hWrqQuOlVEDOzkb0QSLZY9sXHqA7pNj7yHPVJRz7y/rj4EOJ3d/D5uxH+ee9leYgsg==} engines: {node: '>=10'} + any-observable@0.3.0: + resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zenObservable: '*' + peerDependenciesMeta: + rxjs: + optional: true + zenObservable: + optional: true + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -2118,13 +2308,29 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} + ast-types@0.14.2: + resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} + engines: {node: '>=4'} + ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + ast-types@0.7.8: + resolution: {integrity: sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==} + engines: {node: '>= 0.6'} + ast-v8-to-istanbul@0.3.4: resolution: {integrity: sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==} + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} @@ -2212,14 +2418,18 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.14: - resolution: {integrity: sha512-GM9c0cWWR8Ga7//Ves/9KRgTS8nLausCkP3CGiFLrnwA2CDUluXgaQqvrULoR2Ujrd/mz/lkX87F5BHFsNr5sQ==} + baseline-browser-mapping@2.8.18: + resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==} hasBin: true basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} + bfj@8.0.0: + resolution: {integrity: sha512-6KJe4gFrZ4lhmvWcUIj37yFAs36mi2FZXuTkw6udZ/QsX/znFypW4SatqcLA5K5T4BAWgJZD73UFEJJQxuJjoA==} + engines: {node: '>= 18.0.0'} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -2227,6 +2437,9 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + bodec@0.1.0: resolution: {integrity: sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ==} @@ -2238,6 +2451,10 @@ packages: resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} engines: {node: '>=18'} + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -2256,6 +2473,9 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -2310,13 +2530,28 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001749: - resolution: {integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==} + camelo@1.2.2: + resolution: {integrity: sha512-4HmYiO74VXQM6NFE2euk2p/6hBJeYDDf6k3ZMIvTCWhoAm6RvUiWkhxjkJsztcqEYt7g/jgr5en6R/TPaFccXw==} + + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} + + cardinal@2.1.1: + resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true chai@5.2.1: resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} engines: {node: '>=18'} + chalk@1.1.1: + resolution: {integrity: sha512-W10W+QfIxJlTm3VRtg8eafwUBkDfUPFvRvPv4jCD9vF4+HzlAyXJ7P3Y5yw/r+gJ1TzFEU6oFqMgp1dIVpYr0A==} + engines: {node: '>=0.10.0'} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2346,10 +2581,17 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + check-types@11.2.3: + resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + chrome-launcher@0.15.2: resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} engines: {node: '>=12.13.0'} @@ -2365,6 +2607,22 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + cli-cursor@1.0.2: + resolution: {integrity: sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==} + engines: {node: '>=0.10.0'} + + cli-cursor@2.0.0: + resolution: {integrity: sha512-ywUurX98mpNoTE8LvXv6Tntx9uUuMiQ9LyoiVL7XFcb4hyYbxW80xQ5iF/k61SeTLBdVslOPgoLCL5tlvgXpsw==} + engines: {node: '>=4'} + cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} engines: {node: '>=4'} @@ -2377,14 +2635,31 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + cli-tableau@2.0.1: resolution: {integrity: sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==} engines: {node: '>=8.10.0'} + cli-truncate@0.2.1: + resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} + engines: {node: '>=0.10.0'} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -2400,10 +2675,23 @@ packages: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} + cliui@5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + clone-deep@4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} @@ -2412,6 +2700,10 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + code-point-at@1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -2432,6 +2724,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -2460,6 +2755,10 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + connect@3.7.0: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} @@ -2476,6 +2775,41 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + contentful-batch-libs@10.1.1: + resolution: {integrity: sha512-T+czEYjS4eTvcrx4GWiGQObowHNPNNaSJQKjjdtXh121+zrv96xj+6ogrWp84BNgi90/9Dyj8EWLq4u5mbynzA==} + engines: {node: '>=18'} + + contentful-batch-libs@9.7.0: + resolution: {integrity: sha512-nNAycOJIvo2arHbXIgsF1I8xXXJtnTooGJaHwfamFeuXbyp1q5NlNbHYGqWVR5vQjLJsuk48VExLbpa26T9C9g==} + engines: {node: '>=18'} + + contentful-cli@3.9.4: + resolution: {integrity: sha512-UWT/dOzn6FDMVxbzJnYVXzkp+UUZXypvHxLRny9F+UishkHo3qCFwlbT9UoUJOgDQgPh52Ng30XclaN1Owc/wQ==} + engines: {node: '>=18'} + hasBin: true + + contentful-collection@0.0.4: + resolution: {integrity: sha512-AvrnEeMTJtRy9SeuHrLbk/bntLwEE9FrhPfFcBp08md0Nz3N7a2+SmZgF5ZTyBRVc9pHjg+Fg6+O5c9q7Tj5HQ==} + + contentful-export@7.21.91: + resolution: {integrity: sha512-sg8QdAEwhGWax79L+RNg2GIP3r3MpvG20eOxkMrGsqaBFDh8GPNGz9UhN0ByV0AyQTEGK8xZH6C3QNLR1ilj9Q==} + engines: {node: '>=18'} + hasBin: true + + contentful-import@9.4.122: + resolution: {integrity: sha512-IH4x3286e6IS2grnI4+YbZ4V5mmZ95ngX58PaeiY7xrd7Nfptfb46tG/jXrb/ICvc+6WxT9UHmJlgveGx7pB6g==} + engines: {node: '>=18'} + hasBin: true + + contentful-management@11.60.4: + resolution: {integrity: sha512-sfdth9Tg6v/yH6o2NwctTXilyn6dN5ITGm4REk2FIiYgK06BqcUYvqT9KljPoL+aHjB6mE9qzarzxZHISnOXaA==} + engines: {node: '>=18'} + + contentful-migration@4.31.5: + resolution: {integrity: sha512-iwW7UEqv6CeZLGRKCU0gKqZRkT4dCKrFDOhFtIInaRw5DExy12unGbfvoeAKRN7OPY9JFwoe8qGQOyow1XIk+Q==} + engines: {node: '>=8.0.0'} + hasBin: true + contentful-resolve-response@1.9.4: resolution: {integrity: sha512-8qu2dM2IMoVQhBhp81BVGB9ISantPmPTZ3EELGxuM8e/t+jSe+xmsVk5yHE+a9AYMBKSwgupBnkjGZE4RzFowQ==} engines: {node: '>=4.7.2'} @@ -2512,8 +2846,11 @@ packages: cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} - core-js-compat@3.45.1: - resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} + core-js-compat@3.46.0: + resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} cosmiconfig-typescript-loader@5.0.0: resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} @@ -2581,6 +2918,16 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} + date-fns@1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} + + date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + dayjs@1.11.15: resolution: {integrity: sha512-MC+DfnSWiM9APs7fpiurHGCoeIx0Gdl6QZBy+5lu8MbYKN5FZEXqOgrundfibdfhGZ15o9hzmZ2xJjZnbvgKXQ==} @@ -2630,6 +2977,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dedent@0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} @@ -2685,10 +3036,18 @@ packages: diary@0.4.5: resolution: {integrity: sha512-dUtG/AVG5bt9Mi+23TgTvjZ0NDJaszjs1GpYooM5cbEzk2xoqdvxCOlVw0xkenQXZw/DFxp23tj5VkP6YmlRmw==} + didyoumean2@7.0.4: + resolution: {integrity: sha512-+yW4SNY7W2DOWe2Jx5H4c2qMTFbLGM6wIyoDPkAPy66X+sD1KfYjBPAIWPVsYqMxelflaMQCloZDudELIPhLqA==} + engines: {node: ^18.12.0 || >=20.9.0} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dotenv@17.2.2: resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==} engines: {node: '>=12'} @@ -2700,21 +3059,37 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.233: - resolution: {integrity: sha512-iUdTQSf7EFXsDdQsp8MwJz5SVk4APEFqXU/S47OtQ0YLqacSwPXdZ5vRlMX3neb07Cy2vgioNuRnWUXFwuslkg==} + electron-to-chromium@1.5.237: + resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} + + elegant-spinner@1.0.1: + resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} + engines: {node: '>=0.10.0'} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojic@1.1.18: + resolution: {integrity: sha512-ZUOBdXQzt0dqtjVNW1GcBAwGiORydDs7+z/sYBK8CazmJUcdCwdDLkGj1FjL8d6TG+F1ZtmiXXQ2+cC9tHE68w==} + + emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -2807,6 +3182,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -2830,6 +3210,15 @@ packages: peerDependencies: eslint: '>=7.0.0' + eslint-config-standard@17.1.0: + resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: '^15.0.0 || ^16.0.0 ' + eslint-plugin-promise: ^6.0.0 + eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -2888,6 +3277,10 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2900,6 +3293,12 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + eslint@9.32.0: resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2914,6 +3313,20 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@1.2.2: + resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} + engines: {node: '>=0.4.0'} + hasBin: true + + esprima@2.7.3: + resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} + engines: {node: '>=0.10.0'} + hasBin: true + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -2927,6 +3340,10 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2952,6 +3369,9 @@ packages: eventemitter2@6.4.9: resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -2959,6 +3379,10 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + exit-hook@1.1.1: + resolution: {integrity: sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==} + engines: {node: '>=0.10.0'} + expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} @@ -2967,8 +3391,8 @@ packages: resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} - exponential-backoff@3.1.2: - resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + exponential-backoff@3.1.3: + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} express-rate-limit@8.1.0: resolution: {integrity: sha512-4nLnATuKupnmwqiJc27b4dCFmB/T60ExgmtDD7waf4LdrbJ8CPZzZRHYErDYNhoz+ql8fUdYwM/opf90PoPAQA==} @@ -2984,6 +3408,12 @@ packages: resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} engines: {node: '>= 18'} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + external-editor@1.1.1: + resolution: {integrity: sha512-0XYlP43jzxMgJjugDJ85Z0UDPnowkUbfFztNvsSGC9sJVIk97MZbGEb9WAhIVH0UgNxoLj/9ZQgB4CHJyz2GGQ==} + external-editor@2.2.0: resolution: {integrity: sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==} engines: {node: '>=0.12'} @@ -3020,6 +3450,10 @@ packages: fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -3037,6 +3471,15 @@ packages: picomatch: optional: true + figlet@1.9.3: + resolution: {integrity: sha512-majPgOpVtrZN1iyNGbsUP6bOtZ6eaJgg5HHh0vFvm5DJhh8dc+FJpOC4GABvMZ/A7XHAJUuJujhgUY/2jPWgMA==} + engines: {node: '>= 17.0.0'} + hasBin: true + + figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} @@ -3045,6 +3488,10 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -3087,10 +3534,17 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-yarn-workspace-root@2.0.0: + resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + findup-sync@4.0.0: resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} engines: {node: '>= 8'} + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -3101,8 +3555,8 @@ packages: flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} - flow-parser@0.287.0: - resolution: {integrity: sha512-92XfPmSg6zV/UD/R3Hw+sxBUi3SiIL8COqD7p3HRZysX1ksrw5MdPhpqox0U0Hd5lqQ9F1AJCi92fnRO7WDgFw==} + flow-parser@0.288.0: + resolution: {integrity: sha512-JnObnfMUNoPLaWafBnA/al7ZF2t6yFPXSJriHZZWWw3+9z7Zhwk4NMA+ZxE1WI1Z50/ti/mjsDcGl/TMy/qLhg==} engines: {node: '>=0.4.0'} follow-redirects@1.15.11: @@ -3152,6 +3606,14 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + engines: {node: '>=14.14'} + fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -3266,6 +3728,10 @@ packages: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -3299,6 +3765,10 @@ packages: resolution: {integrity: sha512-pYOyu624+6HDbY+qkjILpQGnpvZOusItCk+rvF5/V+6NkcgTKnbOldpIy22tBnxoaLtlM9nXgoqAcW29/B7CIw==} engines: {node: '>=20.0.0'} + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -3345,10 +3815,17 @@ packages: hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + hoopy@0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -3360,6 +3837,10 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -3415,10 +3896,21 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@3.2.0: + resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} + engines: {node: '>=4'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3439,6 +3931,12 @@ packages: resolution: {integrity: sha512-bRs4PfQ7k+M3dDGadFo4//PlEYwWV/tKMNHV0m1jVHSGocyLvlRLuWrNgDuVAmXiEydM5QgfEEP7hbWNtgv0oA==} engines: {node: '>=6.0.0'} + inquirer-select-directory@1.2.0: + resolution: {integrity: sha512-G6D+//DozjVi+o3VwrHu2+RjQPAb0M78Vg4c8mellV8rehly/mJFLBgs9r4VrKz/afb+Gr2fqj24jH3gYUYawQ==} + + inquirer@2.0.0: + resolution: {integrity: sha512-ClW/liBHCfUD57ciSoxoq7fS9F3t1rvxxO5gRzdsDzfcJdKTyeMsVgRBQZkzcr8Nd2f4NIA9rm0qDl4ZXYZRUA==} + inquirer@5.2.0: resolution: {integrity: sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==} engines: {node: '>=6.0.0'} @@ -3518,6 +4016,10 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} + is-fullwidth-code-point@1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} @@ -3569,6 +4071,14 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-observable@1.1.0: + resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} + engines: {node: '>=4'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -3577,6 +4087,9 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -3592,6 +4105,10 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -3635,6 +4152,9 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -3665,6 +4185,9 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} + iterate-object@1.3.5: + resolution: {integrity: sha512-eL23u8oFooYTq6TtJKjp2RYjZnCkUYQvC0T/6fJfWykXJ3quvdDdzKZ3CEjy8b3JGOvLTjDYMEMIp5243R906A==} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -3716,6 +4239,13 @@ packages: resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + + joi@18.0.1: + resolution: {integrity: sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==} + engines: {node: '>= 20'} + js-cookie@3.0.5: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} engines: {node: '>=14'} @@ -3775,6 +4305,10 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stable-stringify@1.3.0: + resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} + engines: {node: '>= 0.4'} + json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -3790,6 +4324,22 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + + jsonpath@1.1.1: + resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jwa@1.4.2: + resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3797,10 +4347,17 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + klaw-sync@6.0.0: + resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3823,34 +4380,86 @@ packages: engines: {node: '>=20.17'} hasBin: true - listr2@9.0.1: - resolution: {integrity: sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==} - engines: {node: '>=20.0.0'} + listr-silent-renderer@1.1.1: + resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==} + engines: {node: '>=4'} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + listr-update-renderer@0.5.0: + resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} engines: {node: '>=6'} + peerDependencies: + listr: ^0.14.2 - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + listr-verbose-renderer@0.5.0: + resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} + engines: {node: '>=4'} + + listr-verbose-renderer@0.6.0: + resolution: {integrity: sha512-P3bA/giMu432bs3gHiKXKOIHlWanCIlRhbhCfgKNgCoyvTvZsdbfkgX1BvThYXhm36cS8pOX3Z5vxXBFZC+NQw==} + engines: {node: '>=6'} + + listr2@3.14.0: + resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} + engines: {node: '>=10.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + listr2@9.0.1: + resolution: {integrity: sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==} + engines: {node: '>=20.0.0'} + + listr@0.14.3: + resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} + engines: {node: '>=6'} + + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.deburr@4.1.0: + resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + lodash.invoke@4.5.2: resolution: {integrity: sha512-SC4Usc0XbIKuz3eH7oNwPqibKHfTJSGVZwO/6eGhdoPzqexOY7z43pKo8xz0M5zzXSRteADV6fW7cRf6Ru0+VA==} + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + lodash.isfunction@3.0.9: resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.map@4.6.0: resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} @@ -3860,9 +4469,15 @@ packages: lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.partialright@4.2.1: resolution: {integrity: sha512-yebmPMQZH7i4El6SdJTW9rn8irWl8VTcsmiWqm/I4sY8/ZjbSo0Z512HL6soeAu3mh5rhx5uIIo6kYJOQXbCxw==} + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} @@ -3872,10 +4487,22 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@1.0.2: + resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} + engines: {node: '>=0.10.0'} + log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + log-update@2.3.0: + resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} + engines: {node: '>=4'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -3933,6 +4560,11 @@ packages: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true + marked@7.0.5: + resolution: {integrity: sha512-lwNAFTfXgqpt/XvK17a/8wY9/q6fcSPZT1aP6QW0u74VwaJF/Z9KbRcX23sWE4tODM+AolJNcUtErTkgOeFP/Q==} + engines: {node: '>= 16'} + hasBin: true + marky@1.3.0: resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} @@ -4100,6 +4732,10 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -4109,6 +4745,16 @@ packages: engines: {node: '>=10'} hasBin: true + mkdirp@2.1.6: + resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -4128,6 +4774,9 @@ packages: typescript: optional: true + mute-stream@0.0.6: + resolution: {integrity: sha512-m0kBTDLF/0lgzCsPVmJSKM5xkLNX7ZAB0Q+n2DP37JMIRPVC2R4c3BdO6x++bXFKftbhvSfKgwxAexME+BRDRw==} + mute-stream@0.0.7: resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} @@ -4138,6 +4787,9 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nano-spawn@1.0.2: resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} engines: {node: '>=20.17'} @@ -4195,8 +4847,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.23: - resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} + node-releases@2.0.25: + resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -4209,10 +4861,18 @@ packages: nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + ob1@0.81.5: resolution: {integrity: sha512-iNpbeXPLmaiT9I5g16gFFFjsF3sGxLpYG2EGP3dfFB4z+l9X60mp/yRzStHhMtuNt8qmf7Ww80nOPQHngHhnIQ==} engines: {node: '>=18.18'} + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -4248,6 +4908,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@1.1.0: + resolution: {integrity: sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==} + engines: {node: '>=0.10.0'} + onetime@2.0.1: resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} engines: {node: '>=4'} @@ -4277,6 +4941,10 @@ packages: zod: optional: true + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -4285,6 +4953,10 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + os-shim@0.1.3: + resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} + engines: {node: '>= 0.4.0'} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -4296,6 +4968,10 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4316,14 +4992,38 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + p-retry@6.2.1: resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} engines: {node: '>=16.17'} + p-retry@7.1.0: + resolution: {integrity: sha512-xL4PiFRQa/f9L9ZvR4/gUCRNus4N8YX80ku8kv9Jqz+ZokkiZLM0bcvX0gm1F3PDi9SPRsww1BDsTWgE6Y1GLQ==} + engines: {node: '>=20'} + + p-throttle@4.1.1: + resolution: {integrity: sha512-TuU8Ato+pRTPJoDzYD4s7ocJYcNSEZRvlxoq3hcPI2kZDZ49IQ1Wkj7/gDJc3X7XiEAAvRGtDzdXJI0tC3IL1g==} + engines: {node: '>=10'} + p-throttle@6.2.0: resolution: {integrity: sha512-NCKkOVj6PZa6NiTmfvGilDdf6vO1rFCD3KDnkHko8dTOtkpk4cSR/VTAhhLMG9aiQ7/A9HYgEDNmxzf6hxzR3g==} engines: {node: '>=18'} + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -4342,6 +5042,9 @@ packages: pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + papaparse@5.5.3: + resolution: {integrity: sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4358,10 +5061,24 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + patch-package@8.0.1: + resolution: {integrity: sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==} + engines: {node: '>=14', npm: '>5'} + hasBin: true + path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -4399,6 +5116,9 @@ packages: resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} engines: {node: '>=16'} + path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -4434,6 +5154,14 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + + pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -4483,6 +5211,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -4497,6 +5229,11 @@ packages: vue-tsc: optional: true + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} @@ -4506,6 +5243,9 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -4555,6 +5295,9 @@ packages: queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} + r-json@1.3.1: + resolution: {integrity: sha512-5nhRFfjVMQdrwKUfUlRpDUCocdKtjSnYZ1R/86mpZDV3MfsZ3dYYNjSGuMX+mPBvFvQBhdzxSqxkuLPLv4uFGg==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -4573,8 +5316,8 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-native@0.76.6: - resolution: {integrity: sha512-AsRi+ud6v6ADH7ZtSOY42kRB4nbM0KtSu450pGO4pDudl4AEK/AF96ai88snb2/VJJSGGa/49QyJVFXxz/qoFg==} + react-native@0.76.9: + resolution: {integrity: sha512-+LRwecWmTDco7OweGsrECIqJu0iyrREd6CTCgC/uLLYipiHvk+MH9nd6drFtCw/6Blz6eoKTcH9YTTJusNtrWg==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -4596,6 +5339,9 @@ packages: resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} engines: {node: '>=0.8'} + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -4611,6 +5357,13 @@ packages: resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} engines: {node: '>= 4'} + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + + redeyed@2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} @@ -4625,6 +5378,9 @@ packages: regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + regex-escape@3.4.11: + resolution: {integrity: sha512-051l4Hl/0HoJwTvNztrWVjoxLiseSfCrDgWqwR1cnGM/nyQSeIjmvti5zZ7HzOmsXDPaJ2k0iFxQ6/WNpJD5wQ==} + regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -4652,6 +5408,9 @@ packages: resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} engines: {node: '>=6'} + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -4679,6 +5438,10 @@ packages: engines: {node: '>= 0.4'} hasBin: true + restore-cursor@1.0.1: + resolution: {integrity: sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==} + engines: {node: '>=0.10.0'} + restore-cursor@2.0.0: resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} engines: {node: '>=4'} @@ -4749,10 +5512,20 @@ packages: run-series@1.1.9: resolution: {integrity: sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==} + rx-lite@4.0.8: + resolution: {integrity: sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==} + + rx@4.1.0: + resolution: {integrity: sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==} + rxjs@5.5.12: resolution: {integrity: sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==} engines: {npm: '>=2.0.0'} + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} @@ -4760,6 +5533,9 @@ packages: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -4822,6 +5598,9 @@ packages: resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} engines: {node: '>= 18'} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4849,6 +5628,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-escape@0.2.0: + resolution: {integrity: sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==} + shell-quote@1.8.3: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} @@ -4882,10 +5664,26 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + slash@2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slice-ansi@0.0.4: + resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} + engines: {node: '>=0.10.0'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4925,6 +5723,9 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} + spawn-sync@1.0.15: + resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -4945,6 +5746,9 @@ packages: resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} engines: {node: '>=6'} + static-eval@2.0.2: + resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} + statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -4974,10 +5778,18 @@ packages: string-template@1.0.0: resolution: {integrity: sha512-SLqR3GBUXuoPP5MmYtD7ompvXiG87QjT6lzOszyXjTM86Uu7At7vNnt2xgyTLq5o9T4IxTYFyGxcULqpsmsfdg==} + string-width@1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} engines: {node: '>=4'} + string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -5002,13 +5814,24 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -5044,6 +5867,10 @@ packages: resolution: {integrity: sha512-ORY0gPa6ojmg/C74P/bDoS21WL6FMXq5I8mawkEz30/zkwdu0gOeqstFy316vHG6OKxqQ+IbGneRemHI8WraEw==} engines: {node: '>=14.18.0'} + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5064,6 +5891,10 @@ packages: resolution: {integrity: sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==} engines: {node: '>=0.10.0'} + symbol-observable@1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + systeminformation@5.27.11: resolution: {integrity: sha512-K3Lto/2m3K2twmKHdgx5B+0in9qhXK4YnoT9rIlgwN/4v7OV5c8IjbeAUkuky/6VzCQC7iKCAqi8rZathCdjHg==} engines: {node: '>=8.0.0'} @@ -5074,6 +5905,10 @@ packages: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} + tar@7.5.1: + resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} + engines: {node: '>=18'} + temp@0.8.4: resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} engines: {node: '>=6.0.0'} @@ -5091,12 +5926,25 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -5119,13 +5967,24 @@ packages: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} + tmp@0.0.29: + resolution: {integrity: sha512-89PTqMWGDva+GqClOqBV9s3SMh7MA3Mq0pJUdAoHuF65YoE7O0LermaZkVfT5/Ngfo18H4eYiyG7zKOtnEbxsw==} + engines: {node: '>=0.4.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + tmp@0.2.5: + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} + engines: {node: '>=14.14'} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-ast@1.0.0: + resolution: {integrity: sha512-FZpqARevv2F9BQZAeOx4b8F1tp07qqITCevw5spzKMC7ewcsP4y42kQosjctkAoROtzMNGbmD5n9ZN+vWmSN/Q==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5141,6 +6000,13 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + tryer@1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -5183,6 +6049,10 @@ packages: tx2@1.0.5: resolution: {integrity: sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg==} + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -5191,6 +6061,10 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -5227,6 +6101,9 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typedoc@0.28.9: resolution: {integrity: sha512-aw45vwtwOl3QkUAmWCnLV9QW1xY+FSX2zzlit4MAfE99wX+Jij4ycnpbAWgBXsRrxmfs9LaYktg/eX5Bpthd3g==} engines: {node: '>= 18', pnpm: '>= 10'} @@ -5246,13 +6123,22 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc-first-array@1.1.11: + resolution: {integrity: sha512-lJ3rUh/Jyj+JFUZc1TsXLBQijKgaZ/5JqpFLqmlK/7vXLfOIkCzXrXkL3heE1mld000YHTTJqJqkRcrMIC/w1w==} + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ucfirst@1.0.0: + resolution: {integrity: sha512-xbB/CQ0GdkxqH4IElZqenn/dL/tnyx7DCDASWJPE92ePbFM21kKemXI2LBeYtEvblf1Ol98hyJJS43Wu5JMQSQ==} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} @@ -5299,10 +6185,21 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -5399,6 +6296,9 @@ packages: vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + w-json@1.3.10: + resolution: {integrity: sha512-XadVyw0xE+oZ5FGApXsdswv96rOhStzKqL53uSe5UaTadABGkWIg1+DTx8kiZ/VqTZTBneoL0l65RcPe4W3ecw==} + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -5434,6 +6334,9 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.19: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} @@ -5452,10 +6355,22 @@ packages: engines: {node: '>=8'} hasBin: true + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@3.0.1: + resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} + engines: {node: '>=4'} + + wrap-ansi@5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -5505,6 +6420,9 @@ packages: utf-8-validate: optional: true + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5515,19 +6433,53 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml@2.8.1: resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} hasBin: true + yargs-parser@13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + + yargs@13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -5570,7 +6522,7 @@ snapshots: '@babel/types': 7.28.4 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.1 + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5622,7 +6574,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -6348,7 +7300,7 @@ snapshots: babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4) babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.45.1 + core-js-compat: 3.46.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -6364,7 +7316,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.4 + '@babel/types': 7.28.2 esutils: 2.0.3 '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': @@ -6403,7 +7355,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -6432,6 +7384,9 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 + '@colors/colors@1.5.0': + optional: true + '@commitlint/config-validator@19.8.1': dependencies: '@commitlint/types': 19.8.1 @@ -6474,6 +7429,8 @@ snapshots: chalk: 5.5.0 optional: true + '@contentful/app-action-utils@1.4.1': {} + '@contentful/content-source-maps@0.11.36': dependencies: '@vercel/stega': 0.1.2 @@ -6481,6 +7438,8 @@ snapshots: '@contentful/rich-text-types@16.8.5': {} + '@discoveryjs/json-ext@0.6.3': {} + '@esbuild/aix-ppc64@0.25.8': optional: true @@ -6559,6 +7518,11 @@ snapshots: '@esbuild/win32-x64@0.25.8': optional: true + '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.5.1))': dependencies: eslint: 9.32.0(jiti@2.5.1) @@ -6580,6 +7544,20 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -6594,6 +7572,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/js@8.57.1': {} + '@eslint/js@9.32.0': {} '@eslint/object-schema@2.1.6': {} @@ -6611,6 +7591,28 @@ snapshots: '@shikijs/types': 3.9.2 '@shikijs/vscode-textmate': 10.0.2 + '@hapi/address@5.1.1': + dependencies: + '@hapi/hoek': 11.0.7 + + '@hapi/formula@3.0.2': {} + + '@hapi/hoek@11.0.7': {} + + '@hapi/hoek@9.3.0': {} + + '@hapi/pinpoint@2.0.1': {} + + '@hapi/tlds@1.1.3': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@hapi/topo@6.0.2': + dependencies: + '@hapi/hoek': 11.0.7 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.6': @@ -6618,8 +7620,18 @@ snapshots: '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + '@humanwhocodes/module-importer@1.0.1': {} + '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -6665,6 +7677,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@isaacs/ttlcache@1.4.1': {} '@istanbuljs/load-nyc-config@1.1.0': @@ -6859,21 +7875,21 @@ snapshots: '@preact/signals-core@1.12.1': {} - '@react-native-async-storage/async-storage@2.2.0(react-native@0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1))': + '@react-native-async-storage/async-storage@2.2.0(react-native@0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1))': dependencies: merge-options: 3.0.4 - react-native: 0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1) - '@react-native/assets-registry@0.76.6': {} + '@react-native/assets-registry@0.76.9': {} - '@react-native/babel-plugin-codegen@0.76.6(@babel/preset-env@7.28.3(@babel/core@7.28.4))': + '@react-native/babel-plugin-codegen@0.76.9(@babel/preset-env@7.28.3(@babel/core@7.28.4))': dependencies: - '@react-native/codegen': 0.76.6(@babel/preset-env@7.28.3(@babel/core@7.28.4)) + '@react-native/codegen': 0.76.9(@babel/preset-env@7.28.3(@babel/core@7.28.4)) transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))': + '@react-native/babel-preset@0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.4) @@ -6916,7 +7932,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4) '@babel/template': 7.27.2 - '@react-native/babel-plugin-codegen': 0.76.6(@babel/preset-env@7.28.3(@babel/core@7.28.4)) + '@react-native/babel-plugin-codegen': 0.76.9(@babel/preset-env@7.28.3(@babel/core@7.28.4)) babel-plugin-syntax-hermes-parser: 0.25.1 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.4) react-refresh: 0.14.2 @@ -6924,7 +7940,7 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/codegen@0.76.6(@babel/preset-env@7.28.3(@babel/core@7.28.4))': + '@react-native/codegen@0.76.9(@babel/preset-env@7.28.3(@babel/core@7.28.4))': dependencies: '@babel/parser': 7.28.0 '@babel/preset-env': 7.28.3(@babel/core@7.28.4) @@ -6938,10 +7954,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))': + '@react-native/community-cli-plugin@0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))': dependencies: - '@react-native/dev-middleware': 0.76.6 - '@react-native/metro-babel-transformer': 0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4)) + '@react-native/dev-middleware': 0.76.9 + '@react-native/metro-babel-transformer': 0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4)) chalk: 4.1.2 execa: 5.1.1 invariant: 2.2.4 @@ -6959,16 +7975,17 @@ snapshots: - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.76.6': {} + '@react-native/debugger-frontend@0.76.9': {} - '@react-native/dev-middleware@0.76.6': + '@react-native/dev-middleware@0.76.9': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.76.6 + '@react-native/debugger-frontend': 0.76.9 chrome-launcher: 0.15.2 chromium-edge-launcher: 0.2.0 connect: 3.7.0 debug: 2.6.9 + invariant: 2.2.4 nullthrows: 1.1.1 open: 7.4.2 selfsigned: 2.4.1 @@ -6979,28 +7996,28 @@ snapshots: - supports-color - utf-8-validate - '@react-native/gradle-plugin@0.76.6': {} + '@react-native/gradle-plugin@0.76.9': {} - '@react-native/js-polyfills@0.76.6': {} + '@react-native/js-polyfills@0.76.9': {} - '@react-native/metro-babel-transformer@0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))': + '@react-native/metro-babel-transformer@0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))': dependencies: '@babel/core': 7.28.4 - '@react-native/babel-preset': 0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4)) + '@react-native/babel-preset': 0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4)) hermes-parser: 0.23.1 nullthrows: 1.1.1 transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/normalize-colors@0.76.6': {} + '@react-native/normalize-colors@0.76.9': {} - '@react-native/virtualized-lists@0.76.6(@types/react@18.3.26)(react-native@0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)': + '@react-native/virtualized-lists@0.76.9(@types/react@18.3.26)(react-native@0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1) + react-native: 0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1) optionalDependencies: '@types/react': 18.3.26 @@ -7066,6 +8083,14 @@ snapshots: '@rtsao/scc@1.1.0': {} + '@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7)': + dependencies: + any-observable: 0.3.0(rxjs@6.6.7) + optionalDependencies: + rxjs: 6.6.7 + transitivePeerDependencies: + - zenObservable + '@shikijs/engine-oniguruma@3.9.2': dependencies: '@shikijs/types': 3.9.2 @@ -7086,6 +8111,14 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + '@sinclair/typebox@0.27.8': {} '@sinonjs/commons@3.0.1': @@ -7096,6 +8129,8 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@standard-schema/spec@1.0.0': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} '@types/babel__core@7.20.5': @@ -7158,6 +8193,11 @@ snapshots: '@types/express-serve-static-core': 5.0.7 '@types/serve-static': 1.15.8 + '@types/fs-extra@11.0.4': + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 24.2.0 + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 24.2.0 @@ -7184,6 +8224,10 @@ snapshots: '@types/json5@0.0.29': {} + '@types/jsonfile@6.1.4': + dependencies: + '@types/node': 24.2.0 + '@types/methods@1.1.4': {} '@types/mime@1.3.5': {} @@ -7286,7 +8330,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) '@typescript-eslint/types': 8.39.0 - debug: 4.4.1 + debug: 4.4.3 typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -7305,7 +8349,7 @@ snapshots: '@typescript-eslint/types': 8.39.0 '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) - debug: 4.4.1 + debug: 4.4.3 eslint: 9.32.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 @@ -7346,6 +8390,8 @@ snapshots: '@typescript-eslint/types': 8.39.0 eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.3.0': {} + '@vercel/stega@0.1.2': {} '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@24.2.0)(happy-dom@20.0.2)(jiti@2.5.1)(msw@2.10.5(@types/node@24.2.0)(typescript@5.9.2))(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.1))': @@ -7353,7 +8399,7 @@ snapshots: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 ast-v8-to-istanbul: 0.3.4 - debug: 4.4.1 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -7410,6 +8456,8 @@ snapshots: loupe: 3.2.0 tinyrainbow: 2.0.0 + '@yarnpkg/lockfile@1.1.0': {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -7430,12 +8478,23 @@ snapshots: acorn@8.15.0: {} + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + agent-base@7.1.4: {} agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -7459,8 +8518,14 @@ snapshots: anser@1.4.10: {} + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + ansi-colors@4.1.3: {} + ansi-escapes@1.4.0: {} + ansi-escapes@3.2.0: {} ansi-escapes@4.3.2: @@ -7471,12 +8536,18 @@ snapshots: dependencies: environment: 1.1.0 + ansi-regex@2.1.1: {} + ansi-regex@3.0.1: {} + ansi-regex@4.1.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} + ansi-styles@2.2.1: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -7489,8 +8560,16 @@ snapshots: ansi-styles@6.2.1: {} + ansicolors@0.3.2: {} + ansis@4.0.0-node10: {} + any-observable@0.3.0(rxjs@6.6.7): + optionalDependencies: + rxjs: 6.6.7 + + any-promise@1.3.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -7562,16 +8641,28 @@ snapshots: dependencies: tslib: 2.8.1 + ast-types@0.14.2: + dependencies: + tslib: 2.8.1 + ast-types@0.15.2: dependencies: tslib: 2.8.1 + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + + ast-types@0.7.8: {} + ast-v8-to-istanbul@0.3.4: dependencies: '@jridgewell/trace-mapping': 0.3.29 estree-walker: 3.0.3 js-tokens: 9.0.1 + astral-regex@2.0.0: {} + async-function@1.0.0: {} async-limiter@1.0.1: {} @@ -7645,7 +8736,7 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4) - core-js-compat: 3.45.1 + core-js-compat: 3.46.0 transitivePeerDependencies: - supports-color @@ -7699,10 +8790,18 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.8.14: {} + baseline-browser-mapping@2.8.18: {} basic-ftp@5.0.5: {} + bfj@8.0.0: + dependencies: + bluebird: 3.7.2 + check-types: 11.2.3 + hoopy: 0.1.4 + jsonpath: 1.1.1 + tryer: 1.0.1 + binary-extensions@2.3.0: {} bl@4.1.0: @@ -7711,6 +8810,8 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bluebird@3.7.2: {} + bodec@0.1.0: {} body-parser@1.20.3: @@ -7744,6 +8845,17 @@ snapshots: transitivePeerDependencies: - supports-color + boxen@5.1.2: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -7759,16 +8871,18 @@ snapshots: browserslist@4.26.3: dependencies: - baseline-browser-mapping: 2.8.14 - caniuse-lite: 1.0.30001749 - electron-to-chromium: 1.5.233 - node-releases: 2.0.23 + baseline-browser-mapping: 2.8.18 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.237 + node-releases: 2.0.25 update-browserslist-db: 1.1.3(browserslist@4.26.3) bser@2.1.1: dependencies: node-int64: 0.4.0 + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -7815,7 +8929,17 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001749: {} + camelo@1.2.2: + dependencies: + regex-escape: 3.4.11 + uc-first-array: 1.1.11 + + caniuse-lite@1.0.30001751: {} + + cardinal@2.1.1: + dependencies: + ansicolors: 0.3.2 + redeyed: 2.1.1 chai@5.2.1: dependencies: @@ -7825,6 +8949,22 @@ snapshots: loupe: 3.2.0 pathval: 2.0.1 + chalk@1.1.1: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -7851,6 +8991,8 @@ snapshots: check-error@2.1.1: {} + check-types@11.2.3: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -7863,6 +9005,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@3.0.0: {} + chrome-launcher@0.15.2: dependencies: '@types/node': 24.2.0 @@ -7887,6 +9031,18 @@ snapshots: ci-info@3.9.0: {} + clean-stack@2.2.0: {} + + cli-boxes@2.2.1: {} + + cli-cursor@1.0.2: + dependencies: + restore-cursor: 1.0.1 + + cli-cursor@2.0.0: + dependencies: + restore-cursor: 2.0.0 + cli-cursor@2.1.0: dependencies: restore-cursor: 2.0.0 @@ -7899,12 +9055,37 @@ snapshots: dependencies: restore-cursor: 5.1.0 + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + cli-spinners@2.9.2: {} + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + cli-tableau@2.0.1: dependencies: chalk: 3.0.0 + cli-truncate@0.2.1: + dependencies: + slice-ansi: 0.0.4 + string-width: 1.0.2 + + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 @@ -7916,12 +9097,36 @@ snapshots: cli-width@4.1.0: {} + cliui@5.0.0: + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 @@ -7930,6 +9135,8 @@ snapshots: clone@1.0.4: {} + code-point-at@1.1.0: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -7948,6 +9155,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + command-exists@1.2.9: {} + commander@12.1.0: {} commander@14.0.0: {} @@ -7982,6 +9191,13 @@ snapshots: concat-map@0.0.1: {} + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + connect@3.7.0: dependencies: debug: 2.6.9 @@ -8001,6 +9217,165 @@ snapshots: content-type@1.0.5: {} + contentful-batch-libs@10.1.1: + dependencies: + date-fns: 2.30.0 + figures: 3.2.0 + https-proxy-agent: 7.0.6 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + + contentful-batch-libs@9.7.0: + dependencies: + date-fns: 2.30.0 + figures: 3.2.0 + https-proxy-agent: 7.0.6 + lodash.clonedeep: 4.5.0 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + + contentful-cli@3.9.4(enquirer@2.3.6)(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@17.21.3(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-promise@7.2.1(eslint@8.57.1)): + dependencies: + '@contentful/app-action-utils': 1.4.1 + ast-types: 0.14.2 + bluebird: 3.7.2 + boxen: 5.1.2 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 + command-exists: 1.2.9 + contentful-batch-libs: 10.1.1 + contentful-collection: 0.0.4 + contentful-export: 7.21.91 + contentful-import: 9.4.122(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@17.21.3(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-promise@7.2.1(eslint@8.57.1)) + contentful-management: 11.60.4 + contentful-migration: 4.31.5(enquirer@2.3.6) + emojic: 1.1.18 + execa: 5.1.1 + figlet: 1.9.3 + find-up: 5.0.0 + https-proxy-agent: 7.0.6 + inquirer: 8.2.5 + inquirer-autocomplete-prompt: 2.0.1(inquirer@8.2.5) + inquirer-select-directory: 1.2.0 + listr: 0.14.3 + lodash: 4.17.21 + marked: 7.0.5 + mkdirp: 3.0.1 + open: 8.4.2 + p-queue: 6.6.2 + papaparse: 5.5.3 + patch-package: 8.0.1 + path: 0.12.7 + prettier: 2.8.8 + recast: 0.23.11 + rxjs: 7.8.2 + shell-escape: 0.2.0 + tar: 7.5.1 + to-ast: 1.0.0 + tree-kill: 1.2.2 + typescript: 5.9.2 + wrap-ansi: 7.0.0 + yargs: 13.3.2 + transitivePeerDependencies: + - debug + - enquirer + - eslint-plugin-import + - eslint-plugin-n + - eslint-plugin-promise + - supports-color + - zen-observable + - zenObservable + + contentful-collection@0.0.4: {} + + contentful-export@7.21.91: + dependencies: + axios: 1.12.2 + bfj: 8.0.0 + bluebird: 3.7.2 + cli-table3: 0.6.5 + contentful: 11.8.5 + contentful-batch-libs: 9.7.0 + contentful-management: 11.60.4 + date-fns: 4.1.0 + figures: 3.2.0 + jsonwebtoken: 9.0.2 + listr: 0.14.3 + listr-update-renderer: 0.5.0(listr@0.14.3) + listr-verbose-renderer: 0.6.0 + lodash.startcase: 4.4.0 + mkdirp: 2.1.6 + yargs: 18.0.0 + transitivePeerDependencies: + - debug + - supports-color + - zen-observable + - zenObservable + + contentful-import@9.4.122(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@17.21.3(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-promise@7.2.1(eslint@8.57.1)): + dependencies: + '@discoveryjs/json-ext': 0.6.3 + bluebird: 3.7.2 + cli-table3: 0.6.5 + contentful-batch-libs: 9.7.0 + contentful-management: 11.60.4 + date-fns: 2.30.0 + eslint: 8.57.1 + eslint-config-standard: 17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@17.21.3(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-promise@7.2.1(eslint@8.57.1))(eslint@8.57.1) + joi: 18.0.1 + listr: 0.14.3 + listr-update-renderer: 0.5.0(listr@0.14.3) + listr-verbose-renderer: 0.6.0 + lodash: 4.17.21 + p-queue: 6.6.2 + yargs: 17.7.2 + transitivePeerDependencies: + - debug + - eslint-plugin-import + - eslint-plugin-n + - eslint-plugin-promise + - supports-color + - zen-observable + - zenObservable + + contentful-management@11.60.4: + dependencies: + '@contentful/rich-text-types': 16.8.5 + axios: 1.12.2 + contentful-sdk-core: 9.2.1 + fast-copy: 3.0.2 + globals: 15.15.0 + transitivePeerDependencies: + - debug + + contentful-migration@4.31.5(enquirer@2.3.6): + dependencies: + '@hapi/hoek': 11.0.7 + axios: 1.12.2 + bluebird: 3.7.2 + callsites: 3.1.0 + cardinal: 2.1.1 + chalk: 4.1.2 + contentful-management: 11.60.4 + didyoumean2: 7.0.4 + https-proxy-agent: 5.0.1 + inquirer: 8.2.5 + joi: 17.13.3 + kind-of: 6.0.3 + listr2: 3.14.0(enquirer@2.3.6) + lodash: 4.17.21 + p-throttle: 4.1.1 + uuid: 10.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - debug + - enquirer + - supports-color + contentful-resolve-response@1.9.4: dependencies: fast-copy: 3.0.2 @@ -8041,10 +9416,12 @@ snapshots: cookiejar@2.1.4: {} - core-js-compat@3.45.1: + core-js-compat@3.46.0: dependencies: browserslist: 4.26.3 + core-util-is@1.0.3: {} + cosmiconfig-typescript-loader@5.0.0(@types/node@24.2.0)(cosmiconfig@9.0.0(typescript@5.9.2))(typescript@5.9.2): dependencies: '@types/node': 24.2.0 @@ -8139,6 +9516,14 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 + date-fns@1.30.1: {} + + date-fns@2.30.0: + dependencies: + '@babel/runtime': 7.28.4 + + date-fns@4.1.0: {} + dayjs@1.11.15: {} dayjs@1.8.36: {} @@ -8163,6 +9548,8 @@ snapshots: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + dedent@0.7.0: {} deep-eql@5.0.2: {} @@ -8210,10 +9597,20 @@ snapshots: diary@0.4.5: {} + didyoumean2@7.0.4: + dependencies: + '@babel/runtime': 7.28.4 + fastest-levenshtein: 1.0.16 + lodash.deburr: 4.1.0 + doctrine@2.1.0: dependencies: esutils: 2.0.3 + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + dotenv@17.2.2: {} dunder-proto@1.0.1: @@ -8224,16 +9621,33 @@ snapshots: eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + ee-first@1.1.1: {} - electron-to-chromium@1.5.233: {} + electron-to-chromium@1.5.237: {} + + elegant-spinner@1.0.1: {} emoji-regex@10.4.0: {} + emoji-regex@7.0.3: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + emojic@1.1.18: + dependencies: + camelo: 1.2.2 + emojilib: 2.4.0 + iterate-object: 1.3.5 + r-json: 1.3.1 + + emojilib@2.4.0: {} + encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -8386,6 +9800,15 @@ snapshots: escape-string-regexp@4.0.0: {} + escodegen@1.14.3: + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -8394,6 +9817,11 @@ snapshots: optionalDependencies: source-map: 0.6.1 + eslint-compat-utils@0.5.1(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + semver: 7.7.2 + eslint-compat-utils@0.5.1(eslint@9.32.0(jiti@2.5.1)): dependencies: eslint: 9.32.0(jiti@2.5.1) @@ -8419,6 +9847,13 @@ snapshots: dependencies: eslint: 9.32.0(jiti@2.5.1) + eslint-config-standard@17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@17.21.3(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-promise@7.2.1(eslint@8.57.1))(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@8.57.1) + eslint-plugin-n: 17.21.3(eslint@8.57.1)(typescript@5.9.2) + eslint-plugin-promise: 7.2.1(eslint@8.57.1) + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -8427,6 +9862,16 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)): dependencies: debug: 3.2.7 @@ -8437,6 +9882,13 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-es-x@7.8.0(eslint@8.57.1): + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + eslint: 8.57.1 + eslint-compat-utils: 0.5.1(eslint@8.57.1) + eslint-plugin-es-x@7.8.0(eslint@9.32.0(jiti@2.5.1)): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) @@ -8450,6 +9902,35 @@ snapshots: eslint: 9.32.0(jiti@2.5.1) ignore: 5.3.2 + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 @@ -8479,6 +9960,21 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-n@17.21.3(eslint@8.57.1)(typescript@5.9.2): + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + enhanced-resolve: 5.18.3 + eslint: 8.57.1 + eslint-plugin-es-x: 7.8.0(eslint@8.57.1) + get-tsconfig: 4.10.1 + globals: 15.15.0 + globrex: 0.1.2 + ignore: 5.3.2 + semver: 7.7.2 + ts-declaration-location: 1.0.7(typescript@5.9.2) + transitivePeerDependencies: + - typescript + eslint-plugin-n@17.21.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) @@ -8494,11 +9990,21 @@ snapshots: transitivePeerDependencies: - typescript + eslint-plugin-promise@7.2.1(eslint@8.57.1): + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + eslint: 8.57.1 + eslint-plugin-promise@7.2.1(eslint@9.32.0(jiti@2.5.1)): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) eslint: 9.32.0(jiti@2.5.1) + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -8508,6 +10014,49 @@ snapshots: eslint-visitor-keys@4.2.1: {} + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + eslint@9.32.0(jiti@2.5.1): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) @@ -8556,6 +10105,16 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + espree@9.6.1: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 3.4.3 + + esprima@1.2.2: {} + + esprima@2.7.3: {} + esprima@4.0.1: {} esquery@1.6.0: @@ -8566,6 +10125,8 @@ snapshots: dependencies: estraverse: 5.3.0 + estraverse@4.3.0: {} + estraverse@5.3.0: {} estree-walker@3.0.3: @@ -8582,6 +10143,8 @@ snapshots: eventemitter2@6.4.9: {} + eventemitter3@4.0.7: {} + eventemitter3@5.0.1: {} execa@5.1.1: @@ -8596,13 +10159,15 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + exit-hook@1.1.1: {} + expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 expect-type@1.2.2: {} - exponential-backoff@3.1.2: {} + exponential-backoff@3.1.3: {} express-rate-limit@8.1.0(express@5.1.0): dependencies: @@ -8677,6 +10242,14 @@ snapshots: transitivePeerDependencies: - supports-color + extend@3.0.2: {} + + external-editor@1.1.1: + dependencies: + extend: 3.0.2 + spawn-sync: 1.0.15 + tmp: 0.0.29 + external-editor@2.2.0: dependencies: chardet: 0.4.2 @@ -8718,6 +10291,8 @@ snapshots: fast-uri@3.0.6: optional: true + fastest-levenshtein@1.0.16: {} + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -8732,6 +10307,15 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + figlet@1.9.3: + dependencies: + commander: 14.0.0 + + figures@1.7.0: + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -8740,6 +10324,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -8810,6 +10398,10 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + find-yarn-workspace-root@2.0.0: + dependencies: + micromatch: 4.0.8 + findup-sync@4.0.0: dependencies: detect-file: 1.0.0 @@ -8817,6 +10409,12 @@ snapshots: micromatch: 4.0.8 resolve-dir: 1.0.1 + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -8826,7 +10424,7 @@ snapshots: flow-enums-runtime@0.0.6: {} - flow-parser@0.287.0: {} + flow-parser@0.288.0: {} follow-redirects@1.15.11(debug@4.3.7): optionalDependencies: @@ -8870,6 +10468,18 @@ snapshots: fresh@2.0.0: {} + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 @@ -9006,6 +10616,10 @@ snapshots: is-windows: 1.0.2 which: 1.3.1 + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + globals@14.0.0: {} globals@15.15.0: {} @@ -9031,6 +10645,10 @@ snapshots: '@types/whatwg-mimetype': 3.0.2 whatwg-mimetype: 3.0.0 + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + has-bigints@1.1.0: {} has-flag@3.0.0: {} @@ -9069,10 +10687,14 @@ snapshots: dependencies: hermes-estree: 0.25.1 + highlight.js@10.7.3: {} + homedir-polyfill@1.0.3: dependencies: parse-passwd: 1.0.0 + hoopy@0.1.4: {} + html-escaper@2.0.2: {} http-errors@2.0.0: @@ -9090,6 +10712,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -9138,11 +10767,17 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@3.2.0: {} + + indent-string@4.0.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 + inherits@2.0.3: {} + inherits@2.0.4: {} ini@1.3.8: {} @@ -9167,6 +10802,31 @@ snapshots: lodash.isfunction: 3.0.9 lodash.partialright: 4.2.1 + inquirer-select-directory@1.2.0: + dependencies: + chalk: 1.1.1 + cli-cursor: 2.0.0 + figures: 2.0.0 + inquirer: 2.0.0 + rx-lite: 4.0.8 + + inquirer@2.0.0: + dependencies: + ansi-escapes: 1.4.0 + chalk: 1.1.3 + cli-cursor: 1.0.2 + cli-width: 2.2.1 + external-editor: 1.1.1 + figures: 2.0.0 + lodash: 4.17.21 + mute-stream: 0.0.6 + pinkie-promise: 2.0.1 + run-async: 2.4.1 + rx: 4.1.0 + string-width: 2.1.1 + strip-ansi: 3.0.1 + through: 2.3.8 + inquirer@5.2.0: dependencies: ansi-escapes: 3.2.0 @@ -9271,6 +10931,10 @@ snapshots: dependencies: call-bound: 1.0.4 + is-fullwidth-code-point@1.0.0: + dependencies: + number-is-nan: 1.0.1 + is-fullwidth-code-point@2.0.0: {} is-fullwidth-code-point@3.0.0: {} @@ -9309,12 +10973,20 @@ snapshots: is-number@7.0.0: {} + is-observable@1.1.0: + dependencies: + symbol-observable: 1.2.0 + + is-path-inside@3.0.3: {} + is-plain-obj@2.1.0: {} is-plain-object@2.0.4: dependencies: isobject: 3.0.1 + is-promise@2.2.2: {} + is-promise@4.0.0: {} is-regex@1.2.1: @@ -9330,6 +11002,8 @@ snapshots: dependencies: call-bound: 1.0.4 + is-stream@1.1.0: {} + is-stream@2.0.1: {} is-string@1.1.1: @@ -9368,6 +11042,8 @@ snapshots: dependencies: is-docker: 2.2.1 + isarray@1.0.0: {} + isarray@2.0.5: {} isexe@2.0.0: {} @@ -9395,7 +11071,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: '@jridgewell/trace-mapping': 0.3.29 - debug: 4.4.1 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color @@ -9405,6 +11081,8 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + iterate-object@1.3.5: {} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -9491,6 +11169,24 @@ snapshots: jiti@2.5.1: {} + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + + joi@18.0.1: + dependencies: + '@hapi/address': 5.1.1 + '@hapi/formula': 3.0.2 + '@hapi/hoek': 11.0.7 + '@hapi/pinpoint': 2.0.1 + '@hapi/tlds': 1.1.3 + '@hapi/topo': 6.0.2 + '@standard-schema/spec': 1.0.0 + js-cookie@3.0.5: {} js-git@0.7.8: @@ -9531,7 +11227,7 @@ snapshots: '@babel/register': 7.28.3(@babel/core@7.28.4) babel-core: 7.0.0-bridge.0(@babel/core@7.28.4) chalk: 4.1.2 - flow-parser: 0.287.0 + flow-parser: 0.288.0 graceful-fs: 4.2.11 micromatch: 4.0.8 neo-async: 2.6.2 @@ -9561,6 +11257,14 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json-stable-stringify@1.3.0: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + json-stringify-safe@5.0.1: {} json5@1.0.2: @@ -9575,14 +11279,55 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonify@0.0.1: {} + + jsonpath@1.1.1: + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 + + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.7.2 + + jwa@1.4.2: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.2 + safe-buffer: 5.2.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 kind-of@6.0.3: {} + klaw-sync@6.0.0: + dependencies: + graceful-fs: 4.2.11 + leven@3.1.0: {} + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -9618,6 +11363,47 @@ snapshots: transitivePeerDependencies: - supports-color + listr-silent-renderer@1.1.1: {} + + listr-update-renderer@0.5.0(listr@0.14.3): + dependencies: + chalk: 1.1.3 + cli-truncate: 0.2.1 + elegant-spinner: 1.0.1 + figures: 1.7.0 + indent-string: 3.2.0 + listr: 0.14.3 + log-symbols: 1.0.2 + log-update: 2.3.0 + strip-ansi: 3.0.1 + + listr-verbose-renderer@0.5.0: + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + date-fns: 1.30.1 + figures: 2.0.0 + + listr-verbose-renderer@0.6.0: + dependencies: + chalk: 2.4.2 + cli-cursor: 2.1.0 + date-fns: 2.30.0 + figures: 2.0.0 + + listr2@3.14.0(enquirer@2.3.6): + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.20 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.4.1 + rxjs: 7.8.2 + through: 2.3.8 + wrap-ansi: 7.0.0 + optionalDependencies: + enquirer: 2.3.6 + listr2@9.0.1: dependencies: cli-truncate: 4.0.0 @@ -9627,6 +11413,21 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 + listr@0.14.3: + dependencies: + '@samverschueren/stream-to-observable': 0.3.1(rxjs@6.6.7) + is-observable: 1.1.0 + is-promise: 2.2.2 + is-stream: 1.1.0 + listr-silent-renderer: 1.1.1 + listr-update-renderer: 0.5.0(listr@0.14.3) + listr-verbose-renderer: 0.5.0 + p-map: 2.1.0 + rxjs: 6.6.7 + transitivePeerDependencies: + - zen-observable + - zenObservable + locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -9640,14 +11441,27 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.clonedeep@4.5.0: {} + lodash.debounce@4.0.8: {} + lodash.deburr@4.1.0: {} + + lodash.includes@4.3.0: {} + lodash.invoke@4.5.2: {} + lodash.isboolean@3.0.3: {} + lodash.isfunction@3.0.9: {} - lodash.isplainobject@4.0.6: - optional: true + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} lodash.map@4.6.0: {} @@ -9656,8 +11470,12 @@ snapshots: lodash.mergewith@4.6.2: optional: true + lodash.once@4.1.1: {} + lodash.partialright@4.2.1: {} + lodash.startcase@4.4.0: {} + lodash.throttle@4.1.1: {} lodash.uniq@4.5.0: @@ -9665,11 +11483,28 @@ snapshots: lodash@4.17.21: {} + log-symbols@1.0.2: + dependencies: + chalk: 1.1.3 + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 + log-update@2.3.0: + dependencies: + ansi-escapes: 3.2.0 + cli-cursor: 2.1.0 + wrap-ansi: 3.0.1 + + log-update@4.0.0: + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -9708,8 +11543,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 source-map-js: 1.2.1 make-dir@2.1.0: @@ -9734,6 +11569,8 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + marked@7.0.5: {} + marky@1.3.0: {} math-intrinsics@1.1.0: {} @@ -9777,7 +11614,7 @@ snapshots: metro-cache@0.81.5: dependencies: - exponential-backoff: 3.1.2 + exponential-backoff: 3.1.3 flow-enums-runtime: 0.0.6 metro-core: 0.81.5 @@ -9979,12 +11816,20 @@ snapshots: minipass@7.1.2: {} + minizlib@3.1.0: + dependencies: + minipass: 7.1.2 + mkdirp@0.5.6: dependencies: minimist: 1.2.8 mkdirp@1.0.4: {} + mkdirp@2.1.6: {} + + mkdirp@3.0.1: {} + module-details-from-path@1.0.4: {} ms@2.0.0: {} @@ -10016,12 +11861,20 @@ snapshots: transitivePeerDependencies: - '@types/node' + mute-stream@0.0.6: {} + mute-stream@0.0.7: {} mute-stream@0.0.8: {} mute-stream@2.0.0: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nano-spawn@1.0.2: {} nanoid@3.3.11: {} @@ -10058,7 +11911,7 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.23: {} + node-releases@2.0.25: {} normalize-path@3.0.0: {} @@ -10068,10 +11921,14 @@ snapshots: nullthrows@1.1.1: {} + number-is-nan@1.0.1: {} + ob1@0.81.5: dependencies: flow-enums-runtime: 0.0.6 + object-assign@4.1.1: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -10117,6 +11974,8 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@1.1.0: {} + onetime@2.0.1: dependencies: mimic-fn: 1.2.0 @@ -10154,6 +12013,15 @@ snapshots: transitivePeerDependencies: - encoding + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -10175,6 +12043,8 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + os-shim@0.1.3: {} + os-tmpdir@1.0.2: {} outvariant@1.4.3: {} @@ -10185,6 +12055,8 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + p-finally@1.0.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -10205,14 +12077,35 @@ snapshots: dependencies: p-limit: 3.1.0 + p-map@2.1.0: {} + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 is-network-error: 1.1.0 retry: 0.13.1 + p-retry@7.1.0: + dependencies: + is-network-error: 1.1.0 + + p-throttle@4.1.1: {} + p-throttle@6.2.0: {} + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + p-try@2.2.0: {} pac-proxy-agent@7.2.0: @@ -10237,6 +12130,8 @@ snapshots: pako@0.2.9: {} + papaparse@5.5.3: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -10255,8 +12150,33 @@ snapshots: parse-passwd@1.0.0: {} + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + parseurl@1.3.3: {} + patch-package@8.0.1: + dependencies: + '@yarnpkg/lockfile': 1.1.0 + chalk: 4.1.2 + ci-info: 3.9.0 + cross-spawn: 7.0.6 + find-yarn-workspace-root: 2.0.0 + fs-extra: 10.1.0 + json-stable-stringify: 1.3.0 + klaw-sync: 6.0.0 + minimist: 1.2.8 + open: 7.4.2 + semver: 7.7.2 + slash: 2.0.0 + tmp: 0.2.5 + yaml: 2.8.1 + path-exists@3.0.0: {} path-exists@4.0.0: {} @@ -10283,6 +12203,11 @@ snapshots: path-to-regexp@8.2.0: {} + path@0.12.7: + dependencies: + process: 0.11.10 + util: 0.10.4 + pathe@2.0.3: {} pathval@2.0.1: {} @@ -10306,6 +12231,12 @@ snapshots: pify@4.0.1: {} + pinkie-promise@2.0.1: + dependencies: + pinkie: 2.0.4 + + pinkie@2.0.4: {} + pirates@4.0.7: {} pkg-dir@3.0.0: @@ -10401,6 +12332,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prelude-ls@1.1.2: {} + prelude-ls@1.2.1: {} prettier-plugin-organize-imports@4.2.0(prettier@3.6.2)(typescript@5.9.2): @@ -10408,6 +12341,8 @@ snapshots: prettier: 3.6.2 typescript: 5.9.2 + prettier@2.8.8: {} + prettier@3.6.2: {} pretty-format@29.7.0: @@ -10416,6 +12351,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + process-nextick-args@2.0.1: {} + process@0.11.10: {} promise@8.3.0: @@ -10470,6 +12407,10 @@ snapshots: dependencies: inherits: 2.0.4 + r-json@1.3.1: + dependencies: + w-json: 1.3.10 + range-parser@1.2.1: {} raw-body@2.5.2: @@ -10496,16 +12437,16 @@ snapshots: react-is@18.3.1: {} - react-native@0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1): + react-native@0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1): dependencies: '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.76.6 - '@react-native/codegen': 0.76.6(@babel/preset-env@7.28.3(@babel/core@7.28.4)) - '@react-native/community-cli-plugin': 0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4)) - '@react-native/gradle-plugin': 0.76.6 - '@react-native/js-polyfills': 0.76.6 - '@react-native/normalize-colors': 0.76.6 - '@react-native/virtualized-lists': 0.76.6(@types/react@18.3.26)(react-native@0.76.6(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + '@react-native/assets-registry': 0.76.9 + '@react-native/codegen': 0.76.9(@babel/preset-env@7.28.3(@babel/core@7.28.4)) + '@react-native/community-cli-plugin': 0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4)) + '@react-native/gradle-plugin': 0.76.9 + '@react-native/js-polyfills': 0.76.9 + '@react-native/normalize-colors': 0.76.9 + '@react-native/virtualized-lists': 0.76.9(@types/react@18.3.26)(react-native@0.76.9(@babel/core@7.28.4)(@babel/preset-env@7.28.3(@babel/core@7.28.4))(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -10542,7 +12483,7 @@ snapshots: transitivePeerDependencies: - '@babel/core' - '@babel/preset-env' - - '@react-native-community/cli-server-api' + - '@react-native-community/cli' - bufferutil - encoding - supports-color @@ -10558,6 +12499,16 @@ snapshots: dependencies: mute-stream: 0.0.8 + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -10577,6 +12528,18 @@ snapshots: source-map: 0.6.1 tslib: 2.8.1 + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + redeyed@2.1.1: + dependencies: + esprima: 4.0.1 + reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -10596,6 +12559,8 @@ snapshots: regenerator-runtime@0.13.11: {} + regex-escape@3.4.11: {} + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -10633,6 +12598,8 @@ snapshots: transitivePeerDependencies: - supports-color + require-main-filename@2.0.0: {} + requires-port@1.0.0: {} resolve-dir@1.0.1: @@ -10654,6 +12621,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@1.0.1: + dependencies: + exit-hook: 1.1.1 + onetime: 1.1.0 + restore-cursor@2.0.0: dependencies: onetime: 2.0.1 @@ -10741,10 +12713,18 @@ snapshots: run-series@1.1.9: {} + rx-lite@4.0.8: {} + + rx@4.1.0: {} + rxjs@5.5.12: dependencies: symbol-observable: 1.0.1 + rxjs@6.6.7: + dependencies: + tslib: 1.9.3 + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -10757,6 +12737,8 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safe-push-apply@1.0.0: @@ -10847,6 +12829,8 @@ snapshots: transitivePeerDependencies: - supports-color + set-blocking@2.0.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -10881,6 +12865,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-escape@0.2.0: {} + shell-quote@1.8.3: {} shimmer@1.2.1: {} @@ -10919,8 +12905,24 @@ snapshots: signal-exit@4.1.0: {} + slash@2.0.0: {} + slash@3.0.0: {} + slice-ansi@0.0.4: {} + + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -10959,6 +12961,11 @@ snapshots: source-map@0.7.6: {} + spawn-sync@1.0.15: + dependencies: + concat-stream: 1.6.2 + os-shim: 0.1.3 + sprintf-js@1.0.3: {} sprintf-js@1.1.2: {} @@ -10975,6 +12982,10 @@ snapshots: dependencies: type-fest: 0.7.1 + static-eval@2.0.2: + dependencies: + escodegen: 1.14.3 + statuses@1.5.0: {} statuses@2.0.1: {} @@ -10994,11 +13005,23 @@ snapshots: string-template@1.0.0: {} + string-width@1.0.2: + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + string-width@2.1.1: dependencies: is-fullwidth-code-point: 2.0.0 strip-ansi: 4.0.0 + string-width@3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -11040,14 +13063,26 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + strip-ansi@4.0.0: dependencies: ansi-regex: 3.0.1 + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -11089,6 +13124,8 @@ snapshots: transitivePeerDependencies: - supports-color + supports-color@2.0.0: {} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -11105,11 +13142,21 @@ snapshots: symbol-observable@1.0.1: {} + symbol-observable@1.2.0: {} + systeminformation@5.27.11: optional: true tapable@2.2.2: {} + tar@7.5.1: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + temp@0.8.4: dependencies: rimraf: 2.6.3 @@ -11133,10 +13180,22 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + text-table@0.2.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + throat@5.0.0: {} through@2.3.8: {} + tiny-invariant@1.3.3: {} + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -11152,12 +13211,23 @@ snapshots: tinyspy@4.0.3: {} + tmp@0.0.29: + dependencies: + os-tmpdir: 1.0.2 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 + tmp@0.2.5: {} + tmpl@1.0.5: {} + to-ast@1.0.0: + dependencies: + ast-types: 0.7.8 + esprima: 2.7.3 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -11173,6 +13243,10 @@ snapshots: tr46@0.0.3: {} + tree-kill@1.2.2: {} + + tryer@1.0.1: {} + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: typescript: 5.9.2 @@ -11211,12 +13285,18 @@ snapshots: json-stringify-safe: 5.0.1 optional: true + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 type-detect@4.0.8: {} + type-fest@0.20.2: {} + type-fest@0.21.3: {} type-fest@0.7.1: {} @@ -11267,6 +13347,8 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typedarray@0.0.6: {} + typedoc@0.28.9(typescript@5.9.2): dependencies: '@gerrit0/mini-shiki': 3.9.2 @@ -11289,8 +13371,14 @@ snapshots: typescript@5.9.2: {} + uc-first-array@1.1.11: + dependencies: + ucfirst: 1.0.0 + uc.micro@2.1.0: {} + ucfirst@1.0.0: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -11298,6 +13386,8 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + underscore@1.12.1: {} + undici-types@7.10.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -11334,8 +13424,16 @@ snapshots: util-deprecate@1.0.2: {} + util@0.10.4: + dependencies: + inherits: 2.0.3 + utils-merge@1.0.1: {} + uuid@10.0.0: {} + + uuid@9.0.1: {} + vary@1.1.2: {} vite-bundle-analyzer@1.2.1: {} @@ -11439,6 +13537,8 @@ snapshots: vlq@1.0.1: {} + w-json@1.3.10: {} + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -11491,6 +13591,8 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 + which-module@2.0.1: {} + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 @@ -11514,8 +13616,23 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + word-wrap@1.2.5: {} + wrap-ansi@3.0.1: + dependencies: + string-width: 2.1.1 + strip-ansi: 4.0.0 + + wrap-ansi@5.1.0: + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -11559,16 +13676,71 @@ snapshots: ws@7.5.10: {} + y18n@4.0.3: {} + y18n@5.0.8: {} yallist@3.1.1: {} yallist@4.0.0: {} + yallist@5.0.0: {} + yaml@2.8.1: {} + yargs-parser@13.1.2: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs-parser@20.2.9: {} + yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} + + yargs@13.3.2: + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 13.1.2 + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -11579,6 +13751,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yargs@18.0.0: + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + yocto-queue@0.1.0: {} yoctocolors-cjs@2.1.2: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 14de2df6..d52645e1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,9 +9,11 @@ catalog: '@types/node': ^24.0.13 '@vitest/coverage-v8': ^3.2.4 browserslist: ^4.25.1 + contentful: ^11.7.19 dotenv: ^17.2.2 es-toolkit: ^1.39.10 msw: ^2.10.5 + p-retry: ^7.1.0 pm2: ^6.0.13 rimraf: ^6.0.1 rollup: ^4.44.1 @@ -26,8 +28,10 @@ engineStrict: true nodeVersion: 16.20.0 onlyBuiltDependencies: + - contentful-cli - esbuild - msw + - spawn-sync overrides: '@playwright/test': 'catalog:' diff --git a/tsconfig.base.json b/tsconfig.base.json index f2de6262..246b0845 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -19,6 +19,7 @@ "noUnusedParameters": true, "paths": { "@contentful/optimization-api-client": ["./platforms/javascript/api-client/src/index.ts"], + "@contentful/optimization-api-schemas": ["./platforms/javascript/api-schemas/src/index.ts"], "@contentful/optimization-core": ["./platforms/javascript/core/src/index.ts"], "@contentful/optimization-node": ["./platforms/javascript/node/src/index.ts"], "@contentful/optimization-react-native": ["./platforms/javascript/react-native/src/index.ts"],