UNPKG

@dbs-portal/tool-mock

Version:

API mocking toolkit using MSW for DBS Portal development workflows

524 lines (523 loc) 15.2 kB
import { a as O, e as I, B as z, o as $, A as N, p as Q, l as V, g as G, y as J, k as K, w as Z, m as X, d as Y, i as _, x as ee, b as ae, n as te, r as se, c as re, q as ne, f as oe, s as ie, j as ce, h as le, t as ue, z as he, u as de, v as ge } from "./setup-oE-TArFC.js"; import { b as me, g as fe, c as ke, a as we, i as ye } from "./environment-DlK8CH_m.js"; import { q as Se, M as Re, v as ve, B as be, C as Ce, c as He, p as Pe, m as Ue, n as Ae, i as De, e as Fe, D as xe, d as We, f as Ee, o as je, l as Le, j as Te, k as qe, h as Be, z as Oe, b as Ie, a as ze, s as $e, g as Ne, r as Qe, x as Ve, y as Ge, A as Je, t as Ke, u as Ze, w as Xe } from "./manager-BJaZBgsI.js"; import { a as _e, c as ea, b as aa, e as ta, s as sa } from "./auth-DT3h0fWG.js"; import { h as l, j as i } from "./delay-C3BTE-53.js"; import { n as na, o as oa, m as ia, l as ca, g as la, d as ua, f as ha, c as da, k as ga, a as pa, b as ma, e as fa, i as ka, r as wa, s as ya, u as Ma, v as Sa, w as Ra } from "./delay-C3BTE-53.js"; import { M as ba, G as Ca, H as Ha, E as Pa, v as Ua, K as Aa, z as Da, w as Fa, D as xa, F as Wa, x as Ea, C as ja, L as La, B as Ta, u as qa, y as Ba, A as Oa, s as Ia, n as za, c as $a, m as Na, r as Qa, f as Va, h as Ga, i as Ja, g as Ka, j as Za, a as Xa, b as Ya, q as _a, k as et, d as at, e as tt, l as st, t as rt, p as nt, o as ot, N as it, O as ct, I as lt, J as ut } from "./validation-Arr3Zrwv.js"; import { f as dt, b as gt, e as pt, d as mt, c as ft, g as kt, a as wt, h as yt, p as Mt, v as St } from "./pagination-DLG5J9NY.js"; import { M as vt, l as bt, q as Ct, o as Ht, x as Pt, b as Ut, a as At, e as Dt, j as Ft, d as xt, c as Wt, f as Et, n as jt, r as Lt, v as Tt, y as qt, t as Bt, B as Ot, i as It, g as zt, m as $t, p as Nt, z as Qt, s as Vt, u as Gt, C as Jt, A as Kt, k as Zt, h as Xt, w as Yt } from "./zustand-Db8qeUuc.js"; import { createDBSPortalMSWPlugin as es, mswPlugin as as, mswStorybookPlugin as ts, mswTestingPlugin as ss } from "./build/vite-plugin.js"; import { k as ns, p as os, j as is, e as cs, d as ls, f as us, n as hs, c as ds, g as gs, l as ps, i as ms, a as fs, m as ks, o as ws, q as ys, s as Ms, h as Ss, b as Rs, u as vs, w as bs } from "./utils-fISEXFeG.js"; function w(a, e) { const t = {}, s = e.replace(/:[^/]+/g, "([^/]+)").replace(/\*/g, "(.*)"), r = new RegExp(`^${s}$`), n = a.match(r); if (!n) return t; const o = e.match(/:[^/]+/g) || []; for (let c = 0; c < o.length; c++) { const u = o[c]?.substring(1); if (!u) continue; const d = n[c + 1]; d !== void 0 && (t[u] = decodeURIComponent(d)); } return t; } function g(a) { const e = new URL(a), t = {}; for (const [s, r] of e.searchParams.entries()) t[s] = r; return t; } function p(a, e) { const { pattern: t, caseSensitive: s = !1 } = e; let r = s ? a : a.toLowerCase(); if (typeof t == "string") { let n = s ? t : t.toLowerCase(); if (t.includes(":") || t.includes("*")) { const o = n.replace(/:[^/]+/g, "[^/]+").replace(/\*/g, ".*"); return new RegExp(`^${o}$`).test(r); } return r.includes(n); } return t.test(a); } function y(a) { try { return new URL(a).pathname; } catch { return a.split("?")[0] || ""; } } function M(a, e, t, s) { let r = a.endsWith("/") ? a.slice(0, -1) : a, n = e.startsWith("/") ? e : `/${e}`; if (t) for (const [o, c] of Object.entries(t)) n = n.replace(`:${o}`, encodeURIComponent(c)); if (r += n, s && Object.keys(s).length > 0) { const o = new URLSearchParams(); for (const [c, u] of Object.entries(s)) o.append(c, u); r += `?${o.toString()}`; } return r; } function S(a) { try { const e = new URL(a); e.pathname.endsWith("/") && e.pathname.length > 1 && (e.pathname = e.pathname.slice(0, -1)); const t = new URLSearchParams(), s = Array.from(e.searchParams.entries()).sort(); for (const [r, n] of s) t.append(r, n); return e.search = t.toString(), e.toString(); } catch { return a; } } function m(a) { try { return new URL(a), !0; } catch { return !1; } } function R(...a) { return a.map((e, t) => t === 0 ? e.replace(/\/+$/, "") : e.replace(/^\/+/, "").replace(/\/+$/, "")).filter(Boolean).join("/"); } function v(a) { try { const e = new URL(a); return `${e.protocol}//${e.host}`; } catch { return ""; } } function b(a) { try { const e = new URL(a); return { protocol: e.protocol, host: e.host, hostname: e.hostname, port: e.port, pathname: e.pathname, search: e.search, hash: e.hash, params: g(a) }; } catch { const [e, t = ""] = a.split("?"), [s, r = ""] = (e || "").split("#"); return { pathname: s || "", search: t ? `?${t}` : "", hash: r ? `#${r}` : "", params: g(a) }; } } function C(a) { return (e) => a.some((t) => typeof t == "string" ? p(e, { pattern: t }) : t.test(e)); } function H(a) { try { return new URL(a), !0; } catch { return !1; } } function P(a, e) { if (m(a)) return a; try { return new URL(a, e).toString(); } catch { return a; } } async function U(a) { const { connection: e, packetLoss: t, latency: s, bandwidth: r } = a; if (t && l() < t) throw new Error("Packet loss simulated"); switch (e) { case "fast": await i(s || [10, 50]); break; case "slow": await i(s || [1e3, 3e3]); break; case "unstable": await i(s || [100, 2e3]); break; case "offline": throw new Error("Network offline"); default: await i(s || [100, 300]); } if (r) { const o = 1024 / r * 1e3; await i(o); } } async function A(a = 0.5, e = 100) { const t = e * (1 + a * 2); await i([t * 0.8, t * 1.2]); } async function D(a = "simple", e = 100) { let t; switch (a) { case "simple": t = 10; break; case "medium": t = 50; break; case "complex": t = 200; break; default: t = 50; } const s = t * Math.log10(e + 1); await i([s * 0.5, s * 1.5]); } async function F(a, e = "upload") { const t = a / 1048576; let s; switch (e) { case "upload": s = 500; break; case "download": s = 200; break; case "transform": s = 1e3; break; default: s = 500; } const r = t * s; await i([r * 0.8, r * 1.2]); } function x(a, e, t = 6e4) { const s = f(), r = s.get(a); if (r && Date.now() - r.timestamp < t) return r.value; const n = e(); return s.set(a, { value: n, timestamp: Date.now() }), n; } const h = /* @__PURE__ */ new Map(); function f() { return { get: (a) => h.get(a), set: (a, e) => { h.set(a, e); }, clear: () => h.clear(), delete: (a) => h.delete(a) }; } async function W(a = "jwt") { switch (a) { case "simple": await i([5, 15]); break; case "jwt": await i([20, 50]); break; case "oauth": await i([100, 300]); break; default: await i([20, 50]); } } class E { constructor(e = 100, t = 6e4) { this.limit = e, this.windowMs = t; } requests = /* @__PURE__ */ new Map(); isAllowed(e) { const t = Date.now(), s = t - this.windowMs, n = (this.requests.get(e) || []).filter((o) => o > s); return n.length >= this.limit ? !1 : (n.push(t), this.requests.set(e, n), !0); } getRemainingRequests(e) { const s = Date.now() - this.windowMs, n = (this.requests.get(e) || []).filter((o) => o > s); return Math.max(0, this.limit - n.length); } getResetTime(e) { const t = this.requests.get(e) || []; return t.length === 0 ? Date.now() : Math.min(...t) + this.windowMs; } } class j { constructor(e = 5, t = 6e4) { this.failureThreshold = e, this.recoveryTimeMs = t; } failures = 0; lastFailureTime = 0; state = "closed"; async execute(e) { if (this.state === "open") if (Date.now() - this.lastFailureTime > this.recoveryTimeMs) this.state = "half-open"; else throw new Error("Circuit breaker is open"); try { const t = await e(); return this.onSuccess(), t; } catch (t) { throw this.onFailure(), t; } } onSuccess() { this.failures = 0, this.state = "closed"; } onFailure() { this.failures++, this.lastFailureTime = Date.now(), this.failures >= this.failureThreshold && (this.state = "open"); } getState() { return this.state; } } async function L(a, e = 1e3, t = 3e4, s = 2) { const r = Math.min(e * Math.pow(s, a - 1), t), n = r * 0.1 * l(); await i(r + n); } function T() { const a = { database: l() > 0.05, // 95% healthy cache: l() > 0.02, // 98% healthy externalApi: l() > 0.1, // 90% healthy storage: l() > 0.01 // 99% healthy }, e = Object.values(a).filter(Boolean).length, t = Object.keys(a).length; let s; return e === t ? s = "healthy" : e >= t * 0.7 ? s = "degraded" : s = "unhealthy", { status: s, checks: a, timestamp: (/* @__PURE__ */ new Date()).toISOString() }; } export { j as CircuitBreaker, vt as MockAuthManager, bt as MockAuthPersistence, Se as MockHandlerManager, Re as MockHandlerRegistry, Ct as MockQueryInvalidation, Ht as MockQueryKeyFactory, ba as MockResponseBuilderImpl, Pt as MockStoreManager, E as RateLimiter, O as addCoreHandlers, ve as addHandlers, na as applyConnectionDelay, i as applyDelay, oa as applyDelayWithTimeout, ia as applyJitteredDelay, ca as applyProgressiveDelay, be as areHandlersEnabled, I as autoSetupMocks, M as buildUrl, ns as buildUtils, os as bundleUtils, la as cachedFactory, _e as calculateErrorProbability, dt as calculatePaginationRanges, z as checkBrowserCompatibility, Ce as clearHandlers, He as clearRegisteredHandlers, ua as combineFactories, ha as conditionalFactory, Ut as createApiClientFactory, ea as createAuthHandlers, Ca as createCachedResponse, $ as createConfigFromSetupOptions, Ha as createCorsResponse, Pe as createCrudHandlers, gt as createCursorPaginatedResponse, Pa as createCustomResponse, es as createDBSPortalMSWPlugin, da as createDataFactory, ga as createDelayFunction, Ue as createDeleteHandler, At as createEnvironmentAwareApiClient, aa as createEnvironmentErrorSimulation, Ae as createErrorHandler, Ua as createErrorResponse, Aa as createFieldValidation, Da as createForbiddenResponse, De as createGetHandler, Fe as createHandler, xe as createHandlerManager, We as createHandlerRegistry, Ee as createHandlers, is as createHealthCheck, pt as createInfiniteScrollResponse, pa as createListFactory, je as createLoadingHandler, Fa as createLoadingResponse, cs as createMSWDevServerConfig, xa as createMaintenanceResponse, Dt as createMockAdminUser, Ft as createMockAuthHooks, xt as createMockAuthManager, Wt as createMockAwareApiClient, Et as createMockManagerUser, jt as createMockQueryClientConfig, Lt as createMockQueryHooks, Tt as createMockStore, qt as createMockStoreHooks, Wa as createNetworkResponse, Ea as createNotFoundResponse, mt as createOffsetPaginatedResponse, ft as createPaginatedResponse, kt as createPaginationLinks, wt as createPaginationMeta, Le as createPatchHandler, Te as createPostHandler, qe as createPutHandler, ja as createRateLimitResponse, La as createSchemaValidation, yt as createSearchPaginatedResponse, Ta as createServerErrorResponse, ls as createServiceWorkerFile, qa as createSuccessResponse, ma as createTypedFactory, Be as createTypedHandler, Ba as createUnauthorizedResponse, C as createUrlMatcher, Oa as createValidationErrorResponse, us as devServerUtils, hs as envUtils, ta as errorResponses, fa as extendFactory, y as extractPath, Ia as generateAddress, za as generateArray, $a as generateBoolean, Na as generateColor, Qa as generateCompany, Va as generateDate, Ga as generateDateInRange, Ja as generateEmail, Ka as generateId, Za as generateName, Xa as generateNumber, Ya as generateNumberInRange, _a as generatePerson, et as generatePhoneNumber, ds as generateServiceWorkerContent, at as generateString, tt as generateStringWithOptions, st as generateUrl, v as getBaseUrl, N as getBrowserDefaults, Q as getConfigForEnvironment, Oe as getCurrentHandlers, me as getEnvironmentDefaults, fe as getEnvironmentInfo, Ie as getHandlersByTag, V as getMockConfig, ke as getMockingEnvironmentVariables, we as getMockingMode, G as getMswInstance, l as getRandom, ze as getRegisteredHandlers, J as getServiceWorkerRegistration, gs as getServiceWorkerStatus, K as getSetupStatus, $e as globalHandlerManager, Ne as globalHandlerRegistry, ps as hotReloadUtils, Z as initializeMSWServiceWorker, X as initializeMockConfig, ms as initializeServiceWorker, ka as instrumentedFactory, Bt as integrateMockQueries, Ot as integrateMockWithZustand, It as integrateWithCoreApiClient, zt as integrateWithCoreAuth, m as isAbsoluteUrl, ye as isMockingEnabled, Y as isMswRunning, _ as isMswSetup, fs as isServiceWorkerReady, ee as isServiceWorkerRegistered, H as isValidUrl, R as joinPaths, p as matchesUrl, $t as mockAuthUser, ks as mockModuleUtils, Nt as mockQueryUtils, rt as mockResponseBuilder, Qt as mockStoreProviders, as as mswPlugin, ts as mswStorybookPlugin, ss as mswTestingPlugin, S as normalizeUrl, ws as onServiceWorkerUpdate, Mt as parsePaginationParams, g as parseQueryParams, b as parseUrl, w as parseUrlParams, ys as performanceUtils, nt as pickRandom, ot as pickRandomMultiple, it as quickValidation, Qe as registerHandlers, Ve as removeHandlers, Ge as replaceHandlers, ae as resetHandlers, te as resetMockConfig, wa as resetRandomSeed, se as restartMocks, re as restoreHandlers, ya as sequenceFactory, Ms as serviceWorkerDevUtils, Je as setHandlersEnabled, Vt as setupAuthMocking, ne as setupBrowser, oe as setupDevelopmentMocks, Gt as setupMockQueryDevtools, Jt as setupMockStoreDevtools, Kt as setupMockStores, ie as setupMocks, Zt as setupStorybookAuth, ce as setupStorybookMocks, le as setupTestingMocks, W as simulateAuthCheck, L as simulateBackoff, x as simulateCache, D as simulateDatabaseQuery, sa as simulateError, F as simulateFileProcessing, T as simulateHealthCheck, U as simulateNetworkConditions, A as simulateServerLoad, Ss as startDevServerWithMSW, Ke as tagHandlers, ue as teardownMocks, P as toAbsoluteUrl, Ma as uniqueFactory, he as unregisterCoreServiceWorker, Ze as unregisterHandlers, Rs as unregisterServiceWorker, de as updateMockConfig, vs as updateServiceWorker, ct as validateAndSanitize, ge as validateMockConfig, St as validatePaginationParams, lt as validateSchema, Sa as validatedFactory, ut as validationRules, bs as waitForServiceWorker, Ra as weightedFactory, Xe as withAuth, Xt as withMockAuth, Yt as wrapHttpClientWithMocks }; //# sourceMappingURL=index.js.map