UNPKG

storybook-mirage

Version:

A Storybook addon to use and interact with a MirageJS server

92 lines (91 loc) 3.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "withServer", { enumerable: true, get: function() { return withServer; } }); const _previewapi = require("storybook/preview-api"); const _miragejs = require("miragejs"); const _coreevents = require("storybook/internal/core-events"); const _constants = require("./constants"); const withServer = (StoryFn, context)=>{ const { logging, fixtures, handlers, timing, instance, factorySeeds } = (0, _previewapi.useParameter)(_constants.PARAM_KEY, { handlers: null, fixtures: null, logging: false, timing: null, instance: null, factorySeeds: null }); context.server = context.server ?? instance ?? makeServer(); context.server.logging = logging; const emit = (0, _previewapi.useChannel)({ [_constants.EVENTS.SET]: ({ verb, path, response })=>{ context.server[verb.toLowerCase()](path, ()=>{ if (typeof response === "number") return new _miragejs.Response(response); if (Array.isArray(response)) return new _miragejs.Response(...response); return new _miragejs.Response(200, {}, response); }); _previewapi.addons.getChannel().emit(_coreevents.FORCE_RE_RENDER); } }); if (fixtures) context.server.db.loadData(fixtures); if (timing !== null) context.server.timing = timing; if (handlers) { Object.keys(handlers).forEach((method)=>{ const set = handlers[method]; Object.keys(set).forEach((route)=>{ const value = set[route]; context.server[method](route, (...args)=>{ if (typeof value === "number") return new _miragejs.Response(value); if (Array.isArray(value)) return new _miragejs.Response(...value); if (typeof value === 'function') return value(...args); return new _miragejs.Response(200, {}, value); }); }); }); } if (factorySeeds) { Object.keys(factorySeeds).forEach((factoryName)=>{ const items = factorySeeds[factoryName]; if (typeof items === "number") context.server.createList(factoryName, items); else if (typeof items === "object") { items.forEach((item)=>{ const { traits = [], attrs = {}, count = 1 } = item; context.server.createList(factoryName, count, ...traits, attrs); }); } }); } const { handledRequest, unhandledRequest, erroredRequest } = context.server.pretender; context.server.pretender.handledRequest = function(verb, path, request) { handledRequest(verb, path, request); emit(_constants.EVENTS.REQUEST, { verb, path, request }); }; context.server.pretender.unhandledRequest = function(verb, path, request) { unhandledRequest(verb, path, request); emit(_constants.EVENTS.UNHANDLED, { verb, path, request }); }; context.server.pretender.erroredRequest = function(verb, path, request, error) { erroredRequest(verb, path, request, error); emit(_constants.EVENTS.ERROR, { verb, path, request, error }); }; return StoryFn(); };