sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
95 lines (94 loc) • 3.5 kB
JavaScript
;
var resizeObserver = require("@juggle/resize-observer"), node = require("esbuild-register/dist/node"), jsdomGlobal = require("jsdom-global"), pirates = require("pirates"), resolveFrom = require("resolve-from"), cli = require("../cli.js");
function _interopDefaultCompat(e) {
return e && typeof e == "object" && "default" in e ? e : { default: e };
}
var jsdomGlobal__default = /* @__PURE__ */ _interopDefaultCompat(jsdomGlobal), resolveFrom__default = /* @__PURE__ */ _interopDefaultCompat(resolveFrom);
const jsdomDefaultHtml = `<!doctype html>
<html>
<head><meta charset="utf-8"></head>
<body></body>
</html>`;
function mockBrowserEnvironment(basePath) {
if (global && global.window && "__mockedBySanity" in global.window)
return () => {
};
const domCleanup = jsdomGlobal__default.default(jsdomDefaultHtml, { url: "http://localhost:3333/" }), windowCleanup = () => global.window.close(), globalCleanup = provideFakeGlobals(basePath), cleanupFileLoader = pirates.addHook(
(code, filename) => `module.exports = ${JSON.stringify(filename)}`,
{
ignoreNodeModules: !1,
exts: getFileExtensions()
}
), { unregister: unregisterESBuild } = node.register({
target: "node18",
format: "cjs",
extensions: [".js", ".jsx", ".ts", ".tsx", ".mjs"],
jsx: "automatic",
define: {
// define the `process.env` global
...cli.getStudioEnvironmentVariables({ prefix: "process.env.", jsonEncode: !0 }),
// define the `import.meta.env` global
...cli.getStudioEnvironmentVariables({ prefix: "import.meta.env.", jsonEncode: !0 })
}
});
return function() {
unregisterESBuild(), cleanupFileLoader(), globalCleanup(), windowCleanup(), domCleanup();
};
}
const getFakeGlobals = (basePath) => {
var _a, _b, _c;
return {
__mockedBySanity: !0,
requestAnimationFrame: setImmediate,
cancelAnimationFrame: clearImmediate,
requestIdleCallback: setImmediate,
cancelIdleCallback: clearImmediate,
ace: tryGetAceGlobal(basePath),
InputEvent: (_a = global.window) == null ? void 0 : _a.InputEvent,
customElements: (_b = global.window) == null ? void 0 : _b.customElements,
ResizeObserver: ((_c = global.window) == null ? void 0 : _c.ResizeObserver) || resizeObserver.ResizeObserver
};
};
function provideFakeGlobals(basePath) {
const globalEnv = global, globalWindow = global.window, fakeGlobals = getFakeGlobals(basePath), stubbedGlobalKeys = [], stubbedWindowKeys = [];
for (const [rawKey, value] of Object.entries(fakeGlobals)) {
if (typeof value > "u")
continue;
const key = rawKey;
key in globalEnv || (globalEnv[key] = fakeGlobals[key], stubbedGlobalKeys.push(key)), key in global.window || (globalWindow[key] = fakeGlobals[key], stubbedWindowKeys.push(key));
}
return () => {
stubbedGlobalKeys.forEach((key) => {
delete globalEnv[key];
}), stubbedWindowKeys.forEach((key) => {
delete globalWindow[key];
});
};
}
function tryGetAceGlobal(basePath) {
const acePath = resolveFrom__default.default.silent(basePath, "ace-builds");
if (acePath)
try {
return require(acePath);
} catch {
return;
}
}
function getFileExtensions() {
return [
".jpeg",
".jpg",
".png",
".gif",
".svg",
".webp",
".woff",
".woff2",
".ttf",
".eot",
".otf",
".css"
];
}
exports.mockBrowserEnvironment = mockBrowserEnvironment;
//# sourceMappingURL=mockBrowserEnvironment.js.map