vite-plugin-mock-dev-server
Advanced tools
| import { MockHttpItem, MockOptions, MockWebsocketItem } from "./types-BbbTJG0b.js"; | ||
| import { Transform } from "node:stream"; | ||
| import { IncomingMessage, OutgoingHttpHeaders, ServerResponse } from "node:http"; | ||
| //#region src/core/defineMock.d.ts | ||
| /** | ||
| * mock config Type helper | ||
| * | ||
| * mock配置 类型帮助函数 | ||
| * @param config see config docs: | ||
| * {@link https://vite-plugin-mock-dev-server.netlify.app/guide/mock-config en-US DOC} | | ||
| * {@link https://vite-plugin-mock-dev-server.netlify.app/zh/guide/mock-config zh-CN DOC} | ||
| * | ||
| * @example | ||
| * Mock Http Request | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/api/example', | ||
| * method: ['GET', 'POST'], | ||
| * body: { a: 1 }, | ||
| * }) | ||
| * ``` | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/api/example', | ||
| * method: 'GET', | ||
| * body: ({ query }) => ({ a: 1, b: query.b }), | ||
| * }) | ||
| * ``` | ||
| * @example | ||
| * Mock WebSocket | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/socket.io', | ||
| * ws: true, | ||
| * setup(wss) { | ||
| * wss.on('connection', (ws) => { | ||
| * ws.on('message', (rawData) => console.log(rawData)) | ||
| * ws.send('data') | ||
| * }) | ||
| * }, | ||
| * }) | ||
| * ``` | ||
| */ | ||
| declare function defineMock(config: MockHttpItem): MockHttpItem; | ||
| declare function defineMock(config: MockWebsocketItem): MockWebsocketItem; | ||
| declare function defineMock(config: MockOptions): MockOptions; | ||
| /** | ||
| * Return a custom defineMock function to support preprocessing of mock config. | ||
| * | ||
| * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。 | ||
| * @param transformer preprocessing function | ||
| * @example | ||
| * ```ts | ||
| * const definePostMock = createDefineMock((mock) => { | ||
| * mock.url = '/api/post/' + mock.url | ||
| * }) | ||
| * export default definePostMock({ | ||
| * url: 'list', | ||
| * body: [{ title: '1' }, { title: '2' }], | ||
| * }) | ||
| * ``` | ||
| */ | ||
| declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock; | ||
| //#endregion | ||
| //#region src/core/defineMockData.d.ts | ||
| type MockData<T = any> = readonly [() => T, (val: T | ((val: T) => T | void)) => void] & { | ||
| value: T; | ||
| }; | ||
| declare function defineMockData<T = any>(key: string, initialData: T): MockData<T>; | ||
| //#endregion | ||
| //#region src/core/sse.d.ts | ||
| interface SSEMessage { | ||
| data?: string | object; | ||
| comment?: string; | ||
| event?: string; | ||
| id?: string; | ||
| retry?: number; | ||
| } | ||
| interface WriteHeaders { | ||
| writeHead?: (statusCode: number, headers?: OutgoingHttpHeaders) => WriteHeaders; | ||
| flushHeaders?: () => void; | ||
| } | ||
| type HeaderStream = NodeJS.WritableStream & WriteHeaders; | ||
| /** | ||
| * Transforms "messages" to W3C event stream content. | ||
| * See https://html.spec.whatwg.org/multipage/server-sent-events.html | ||
| * A message is an object with one or more of the following properties: | ||
| * - data (String or object, which gets turned into JSON) | ||
| * - event | ||
| * - id | ||
| * - retry | ||
| * - comment | ||
| * | ||
| * If constructed with a HTTP Request, it will optimise the socket for streaming. | ||
| * If this stream is piped to an HTTP Response, it will set appropriate headers. | ||
| */ | ||
| declare class SSEStream extends Transform { | ||
| constructor(req: IncomingMessage); | ||
| pipe<T extends HeaderStream>(destination: T, options?: { | ||
| end?: boolean; | ||
| }): T; | ||
| _transform(message: SSEMessage, encoding: string, callback: (error?: (Error | null), data?: any) => void): void; | ||
| write(message: SSEMessage, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; | ||
| write(message: SSEMessage, cb?: (error: Error | null | undefined) => void): boolean; | ||
| destroy(error?: Error): this; | ||
| } | ||
| declare function createSSEStream(req: IncomingMessage, res: ServerResponse): SSEStream; | ||
| //#endregion | ||
| export { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData }; |
| import { MockHttpItem, MockOptions, MockWebsocketItem } from "./types-DpbHkRjL.cjs"; | ||
| import { IncomingMessage, OutgoingHttpHeaders, ServerResponse } from "node:http"; | ||
| import { Transform } from "node:stream"; | ||
| //#region src/core/defineMock.d.ts | ||
| /** | ||
| * mock config Type helper | ||
| * | ||
| * mock配置 类型帮助函数 | ||
| * @param config see config docs: | ||
| * {@link https://vite-plugin-mock-dev-server.netlify.app/guide/mock-config en-US DOC} | | ||
| * {@link https://vite-plugin-mock-dev-server.netlify.app/zh/guide/mock-config zh-CN DOC} | ||
| * | ||
| * @example | ||
| * Mock Http Request | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/api/example', | ||
| * method: ['GET', 'POST'], | ||
| * body: { a: 1 }, | ||
| * }) | ||
| * ``` | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/api/example', | ||
| * method: 'GET', | ||
| * body: ({ query }) => ({ a: 1, b: query.b }), | ||
| * }) | ||
| * ``` | ||
| * @example | ||
| * Mock WebSocket | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/socket.io', | ||
| * ws: true, | ||
| * setup(wss) { | ||
| * wss.on('connection', (ws) => { | ||
| * ws.on('message', (rawData) => console.log(rawData)) | ||
| * ws.send('data') | ||
| * }) | ||
| * }, | ||
| * }) | ||
| * ``` | ||
| */ | ||
| declare function defineMock(config: MockHttpItem): MockHttpItem; | ||
| declare function defineMock(config: MockWebsocketItem): MockWebsocketItem; | ||
| declare function defineMock(config: MockOptions): MockOptions; | ||
| /** | ||
| * Return a custom defineMock function to support preprocessing of mock config. | ||
| * | ||
| * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。 | ||
| * @param transformer preprocessing function | ||
| * @example | ||
| * ```ts | ||
| * const definePostMock = createDefineMock((mock) => { | ||
| * mock.url = '/api/post/' + mock.url | ||
| * }) | ||
| * export default definePostMock({ | ||
| * url: 'list', | ||
| * body: [{ title: '1' }, { title: '2' }], | ||
| * }) | ||
| * ``` | ||
| */ | ||
| declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock; | ||
| //#endregion | ||
| //#region src/core/defineMockData.d.ts | ||
| type MockData<T = any> = readonly [() => T, (val: T | ((val: T) => T | void)) => void] & { | ||
| value: T; | ||
| }; | ||
| declare function defineMockData<T = any>(key: string, initialData: T): MockData<T>; | ||
| //#endregion | ||
| //#region src/core/sse.d.ts | ||
| interface SSEMessage { | ||
| data?: string | object; | ||
| comment?: string; | ||
| event?: string; | ||
| id?: string; | ||
| retry?: number; | ||
| } | ||
| interface WriteHeaders { | ||
| writeHead?: (statusCode: number, headers?: OutgoingHttpHeaders) => WriteHeaders; | ||
| flushHeaders?: () => void; | ||
| } | ||
| type HeaderStream = NodeJS.WritableStream & WriteHeaders; | ||
| /** | ||
| * Transforms "messages" to W3C event stream content. | ||
| * See https://html.spec.whatwg.org/multipage/server-sent-events.html | ||
| * A message is an object with one or more of the following properties: | ||
| * - data (String or object, which gets turned into JSON) | ||
| * - event | ||
| * - id | ||
| * - retry | ||
| * - comment | ||
| * | ||
| * If constructed with a HTTP Request, it will optimise the socket for streaming. | ||
| * If this stream is piped to an HTTP Response, it will set appropriate headers. | ||
| */ | ||
| declare class SSEStream extends Transform { | ||
| constructor(req: IncomingMessage); | ||
| pipe<T extends HeaderStream>(destination: T, options?: { | ||
| end?: boolean; | ||
| }): T; | ||
| _transform(message: SSEMessage, encoding: string, callback: (error?: (Error | null), data?: any) => void): void; | ||
| write(message: SSEMessage, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; | ||
| write(message: SSEMessage, cb?: (error: Error | null | undefined) => void): boolean; | ||
| destroy(error?: Error): this; | ||
| } | ||
| declare function createSSEStream(req: IncomingMessage, res: ServerResponse): SSEStream; | ||
| //#endregion | ||
| export { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData }; |
| import { deepClone, deepEqual, isArray, isFunction } from "./dist-CAA1v47s.js"; | ||
| import { Transform } from "node:stream"; | ||
| //#region src/core/defineMock.ts | ||
| function defineMock(config) { | ||
| return config; | ||
| } | ||
| /** | ||
| * Return a custom defineMock function to support preprocessing of mock config. | ||
| * | ||
| * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。 | ||
| * @param transformer preprocessing function | ||
| * @example | ||
| * ```ts | ||
| * const definePostMock = createDefineMock((mock) => { | ||
| * mock.url = '/api/post/' + mock.url | ||
| * }) | ||
| * export default definePostMock({ | ||
| * url: 'list', | ||
| * body: [{ title: '1' }, { title: '2' }], | ||
| * }) | ||
| * ``` | ||
| */ | ||
| function createDefineMock(transformer) { | ||
| const define = (config) => { | ||
| if (isArray(config)) config = config.map((item) => transformer(item) || item); | ||
| else config = transformer(config) || config; | ||
| return config; | ||
| }; | ||
| return define; | ||
| } | ||
| //#endregion | ||
| //#region src/core/defineMockData.ts | ||
| const mockDataCache = /* @__PURE__ */ new Map(); | ||
| const responseCache = /* @__PURE__ */ new WeakMap(); | ||
| const staleInterval = 70; | ||
| var CacheImpl = class { | ||
| value; | ||
| #initialValue; | ||
| #lastUpdate; | ||
| constructor(value) { | ||
| this.value = value; | ||
| this.#initialValue = deepClone(value); | ||
| this.#lastUpdate = Date.now(); | ||
| } | ||
| hotUpdate(value) { | ||
| if (Date.now() - this.#lastUpdate < staleInterval) return; | ||
| if (!deepEqual(value, this.#initialValue)) { | ||
| this.value = value; | ||
| this.#initialValue = deepClone(value); | ||
| this.#lastUpdate = Date.now(); | ||
| } | ||
| } | ||
| }; | ||
| function defineMockData(key, initialData) { | ||
| if (!mockDataCache.has(key)) mockDataCache.set(key, new CacheImpl(initialData)); | ||
| const cache = mockDataCache.get(key); | ||
| cache.hotUpdate(initialData); | ||
| if (responseCache.has(cache)) return responseCache.get(cache); | ||
| const res = [() => cache.value, (val) => { | ||
| if (isFunction(val)) val = val(cache.value) ?? cache.value; | ||
| cache.value = val; | ||
| }]; | ||
| Object.defineProperty(res, "value", { | ||
| get() { | ||
| return cache.value; | ||
| }, | ||
| set(val) { | ||
| cache.value = val; | ||
| } | ||
| }); | ||
| responseCache.set(cache, res); | ||
| return res; | ||
| } | ||
| //#endregion | ||
| //#region src/core/sse.ts | ||
| /** | ||
| * Transforms "messages" to W3C event stream content. | ||
| * See https://html.spec.whatwg.org/multipage/server-sent-events.html | ||
| * A message is an object with one or more of the following properties: | ||
| * - data (String or object, which gets turned into JSON) | ||
| * - event | ||
| * - id | ||
| * - retry | ||
| * - comment | ||
| * | ||
| * If constructed with a HTTP Request, it will optimise the socket for streaming. | ||
| * If this stream is piped to an HTTP Response, it will set appropriate headers. | ||
| */ | ||
| var SSEStream = class extends Transform { | ||
| constructor(req) { | ||
| super({ objectMode: true }); | ||
| req.socket.setKeepAlive(true); | ||
| req.socket.setNoDelay(true); | ||
| req.socket.setTimeout(0); | ||
| } | ||
| pipe(destination, options) { | ||
| if (destination.writeHead) { | ||
| destination.writeHead(200, { | ||
| "Content-Type": "text/event-stream; charset=utf-8", | ||
| "Transfer-Encoding": "identity", | ||
| "Cache-Control": "no-cache", | ||
| "Connection": "keep-alive" | ||
| }); | ||
| destination.flushHeaders?.(); | ||
| } | ||
| destination.write(":ok\n\n"); | ||
| return super.pipe(destination, options); | ||
| } | ||
| _transform(message, encoding, callback) { | ||
| if (message.comment) this.push(`: ${message.comment}\n`); | ||
| if (message.event) this.push(`event: ${message.event}\n`); | ||
| if (message.id) this.push(`id: ${message.id}\n`); | ||
| if (message.retry) this.push(`retry: ${message.retry}\n`); | ||
| if (message.data) this.push(dataString(message.data)); | ||
| this.push("\n"); | ||
| callback(); | ||
| } | ||
| write(message, ...args) { | ||
| return super.write(message, ...args); | ||
| } | ||
| destroy(error) { | ||
| if (error) this.write({ | ||
| event: "error", | ||
| data: error.message | ||
| }); | ||
| this.end(); | ||
| return this; | ||
| } | ||
| }; | ||
| function dataString(data) { | ||
| if (typeof data === "object") return dataString(JSON.stringify(data)); | ||
| return data.split(/\r\n|\r|\n/).map((line) => `data: ${line}\n`).join(""); | ||
| } | ||
| function createSSEStream(req, res) { | ||
| const sse = new SSEStream(req); | ||
| sse.pipe(res); | ||
| return sse; | ||
| } | ||
| //#endregion | ||
| export { createDefineMock, createSSEStream, defineMock, defineMockData }; |
| const require_dist = require('./dist-DrfpZ4UT.cjs'); | ||
| const node_stream = require_dist.__toESM(require("node:stream")); | ||
| //#region src/core/defineMock.ts | ||
| function defineMock(config) { | ||
| return config; | ||
| } | ||
| /** | ||
| * Return a custom defineMock function to support preprocessing of mock config. | ||
| * | ||
| * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。 | ||
| * @param transformer preprocessing function | ||
| * @example | ||
| * ```ts | ||
| * const definePostMock = createDefineMock((mock) => { | ||
| * mock.url = '/api/post/' + mock.url | ||
| * }) | ||
| * export default definePostMock({ | ||
| * url: 'list', | ||
| * body: [{ title: '1' }, { title: '2' }], | ||
| * }) | ||
| * ``` | ||
| */ | ||
| function createDefineMock(transformer) { | ||
| const define = (config) => { | ||
| if (require_dist.isArray(config)) config = config.map((item) => transformer(item) || item); | ||
| else config = transformer(config) || config; | ||
| return config; | ||
| }; | ||
| return define; | ||
| } | ||
| //#endregion | ||
| //#region src/core/defineMockData.ts | ||
| const mockDataCache = /* @__PURE__ */ new Map(); | ||
| const responseCache = /* @__PURE__ */ new WeakMap(); | ||
| const staleInterval = 70; | ||
| var CacheImpl = class { | ||
| value; | ||
| #initialValue; | ||
| #lastUpdate; | ||
| constructor(value) { | ||
| this.value = value; | ||
| this.#initialValue = require_dist.deepClone(value); | ||
| this.#lastUpdate = Date.now(); | ||
| } | ||
| hotUpdate(value) { | ||
| if (Date.now() - this.#lastUpdate < staleInterval) return; | ||
| if (!require_dist.deepEqual(value, this.#initialValue)) { | ||
| this.value = value; | ||
| this.#initialValue = require_dist.deepClone(value); | ||
| this.#lastUpdate = Date.now(); | ||
| } | ||
| } | ||
| }; | ||
| function defineMockData(key, initialData) { | ||
| if (!mockDataCache.has(key)) mockDataCache.set(key, new CacheImpl(initialData)); | ||
| const cache = mockDataCache.get(key); | ||
| cache.hotUpdate(initialData); | ||
| if (responseCache.has(cache)) return responseCache.get(cache); | ||
| const res = [() => cache.value, (val) => { | ||
| if (require_dist.isFunction(val)) val = val(cache.value) ?? cache.value; | ||
| cache.value = val; | ||
| }]; | ||
| Object.defineProperty(res, "value", { | ||
| get() { | ||
| return cache.value; | ||
| }, | ||
| set(val) { | ||
| cache.value = val; | ||
| } | ||
| }); | ||
| responseCache.set(cache, res); | ||
| return res; | ||
| } | ||
| //#endregion | ||
| //#region src/core/sse.ts | ||
| /** | ||
| * Transforms "messages" to W3C event stream content. | ||
| * See https://html.spec.whatwg.org/multipage/server-sent-events.html | ||
| * A message is an object with one or more of the following properties: | ||
| * - data (String or object, which gets turned into JSON) | ||
| * - event | ||
| * - id | ||
| * - retry | ||
| * - comment | ||
| * | ||
| * If constructed with a HTTP Request, it will optimise the socket for streaming. | ||
| * If this stream is piped to an HTTP Response, it will set appropriate headers. | ||
| */ | ||
| var SSEStream = class extends node_stream.Transform { | ||
| constructor(req) { | ||
| super({ objectMode: true }); | ||
| req.socket.setKeepAlive(true); | ||
| req.socket.setNoDelay(true); | ||
| req.socket.setTimeout(0); | ||
| } | ||
| pipe(destination, options) { | ||
| if (destination.writeHead) { | ||
| destination.writeHead(200, { | ||
| "Content-Type": "text/event-stream; charset=utf-8", | ||
| "Transfer-Encoding": "identity", | ||
| "Cache-Control": "no-cache", | ||
| "Connection": "keep-alive" | ||
| }); | ||
| destination.flushHeaders?.(); | ||
| } | ||
| destination.write(":ok\n\n"); | ||
| return super.pipe(destination, options); | ||
| } | ||
| _transform(message, encoding, callback) { | ||
| if (message.comment) this.push(`: ${message.comment}\n`); | ||
| if (message.event) this.push(`event: ${message.event}\n`); | ||
| if (message.id) this.push(`id: ${message.id}\n`); | ||
| if (message.retry) this.push(`retry: ${message.retry}\n`); | ||
| if (message.data) this.push(dataString(message.data)); | ||
| this.push("\n"); | ||
| callback(); | ||
| } | ||
| write(message, ...args) { | ||
| return super.write(message, ...args); | ||
| } | ||
| destroy(error) { | ||
| if (error) this.write({ | ||
| event: "error", | ||
| data: error.message | ||
| }); | ||
| this.end(); | ||
| return this; | ||
| } | ||
| }; | ||
| function dataString(data) { | ||
| if (typeof data === "object") return dataString(JSON.stringify(data)); | ||
| return data.split(/\r\n|\r|\n/).map((line) => `data: ${line}\n`).join(""); | ||
| } | ||
| function createSSEStream(req, res) { | ||
| const sse = new SSEStream(req); | ||
| sse.pipe(res); | ||
| return sse; | ||
| } | ||
| //#endregion | ||
| Object.defineProperty(exports, 'createDefineMock', { | ||
| enumerable: true, | ||
| get: function () { | ||
| return createDefineMock; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, 'createSSEStream', { | ||
| enumerable: true, | ||
| get: function () { | ||
| return createSSEStream; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, 'defineMock', { | ||
| enumerable: true, | ||
| get: function () { | ||
| return defineMock; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, 'defineMockData', { | ||
| enumerable: true, | ||
| get: function () { | ||
| return defineMockData; | ||
| } | ||
| }); |
| import { LogLevel, MockHttpItem, MockOptions, MockServerPluginOptions, MockWebsocketItem, ServerBuildOption } from "./types-BbbTJG0b.js"; | ||
| import { CorsOptions } from "cors"; | ||
| import EventEmitter from "node:events"; | ||
| import { FSWatcher } from "chokidar"; | ||
| import { Server } from "node:http"; | ||
| import { Alias, Connect } from "vite"; | ||
| import { Http2SecureServer } from "node:http2"; | ||
| //#region src/core/logger.d.ts | ||
| interface Logger { | ||
| debug: (msg: string, level?: boolean | LogLevel) => void; | ||
| info: (msg: string, level?: boolean | LogLevel) => void; | ||
| warn: (msg: string, level?: boolean | LogLevel) => void; | ||
| error: (msg: string, level?: boolean | LogLevel) => void; | ||
| } | ||
| declare const logLevels: Record<LogLevel, number>; | ||
| declare function createLogger(prefix: string, defaultLevel?: LogLevel): Logger; | ||
| //#endregion | ||
| //#region src/core/resolvePluginOptions.d.ts | ||
| type ResolvedMockServerPluginOptions = Required<Omit<MockServerPluginOptions, "build" | "cors" | "wsPrefix" | "prefix">> & { | ||
| context: string; | ||
| logger: Logger; | ||
| alias: Alias[]; | ||
| define: Record<string, any>; | ||
| proxies: string[]; | ||
| wsProxies: string[]; | ||
| build: false | ServerBuildOption; | ||
| cors: false | CorsOptions; | ||
| }; | ||
| //#endregion | ||
| //#region src/core/mockCompiler.d.ts | ||
| /** | ||
| * mock配置加载器 | ||
| */ | ||
| declare class MockCompiler extends EventEmitter { | ||
| options: ResolvedMockServerPluginOptions; | ||
| moduleCache: Map<string, MockOptions | MockHttpItem | MockWebsocketItem>; | ||
| moduleDeps: Map<string, Set<string>>; | ||
| cwd: string; | ||
| mockWatcher: FSWatcher; | ||
| depsWatcher: FSWatcher; | ||
| moduleType: "cjs" | "esm"; | ||
| private _mockData; | ||
| constructor(options: ResolvedMockServerPluginOptions); | ||
| get mockData(): Record<string, MockOptions>; | ||
| run(watch?: boolean): void; | ||
| private watchMockEntry; | ||
| /** | ||
| * 监听 mock文件依赖的本地文件变动, | ||
| * mock依赖文件更新,mock文件也一并更新 | ||
| */ | ||
| private watchDeps; | ||
| close(): void; | ||
| private updateMockList; | ||
| private updateModuleDeps; | ||
| private loadMock; | ||
| } | ||
| //#endregion | ||
| //#region src/core/baseMiddleware.d.ts | ||
| interface BaseMiddlewareOptions { | ||
| formidableOptions: MockServerPluginOptions["formidableOptions"]; | ||
| cookiesOptions: MockServerPluginOptions["cookiesOptions"]; | ||
| bodyParserOptions: MockServerPluginOptions["bodyParserOptions"]; | ||
| proxies: string[]; | ||
| logger: Logger; | ||
| priority: MockServerPluginOptions["priority"]; | ||
| } | ||
| declare function baseMiddleware(compiler: MockCompiler, { | ||
| formidableOptions, | ||
| bodyParserOptions, | ||
| proxies, | ||
| cookiesOptions, | ||
| logger, | ||
| priority | ||
| }: BaseMiddlewareOptions): Connect.NextHandleFunction; | ||
| //#endregion | ||
| //#region src/core/transform.d.ts | ||
| type MockRawData = MockOptions | MockHttpItem | MockWebsocketItem | Record<string, MockOptions | MockHttpItem | MockWebsocketItem>; | ||
| declare function transformRawData(raw: MockRawData, __filepath__: string): MockOptions | MockHttpItem | MockWebsocketItem; | ||
| declare function transformMockData(mockList: Map<string, MockHttpItem | MockWebsocketItem | MockOptions> | (MockHttpItem | MockWebsocketItem | MockOptions)[]): Record<string, MockOptions>; | ||
| declare function sortByValidator(mocks: MockOptions): (MockHttpItem | MockWebsocketItem)[]; | ||
| //#endregion | ||
| //#region src/core/ws.d.ts | ||
| /** | ||
| * mock websocket | ||
| */ | ||
| declare function mockWebSocket(compiler: MockCompiler, server: Server | Http2SecureServer | null, { | ||
| wsProxies: proxies, | ||
| cookiesOptions, | ||
| logger | ||
| }: ResolvedMockServerPluginOptions): void; | ||
| //#endregion | ||
| export { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData }; |
| import { LogLevel, MockHttpItem, MockOptions, MockServerPluginOptions, MockWebsocketItem, ServerBuildOption } from "./types-DpbHkRjL.cjs"; | ||
| import { CorsOptions } from "cors"; | ||
| import { Server } from "node:http"; | ||
| import { Alias, Connect } from "vite"; | ||
| import { FSWatcher } from "chokidar"; | ||
| import EventEmitter from "node:events"; | ||
| import { Http2SecureServer } from "node:http2"; | ||
| //#region src/core/logger.d.ts | ||
| interface Logger { | ||
| debug: (msg: string, level?: boolean | LogLevel) => void; | ||
| info: (msg: string, level?: boolean | LogLevel) => void; | ||
| warn: (msg: string, level?: boolean | LogLevel) => void; | ||
| error: (msg: string, level?: boolean | LogLevel) => void; | ||
| } | ||
| declare const logLevels: Record<LogLevel, number>; | ||
| declare function createLogger(prefix: string, defaultLevel?: LogLevel): Logger; | ||
| //#endregion | ||
| //#region src/core/resolvePluginOptions.d.ts | ||
| type ResolvedMockServerPluginOptions = Required<Omit<MockServerPluginOptions, "build" | "cors" | "wsPrefix" | "prefix">> & { | ||
| context: string; | ||
| logger: Logger; | ||
| alias: Alias[]; | ||
| define: Record<string, any>; | ||
| proxies: string[]; | ||
| wsProxies: string[]; | ||
| build: false | ServerBuildOption; | ||
| cors: false | CorsOptions; | ||
| }; | ||
| //#endregion | ||
| //#region src/core/mockCompiler.d.ts | ||
| /** | ||
| * mock配置加载器 | ||
| */ | ||
| declare class MockCompiler extends EventEmitter { | ||
| options: ResolvedMockServerPluginOptions; | ||
| moduleCache: Map<string, MockOptions | MockHttpItem | MockWebsocketItem>; | ||
| moduleDeps: Map<string, Set<string>>; | ||
| cwd: string; | ||
| mockWatcher: FSWatcher; | ||
| depsWatcher: FSWatcher; | ||
| moduleType: "cjs" | "esm"; | ||
| private _mockData; | ||
| constructor(options: ResolvedMockServerPluginOptions); | ||
| get mockData(): Record<string, MockOptions>; | ||
| run(watch?: boolean): void; | ||
| private watchMockEntry; | ||
| /** | ||
| * 监听 mock文件依赖的本地文件变动, | ||
| * mock依赖文件更新,mock文件也一并更新 | ||
| */ | ||
| private watchDeps; | ||
| close(): void; | ||
| private updateMockList; | ||
| private updateModuleDeps; | ||
| private loadMock; | ||
| } | ||
| //#endregion | ||
| //#region src/core/baseMiddleware.d.ts | ||
| interface BaseMiddlewareOptions { | ||
| formidableOptions: MockServerPluginOptions["formidableOptions"]; | ||
| cookiesOptions: MockServerPluginOptions["cookiesOptions"]; | ||
| bodyParserOptions: MockServerPluginOptions["bodyParserOptions"]; | ||
| proxies: string[]; | ||
| logger: Logger; | ||
| priority: MockServerPluginOptions["priority"]; | ||
| } | ||
| declare function baseMiddleware(compiler: MockCompiler, { | ||
| formidableOptions, | ||
| bodyParserOptions, | ||
| proxies, | ||
| cookiesOptions, | ||
| logger, | ||
| priority | ||
| }: BaseMiddlewareOptions): Connect.NextHandleFunction; | ||
| //#endregion | ||
| //#region src/core/transform.d.ts | ||
| type MockRawData = MockOptions | MockHttpItem | MockWebsocketItem | Record<string, MockOptions | MockHttpItem | MockWebsocketItem>; | ||
| declare function transformRawData(raw: MockRawData, __filepath__: string): MockOptions | MockHttpItem | MockWebsocketItem; | ||
| declare function transformMockData(mockList: Map<string, MockHttpItem | MockWebsocketItem | MockOptions> | (MockHttpItem | MockWebsocketItem | MockOptions)[]): Record<string, MockOptions>; | ||
| declare function sortByValidator(mocks: MockOptions): (MockHttpItem | MockWebsocketItem)[]; | ||
| //#endregion | ||
| //#region src/core/ws.d.ts | ||
| /** | ||
| * mock websocket | ||
| */ | ||
| declare function mockWebSocket(compiler: MockCompiler, server: Server | Http2SecureServer | null, { | ||
| wsProxies: proxies, | ||
| cookiesOptions, | ||
| logger | ||
| }: ResolvedMockServerPluginOptions): void; | ||
| //#endregion | ||
| export { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData }; |
+1
-1
| require('./dist-DrfpZ4UT.cjs'); | ||
| const require_helper = require('./helper-CCVedLL0.cjs'); | ||
| const require_helper = require('./helper-FbtDOlwA.cjs'); | ||
@@ -4,0 +4,0 @@ exports.createDefineMock = require_helper.createDefineMock; |
| import { MockHttpItem, MockOptions, MockRequest, MockWebsocketItem } from "./types-DpbHkRjL.cjs"; | ||
| import { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-iVHsUTZ6.cjs"; | ||
| import { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-D4jXMDFX.cjs"; | ||
| export { HeaderStream, MockData, MockHttpItem, MockOptions, MockRequest, MockWebsocketItem, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData }; |
+1
-1
| import { MockHttpItem, MockOptions, MockRequest, MockWebsocketItem } from "./types-BbbTJG0b.js"; | ||
| import { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-r_bW1AY8.js"; | ||
| import { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-BGOKvYrM.js"; | ||
| export { HeaderStream, MockData, MockHttpItem, MockOptions, MockRequest, MockWebsocketItem, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData }; |
+1
-1
| import "./dist-CAA1v47s.js"; | ||
| import { createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-DhHU-YoO.js"; | ||
| import { createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-DHb-Bj_j.js"; | ||
| export { createDefineMock, createSSEStream, defineMock, defineMockData }; |
+5
-4
| Object.defineProperty(exports, '__esModule', { value: true }); | ||
| const require_dist = require('./dist-DrfpZ4UT.cjs'); | ||
| const require_helper = require('./helper-CCVedLL0.cjs'); | ||
| const require_helper = require('./helper-FbtDOlwA.cjs'); | ||
| const require_server = require('./server-BwOfV_62.cjs'); | ||
@@ -238,3 +238,3 @@ const picocolors = require_dist.__toESM(require("picocolors")); | ||
| connect: "^3.7.0", | ||
| ["vite-plugin-mock-dev-server"]: `^1.9.1`, | ||
| ["vite-plugin-mock-dev-server"]: `^1.9.2`, | ||
| cors: "^2.8.5" | ||
@@ -333,3 +333,3 @@ }, | ||
| } | ||
| run() { | ||
| run(watch) { | ||
| const { include, exclude } = this.options; | ||
@@ -342,2 +342,3 @@ /** | ||
| (0, fast_glob.default)(include, { cwd: this.cwd }).then((files) => files.filter(includeFilter).map((file) => () => this.loadMock(file))).then((loadList) => require_dist.promiseParallel(loadList, 10)).then(() => this.updateMockList()); | ||
| if (!watch) return; | ||
| this.watchMockEntry(); | ||
@@ -469,3 +470,3 @@ this.watchDeps(); | ||
| const compiler = createMockCompiler(options); | ||
| compiler.run(); | ||
| compiler.run(!!server); | ||
| /** | ||
@@ -472,0 +473,0 @@ * 监听 mock 文件是否发生变更,如何配置了 reload 为 true, |
+2
-2
| import { FormidableFile, MockHttpItem, MockOptions, MockRequest, MockServerPluginOptions, MockWebsocketItem } from "./types-DpbHkRjL.cjs"; | ||
| import { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-iVHsUTZ6.cjs"; | ||
| import { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData } from "./server-B5Ua2cmP.cjs"; | ||
| import { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-D4jXMDFX.cjs"; | ||
| import { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData } from "./server-DIZZ3-ar.cjs"; | ||
| import { Plugin } from "vite"; | ||
@@ -5,0 +5,0 @@ |
+2
-2
| import { FormidableFile, MockHttpItem, MockOptions, MockRequest, MockServerPluginOptions, MockWebsocketItem } from "./types-BbbTJG0b.js"; | ||
| import { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-r_bW1AY8.js"; | ||
| import { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData } from "./server-DgmHgcvl.js"; | ||
| import { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-BGOKvYrM.js"; | ||
| import { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData } from "./server-CmsjYpLV.js"; | ||
| import { Plugin } from "vite"; | ||
@@ -5,0 +5,0 @@ |
+5
-4
| import { isArray, isBoolean, promiseParallel, toArray, uniq } from "./dist-CAA1v47s.js"; | ||
| import { createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-DhHU-YoO.js"; | ||
| import { createDefineMock, createSSEStream, defineMock, defineMockData } from "./helper-DHb-Bj_j.js"; | ||
| import { baseMiddleware, createLogger, debug, doesProxyContextMatchUrl, ensureProxies, logLevels, lookupFile, mockWebSocket, normalizePath, recoverRequest, sortByValidator, transformMockData, transformRawData, urlParse } from "./server-C-u7jwot.js"; | ||
@@ -237,3 +237,3 @@ import pc from "picocolors"; | ||
| connect: "^3.7.0", | ||
| ["vite-plugin-mock-dev-server"]: `^1.9.1`, | ||
| ["vite-plugin-mock-dev-server"]: `^1.9.2`, | ||
| cors: "^2.8.5" | ||
@@ -332,3 +332,3 @@ }, | ||
| } | ||
| run() { | ||
| run(watch) { | ||
| const { include, exclude } = this.options; | ||
@@ -341,2 +341,3 @@ /** | ||
| fg(include, { cwd: this.cwd }).then((files) => files.filter(includeFilter).map((file) => () => this.loadMock(file))).then((loadList) => promiseParallel(loadList, 10)).then(() => this.updateMockList()); | ||
| if (!watch) return; | ||
| this.watchMockEntry(); | ||
@@ -468,3 +469,3 @@ this.watchDeps(); | ||
| const compiler = createMockCompiler(options); | ||
| compiler.run(); | ||
| compiler.run(!!server); | ||
| /** | ||
@@ -471,0 +472,0 @@ * 监听 mock 文件是否发生变更,如何配置了 reload 为 true, |
| import "./types-DpbHkRjL.cjs"; | ||
| import { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData } from "./server-B5Ua2cmP.cjs"; | ||
| import { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData } from "./server-DIZZ3-ar.cjs"; | ||
| export { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData }; |
+1
-1
| import "./types-BbbTJG0b.js"; | ||
| import { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData } from "./server-DgmHgcvl.js"; | ||
| import { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData } from "./server-CmsjYpLV.js"; | ||
| export { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData }; |
+3
-3
| { | ||
| "name": "vite-plugin-mock-dev-server", | ||
| "type": "module", | ||
| "version": "1.9.2", | ||
| "version": "1.9.3", | ||
| "author": "pengzhanbo <q942450674@outlook.com> (https://github.com/pengzhanbo)", | ||
@@ -89,4 +89,4 @@ "license": "MIT", | ||
| "@pengzhanbo/utils": "^2.1.0", | ||
| "esbuild": "^0.25.8", | ||
| "vite": "^7.1.1" | ||
| "esbuild": "^0.25.9", | ||
| "vite": "^7.1.2" | ||
| }, | ||
@@ -93,0 +93,0 @@ "publishConfig": { |
| const require_dist = require('./dist-DrfpZ4UT.cjs'); | ||
| const node_stream = require_dist.__toESM(require("node:stream")); | ||
| //#region src/core/defineMock.ts | ||
| function defineMock(config) { | ||
| return config; | ||
| } | ||
| /** | ||
| * Return a custom defineMock function to support preprocessing of mock config. | ||
| * | ||
| * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。 | ||
| * @param transformer preprocessing function | ||
| * @example | ||
| * ```ts | ||
| * const definePostMock = createDefineMock((mock) => { | ||
| * mock.url = '/api/post/' + mock.url | ||
| * }) | ||
| * export default definePostMock({ | ||
| * url: 'list', | ||
| * body: [{ title: '1' }, { title: '2' }], | ||
| * }) | ||
| * ``` | ||
| */ | ||
| function createDefineMock(transformer) { | ||
| const define = (config) => { | ||
| if (require_dist.isArray(config)) config = config.map((item) => transformer(item) || item); | ||
| else config = transformer(config) || config; | ||
| return config; | ||
| }; | ||
| return define; | ||
| } | ||
| //#endregion | ||
| //#region src/core/defineMockData.ts | ||
| const mockDataCache = /* @__PURE__ */ new Map(); | ||
| const responseCache = /* @__PURE__ */ new WeakMap(); | ||
| const staleInterval = 70; | ||
| var CacheImpl = class { | ||
| value; | ||
| #initialValue; | ||
| #lastUpdate; | ||
| constructor(value) { | ||
| this.value = value; | ||
| this.#initialValue = require_dist.deepClone(value); | ||
| this.#lastUpdate = Date.now(); | ||
| } | ||
| hotUpdate(value) { | ||
| if (Date.now() - this.#lastUpdate < staleInterval) return; | ||
| if (!require_dist.deepEqual(value, this.#initialValue)) { | ||
| this.value = value; | ||
| this.#initialValue = require_dist.deepClone(value); | ||
| this.#lastUpdate = Date.now(); | ||
| } | ||
| } | ||
| }; | ||
| function defineMockData(key, initialData) { | ||
| if (!mockDataCache.has(key)) mockDataCache.set(key, new CacheImpl(initialData)); | ||
| const cache = mockDataCache.get(key); | ||
| cache.hotUpdate(initialData); | ||
| if (responseCache.has(cache)) return responseCache.get(cache); | ||
| const res = [() => cache.value, (val) => { | ||
| if (require_dist.isFunction(val)) val = val(cache.value) ?? cache.value; | ||
| cache.value = val; | ||
| }]; | ||
| Object.defineProperty(res, "value", { | ||
| get() { | ||
| return cache.value; | ||
| }, | ||
| set(val) { | ||
| cache.value = val; | ||
| } | ||
| }); | ||
| responseCache.set(cache, res); | ||
| return res; | ||
| } | ||
| //#endregion | ||
| //#region src/core/sse.ts | ||
| /** | ||
| * Transforms "messages" to W3C event stream content. | ||
| * See https://html.spec.whatwg.org/multipage/server-sent-events.html | ||
| * A message is an object with one or more of the following properties: | ||
| * - data (String or object, which gets turned into JSON) | ||
| * - event | ||
| * - id | ||
| * - retry | ||
| * - comment | ||
| * | ||
| * If constructed with a HTTP Request, it will optimise the socket for streaming. | ||
| * If this stream is piped to an HTTP Response, it will set appropriate headers. | ||
| */ | ||
| var SSEStream = class extends node_stream.Transform { | ||
| constructor(req) { | ||
| super({ objectMode: true }); | ||
| req.socket.setKeepAlive(true); | ||
| req.socket.setNoDelay(true); | ||
| req.socket.setTimeout(0); | ||
| } | ||
| pipe(destination, options) { | ||
| if (destination.writeHead) { | ||
| destination.writeHead(200, { | ||
| "Content-Type": "text/event-stream; charset=utf-8", | ||
| "Transfer-Encoding": "identity", | ||
| "Cache-Control": "no-cache", | ||
| "Connection": "keep-alive" | ||
| }); | ||
| destination.flushHeaders?.(); | ||
| } | ||
| destination.write(":ok\n\n"); | ||
| return super.pipe(destination, options); | ||
| } | ||
| _transform(message, encoding, callback) { | ||
| if (message.comment) this.push(`: ${message.comment}\n`); | ||
| if (message.event) this.push(`event: ${message.event}\n`); | ||
| if (message.id) this.push(`id: ${message.id}\n`); | ||
| if (message.retry) this.push(`retry: ${message.retry}\n`); | ||
| if (message.data) this.push(dataString(message.data)); | ||
| this.push("\n"); | ||
| callback(); | ||
| } | ||
| write(message, ...args) { | ||
| return super.write(message, ...args); | ||
| } | ||
| }; | ||
| function dataString(data) { | ||
| if (typeof data === "object") return dataString(JSON.stringify(data)); | ||
| return data.split(/\r\n|\r|\n/).map((line) => `data: ${line}\n`).join(""); | ||
| } | ||
| function createSSEStream(req, res) { | ||
| const sse = new SSEStream(req); | ||
| sse.pipe(res); | ||
| return sse; | ||
| } | ||
| //#endregion | ||
| Object.defineProperty(exports, 'createDefineMock', { | ||
| enumerable: true, | ||
| get: function () { | ||
| return createDefineMock; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, 'createSSEStream', { | ||
| enumerable: true, | ||
| get: function () { | ||
| return createSSEStream; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, 'defineMock', { | ||
| enumerable: true, | ||
| get: function () { | ||
| return defineMock; | ||
| } | ||
| }); | ||
| Object.defineProperty(exports, 'defineMockData', { | ||
| enumerable: true, | ||
| get: function () { | ||
| return defineMockData; | ||
| } | ||
| }); |
| import { deepClone, deepEqual, isArray, isFunction } from "./dist-CAA1v47s.js"; | ||
| import { Transform } from "node:stream"; | ||
| //#region src/core/defineMock.ts | ||
| function defineMock(config) { | ||
| return config; | ||
| } | ||
| /** | ||
| * Return a custom defineMock function to support preprocessing of mock config. | ||
| * | ||
| * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。 | ||
| * @param transformer preprocessing function | ||
| * @example | ||
| * ```ts | ||
| * const definePostMock = createDefineMock((mock) => { | ||
| * mock.url = '/api/post/' + mock.url | ||
| * }) | ||
| * export default definePostMock({ | ||
| * url: 'list', | ||
| * body: [{ title: '1' }, { title: '2' }], | ||
| * }) | ||
| * ``` | ||
| */ | ||
| function createDefineMock(transformer) { | ||
| const define = (config) => { | ||
| if (isArray(config)) config = config.map((item) => transformer(item) || item); | ||
| else config = transformer(config) || config; | ||
| return config; | ||
| }; | ||
| return define; | ||
| } | ||
| //#endregion | ||
| //#region src/core/defineMockData.ts | ||
| const mockDataCache = /* @__PURE__ */ new Map(); | ||
| const responseCache = /* @__PURE__ */ new WeakMap(); | ||
| const staleInterval = 70; | ||
| var CacheImpl = class { | ||
| value; | ||
| #initialValue; | ||
| #lastUpdate; | ||
| constructor(value) { | ||
| this.value = value; | ||
| this.#initialValue = deepClone(value); | ||
| this.#lastUpdate = Date.now(); | ||
| } | ||
| hotUpdate(value) { | ||
| if (Date.now() - this.#lastUpdate < staleInterval) return; | ||
| if (!deepEqual(value, this.#initialValue)) { | ||
| this.value = value; | ||
| this.#initialValue = deepClone(value); | ||
| this.#lastUpdate = Date.now(); | ||
| } | ||
| } | ||
| }; | ||
| function defineMockData(key, initialData) { | ||
| if (!mockDataCache.has(key)) mockDataCache.set(key, new CacheImpl(initialData)); | ||
| const cache = mockDataCache.get(key); | ||
| cache.hotUpdate(initialData); | ||
| if (responseCache.has(cache)) return responseCache.get(cache); | ||
| const res = [() => cache.value, (val) => { | ||
| if (isFunction(val)) val = val(cache.value) ?? cache.value; | ||
| cache.value = val; | ||
| }]; | ||
| Object.defineProperty(res, "value", { | ||
| get() { | ||
| return cache.value; | ||
| }, | ||
| set(val) { | ||
| cache.value = val; | ||
| } | ||
| }); | ||
| responseCache.set(cache, res); | ||
| return res; | ||
| } | ||
| //#endregion | ||
| //#region src/core/sse.ts | ||
| /** | ||
| * Transforms "messages" to W3C event stream content. | ||
| * See https://html.spec.whatwg.org/multipage/server-sent-events.html | ||
| * A message is an object with one or more of the following properties: | ||
| * - data (String or object, which gets turned into JSON) | ||
| * - event | ||
| * - id | ||
| * - retry | ||
| * - comment | ||
| * | ||
| * If constructed with a HTTP Request, it will optimise the socket for streaming. | ||
| * If this stream is piped to an HTTP Response, it will set appropriate headers. | ||
| */ | ||
| var SSEStream = class extends Transform { | ||
| constructor(req) { | ||
| super({ objectMode: true }); | ||
| req.socket.setKeepAlive(true); | ||
| req.socket.setNoDelay(true); | ||
| req.socket.setTimeout(0); | ||
| } | ||
| pipe(destination, options) { | ||
| if (destination.writeHead) { | ||
| destination.writeHead(200, { | ||
| "Content-Type": "text/event-stream; charset=utf-8", | ||
| "Transfer-Encoding": "identity", | ||
| "Cache-Control": "no-cache", | ||
| "Connection": "keep-alive" | ||
| }); | ||
| destination.flushHeaders?.(); | ||
| } | ||
| destination.write(":ok\n\n"); | ||
| return super.pipe(destination, options); | ||
| } | ||
| _transform(message, encoding, callback) { | ||
| if (message.comment) this.push(`: ${message.comment}\n`); | ||
| if (message.event) this.push(`event: ${message.event}\n`); | ||
| if (message.id) this.push(`id: ${message.id}\n`); | ||
| if (message.retry) this.push(`retry: ${message.retry}\n`); | ||
| if (message.data) this.push(dataString(message.data)); | ||
| this.push("\n"); | ||
| callback(); | ||
| } | ||
| write(message, ...args) { | ||
| return super.write(message, ...args); | ||
| } | ||
| }; | ||
| function dataString(data) { | ||
| if (typeof data === "object") return dataString(JSON.stringify(data)); | ||
| return data.split(/\r\n|\r|\n/).map((line) => `data: ${line}\n`).join(""); | ||
| } | ||
| function createSSEStream(req, res) { | ||
| const sse = new SSEStream(req); | ||
| sse.pipe(res); | ||
| return sse; | ||
| } | ||
| //#endregion | ||
| export { createDefineMock, createSSEStream, defineMock, defineMockData }; |
| import { MockHttpItem, MockOptions, MockWebsocketItem } from "./types-DpbHkRjL.cjs"; | ||
| import { IncomingMessage, OutgoingHttpHeaders, ServerResponse } from "node:http"; | ||
| import { Transform } from "node:stream"; | ||
| //#region src/core/defineMock.d.ts | ||
| /** | ||
| * mock config Type helper | ||
| * | ||
| * mock配置 类型帮助函数 | ||
| * @param config see config docs: | ||
| * {@link https://vite-plugin-mock-dev-server.netlify.app/guide/mock-config en-US DOC} | | ||
| * {@link https://vite-plugin-mock-dev-server.netlify.app/zh/guide/mock-config zh-CN DOC} | ||
| * | ||
| * @example | ||
| * Mock Http Request | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/api/example', | ||
| * method: ['GET', 'POST'], | ||
| * body: { a: 1 }, | ||
| * }) | ||
| * ``` | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/api/example', | ||
| * method: 'GET', | ||
| * body: ({ query }) => ({ a: 1, b: query.b }), | ||
| * }) | ||
| * ``` | ||
| * @example | ||
| * Mock WebSocket | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/socket.io', | ||
| * ws: true, | ||
| * setup(wss) { | ||
| * wss.on('connection', (ws) => { | ||
| * ws.on('message', (rawData) => console.log(rawData)) | ||
| * ws.send('data') | ||
| * }) | ||
| * }, | ||
| * }) | ||
| * ``` | ||
| */ | ||
| declare function defineMock(config: MockHttpItem): MockHttpItem; | ||
| declare function defineMock(config: MockWebsocketItem): MockWebsocketItem; | ||
| declare function defineMock(config: MockOptions): MockOptions; | ||
| /** | ||
| * Return a custom defineMock function to support preprocessing of mock config. | ||
| * | ||
| * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。 | ||
| * @param transformer preprocessing function | ||
| * @example | ||
| * ```ts | ||
| * const definePostMock = createDefineMock((mock) => { | ||
| * mock.url = '/api/post/' + mock.url | ||
| * }) | ||
| * export default definePostMock({ | ||
| * url: 'list', | ||
| * body: [{ title: '1' }, { title: '2' }], | ||
| * }) | ||
| * ``` | ||
| */ | ||
| declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock; | ||
| //#endregion | ||
| //#region src/core/defineMockData.d.ts | ||
| type MockData<T = any> = readonly [() => T, (val: T | ((val: T) => T | void)) => void] & { | ||
| value: T; | ||
| }; | ||
| declare function defineMockData<T = any>(key: string, initialData: T): MockData<T>; | ||
| //#endregion | ||
| //#region src/core/sse.d.ts | ||
| interface SSEMessage { | ||
| data?: string | object; | ||
| comment?: string; | ||
| event?: string; | ||
| id?: string; | ||
| retry?: number; | ||
| } | ||
| interface WriteHeaders { | ||
| writeHead?: (statusCode: number, headers?: OutgoingHttpHeaders) => WriteHeaders; | ||
| flushHeaders?: () => void; | ||
| } | ||
| type HeaderStream = NodeJS.WritableStream & WriteHeaders; | ||
| /** | ||
| * Transforms "messages" to W3C event stream content. | ||
| * See https://html.spec.whatwg.org/multipage/server-sent-events.html | ||
| * A message is an object with one or more of the following properties: | ||
| * - data (String or object, which gets turned into JSON) | ||
| * - event | ||
| * - id | ||
| * - retry | ||
| * - comment | ||
| * | ||
| * If constructed with a HTTP Request, it will optimise the socket for streaming. | ||
| * If this stream is piped to an HTTP Response, it will set appropriate headers. | ||
| */ | ||
| declare class SSEStream extends Transform { | ||
| constructor(req: IncomingMessage); | ||
| pipe<T extends HeaderStream>(destination: T, options?: { | ||
| end?: boolean; | ||
| }): T; | ||
| _transform(message: SSEMessage, encoding: string, callback: (error?: (Error | null), data?: any) => void): void; | ||
| write(message: SSEMessage, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; | ||
| write(message: SSEMessage, cb?: (error: Error | null | undefined) => void): boolean; | ||
| } | ||
| declare function createSSEStream(req: IncomingMessage, res: ServerResponse): SSEStream; | ||
| //#endregion | ||
| export { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData }; |
| import { MockHttpItem, MockOptions, MockWebsocketItem } from "./types-BbbTJG0b.js"; | ||
| import { Transform } from "node:stream"; | ||
| import { IncomingMessage, OutgoingHttpHeaders, ServerResponse } from "node:http"; | ||
| //#region src/core/defineMock.d.ts | ||
| /** | ||
| * mock config Type helper | ||
| * | ||
| * mock配置 类型帮助函数 | ||
| * @param config see config docs: | ||
| * {@link https://vite-plugin-mock-dev-server.netlify.app/guide/mock-config en-US DOC} | | ||
| * {@link https://vite-plugin-mock-dev-server.netlify.app/zh/guide/mock-config zh-CN DOC} | ||
| * | ||
| * @example | ||
| * Mock Http Request | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/api/example', | ||
| * method: ['GET', 'POST'], | ||
| * body: { a: 1 }, | ||
| * }) | ||
| * ``` | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/api/example', | ||
| * method: 'GET', | ||
| * body: ({ query }) => ({ a: 1, b: query.b }), | ||
| * }) | ||
| * ``` | ||
| * @example | ||
| * Mock WebSocket | ||
| * ```ts | ||
| * export default defineMock({ | ||
| * url: '/socket.io', | ||
| * ws: true, | ||
| * setup(wss) { | ||
| * wss.on('connection', (ws) => { | ||
| * ws.on('message', (rawData) => console.log(rawData)) | ||
| * ws.send('data') | ||
| * }) | ||
| * }, | ||
| * }) | ||
| * ``` | ||
| */ | ||
| declare function defineMock(config: MockHttpItem): MockHttpItem; | ||
| declare function defineMock(config: MockWebsocketItem): MockWebsocketItem; | ||
| declare function defineMock(config: MockOptions): MockOptions; | ||
| /** | ||
| * Return a custom defineMock function to support preprocessing of mock config. | ||
| * | ||
| * 返回一个自定义的 defineMock 函数,用于支持对 mock config 的预处理。 | ||
| * @param transformer preprocessing function | ||
| * @example | ||
| * ```ts | ||
| * const definePostMock = createDefineMock((mock) => { | ||
| * mock.url = '/api/post/' + mock.url | ||
| * }) | ||
| * export default definePostMock({ | ||
| * url: 'list', | ||
| * body: [{ title: '1' }, { title: '2' }], | ||
| * }) | ||
| * ``` | ||
| */ | ||
| declare function createDefineMock(transformer: (mock: MockHttpItem | MockWebsocketItem) => MockHttpItem | MockWebsocketItem | void): typeof defineMock; | ||
| //#endregion | ||
| //#region src/core/defineMockData.d.ts | ||
| type MockData<T = any> = readonly [() => T, (val: T | ((val: T) => T | void)) => void] & { | ||
| value: T; | ||
| }; | ||
| declare function defineMockData<T = any>(key: string, initialData: T): MockData<T>; | ||
| //#endregion | ||
| //#region src/core/sse.d.ts | ||
| interface SSEMessage { | ||
| data?: string | object; | ||
| comment?: string; | ||
| event?: string; | ||
| id?: string; | ||
| retry?: number; | ||
| } | ||
| interface WriteHeaders { | ||
| writeHead?: (statusCode: number, headers?: OutgoingHttpHeaders) => WriteHeaders; | ||
| flushHeaders?: () => void; | ||
| } | ||
| type HeaderStream = NodeJS.WritableStream & WriteHeaders; | ||
| /** | ||
| * Transforms "messages" to W3C event stream content. | ||
| * See https://html.spec.whatwg.org/multipage/server-sent-events.html | ||
| * A message is an object with one or more of the following properties: | ||
| * - data (String or object, which gets turned into JSON) | ||
| * - event | ||
| * - id | ||
| * - retry | ||
| * - comment | ||
| * | ||
| * If constructed with a HTTP Request, it will optimise the socket for streaming. | ||
| * If this stream is piped to an HTTP Response, it will set appropriate headers. | ||
| */ | ||
| declare class SSEStream extends Transform { | ||
| constructor(req: IncomingMessage); | ||
| pipe<T extends HeaderStream>(destination: T, options?: { | ||
| end?: boolean; | ||
| }): T; | ||
| _transform(message: SSEMessage, encoding: string, callback: (error?: (Error | null), data?: any) => void): void; | ||
| write(message: SSEMessage, encoding?: BufferEncoding, cb?: (error: Error | null | undefined) => void): boolean; | ||
| write(message: SSEMessage, cb?: (error: Error | null | undefined) => void): boolean; | ||
| } | ||
| declare function createSSEStream(req: IncomingMessage, res: ServerResponse): SSEStream; | ||
| //#endregion | ||
| export { HeaderStream, MockData, SSEMessage, createDefineMock, createSSEStream, defineMock, defineMockData }; |
| import { LogLevel, MockHttpItem, MockOptions, MockServerPluginOptions, MockWebsocketItem, ServerBuildOption } from "./types-DpbHkRjL.cjs"; | ||
| import { CorsOptions } from "cors"; | ||
| import { Server } from "node:http"; | ||
| import { Alias, Connect } from "vite"; | ||
| import { FSWatcher } from "chokidar"; | ||
| import EventEmitter from "node:events"; | ||
| import { Http2SecureServer } from "node:http2"; | ||
| //#region src/core/logger.d.ts | ||
| interface Logger { | ||
| debug: (msg: string, level?: boolean | LogLevel) => void; | ||
| info: (msg: string, level?: boolean | LogLevel) => void; | ||
| warn: (msg: string, level?: boolean | LogLevel) => void; | ||
| error: (msg: string, level?: boolean | LogLevel) => void; | ||
| } | ||
| declare const logLevels: Record<LogLevel, number>; | ||
| declare function createLogger(prefix: string, defaultLevel?: LogLevel): Logger; | ||
| //#endregion | ||
| //#region src/core/resolvePluginOptions.d.ts | ||
| type ResolvedMockServerPluginOptions = Required<Omit<MockServerPluginOptions, "build" | "cors" | "wsPrefix" | "prefix">> & { | ||
| context: string; | ||
| logger: Logger; | ||
| alias: Alias[]; | ||
| define: Record<string, any>; | ||
| proxies: string[]; | ||
| wsProxies: string[]; | ||
| build: false | ServerBuildOption; | ||
| cors: false | CorsOptions; | ||
| }; | ||
| //#endregion | ||
| //#region src/core/mockCompiler.d.ts | ||
| /** | ||
| * mock配置加载器 | ||
| */ | ||
| declare class MockCompiler extends EventEmitter { | ||
| options: ResolvedMockServerPluginOptions; | ||
| moduleCache: Map<string, MockOptions | MockHttpItem | MockWebsocketItem>; | ||
| moduleDeps: Map<string, Set<string>>; | ||
| cwd: string; | ||
| mockWatcher: FSWatcher; | ||
| depsWatcher: FSWatcher; | ||
| moduleType: "cjs" | "esm"; | ||
| private _mockData; | ||
| constructor(options: ResolvedMockServerPluginOptions); | ||
| get mockData(): Record<string, MockOptions>; | ||
| run(): void; | ||
| private watchMockEntry; | ||
| /** | ||
| * 监听 mock文件依赖的本地文件变动, | ||
| * mock依赖文件更新,mock文件也一并更新 | ||
| */ | ||
| private watchDeps; | ||
| close(): void; | ||
| private updateMockList; | ||
| private updateModuleDeps; | ||
| private loadMock; | ||
| } | ||
| //#endregion | ||
| //#region src/core/baseMiddleware.d.ts | ||
| interface BaseMiddlewareOptions { | ||
| formidableOptions: MockServerPluginOptions["formidableOptions"]; | ||
| cookiesOptions: MockServerPluginOptions["cookiesOptions"]; | ||
| bodyParserOptions: MockServerPluginOptions["bodyParserOptions"]; | ||
| proxies: string[]; | ||
| logger: Logger; | ||
| priority: MockServerPluginOptions["priority"]; | ||
| } | ||
| declare function baseMiddleware(compiler: MockCompiler, { | ||
| formidableOptions, | ||
| bodyParserOptions, | ||
| proxies, | ||
| cookiesOptions, | ||
| logger, | ||
| priority | ||
| }: BaseMiddlewareOptions): Connect.NextHandleFunction; | ||
| //#endregion | ||
| //#region src/core/transform.d.ts | ||
| type MockRawData = MockOptions | MockHttpItem | MockWebsocketItem | Record<string, MockOptions | MockHttpItem | MockWebsocketItem>; | ||
| declare function transformRawData(raw: MockRawData, __filepath__: string): MockOptions | MockHttpItem | MockWebsocketItem; | ||
| declare function transformMockData(mockList: Map<string, MockHttpItem | MockWebsocketItem | MockOptions> | (MockHttpItem | MockWebsocketItem | MockOptions)[]): Record<string, MockOptions>; | ||
| declare function sortByValidator(mocks: MockOptions): (MockHttpItem | MockWebsocketItem)[]; | ||
| //#endregion | ||
| //#region src/core/ws.d.ts | ||
| /** | ||
| * mock websocket | ||
| */ | ||
| declare function mockWebSocket(compiler: MockCompiler, server: Server | Http2SecureServer | null, { | ||
| wsProxies: proxies, | ||
| cookiesOptions, | ||
| logger | ||
| }: ResolvedMockServerPluginOptions): void; | ||
| //#endregion | ||
| export { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData }; |
| import { LogLevel, MockHttpItem, MockOptions, MockServerPluginOptions, MockWebsocketItem, ServerBuildOption } from "./types-BbbTJG0b.js"; | ||
| import { CorsOptions } from "cors"; | ||
| import EventEmitter from "node:events"; | ||
| import { FSWatcher } from "chokidar"; | ||
| import { Server } from "node:http"; | ||
| import { Alias, Connect } from "vite"; | ||
| import { Http2SecureServer } from "node:http2"; | ||
| //#region src/core/logger.d.ts | ||
| interface Logger { | ||
| debug: (msg: string, level?: boolean | LogLevel) => void; | ||
| info: (msg: string, level?: boolean | LogLevel) => void; | ||
| warn: (msg: string, level?: boolean | LogLevel) => void; | ||
| error: (msg: string, level?: boolean | LogLevel) => void; | ||
| } | ||
| declare const logLevels: Record<LogLevel, number>; | ||
| declare function createLogger(prefix: string, defaultLevel?: LogLevel): Logger; | ||
| //#endregion | ||
| //#region src/core/resolvePluginOptions.d.ts | ||
| type ResolvedMockServerPluginOptions = Required<Omit<MockServerPluginOptions, "build" | "cors" | "wsPrefix" | "prefix">> & { | ||
| context: string; | ||
| logger: Logger; | ||
| alias: Alias[]; | ||
| define: Record<string, any>; | ||
| proxies: string[]; | ||
| wsProxies: string[]; | ||
| build: false | ServerBuildOption; | ||
| cors: false | CorsOptions; | ||
| }; | ||
| //#endregion | ||
| //#region src/core/mockCompiler.d.ts | ||
| /** | ||
| * mock配置加载器 | ||
| */ | ||
| declare class MockCompiler extends EventEmitter { | ||
| options: ResolvedMockServerPluginOptions; | ||
| moduleCache: Map<string, MockOptions | MockHttpItem | MockWebsocketItem>; | ||
| moduleDeps: Map<string, Set<string>>; | ||
| cwd: string; | ||
| mockWatcher: FSWatcher; | ||
| depsWatcher: FSWatcher; | ||
| moduleType: "cjs" | "esm"; | ||
| private _mockData; | ||
| constructor(options: ResolvedMockServerPluginOptions); | ||
| get mockData(): Record<string, MockOptions>; | ||
| run(): void; | ||
| private watchMockEntry; | ||
| /** | ||
| * 监听 mock文件依赖的本地文件变动, | ||
| * mock依赖文件更新,mock文件也一并更新 | ||
| */ | ||
| private watchDeps; | ||
| close(): void; | ||
| private updateMockList; | ||
| private updateModuleDeps; | ||
| private loadMock; | ||
| } | ||
| //#endregion | ||
| //#region src/core/baseMiddleware.d.ts | ||
| interface BaseMiddlewareOptions { | ||
| formidableOptions: MockServerPluginOptions["formidableOptions"]; | ||
| cookiesOptions: MockServerPluginOptions["cookiesOptions"]; | ||
| bodyParserOptions: MockServerPluginOptions["bodyParserOptions"]; | ||
| proxies: string[]; | ||
| logger: Logger; | ||
| priority: MockServerPluginOptions["priority"]; | ||
| } | ||
| declare function baseMiddleware(compiler: MockCompiler, { | ||
| formidableOptions, | ||
| bodyParserOptions, | ||
| proxies, | ||
| cookiesOptions, | ||
| logger, | ||
| priority | ||
| }: BaseMiddlewareOptions): Connect.NextHandleFunction; | ||
| //#endregion | ||
| //#region src/core/transform.d.ts | ||
| type MockRawData = MockOptions | MockHttpItem | MockWebsocketItem | Record<string, MockOptions | MockHttpItem | MockWebsocketItem>; | ||
| declare function transformRawData(raw: MockRawData, __filepath__: string): MockOptions | MockHttpItem | MockWebsocketItem; | ||
| declare function transformMockData(mockList: Map<string, MockHttpItem | MockWebsocketItem | MockOptions> | (MockHttpItem | MockWebsocketItem | MockOptions)[]): Record<string, MockOptions>; | ||
| declare function sortByValidator(mocks: MockOptions): (MockHttpItem | MockWebsocketItem)[]; | ||
| //#endregion | ||
| //#region src/core/ws.d.ts | ||
| /** | ||
| * mock websocket | ||
| */ | ||
| declare function mockWebSocket(compiler: MockCompiler, server: Server | Http2SecureServer | null, { | ||
| wsProxies: proxies, | ||
| cookiesOptions, | ||
| logger | ||
| }: ResolvedMockServerPluginOptions): void; | ||
| //#endregion | ||
| export { BaseMiddlewareOptions, Logger, baseMiddleware, createLogger, logLevels, mockWebSocket, sortByValidator, transformMockData, transformRawData }; |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
191726
0.22%4564
0.42%