Skip to content

Commit

Permalink
feat: rearrange routes (#75)
Browse files Browse the repository at this point in the history
  • Loading branch information
SoaresMG authored Aug 14, 2024
1 parent db1485c commit d6a4c25
Show file tree
Hide file tree
Showing 19 changed files with 93 additions and 83 deletions.
5 changes: 5 additions & 0 deletions .changeset/gorgeous-ducks-accept.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"nuxt-mock-server": patch
---

Add generatePreset on useMockServer composable
5 changes: 5 additions & 0 deletions .changeset/tricky-pillows-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"nuxt-mock-server": patch
---

Rearrange routes to match /presets/[id]/<action>
6 changes: 3 additions & 3 deletions client/composables/use-presets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export function usePresets() {
isLoading.value = true;
try {
if (appFetch.value) {
await appFetch.value("/__mock-server__/set-preset", { method: "POST", query: { preset: name } });
await appFetch.value(`/__mock-server__/presets/${name}/set`, { method: "POST" });
await appFetch.value("/");
await loadPresets(false);
}
Expand All @@ -47,7 +47,7 @@ export function usePresets() {
isLoading.value = true;
try {
if (appFetch.value) {
await appFetch.value("/__mock-server__/delete-preset", { method: "POST", query: { preset: name } });
await appFetch.value(`/__mock-server__/presets/${name}/delete`, { method: "POST" });
await appFetch.value("/");
await loadPresets(false);
}
Expand All @@ -64,7 +64,7 @@ export function usePresets() {
isLoading.value = true;
try {
if (appFetch.value) {
await appFetch.value("/__mock-server__/generate-preset", { method: "POST", query: { preset: name } });
await appFetch.value(`/__mock-server__/presets/${name}/generate`, { method: "POST" });
await loadPresets(false);
}
}
Expand Down
6 changes: 0 additions & 6 deletions playground/nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,6 @@ export default defineNuxtConfig({
enabled: true,
auto: false,
debug: true,
devtools: {
createPreset: false,
deletePreset: true,
generatePreset: true,
setPreset: false,
},
generate: {
routes: [
"/api/pages/product?slug=/product/Cheese",
Expand Down
4 changes: 2 additions & 2 deletions playground/server/api/pages/homepage.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { faker } from "@faker-js/faker";
import { defineEventHandler } from "h3";
import { wait } from "../../utils/wait";
import { defineMockInterceptorHandler } from "#imports";

export default defineEventHandler(async () => {
export default defineMockInterceptorHandler(async () => {
await wait(2000);

return {
Expand Down
28 changes: 15 additions & 13 deletions src/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,36 +80,38 @@ export default defineNuxtModule<ModuleOptions>({

if (devtools.enabled) {
addServerHandler({
route: "/__mock-server__/presets",
handler: resolver.resolve("./runtime/server/routes/presets"),
route: "/__mock-server__/meta",
method: "get",
handler: resolver.resolve("./runtime/server/routes/meta"),
});

addServerHandler({
route: "/__mock-server__/meta",
handler: resolver.resolve("./runtime/server/routes/meta"),
route: "/__mock-server__/presets",
method: "get",
handler: resolver.resolve("./runtime/server/routes/presets/index"),
});

if (devtools.createPreset || devtools.setPreset) {
addServerHandler({
route: "/__mock-server__/set-preset",
method: "POST",
handler: resolver.resolve("./runtime/server/routes/set-preset.post"),
route: "/__mock-server__/presets/:id/set",
method: "post",
handler: resolver.resolve("./runtime/server/routes/presets/[id]/set.post"),
});
}

if (devtools.deletePreset) {
addServerHandler({
route: "/__mock-server__/delete-preset",
method: "POST",
handler: resolver.resolve("./runtime/server/routes/delete-preset.post"),
route: "/__mock-server__/presets/:id/delete",
method: "post",
handler: resolver.resolve("./runtime/server/routes/presets/[id]/delete.post"),
});
}

if (devtools.generatePreset) {
addServerHandler({
route: "/__mock-server__/generate-preset",
method: "POST",
handler: resolver.resolve("./runtime/server/routes/generate-preset.post"),
route: "/__mock-server__/presets/:id/generate",
method: "post",
handler: resolver.resolve("./runtime/server/routes/presets/[id]/generate.post"),
});
}

Expand Down
3 changes: 2 additions & 1 deletion src/runtime/server/composables/use-mock-server.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { H3Event } from "h3";
import type { DeletePresetOptions } from "../management";
import { getPresets, deletePreset, setPreset, getPreset, existsPreset } from "../management";
import { getPresets, deletePreset, setPreset, getPreset, existsPreset, generatePreset } from "../management";

export function useMockServer(event: H3Event) {
return {
Expand All @@ -9,5 +9,6 @@ export function useMockServer(event: H3Event) {
deletePreset: (name: string, options?: DeletePresetOptions) => deletePreset(event, name, options),
setPreset: (name: string) => setPreset(event, name),
getPreset: (name: string) => getPreset(event, name),
generatePreset: (name: string) => generatePreset(event, name),
};
}
8 changes: 3 additions & 5 deletions src/runtime/server/handlers/intercept-request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@ import { defineEventHandler, type EventHandler, type EventHandlerRequest, type H
import consola from "consola";
import { AutoFormatter } from "../../formatters";
import type { FormatterDataType } from "../../types";
import { MAIN_HEADER_KEY, MAIN_HEADER_VALUE } from "../../utils";
import { MAIN_HEADER_KEY, MAIN_HEADER_VALUE, transformHeaders } from "../../utils";
import { definePresetHandler } from "./define-preset-handler";
import { useNitroApp, useRuntimeConfig } from "#imports";

export type InterceptRequestOptions = {
defaultPreset?: string;
} & ({ routeRegExp: RegExp; forceRouteMatch: false; } | { forceRouteMatch: true; });

const getHeaders = (headers: Headers) => Object.fromEntries(headers.entries());

export const interceptRequest = <T extends EventHandlerRequest, D>(
handler: EventHandler<T, D>,
options: InterceptRequestOptions = { forceRouteMatch: true },
Expand Down Expand Up @@ -46,7 +44,7 @@ export const interceptRequest = <T extends EventHandlerRequest, D>(
method: "GET",
cache: "no-cache",
headers: {
...getHeaders(event.headers),
...transformHeaders(event.headers),
[MAIN_HEADER_KEY]: MAIN_HEADER_VALUE.IGNORE,
},
});
Expand All @@ -58,7 +56,7 @@ export const interceptRequest = <T extends EventHandlerRequest, D>(
path: event.path,
lastModified: new Date(),
headers: {
...getHeaders(localResponse.headers),
...transformHeaders(localResponse.headers),
"content-type": localResponse.headers.get("content-type") as FormatterDataType || "text/plain",
},
},
Expand Down
15 changes: 10 additions & 5 deletions src/runtime/server/management/generate-preset.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import consola from "consola";
import type { createFetch as createLocalFetch } from "unenv/runtime/fetch/index";
import type { RuntimeConfig } from "@nuxt/schema";
import type { H3Event } from "h3";
import { MAIN_HEADER_KEY, PRESET_GENERATION_HEADER_KEY } from "../../utils";
import { useNitroApp } from "#imports";
import { useNitroApp, useRuntimeConfig } from "#imports";

async function request(localFetch: ReturnType<typeof createLocalFetch>, route: string, preset: string, isAutoMode: boolean, debug: boolean) {
try {
Expand All @@ -29,15 +29,15 @@ async function request(localFetch: ReturnType<typeof createLocalFetch>, route: s
}

export const generatePreset = async (
runtimeConfig: RuntimeConfig,
event: H3Event,
_preset: string | undefined = undefined,
) => {
const nitro = useNitroApp();

const { mockServer: { defaultPreset, generate, auto, debug } = {} } = runtimeConfig;
const { mockServer: { defaultPreset, generate, auto, debug } = {} } = useRuntimeConfig(event);
const preset = _preset || defaultPreset;

if (!generate || !generate.routes?.length) {
if (!generate) {
throw new TypeError("[mock-server] Generation is not enabled");
}

Expand All @@ -48,6 +48,11 @@ export const generatePreset = async (
const routes = generate.routes || [];
await nitro.hooks.callHook("mock-server:extendRoutes", { routes, preset });

if (!generate.routes?.length) {
consola.warn("[mock-server] No routes to generate");
return;
}

if (generate.parallel) {
const routeCalls = await Promise.allSettled(routes.map(route => request(nitro.localFetch, route, preset, !!auto, !!debug)));

Expand Down
14 changes: 0 additions & 14 deletions src/runtime/server/routes/delete-preset.post.ts

This file was deleted.

16 changes: 0 additions & 16 deletions src/runtime/server/routes/generate-preset.post.ts

This file was deleted.

4 changes: 0 additions & 4 deletions src/runtime/server/routes/presets.ts

This file was deleted.

14 changes: 14 additions & 0 deletions src/runtime/server/routes/presets/[id]/delete.post.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { getRouterParam } from "h3";
import { useMockServer } from "../../../composables";
import { definePresetHandler } from "../../../handlers";

export default definePresetHandler(async (event) => {
const preset = getRouterParam(event, "id");
const { deletePreset } = useMockServer(event);

if (!preset) {
throw new Error("Id not found");
}

await deletePreset(preset);
});
14 changes: 14 additions & 0 deletions src/runtime/server/routes/presets/[id]/generate.post.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { getRouterParam } from "h3";
import { definePresetHandler } from "../../../handlers";
import { useMockServer } from "../../../composables";

export default definePresetHandler(async (event) => {
const preset = getRouterParam(event, "id");
const { generatePreset } = useMockServer(event);

if (!preset) {
throw new Error("Id not found");
}

await generatePreset(preset);
});
14 changes: 14 additions & 0 deletions src/runtime/server/routes/presets/[id]/set.post.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { getRouterParam } from "h3";
import { useMockServer } from "../../../composables";
import { definePresetHandler } from "../../../handlers";

export default definePresetHandler(async (event) => {
const preset = getRouterParam(event, "id");
const { setPreset } = useMockServer(event);

if (!preset) {
throw new Error("Id not found");
}

await setPreset(preset);
});
4 changes: 4 additions & 0 deletions src/runtime/server/routes/presets/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { definePresetHandler } from "../../handlers";
import { getPresets } from "../../management";

export default definePresetHandler(getPresets);
14 changes: 0 additions & 14 deletions src/runtime/server/routes/set-preset.post.ts

This file was deleted.

1 change: 1 addition & 0 deletions src/runtime/utils/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from "./not-undefined";
export * from "./constants";
export * from "./transform-devtools-option";
export * from "./transform-headers";
1 change: 1 addition & 0 deletions src/runtime/utils/transform-headers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const transformHeaders = (headers: Headers) => Object.fromEntries(headers.entries());

0 comments on commit d6a4c25

Please sign in to comment.