@dbs-portal/tool-mock
Version:
API mocking toolkit using MSW for DBS Portal development workflows
524 lines (523 loc) • 15.2 kB
JavaScript
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