mockaton 13.7.0 → 13.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -8
- package/package.json +5 -3
- package/src/client/ApiConstants.js +0 -2
- package/src/client/Filename.js +2 -2
- package/src/client/app-payload-viewer.js +4 -2
- package/src/client/dir/groupByFolder.js +16 -14
- package/src/server/MockBroker.js +7 -2
- package/src/server/MockDispatcher.js +3 -2
- package/src/server/Mockaton.js +10 -12
- package/src/server/Mockaton.test.js +42 -0
- package/src/server/cli.js +9 -8
- package/src/server/importResolver.js +35 -0
- package/src/server/utils/logger.js +2 -4
- package/src/server/utils/openInBrowser.js +1 -1
- package/vite-plugin/README.md +29 -0
- package/vite-plugin/index.ts +21 -0
- package/vite-plugin/node_modules/.package-lock.json +356 -0
- package/vite-plugin/node_modules/@oxc-project/types/LICENSE +22 -0
- package/vite-plugin/node_modules/@oxc-project/types/README.md +3 -0
- package/vite-plugin/node_modules/@oxc-project/types/package.json +26 -0
- package/vite-plugin/node_modules/@oxc-project/types/types.d.ts +1912 -0
- package/vite-plugin/node_modules/@rolldown/binding-darwin-arm64/README.md +3 -0
- package/vite-plugin/node_modules/@rolldown/binding-darwin-arm64/package.json +37 -0
- package/vite-plugin/node_modules/@rolldown/binding-darwin-arm64/rolldown-binding.darwin-arm64.node +0 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/LICENSE +25 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/README.md +83 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.d.ts +90 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.js +256 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.d.ts +28 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.js +75 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/filter/index.d.ts +3 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/filter/index.js +3 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.d.ts +71 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.js +70 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/index.d.ts +1 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/index.js +1 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/utils.d.ts +2 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/dist/utils.js +17 -0
- package/vite-plugin/node_modules/@rolldown/pluginutils/package.json +37 -0
- package/vite-plugin/node_modules/detect-libc/LICENSE +201 -0
- package/vite-plugin/node_modules/detect-libc/README.md +163 -0
- package/vite-plugin/node_modules/detect-libc/index.d.ts +14 -0
- package/vite-plugin/node_modules/detect-libc/lib/detect-libc.js +313 -0
- package/vite-plugin/node_modules/detect-libc/lib/elf.js +39 -0
- package/vite-plugin/node_modules/detect-libc/lib/filesystem.js +51 -0
- package/vite-plugin/node_modules/detect-libc/lib/process.js +24 -0
- package/vite-plugin/node_modules/detect-libc/package.json +44 -0
- package/vite-plugin/node_modules/fdir/LICENSE +7 -0
- package/vite-plugin/node_modules/fdir/README.md +91 -0
- package/vite-plugin/node_modules/fdir/dist/index.cjs +588 -0
- package/vite-plugin/node_modules/fdir/dist/index.d.cts +155 -0
- package/vite-plugin/node_modules/fdir/dist/index.d.mts +155 -0
- package/vite-plugin/node_modules/fdir/dist/index.mjs +570 -0
- package/vite-plugin/node_modules/fdir/package.json +103 -0
- package/vite-plugin/node_modules/fsevents/LICENSE +22 -0
- package/vite-plugin/node_modules/fsevents/README.md +89 -0
- package/vite-plugin/node_modules/fsevents/fsevents.d.ts +46 -0
- package/vite-plugin/node_modules/fsevents/fsevents.js +83 -0
- package/vite-plugin/node_modules/fsevents/fsevents.node +0 -0
- package/vite-plugin/node_modules/fsevents/package.json +62 -0
- package/vite-plugin/node_modules/lightningcss/LICENSE +373 -0
- package/vite-plugin/node_modules/lightningcss/README.md +105 -0
- package/vite-plugin/node_modules/lightningcss/node/ast.d.ts +9892 -0
- package/vite-plugin/node_modules/lightningcss/node/ast.js.flow +10539 -0
- package/vite-plugin/node_modules/lightningcss/node/browserslistToTargets.js +48 -0
- package/vite-plugin/node_modules/lightningcss/node/composeVisitors.js +450 -0
- package/vite-plugin/node_modules/lightningcss/node/flags.js +28 -0
- package/vite-plugin/node_modules/lightningcss/node/index.d.ts +494 -0
- package/vite-plugin/node_modules/lightningcss/node/index.js +59 -0
- package/vite-plugin/node_modules/lightningcss/node/index.js.flow +843 -0
- package/vite-plugin/node_modules/lightningcss/node/index.mjs +4 -0
- package/vite-plugin/node_modules/lightningcss/node/targets.d.ts +40 -0
- package/vite-plugin/node_modules/lightningcss/node/targets.js.flow +39 -0
- package/vite-plugin/node_modules/lightningcss/package.json +110 -0
- package/vite-plugin/node_modules/lightningcss-darwin-arm64/LICENSE +373 -0
- package/vite-plugin/node_modules/lightningcss-darwin-arm64/README.md +1 -0
- package/vite-plugin/node_modules/lightningcss-darwin-arm64/lightningcss.darwin-arm64.node +0 -0
- package/vite-plugin/node_modules/lightningcss-darwin-arm64/package.json +34 -0
- package/vite-plugin/node_modules/nanoid/LICENSE +20 -0
- package/vite-plugin/node_modules/nanoid/README.md +39 -0
- package/vite-plugin/node_modules/nanoid/async/index.browser.cjs +69 -0
- package/vite-plugin/node_modules/nanoid/async/index.browser.js +34 -0
- package/vite-plugin/node_modules/nanoid/async/index.cjs +71 -0
- package/vite-plugin/node_modules/nanoid/async/index.d.ts +56 -0
- package/vite-plugin/node_modules/nanoid/async/index.js +35 -0
- package/vite-plugin/node_modules/nanoid/async/index.native.js +26 -0
- package/vite-plugin/node_modules/nanoid/async/package.json +12 -0
- package/vite-plugin/node_modules/nanoid/bin/nanoid.cjs +55 -0
- package/vite-plugin/node_modules/nanoid/index.browser.cjs +72 -0
- package/vite-plugin/node_modules/nanoid/index.browser.js +34 -0
- package/vite-plugin/node_modules/nanoid/index.cjs +85 -0
- package/vite-plugin/node_modules/nanoid/index.d.cts +91 -0
- package/vite-plugin/node_modules/nanoid/index.d.ts +91 -0
- package/vite-plugin/node_modules/nanoid/index.js +45 -0
- package/vite-plugin/node_modules/nanoid/nanoid.js +1 -0
- package/vite-plugin/node_modules/nanoid/non-secure/index.cjs +34 -0
- package/vite-plugin/node_modules/nanoid/non-secure/index.d.ts +33 -0
- package/vite-plugin/node_modules/nanoid/non-secure/index.js +21 -0
- package/vite-plugin/node_modules/nanoid/non-secure/package.json +6 -0
- package/vite-plugin/node_modules/nanoid/package.json +89 -0
- package/vite-plugin/node_modules/nanoid/url-alphabet/index.cjs +7 -0
- package/vite-plugin/node_modules/nanoid/url-alphabet/index.js +3 -0
- package/vite-plugin/node_modules/nanoid/url-alphabet/package.json +6 -0
- package/vite-plugin/node_modules/picocolors/LICENSE +15 -0
- package/vite-plugin/node_modules/picocolors/README.md +21 -0
- package/vite-plugin/node_modules/picocolors/package.json +25 -0
- package/vite-plugin/node_modules/picocolors/picocolors.browser.js +4 -0
- package/vite-plugin/node_modules/picocolors/picocolors.d.ts +5 -0
- package/vite-plugin/node_modules/picocolors/picocolors.js +75 -0
- package/vite-plugin/node_modules/picocolors/types.d.ts +51 -0
- package/vite-plugin/node_modules/picomatch/LICENSE +21 -0
- package/vite-plugin/node_modules/picomatch/README.md +749 -0
- package/vite-plugin/node_modules/picomatch/index.js +17 -0
- package/vite-plugin/node_modules/picomatch/lib/constants.js +184 -0
- package/vite-plugin/node_modules/picomatch/lib/parse.js +1386 -0
- package/vite-plugin/node_modules/picomatch/lib/picomatch.js +349 -0
- package/vite-plugin/node_modules/picomatch/lib/scan.js +391 -0
- package/vite-plugin/node_modules/picomatch/lib/utils.js +72 -0
- package/vite-plugin/node_modules/picomatch/package.json +82 -0
- package/vite-plugin/node_modules/picomatch/posix.js +3 -0
- package/vite-plugin/node_modules/postcss/LICENSE +20 -0
- package/vite-plugin/node_modules/postcss/README.md +28 -0
- package/vite-plugin/node_modules/postcss/lib/at-rule.d.ts +139 -0
- package/vite-plugin/node_modules/postcss/lib/at-rule.js +25 -0
- package/vite-plugin/node_modules/postcss/lib/comment.d.ts +67 -0
- package/vite-plugin/node_modules/postcss/lib/comment.js +13 -0
- package/vite-plugin/node_modules/postcss/lib/container.d.ts +478 -0
- package/vite-plugin/node_modules/postcss/lib/container.js +447 -0
- package/vite-plugin/node_modules/postcss/lib/css-syntax-error.d.ts +247 -0
- package/vite-plugin/node_modules/postcss/lib/css-syntax-error.js +133 -0
- package/vite-plugin/node_modules/postcss/lib/declaration.d.ts +150 -0
- package/vite-plugin/node_modules/postcss/lib/declaration.js +24 -0
- package/vite-plugin/node_modules/postcss/lib/document.d.ts +68 -0
- package/vite-plugin/node_modules/postcss/lib/document.js +33 -0
- package/vite-plugin/node_modules/postcss/lib/fromJSON.d.ts +9 -0
- package/vite-plugin/node_modules/postcss/lib/fromJSON.js +54 -0
- package/vite-plugin/node_modules/postcss/lib/input.d.ts +226 -0
- package/vite-plugin/node_modules/postcss/lib/input.js +273 -0
- package/vite-plugin/node_modules/postcss/lib/lazy-result.d.ts +189 -0
- package/vite-plugin/node_modules/postcss/lib/lazy-result.js +550 -0
- package/vite-plugin/node_modules/postcss/lib/list.d.ts +60 -0
- package/vite-plugin/node_modules/postcss/lib/list.js +58 -0
- package/vite-plugin/node_modules/postcss/lib/map-generator.js +376 -0
- package/vite-plugin/node_modules/postcss/lib/no-work-result.d.ts +45 -0
- package/vite-plugin/node_modules/postcss/lib/no-work-result.js +137 -0
- package/vite-plugin/node_modules/postcss/lib/node.d.ts +555 -0
- package/vite-plugin/node_modules/postcss/lib/node.js +449 -0
- package/vite-plugin/node_modules/postcss/lib/parse.d.ts +9 -0
- package/vite-plugin/node_modules/postcss/lib/parse.js +42 -0
- package/vite-plugin/node_modules/postcss/lib/parser.js +611 -0
- package/vite-plugin/node_modules/postcss/lib/postcss.d.mts +66 -0
- package/vite-plugin/node_modules/postcss/lib/postcss.d.ts +456 -0
- package/vite-plugin/node_modules/postcss/lib/postcss.js +101 -0
- package/vite-plugin/node_modules/postcss/lib/postcss.mjs +30 -0
- package/vite-plugin/node_modules/postcss/lib/previous-map.d.ts +80 -0
- package/vite-plugin/node_modules/postcss/lib/previous-map.js +145 -0
- package/vite-plugin/node_modules/postcss/lib/processor.d.ts +114 -0
- package/vite-plugin/node_modules/postcss/lib/processor.js +67 -0
- package/vite-plugin/node_modules/postcss/lib/result.d.ts +204 -0
- package/vite-plugin/node_modules/postcss/lib/result.js +42 -0
- package/vite-plugin/node_modules/postcss/lib/root.d.ts +86 -0
- package/vite-plugin/node_modules/postcss/lib/root.js +61 -0
- package/vite-plugin/node_modules/postcss/lib/rule.d.ts +126 -0
- package/vite-plugin/node_modules/postcss/lib/rule.js +27 -0
- package/vite-plugin/node_modules/postcss/lib/stringifier.d.ts +45 -0
- package/vite-plugin/node_modules/postcss/lib/stringifier.js +370 -0
- package/vite-plugin/node_modules/postcss/lib/stringify.d.ts +9 -0
- package/vite-plugin/node_modules/postcss/lib/stringify.js +11 -0
- package/vite-plugin/node_modules/postcss/lib/symbols.js +5 -0
- package/vite-plugin/node_modules/postcss/lib/terminal-highlight.js +70 -0
- package/vite-plugin/node_modules/postcss/lib/tokenize.js +266 -0
- package/vite-plugin/node_modules/postcss/lib/warn-once.js +13 -0
- package/vite-plugin/node_modules/postcss/lib/warning.d.ts +146 -0
- package/vite-plugin/node_modules/postcss/lib/warning.js +37 -0
- package/vite-plugin/node_modules/postcss/package.json +88 -0
- package/vite-plugin/node_modules/rolldown/LICENSE +25 -0
- package/vite-plugin/node_modules/rolldown/README.md +11 -0
- package/vite-plugin/node_modules/rolldown/bin/cli.mjs +2 -0
- package/vite-plugin/node_modules/rolldown/dist/cli.d.mts +1 -0
- package/vite-plugin/node_modules/rolldown/dist/cli.mjs +1191 -0
- package/vite-plugin/node_modules/rolldown/dist/config.d.mts +14 -0
- package/vite-plugin/node_modules/rolldown/dist/config.mjs +4 -0
- package/vite-plugin/node_modules/rolldown/dist/experimental-index.d.mts +253 -0
- package/vite-plugin/node_modules/rolldown/dist/experimental-index.mjs +320 -0
- package/vite-plugin/node_modules/rolldown/dist/experimental-runtime-types.d.ts +98 -0
- package/vite-plugin/node_modules/rolldown/dist/filter-index.d.mts +196 -0
- package/vite-plugin/node_modules/rolldown/dist/filter-index.mjs +386 -0
- package/vite-plugin/node_modules/rolldown/dist/get-log-filter.d.mts +3 -0
- package/vite-plugin/node_modules/rolldown/dist/get-log-filter.mjs +68 -0
- package/vite-plugin/node_modules/rolldown/dist/index.d.mts +4 -0
- package/vite-plugin/node_modules/rolldown/dist/index.mjs +50 -0
- package/vite-plugin/node_modules/rolldown/dist/parallel-plugin-worker.d.mts +1 -0
- package/vite-plugin/node_modules/rolldown/dist/parallel-plugin-worker.mjs +28 -0
- package/vite-plugin/node_modules/rolldown/dist/parallel-plugin.d.mts +13 -0
- package/vite-plugin/node_modules/rolldown/dist/parallel-plugin.mjs +6 -0
- package/vite-plugin/node_modules/rolldown/dist/parse-ast-index.d.mts +32 -0
- package/vite-plugin/node_modules/rolldown/dist/parse-ast-index.mjs +60 -0
- package/vite-plugin/node_modules/rolldown/dist/plugins-index.d.mts +33 -0
- package/vite-plugin/node_modules/rolldown/dist/plugins-index.mjs +40 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/binding-BeU_1iEk.mjs +582 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/binding-zH1vcmbM.d.mts +1899 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/bindingify-input-options-DbbBhzky.mjs +2211 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/constructors-C2EWPKW3.mjs +68 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/constructors-D0W3rNfA.d.mts +37 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/define-config-5HJ1b9vG.d.mts +3829 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/define-config-DJOr6Iwt.mjs +6 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/error-DL-e8-oE.mjs +85 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/get-log-filter-semyr3Lj.d.mts +35 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/load-config-BoVO31Un.mjs +120 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/logging-C6h4g8dA.d.mts +50 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/logs-D80CXhvg.mjs +180 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/misc-DJYbNKZX.mjs +21 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/normalize-string-or-regex-CbQQ69gT.mjs +66 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/parse-B_ZnWxLZ.mjs +74 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/prompt-U5ajztzG.mjs +847 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/resolve-tsconfig-CfYpGzid.mjs +113 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/rolldown-D3JZ9rMt.mjs +40 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/rolldown-build-DSxL8qiP.mjs +3325 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/transform-DgZ3paSD.d.mts +149 -0
- package/vite-plugin/node_modules/rolldown/dist/shared/watch-Bd8v9ewv.mjs +374 -0
- package/vite-plugin/node_modules/rolldown/dist/utils-index.d.mts +376 -0
- package/vite-plugin/node_modules/rolldown/dist/utils-index.mjs +2414 -0
- package/vite-plugin/node_modules/rolldown/package.json +153 -0
- package/vite-plugin/node_modules/source-map-js/LICENSE +28 -0
- package/vite-plugin/node_modules/source-map-js/README.md +765 -0
- package/vite-plugin/node_modules/source-map-js/lib/array-set.js +121 -0
- package/vite-plugin/node_modules/source-map-js/lib/base64-vlq.js +140 -0
- package/vite-plugin/node_modules/source-map-js/lib/base64.js +67 -0
- package/vite-plugin/node_modules/source-map-js/lib/binary-search.js +111 -0
- package/vite-plugin/node_modules/source-map-js/lib/mapping-list.js +79 -0
- package/vite-plugin/node_modules/source-map-js/lib/quick-sort.js +132 -0
- package/vite-plugin/node_modules/source-map-js/lib/source-map-consumer.d.ts +1 -0
- package/vite-plugin/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
- package/vite-plugin/node_modules/source-map-js/lib/source-map-generator.d.ts +1 -0
- package/vite-plugin/node_modules/source-map-js/lib/source-map-generator.js +444 -0
- package/vite-plugin/node_modules/source-map-js/lib/source-node.d.ts +1 -0
- package/vite-plugin/node_modules/source-map-js/lib/source-node.js +413 -0
- package/vite-plugin/node_modules/source-map-js/lib/util.js +594 -0
- package/vite-plugin/node_modules/source-map-js/package.json +71 -0
- package/vite-plugin/node_modules/source-map-js/source-map.d.ts +104 -0
- package/vite-plugin/node_modules/source-map-js/source-map.js +8 -0
- package/vite-plugin/node_modules/tinyglobby/LICENSE +21 -0
- package/vite-plugin/node_modules/tinyglobby/README.md +25 -0
- package/vite-plugin/node_modules/tinyglobby/dist/index.cjs +334 -0
- package/vite-plugin/node_modules/tinyglobby/dist/index.d.cts +148 -0
- package/vite-plugin/node_modules/tinyglobby/dist/index.d.mts +148 -0
- package/vite-plugin/node_modules/tinyglobby/dist/index.mjs +306 -0
- package/vite-plugin/node_modules/tinyglobby/package.json +73 -0
- package/vite-plugin/node_modules/vite/LICENSE.md +2230 -0
- package/vite-plugin/node_modules/vite/README.md +20 -0
- package/vite-plugin/node_modules/vite/bin/openChrome.js +68 -0
- package/vite-plugin/node_modules/vite/bin/vite.js +79 -0
- package/vite-plugin/node_modules/vite/client.d.ts +282 -0
- package/vite-plugin/node_modules/vite/dist/client/client.mjs +1237 -0
- package/vite-plugin/node_modules/vite/dist/client/env.mjs +18 -0
- package/vite-plugin/node_modules/vite/dist/node/chunks/build.js +5381 -0
- package/vite-plugin/node_modules/vite/dist/node/chunks/chunk.js +37 -0
- package/vite-plugin/node_modules/vite/dist/node/chunks/dist.js +6784 -0
- package/vite-plugin/node_modules/vite/dist/node/chunks/lib.js +371 -0
- package/vite-plugin/node_modules/vite/dist/node/chunks/logger.js +322 -0
- package/vite-plugin/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts +96 -0
- package/vite-plugin/node_modules/vite/dist/node/chunks/node.js +34874 -0
- package/vite-plugin/node_modules/vite/dist/node/chunks/postcss-import.js +467 -0
- package/vite-plugin/node_modules/vite/dist/node/cli.js +837 -0
- package/vite-plugin/node_modules/vite/dist/node/index.d.ts +3867 -0
- package/vite-plugin/node_modules/vite/dist/node/index.js +3 -0
- package/vite-plugin/node_modules/vite/dist/node/internal.d.ts +2 -0
- package/vite-plugin/node_modules/vite/dist/node/internal.js +2 -0
- package/vite-plugin/node_modules/vite/dist/node/module-runner.d.ts +315 -0
- package/vite-plugin/node_modules/vite/dist/node/module-runner.js +1262 -0
- package/vite-plugin/node_modules/vite/misc/false.js +1 -0
- package/vite-plugin/node_modules/vite/misc/true.js +1 -0
- package/vite-plugin/node_modules/vite/package.json +192 -0
- package/vite-plugin/node_modules/vite/types/customEvent.d.ts +79 -0
- package/vite-plugin/node_modules/vite/types/hmrPayload.d.ts +80 -0
- package/vite-plugin/node_modules/vite/types/hot.d.ts +39 -0
- package/vite-plugin/node_modules/vite/types/import-meta.d.ts +5 -0
- package/vite-plugin/node_modules/vite/types/importGlob.d.ts +89 -0
- package/vite-plugin/node_modules/vite/types/importMeta.d.ts +30 -0
- package/vite-plugin/node_modules/vite/types/internal/cssPreprocessorOptions.d.ts +44 -0
- package/vite-plugin/node_modules/vite/types/internal/esbuildOptions.d.ts +28 -0
- package/vite-plugin/node_modules/vite/types/internal/lightningcssOptions.d.ts +18 -0
- package/vite-plugin/node_modules/vite/types/internal/rollupTypeCompat.d.ts +24 -0
- package/vite-plugin/node_modules/vite/types/internal/terserOptions.d.ts +11 -0
- package/vite-plugin/node_modules/vite/types/metadata.d.ts +47 -0
- package/vite-plugin/package.json +14 -0
- package/www/src/{assets → .well-known/agent-skills/mockaton}/SKILLS.md +21 -9
- package/src/server/cacheBustResolver.js +0 -19
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://codecov.io/github/ericfortis/mockaton)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
|
|
7
|
-
## [Docs ↗](https://mockaton.com) | [Changelog ↗](https://mockaton.com/changelog) | [Skills
|
|
7
|
+
## [Docs ↗](https://mockaton.com) | [Changelog ↗](https://mockaton.com/changelog) | [Skills](skills/mockaton/SKILL.md)
|
|
8
8
|
|
|
9
9
|
Mockaton is an HTTP mock server for simulating APIs, designed
|
|
10
10
|
for testing difficult to reproduce backend states with minimal setup.
|
|
@@ -30,11 +30,12 @@ Test it:
|
|
|
30
30
|
curl localhost:2020/api/user
|
|
31
31
|
```
|
|
32
32
|
Dashboard: [localhost:2020/mockaton](http://localhost:2020/mockaton)
|
|
33
|
+
|
|
33
34
|
<!-- SKILLS_IGNORE_END -->
|
|
34
35
|
|
|
35
36
|
## Basic Usage
|
|
36
37
|
```sh
|
|
37
|
-
npx mockaton my-mocks-dir/
|
|
38
|
+
npx mockaton --port 2020 my-mocks-dir/
|
|
38
39
|
```
|
|
39
40
|
|
|
40
41
|
Mockaton will serve the files on the given directory. It's a file-system
|
|
@@ -53,22 +54,40 @@ Also, each route can have different mock file variants.
|
|
|
53
54
|
|
|
54
55
|
## Docs
|
|
55
56
|
- How to **configure** Mockaton? See [CLI and mockaton.config.js](https://mockaton.com/config) docs.
|
|
56
|
-
- How to **control** Mockaton? Besides the dashboard, there's a [Programmatic API](https://mockaton.com/api)
|
|
57
|
+
- How to **control** Mockaton? Besides the dashboard, there's a [Programmatic API](https://mockaton.com/api), in which
|
|
58
|
+
you can delay a route, select a different mock file, such as a 500 error, among other options.
|
|
57
59
|
- How to **add plugins**? You can write [Plugins](https://mockaton.com/plugins) for customizing responses.
|
|
58
60
|
|
|
59
61
|
<!-- SKILLS_IGNORE_BEGIN -->
|
|
60
62
|
## How to scrape your backend APIs?
|
|
61
63
|
Mockaton has a [Browser Extension](https://mockaton.com/scraping) that lets
|
|
62
64
|
you download in bulk all your API responses following Mockaton's filename convention.
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
## Skills
|
|
68
|
+
```sh
|
|
69
|
+
npx skills add ericfortis/mockaton
|
|
70
|
+
```
|
|
63
71
|
<!-- SKILLS_IGNORE_END -->
|
|
64
72
|
|
|
65
73
|
## How to create mocks?
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
```sh
|
|
76
|
+
npm install mockaton
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Write to your mocks directory, `.ts` files are served as JSON by default.
|
|
68
80
|
```sh
|
|
69
81
|
mkdir -p my-mocks-dir/api
|
|
70
|
-
|
|
71
|
-
|
|
82
|
+
cat > my-mocks-dir/api/user.GET.200.ts << EOF
|
|
83
|
+
interface User {
|
|
84
|
+
name: string
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export default {
|
|
88
|
+
"name": "John"
|
|
89
|
+
} satisfies User
|
|
90
|
+
EOF
|
|
72
91
|
```
|
|
73
92
|
|
|
74
93
|
### Example A: JSON
|
|
@@ -96,8 +115,8 @@ export default {
|
|
|
96
115
|
```
|
|
97
116
|
|
|
98
117
|
### Example C: [Function Mocks](https://mockaton.com/function-mocks)
|
|
99
|
-
With a function mock you can do pretty much anything you could do with a normal backend handler
|
|
100
|
-
For example, you can handle complex logic, URL parsing, saving
|
|
118
|
+
With a function mock you can do pretty much anything you could do with a normal backend handler.
|
|
119
|
+
For example, you can handle complex logic, URL parsing, saving to a database, etc.
|
|
101
120
|
|
|
102
121
|
- **Route:** /api/company/abc/user/999
|
|
103
122
|
- **Filename:** api/company/[companyId]/user/[userId].GET.200.ts
|
package/package.json
CHANGED
|
@@ -2,21 +2,23 @@
|
|
|
2
2
|
"name": "mockaton",
|
|
3
3
|
"description": "HTTP Mock Server",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "13.
|
|
5
|
+
"version": "13.9.0",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
8
8
|
"import": "./index.js",
|
|
9
9
|
"types": "./index.d.ts"
|
|
10
10
|
},
|
|
11
|
+
"./vite": "./vite-plugin/index.js",
|
|
11
12
|
"./openapi.json": "./www/src/assets/openapi.json",
|
|
12
|
-
"./SKILLS.md": "./www/src/
|
|
13
|
+
"./SKILLS.md": "./www/src/.well-known/agent-skills/mockaton/SKILLS.md"
|
|
13
14
|
},
|
|
14
15
|
"files": [
|
|
15
16
|
"src",
|
|
16
17
|
"index.js",
|
|
17
18
|
"index.d.ts",
|
|
19
|
+
"vite-plugin",
|
|
18
20
|
"www/src/assets/openapi.json",
|
|
19
|
-
"www/src/
|
|
21
|
+
"www/src/.well-known/agent-skills/mockaton/SKILLS.md"
|
|
20
22
|
],
|
|
21
23
|
"license": "MIT",
|
|
22
24
|
"homepage": "https://mockaton.com",
|
package/src/client/Filename.js
CHANGED
|
@@ -65,7 +65,7 @@ export function makeMockFilename(url, method, status, ext, comment = '') {
|
|
|
65
65
|
return [urlMask + comment, method, status, ext].join('.')
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
const reUuidV4 = /([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/gi
|
|
69
68
|
function replaceIds(filename) {
|
|
70
|
-
return filename.replaceAll(reUuidV4, '[id]')
|
|
69
|
+
return filename.replaceAll(replaceIds.reUuidV4, '[id]')
|
|
71
70
|
}
|
|
71
|
+
replaceIds.reUuidV4 = /([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/gi
|
|
@@ -113,13 +113,15 @@ async function updatePayloadViewer(proxied, file, response) {
|
|
|
113
113
|
else if (mime.startsWith('video/'))
|
|
114
114
|
codeRef.elem.replaceChildren(r('video', {
|
|
115
115
|
src: store.chosenLink.urlMask,
|
|
116
|
-
controls: true
|
|
116
|
+
controls: true,
|
|
117
|
+
autoPlay: true
|
|
117
118
|
}))
|
|
118
119
|
|
|
119
120
|
else if (mime.startsWith('audio/'))
|
|
120
121
|
codeRef.elem.replaceChildren(r('audio', {
|
|
121
122
|
src: store.chosenLink.urlMask,
|
|
122
|
-
controls: true
|
|
123
|
+
controls: true,
|
|
124
|
+
autoPlay: true
|
|
123
125
|
}))
|
|
124
126
|
|
|
125
127
|
else if (['text/html', 'application/pdf'].includes(mime))
|
|
@@ -11,28 +11,22 @@ function trie(brokers) {
|
|
|
11
11
|
for (const b of brokers) {
|
|
12
12
|
let node = root
|
|
13
13
|
for (const seg of b.urlMask.split('/')) { // TODO it should ignore query string
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
if (node.hasChild(seg))
|
|
15
|
+
node = node.getChild(seg)
|
|
16
|
+
else {
|
|
17
|
+
const segNode = new TrieNode()
|
|
18
|
+
node.setChild(seg, segNode)
|
|
19
|
+
node = segNode
|
|
20
|
+
}
|
|
17
21
|
}
|
|
18
22
|
node.brokers.push(b)
|
|
19
23
|
}
|
|
20
24
|
return root
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
class TrieNode {
|
|
24
|
-
#children = new Map()
|
|
25
|
-
brokers = []
|
|
26
|
-
addChild(k, v) { this.#children.set(k, v) }
|
|
27
|
-
getChild(k) { return this.#children.get(k) }
|
|
28
|
-
getChildren() { return this.#children.values() }
|
|
29
|
-
}
|
|
30
|
-
|
|
31
27
|
/** @param {TrieNode} node */
|
|
32
28
|
function dfs(node) {
|
|
33
|
-
const childBrokers =
|
|
34
|
-
for (const tnc of node.getChildren())
|
|
35
|
-
childBrokers.push(...dfs(tnc))
|
|
29
|
+
const childBrokers = node.getChildren().flatMap(dfs)
|
|
36
30
|
|
|
37
31
|
const brokers = node.brokers.length
|
|
38
32
|
? [node.brokers[0], ...childBrokers, ...node.brokers.slice(1)]
|
|
@@ -49,3 +43,11 @@ function dfs(node) {
|
|
|
49
43
|
return brokers
|
|
50
44
|
}
|
|
51
45
|
|
|
46
|
+
class TrieNode {
|
|
47
|
+
#children = new Map()
|
|
48
|
+
brokers = []
|
|
49
|
+
setChild(k, v) { this.#children.set(k, v) }
|
|
50
|
+
hasChild(k) { return this.#children.has(k) }
|
|
51
|
+
getChild(k) { return this.#children.get(k)}
|
|
52
|
+
getChildren() { return Array.from(this.#children.values()) }
|
|
53
|
+
}
|
package/src/server/MockBroker.js
CHANGED
|
@@ -107,15 +107,20 @@ class UrlMatcher {
|
|
|
107
107
|
this.#urlRegex = this.#buildUrlRegex(file)
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
#escapeRegex(str) {
|
|
111
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
112
|
+
}
|
|
113
|
+
|
|
110
114
|
#buildUrlRegex(file) {
|
|
111
115
|
let { urlMask } = parseFilename(file)
|
|
112
116
|
urlMask = removeQueryStringAndFragment(urlMask)
|
|
117
|
+
urlMask = this.#escapeRegex(urlMask)
|
|
113
118
|
urlMask = this.#disregardVariables(urlMask)
|
|
114
119
|
return new RegExp('^' + urlMask + '/*$')
|
|
115
120
|
}
|
|
116
121
|
|
|
117
|
-
#disregardVariables(str) {
|
|
118
|
-
return str.replace(
|
|
122
|
+
#disregardVariables(str) {
|
|
123
|
+
return str.replace(/\\\[.*?\\]/g, '[^/]+')
|
|
119
124
|
}
|
|
120
125
|
|
|
121
126
|
// Appending a '/' so URLs ending with variables don't match
|
|
@@ -7,7 +7,6 @@ import { parseFilename } from '../client/Filename.js'
|
|
|
7
7
|
import { echoFilePlugin } from './MockDispatcherPlugins.js'
|
|
8
8
|
import { brokerByRoute } from './mockBrokersCollection.js'
|
|
9
9
|
import { config, calcDelay } from './config.js'
|
|
10
|
-
import { FILENAME_HEADER } from '../client/ApiConstants.js'
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
export async function dispatchMock(req, response) {
|
|
@@ -29,7 +28,9 @@ export async function dispatchMock(req, response) {
|
|
|
29
28
|
return
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
response.
|
|
31
|
+
response.on('finish', () => {
|
|
32
|
+
logger.normal('MOCK', req.url, broker.file)
|
|
33
|
+
})
|
|
33
34
|
|
|
34
35
|
if (cookie.getCurrent())
|
|
35
36
|
response.setHeader('Set-Cookie', cookie.getCurrent())
|
package/src/server/Mockaton.js
CHANGED
|
@@ -8,8 +8,7 @@ import { ServerResponse } from './utils/HttpServerResponse.js'
|
|
|
8
8
|
import { setCorsHeaders, isPreflight } from './utils/http-cors.js'
|
|
9
9
|
import { IncomingMessage, BodyReaderError, hasControlChars } from './utils/HttpIncomingMessage.js'
|
|
10
10
|
|
|
11
|
-
import { API
|
|
12
|
-
|
|
11
|
+
import { API } from '../client/ApiConstants.js'
|
|
13
12
|
import { cookie } from './cookie.js'
|
|
14
13
|
import { config, setup } from './config.js'
|
|
15
14
|
import { apiPatchReqs, apiGetReqs, CLIENT_DIR } from './Api.js'
|
|
@@ -26,11 +25,11 @@ export function Mockaton(options) {
|
|
|
26
25
|
setup(options)
|
|
27
26
|
cookie.init(config.cookies)
|
|
28
27
|
mockBrokerCollection.init()
|
|
28
|
+
register('./importResolver.js', import.meta.url)
|
|
29
29
|
|
|
30
|
-
if (config.watcherEnabled)
|
|
31
|
-
register('./cacheBustResolver.js', import.meta.url)
|
|
30
|
+
if (config.watcherEnabled)
|
|
32
31
|
watchMocksDir()
|
|
33
|
-
|
|
32
|
+
|
|
34
33
|
if (config.hotReload)
|
|
35
34
|
watchDevSPA(CLIENT_DIR)
|
|
36
35
|
|
|
@@ -49,15 +48,12 @@ export function Mockaton(options) {
|
|
|
49
48
|
|
|
50
49
|
async function onRequest(req, response) {
|
|
51
50
|
response.setHeader('Server', `Mockaton ${pkgJSON.version}`)
|
|
52
|
-
|
|
53
51
|
response.on('error', logger.warn)
|
|
54
52
|
|
|
53
|
+
let handledByMockDispatcher = false
|
|
55
54
|
response.on('finish', () => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
logger.normal('MOCK', req.url, f)
|
|
59
|
-
else
|
|
60
|
-
logger.verbose('API', response)
|
|
55
|
+
if (!handledByMockDispatcher)
|
|
56
|
+
logger.verbose('APP', response)
|
|
61
57
|
})
|
|
62
58
|
|
|
63
59
|
const url = req.url || ''
|
|
@@ -87,8 +83,10 @@ async function onRequest(req, response) {
|
|
|
87
83
|
else if (method === 'GET' && apiGetReqs.has(pathname))
|
|
88
84
|
apiGetReqs.get(pathname)(req, response)
|
|
89
85
|
|
|
90
|
-
else
|
|
86
|
+
else {
|
|
87
|
+
handledByMockDispatcher = true
|
|
91
88
|
await dispatchMock(req, response)
|
|
89
|
+
}
|
|
92
90
|
}
|
|
93
91
|
catch (error) {
|
|
94
92
|
if (error instanceof BodyReaderError)
|
|
@@ -940,6 +940,15 @@ describe('Dynamic Params', () => {
|
|
|
940
940
|
})
|
|
941
941
|
})
|
|
942
942
|
|
|
943
|
+
test('Dynamic Params on partial segments', async () => {
|
|
944
|
+
const fx = new Fixture('dynamic-params-partial-[id]/foo.GET.200.txt')
|
|
945
|
+
await makeDirInMocks('dynamic-params-partial-[id]')
|
|
946
|
+
await fx.write()
|
|
947
|
+
const r = await request('/dynamic-params-partial-999/foo')
|
|
948
|
+
equal(await r.text(), fx.body)
|
|
949
|
+
await fx.delete()
|
|
950
|
+
})
|
|
951
|
+
|
|
943
952
|
|
|
944
953
|
describe('Query String', () => {
|
|
945
954
|
const fx0 = new Fixture('query-string?foo=[foo]&bar=[bar].GET.200.json')
|
|
@@ -1026,6 +1035,39 @@ describe('Write and Delete Mock', () => {
|
|
|
1026
1035
|
const r2 = await request('/manual-mock')
|
|
1027
1036
|
equal(r2.status, 404)
|
|
1028
1037
|
})
|
|
1038
|
+
|
|
1039
|
+
test('can overwrite', async () => {
|
|
1040
|
+
const f = 'overwrite.GET.200.txt'
|
|
1041
|
+
await api.writeMock(f, 'write1')
|
|
1042
|
+
await api.writeMock(f, 'write2')
|
|
1043
|
+
const r = await request('/overwrite')
|
|
1044
|
+
equal(await r.text(), 'write2')
|
|
1045
|
+
await api.deleteMock(f)
|
|
1046
|
+
})
|
|
1047
|
+
})
|
|
1048
|
+
|
|
1049
|
+
|
|
1050
|
+
describe('import resolver', () => {
|
|
1051
|
+
test('resolves extensionless ts', async () => {
|
|
1052
|
+
await api.writeMock('_scores.ts', 'export default [1,2,3]')
|
|
1053
|
+
await api.writeMock('user-scores.GET.200.ts',
|
|
1054
|
+
// language=typescript
|
|
1055
|
+
`
|
|
1056
|
+
import scores from './_scores'
|
|
1057
|
+
|
|
1058
|
+
export default scores
|
|
1059
|
+
`)
|
|
1060
|
+
const r = await request('/user-scores')
|
|
1061
|
+
deepEqual(await r.json(), [1, 2, 3])
|
|
1062
|
+
})
|
|
1063
|
+
|
|
1064
|
+
test('imports are cache busted', async () => {
|
|
1065
|
+
await api.writeMock('_scores.ts', 'export default [4,5,6]')
|
|
1066
|
+
const r = await request('/user-scores')
|
|
1067
|
+
deepEqual(await r.json(), [4, 5, 6])
|
|
1068
|
+
await api.deleteMock('_scores.ts')
|
|
1069
|
+
await api.deleteMock('user-scores.GET.200.ts')
|
|
1070
|
+
})
|
|
1029
1071
|
})
|
|
1030
1072
|
|
|
1031
1073
|
|
package/src/server/cli.js
CHANGED
|
@@ -7,10 +7,12 @@ import { isFile } from './utils/fs.js'
|
|
|
7
7
|
import { Mockaton } from '../../index.js'
|
|
8
8
|
import pkgJSON from '../../package.json' with { type: 'json' }
|
|
9
9
|
|
|
10
|
-
const rel = f => join(import.meta.dirname, f)
|
|
11
10
|
|
|
12
11
|
process.on('unhandledRejection', error => { throw error })
|
|
13
12
|
|
|
13
|
+
const DEFAULT_CONFIG_FILE = 'mockaton.config.js'
|
|
14
|
+
const SKILLS_PATH = join(import.meta.dirname, '../../www/src/.well-known/agent-skills/mockaton/SKILL.md')
|
|
15
|
+
|
|
14
16
|
let args, positionals
|
|
15
17
|
try {
|
|
16
18
|
const result = parseArgs({
|
|
@@ -38,22 +40,21 @@ catch (error) {
|
|
|
38
40
|
process.exit(1)
|
|
39
41
|
}
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
process.on('SIGUSR2', () => process.exit(0))
|
|
43
|
+
process.on('SIGUSR2', () => process.exit(0)) // For clean exit when collecting code-coverage
|
|
43
44
|
|
|
44
45
|
|
|
45
46
|
if (args.version)
|
|
46
47
|
console.log(pkgJSON.version)
|
|
47
48
|
|
|
48
49
|
else if (args.skills)
|
|
49
|
-
console.log(
|
|
50
|
-
|
|
50
|
+
console.log(SKILLS_PATH)
|
|
51
|
+
|
|
51
52
|
else if (args.help)
|
|
52
53
|
console.log(`
|
|
53
54
|
Usage: mockaton [mocks-dir] [options]
|
|
54
55
|
|
|
55
56
|
Options:
|
|
56
|
-
-c, --config <file> (default:
|
|
57
|
+
-c, --config <file> (default: ./${DEFAULT_CONFIG_FILE})
|
|
57
58
|
|
|
58
59
|
-H, --host <host> (default: 127.0.0.1)
|
|
59
60
|
-p, --port <port> (default: 0) which means auto-assigned
|
|
@@ -68,7 +69,7 @@ Options:
|
|
|
68
69
|
|
|
69
70
|
Notes:
|
|
70
71
|
* mockaton.config.js supports more options, see: https://mockaton.com/config
|
|
71
|
-
* CLI options override their
|
|
72
|
+
* CLI options override their ${DEFAULT_CONFIG_FILE}} counterparts
|
|
72
73
|
`.trim())
|
|
73
74
|
|
|
74
75
|
else if (args.config && !isFile(args.config)) {
|
|
@@ -76,7 +77,7 @@ else if (args.config && !isFile(args.config)) {
|
|
|
76
77
|
process.exitCode = 1
|
|
77
78
|
}
|
|
78
79
|
else {
|
|
79
|
-
const userConf = resolve(args.config ??
|
|
80
|
+
const userConf = resolve(args.config ?? DEFAULT_CONFIG_FILE)
|
|
80
81
|
const opts = isFile(userConf)
|
|
81
82
|
? (await import(userConf)).default ?? {}
|
|
82
83
|
: {}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs'
|
|
2
|
+
import { resolve as _resolve, join, dirname } from 'node:path'
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
4
|
+
|
|
5
|
+
const mockatonSrcRoot = `file://${_resolve(import.meta.dirname, '..')}`
|
|
6
|
+
|
|
7
|
+
// We register this hook at runtime so it doesn’t interfere with non-dynamic imports.
|
|
8
|
+
export async function resolve(specifier, context, nextResolve) {
|
|
9
|
+
let result
|
|
10
|
+
try {
|
|
11
|
+
result = await nextResolve(specifier, context)
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
// Attempt to resolve imports as .ts and .js
|
|
15
|
+
if (error.code === 'ERR_MODULE_NOT_FOUND' && specifier.startsWith('.') && context.parentURL) {
|
|
16
|
+
const absPath = join(dirname(fileURLToPath(context.parentURL)), specifier)
|
|
17
|
+
for (const candidate of ['.ts', '.js'].map(ext => absPath + ext))
|
|
18
|
+
if (existsSync(candidate))
|
|
19
|
+
return resolve(pathToFileURL(candidate).href, context, nextResolve)
|
|
20
|
+
}
|
|
21
|
+
throw error
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Cache bust by appending timestamp query param
|
|
25
|
+
if (result.url?.startsWith('file://') && !result.url.startsWith(mockatonSrcRoot)) {
|
|
26
|
+
const url = new URL(result.url)
|
|
27
|
+
url.searchParams.set('t', performance.now())
|
|
28
|
+
return {
|
|
29
|
+
...result,
|
|
30
|
+
url: url.href,
|
|
31
|
+
shortCircuit: true
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result
|
|
35
|
+
}
|
|
@@ -45,11 +45,9 @@ export const logger = new class {
|
|
|
45
45
|
#sanitize(url) {
|
|
46
46
|
try {
|
|
47
47
|
const decoded = decode(url)
|
|
48
|
-
if (!decoded)
|
|
49
|
-
return '__MULTI_ENCODED__'
|
|
50
48
|
return decoded
|
|
51
|
-
.replace(reControlAndDelChars, '')
|
|
52
|
-
|
|
49
|
+
? decoded.replace(reControlAndDelChars, '').slice(0, 200)
|
|
50
|
+
: '__MULTI_ENCODED__'
|
|
53
51
|
}
|
|
54
52
|
catch {
|
|
55
53
|
return '__NON_DECODABLE__'
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Mockaton Vite Plugin
|
|
2
|
+
|
|
3
|
+
Vite plugin to start Mockaton along with Vite dev server.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install mockaton --save-dev
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
In your `vite.config.ts`:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { defineConfig } from 'vite'
|
|
17
|
+
import mockatonPlugin from 'mockaton/vite'
|
|
18
|
+
|
|
19
|
+
export default defineConfig({
|
|
20
|
+
plugins: [
|
|
21
|
+
// …other plugins
|
|
22
|
+
mockatonPlugin({
|
|
23
|
+
port: 4040,
|
|
24
|
+
mocksDir: './mockaton-mocks',
|
|
25
|
+
})
|
|
26
|
+
]
|
|
27
|
+
})
|
|
28
|
+
```
|
|
29
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Config, Mockaton } from 'mockaton'
|
|
2
|
+
import { type ViteDevServer } from 'vite'
|
|
3
|
+
|
|
4
|
+
export default function (options: Config = {}) {
|
|
5
|
+
let mockatonServer
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
name: 'mockaton-vite-plugin',
|
|
9
|
+
|
|
10
|
+
async configureServer(viteServer: ViteDevServer) {
|
|
11
|
+
mockatonServer = await Mockaton(options)
|
|
12
|
+
viteServer.httpServer?.on('close', () => {
|
|
13
|
+
mockatonServer?.close()
|
|
14
|
+
})
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
async buildEnd() {
|
|
18
|
+
mockatonServer?.close()
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|