@easydocs/nextjs 0.5.0 → 0.5.2

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/dist/index.cjs CHANGED
@@ -27,6 +27,7 @@ module.exports = __toCommonJS(index_exports);
27
27
  var import_core = require("@easydocs/core");
28
28
  function withEasydocs(handler, config) {
29
29
  const parsedConfig = (0, import_core.parseConfig)(config);
30
+ const capturer = (0, import_core.createCapturer)(parsedConfig);
30
31
  return async (req, ctx) => {
31
32
  const startedAt = Date.now();
32
33
  const response = await handler(req, ctx);
@@ -46,7 +47,7 @@ function withEasydocs(handler, config) {
46
47
  } catch {
47
48
  }
48
49
  }
49
- (0, import_core.capture)(
50
+ capturer.capture(
50
51
  (0, import_core.buildCaptureEvent)({
51
52
  method: req.method,
52
53
  path: req.nextUrl.pathname,
@@ -58,19 +59,19 @@ function withEasydocs(handler, config) {
58
59
  requestHeaders: Object.fromEntries(req.headers.entries()),
59
60
  responseHeaders: Object.fromEntries(response.headers.entries()),
60
61
  durationMs: Date.now() - startedAt
61
- }),
62
- parsedConfig
62
+ })
63
63
  );
64
64
  return response;
65
65
  };
66
66
  }
67
67
  function withEasydocsPagesHandler(handler, config) {
68
68
  const parsedConfig = (0, import_core.parseConfig)(config);
69
+ const capturer = (0, import_core.createCapturer)(parsedConfig);
69
70
  return async (req, res) => {
70
71
  const startedAt = Date.now();
71
72
  const originalJson = res.json.bind(res);
72
73
  res.json = function(body) {
73
- (0, import_core.capture)(
74
+ capturer.capture(
74
75
  (0, import_core.buildCaptureEvent)({
75
76
  method: req.method ?? "GET",
76
77
  path: req.url?.split("?")[0] ?? "/",
@@ -81,8 +82,7 @@ function withEasydocsPagesHandler(handler, config) {
81
82
  requestHeaders: req.headers,
82
83
  responseHeaders: res.getHeaders(),
83
84
  durationMs: Date.now() - startedAt
84
- }),
85
- parsedConfig
85
+ })
86
86
  );
87
87
  return originalJson(body);
88
88
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { capture, parseConfig, buildCaptureEvent } from '@easydocs/core'\nimport type { EasyDocsConfig } from '@easydocs/core'\n\n// ─── Local structural types (avoid importing from next at build time) ──────────\n\ninterface NextURL {\n pathname: string\n searchParams: URLSearchParams\n}\n\ninterface NextRequestLike {\n method: string\n nextUrl: NextURL\n headers: Headers\n clone(): { json(): Promise<unknown> }\n}\n\ninterface NextApiRequestLike {\n method?: string\n url?: string\n query: Record<string, string | string[]>\n body: unknown\n headers: Record<string, string | string[] | undefined>\n}\n\ninterface NextApiResponseLike {\n statusCode: number\n json: (body: unknown) => NextApiResponseLike\n getHeaders(): Record<string, string | string[] | number | undefined>\n}\n\n// ─── App Router ───────────────────────────────────────────────────────────────\n\ntype AppRouterContext = { params?: Promise<Record<string, string>> | Record<string, string> }\ntype AppRouterHandler = (req: NextRequestLike, ctx?: AppRouterContext) => Promise<Response> | Response\n\nexport function withEasydocs(handler: AppRouterHandler, config?: EasyDocsConfig): AppRouterHandler {\n const parsedConfig = parseConfig(config)\n return async (req, ctx) => {\n const startedAt = Date.now()\n const response = await handler(req, ctx)\n\n let responseBody: unknown = null\n try {\n responseBody = await response.clone().json()\n } catch {\n // non-JSON response\n }\n\n let resolvedParams: Record<string, string> = {}\n if (ctx?.params) {\n resolvedParams =\n ctx.params instanceof Promise ? await ctx.params : (ctx.params as Record<string, string>)\n }\n\n let requestBody: unknown = null\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n try {\n requestBody = await req.clone().json()\n } catch {\n // non-JSON body\n }\n }\n\n capture(\n buildCaptureEvent({\n method: req.method,\n path: req.nextUrl.pathname,\n query: Object.fromEntries(req.nextUrl.searchParams.entries()),\n params: resolvedParams,\n requestBody,\n responseBody,\n status: response.status,\n requestHeaders: Object.fromEntries(req.headers.entries()),\n responseHeaders: Object.fromEntries(response.headers.entries()),\n durationMs: Date.now() - startedAt,\n }),\n parsedConfig\n )\n\n return response\n }\n}\n\n// ─── Pages Router ─────────────────────────────────────────────────────────────\n\ntype PagesHandler = (req: NextApiRequestLike, res: NextApiResponseLike) => void | Promise<void>\n\nexport function withEasydocsPagesHandler(\n handler: PagesHandler,\n config?: EasyDocsConfig\n): PagesHandler {\n const parsedConfig = parseConfig(config)\n return async (req, res) => {\n const startedAt = Date.now()\n const originalJson = res.json.bind(res)\n\n res.json = function (body: unknown) {\n capture(\n buildCaptureEvent({\n method: req.method ?? 'GET',\n path: req.url?.split('?')[0] ?? '/',\n query: req.query as Record<string, unknown>,\n requestBody: req.body,\n responseBody: body,\n status: res.statusCode,\n requestHeaders: req.headers as Record<string, unknown>,\n responseHeaders: res.getHeaders() as Record<string, unknown>,\n durationMs: Date.now() - startedAt,\n }),\n parsedConfig\n )\n return originalJson(body)\n }\n\n await handler(req, res)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAwD;AAoCjD,SAAS,aAAa,SAA2B,QAA2C;AACjG,QAAM,mBAAe,yBAAY,MAAM;AACvC,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,WAAW,MAAM,QAAQ,KAAK,GAAG;AAEvC,QAAI,eAAwB;AAC5B,QAAI;AACF,qBAAe,MAAM,SAAS,MAAM,EAAE,KAAK;AAAA,IAC7C,QAAQ;AAAA,IAER;AAEA,QAAI,iBAAyC,CAAC;AAC9C,QAAI,KAAK,QAAQ;AACf,uBACE,IAAI,kBAAkB,UAAU,MAAM,IAAI,SAAU,IAAI;AAAA,IAC5D;AAEA,QAAI,cAAuB;AAC3B,QAAI,IAAI,WAAW,SAAS,IAAI,WAAW,QAAQ;AACjD,UAAI;AACF,sBAAc,MAAM,IAAI,MAAM,EAAE,KAAK;AAAA,MACvC,QAAQ;AAAA,MAER;AAAA,IACF;AAEA;AAAA,UACE,+BAAkB;AAAA,QAChB,QAAQ,IAAI;AAAA,QACZ,MAAM,IAAI,QAAQ;AAAA,QAClB,OAAO,OAAO,YAAY,IAAI,QAAQ,aAAa,QAAQ,CAAC;AAAA,QAC5D,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,gBAAgB,OAAO,YAAY,IAAI,QAAQ,QAAQ,CAAC;AAAA,QACxD,iBAAiB,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC;AAAA,QAC9D,YAAY,KAAK,IAAI,IAAI;AAAA,MAC3B,CAAC;AAAA,MACD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAMO,SAAS,yBACd,SACA,QACc;AACd,QAAM,mBAAe,yBAAY,MAAM;AACvC,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,eAAe,IAAI,KAAK,KAAK,GAAG;AAEtC,QAAI,OAAO,SAAU,MAAe;AAClC;AAAA,YACE,+BAAkB;AAAA,UAChB,QAAQ,IAAI,UAAU;AAAA,UACtB,MAAM,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,UAChC,OAAO,IAAI;AAAA,UACX,aAAa,IAAI;AAAA,UACjB,cAAc;AAAA,UACd,QAAQ,IAAI;AAAA,UACZ,gBAAgB,IAAI;AAAA,UACpB,iBAAiB,IAAI,WAAW;AAAA,UAChC,YAAY,KAAK,IAAI,IAAI;AAAA,QAC3B,CAAC;AAAA,QACD;AAAA,MACF;AACA,aAAO,aAAa,IAAI;AAAA,IAC1B;AAEA,UAAM,QAAQ,KAAK,GAAG;AAAA,EACxB;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createCapturer, parseConfig, buildCaptureEvent } from '@easydocs/core'\nimport type { EasyDocsConfig } from '@easydocs/core'\n\n// ─── Local structural types (avoid importing from next at build time) ──────────\n\ninterface NextURL {\n pathname: string\n searchParams: URLSearchParams\n}\n\ninterface NextRequestLike {\n method: string\n nextUrl: NextURL\n headers: Headers\n clone(): { json(): Promise<unknown> }\n}\n\ninterface NextApiRequestLike {\n method?: string\n url?: string\n query: Record<string, string | string[]>\n body: unknown\n headers: Record<string, string | string[] | undefined>\n}\n\ninterface NextApiResponseLike {\n statusCode: number\n json: (body: unknown) => NextApiResponseLike\n getHeaders(): Record<string, string | string[] | number | undefined>\n}\n\n// ─── App Router ───────────────────────────────────────────────────────────────\n\ntype AppRouterContext = { params?: Promise<Record<string, string>> | Record<string, string> }\ntype AppRouterHandler = (req: NextRequestLike, ctx?: AppRouterContext) => Promise<Response> | Response\n\nexport function withEasydocs(handler: AppRouterHandler, config?: EasyDocsConfig): AppRouterHandler {\n const parsedConfig = parseConfig(config)\n const capturer = createCapturer(parsedConfig)\n return async (req, ctx) => {\n const startedAt = Date.now()\n const response = await handler(req, ctx)\n\n let responseBody: unknown = null\n try {\n responseBody = await response.clone().json()\n } catch {\n // non-JSON response\n }\n\n let resolvedParams: Record<string, string> = {}\n if (ctx?.params) {\n resolvedParams =\n ctx.params instanceof Promise ? await ctx.params : (ctx.params as Record<string, string>)\n }\n\n let requestBody: unknown = null\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n try {\n requestBody = await req.clone().json()\n } catch {\n // non-JSON body\n }\n }\n\n capturer.capture(\n buildCaptureEvent({\n method: req.method,\n path: req.nextUrl.pathname,\n query: Object.fromEntries(req.nextUrl.searchParams.entries()),\n params: resolvedParams,\n requestBody,\n responseBody,\n status: response.status,\n requestHeaders: Object.fromEntries(req.headers.entries()),\n responseHeaders: Object.fromEntries(response.headers.entries()),\n durationMs: Date.now() - startedAt,\n })\n )\n\n return response\n }\n}\n\n// ─── Pages Router ─────────────────────────────────────────────────────────────\n\ntype PagesHandler = (req: NextApiRequestLike, res: NextApiResponseLike) => void | Promise<void>\n\nexport function withEasydocsPagesHandler(\n handler: PagesHandler,\n config?: EasyDocsConfig\n): PagesHandler {\n const parsedConfig = parseConfig(config)\n const capturer = createCapturer(parsedConfig)\n return async (req, res) => {\n const startedAt = Date.now()\n const originalJson = res.json.bind(res)\n\n res.json = function (body: unknown) {\n capturer.capture(\n buildCaptureEvent({\n method: req.method ?? 'GET',\n path: req.url?.split('?')[0] ?? '/',\n query: req.query as Record<string, unknown>,\n requestBody: req.body,\n responseBody: body,\n status: res.statusCode,\n requestHeaders: req.headers as Record<string, unknown>,\n responseHeaders: res.getHeaders() as Record<string, unknown>,\n durationMs: Date.now() - startedAt,\n })\n )\n return originalJson(body)\n }\n\n await handler(req, res)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA+D;AAoCxD,SAAS,aAAa,SAA2B,QAA2C;AACjG,QAAM,mBAAe,yBAAY,MAAM;AACvC,QAAM,eAAW,4BAAe,YAAY;AAC5C,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,WAAW,MAAM,QAAQ,KAAK,GAAG;AAEvC,QAAI,eAAwB;AAC5B,QAAI;AACF,qBAAe,MAAM,SAAS,MAAM,EAAE,KAAK;AAAA,IAC7C,QAAQ;AAAA,IAER;AAEA,QAAI,iBAAyC,CAAC;AAC9C,QAAI,KAAK,QAAQ;AACf,uBACE,IAAI,kBAAkB,UAAU,MAAM,IAAI,SAAU,IAAI;AAAA,IAC5D;AAEA,QAAI,cAAuB;AAC3B,QAAI,IAAI,WAAW,SAAS,IAAI,WAAW,QAAQ;AACjD,UAAI;AACF,sBAAc,MAAM,IAAI,MAAM,EAAE,KAAK;AAAA,MACvC,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,aAAS;AAAA,UACP,+BAAkB;AAAA,QAChB,QAAQ,IAAI;AAAA,QACZ,MAAM,IAAI,QAAQ;AAAA,QAClB,OAAO,OAAO,YAAY,IAAI,QAAQ,aAAa,QAAQ,CAAC;AAAA,QAC5D,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,gBAAgB,OAAO,YAAY,IAAI,QAAQ,QAAQ,CAAC;AAAA,QACxD,iBAAiB,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC;AAAA,QAC9D,YAAY,KAAK,IAAI,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;AAMO,SAAS,yBACd,SACA,QACc;AACd,QAAM,mBAAe,yBAAY,MAAM;AACvC,QAAM,eAAW,4BAAe,YAAY;AAC5C,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,eAAe,IAAI,KAAK,KAAK,GAAG;AAEtC,QAAI,OAAO,SAAU,MAAe;AAClC,eAAS;AAAA,YACP,+BAAkB;AAAA,UAChB,QAAQ,IAAI,UAAU;AAAA,UACtB,MAAM,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,UAChC,OAAO,IAAI;AAAA,UACX,aAAa,IAAI;AAAA,UACjB,cAAc;AAAA,UACd,QAAQ,IAAI;AAAA,UACZ,gBAAgB,IAAI;AAAA,UACpB,iBAAiB,IAAI,WAAW;AAAA,UAChC,YAAY,KAAK,IAAI,IAAI;AAAA,QAC3B,CAAC;AAAA,MACH;AACA,aAAO,aAAa,IAAI;AAAA,IAC1B;AAEA,UAAM,QAAQ,KAAK,GAAG;AAAA,EACxB;AACF;","names":[]}
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  // src/index.ts
2
- import { capture, parseConfig, buildCaptureEvent } from "@easydocs/core";
2
+ import { createCapturer, parseConfig, buildCaptureEvent } from "@easydocs/core";
3
3
  function withEasydocs(handler, config) {
4
4
  const parsedConfig = parseConfig(config);
5
+ const capturer = createCapturer(parsedConfig);
5
6
  return async (req, ctx) => {
6
7
  const startedAt = Date.now();
7
8
  const response = await handler(req, ctx);
@@ -21,7 +22,7 @@ function withEasydocs(handler, config) {
21
22
  } catch {
22
23
  }
23
24
  }
24
- capture(
25
+ capturer.capture(
25
26
  buildCaptureEvent({
26
27
  method: req.method,
27
28
  path: req.nextUrl.pathname,
@@ -33,19 +34,19 @@ function withEasydocs(handler, config) {
33
34
  requestHeaders: Object.fromEntries(req.headers.entries()),
34
35
  responseHeaders: Object.fromEntries(response.headers.entries()),
35
36
  durationMs: Date.now() - startedAt
36
- }),
37
- parsedConfig
37
+ })
38
38
  );
39
39
  return response;
40
40
  };
41
41
  }
42
42
  function withEasydocsPagesHandler(handler, config) {
43
43
  const parsedConfig = parseConfig(config);
44
+ const capturer = createCapturer(parsedConfig);
44
45
  return async (req, res) => {
45
46
  const startedAt = Date.now();
46
47
  const originalJson = res.json.bind(res);
47
48
  res.json = function(body) {
48
- capture(
49
+ capturer.capture(
49
50
  buildCaptureEvent({
50
51
  method: req.method ?? "GET",
51
52
  path: req.url?.split("?")[0] ?? "/",
@@ -56,8 +57,7 @@ function withEasydocsPagesHandler(handler, config) {
56
57
  requestHeaders: req.headers,
57
58
  responseHeaders: res.getHeaders(),
58
59
  durationMs: Date.now() - startedAt
59
- }),
60
- parsedConfig
60
+ })
61
61
  );
62
62
  return originalJson(body);
63
63
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { capture, parseConfig, buildCaptureEvent } from '@easydocs/core'\nimport type { EasyDocsConfig } from '@easydocs/core'\n\n// ─── Local structural types (avoid importing from next at build time) ──────────\n\ninterface NextURL {\n pathname: string\n searchParams: URLSearchParams\n}\n\ninterface NextRequestLike {\n method: string\n nextUrl: NextURL\n headers: Headers\n clone(): { json(): Promise<unknown> }\n}\n\ninterface NextApiRequestLike {\n method?: string\n url?: string\n query: Record<string, string | string[]>\n body: unknown\n headers: Record<string, string | string[] | undefined>\n}\n\ninterface NextApiResponseLike {\n statusCode: number\n json: (body: unknown) => NextApiResponseLike\n getHeaders(): Record<string, string | string[] | number | undefined>\n}\n\n// ─── App Router ───────────────────────────────────────────────────────────────\n\ntype AppRouterContext = { params?: Promise<Record<string, string>> | Record<string, string> }\ntype AppRouterHandler = (req: NextRequestLike, ctx?: AppRouterContext) => Promise<Response> | Response\n\nexport function withEasydocs(handler: AppRouterHandler, config?: EasyDocsConfig): AppRouterHandler {\n const parsedConfig = parseConfig(config)\n return async (req, ctx) => {\n const startedAt = Date.now()\n const response = await handler(req, ctx)\n\n let responseBody: unknown = null\n try {\n responseBody = await response.clone().json()\n } catch {\n // non-JSON response\n }\n\n let resolvedParams: Record<string, string> = {}\n if (ctx?.params) {\n resolvedParams =\n ctx.params instanceof Promise ? await ctx.params : (ctx.params as Record<string, string>)\n }\n\n let requestBody: unknown = null\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n try {\n requestBody = await req.clone().json()\n } catch {\n // non-JSON body\n }\n }\n\n capture(\n buildCaptureEvent({\n method: req.method,\n path: req.nextUrl.pathname,\n query: Object.fromEntries(req.nextUrl.searchParams.entries()),\n params: resolvedParams,\n requestBody,\n responseBody,\n status: response.status,\n requestHeaders: Object.fromEntries(req.headers.entries()),\n responseHeaders: Object.fromEntries(response.headers.entries()),\n durationMs: Date.now() - startedAt,\n }),\n parsedConfig\n )\n\n return response\n }\n}\n\n// ─── Pages Router ─────────────────────────────────────────────────────────────\n\ntype PagesHandler = (req: NextApiRequestLike, res: NextApiResponseLike) => void | Promise<void>\n\nexport function withEasydocsPagesHandler(\n handler: PagesHandler,\n config?: EasyDocsConfig\n): PagesHandler {\n const parsedConfig = parseConfig(config)\n return async (req, res) => {\n const startedAt = Date.now()\n const originalJson = res.json.bind(res)\n\n res.json = function (body: unknown) {\n capture(\n buildCaptureEvent({\n method: req.method ?? 'GET',\n path: req.url?.split('?')[0] ?? '/',\n query: req.query as Record<string, unknown>,\n requestBody: req.body,\n responseBody: body,\n status: res.statusCode,\n requestHeaders: req.headers as Record<string, unknown>,\n responseHeaders: res.getHeaders() as Record<string, unknown>,\n durationMs: Date.now() - startedAt,\n }),\n parsedConfig\n )\n return originalJson(body)\n }\n\n await handler(req, res)\n }\n}\n"],"mappings":";AAAA,SAAS,SAAS,aAAa,yBAAyB;AAoCjD,SAAS,aAAa,SAA2B,QAA2C;AACjG,QAAM,eAAe,YAAY,MAAM;AACvC,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,WAAW,MAAM,QAAQ,KAAK,GAAG;AAEvC,QAAI,eAAwB;AAC5B,QAAI;AACF,qBAAe,MAAM,SAAS,MAAM,EAAE,KAAK;AAAA,IAC7C,QAAQ;AAAA,IAER;AAEA,QAAI,iBAAyC,CAAC;AAC9C,QAAI,KAAK,QAAQ;AACf,uBACE,IAAI,kBAAkB,UAAU,MAAM,IAAI,SAAU,IAAI;AAAA,IAC5D;AAEA,QAAI,cAAuB;AAC3B,QAAI,IAAI,WAAW,SAAS,IAAI,WAAW,QAAQ;AACjD,UAAI;AACF,sBAAc,MAAM,IAAI,MAAM,EAAE,KAAK;AAAA,MACvC,QAAQ;AAAA,MAER;AAAA,IACF;AAEA;AAAA,MACE,kBAAkB;AAAA,QAChB,QAAQ,IAAI;AAAA,QACZ,MAAM,IAAI,QAAQ;AAAA,QAClB,OAAO,OAAO,YAAY,IAAI,QAAQ,aAAa,QAAQ,CAAC;AAAA,QAC5D,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,gBAAgB,OAAO,YAAY,IAAI,QAAQ,QAAQ,CAAC;AAAA,QACxD,iBAAiB,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC;AAAA,QAC9D,YAAY,KAAK,IAAI,IAAI;AAAA,MAC3B,CAAC;AAAA,MACD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAMO,SAAS,yBACd,SACA,QACc;AACd,QAAM,eAAe,YAAY,MAAM;AACvC,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,eAAe,IAAI,KAAK,KAAK,GAAG;AAEtC,QAAI,OAAO,SAAU,MAAe;AAClC;AAAA,QACE,kBAAkB;AAAA,UAChB,QAAQ,IAAI,UAAU;AAAA,UACtB,MAAM,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,UAChC,OAAO,IAAI;AAAA,UACX,aAAa,IAAI;AAAA,UACjB,cAAc;AAAA,UACd,QAAQ,IAAI;AAAA,UACZ,gBAAgB,IAAI;AAAA,UACpB,iBAAiB,IAAI,WAAW;AAAA,UAChC,YAAY,KAAK,IAAI,IAAI;AAAA,QAC3B,CAAC;AAAA,QACD;AAAA,MACF;AACA,aAAO,aAAa,IAAI;AAAA,IAC1B;AAEA,UAAM,QAAQ,KAAK,GAAG;AAAA,EACxB;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createCapturer, parseConfig, buildCaptureEvent } from '@easydocs/core'\nimport type { EasyDocsConfig } from '@easydocs/core'\n\n// ─── Local structural types (avoid importing from next at build time) ──────────\n\ninterface NextURL {\n pathname: string\n searchParams: URLSearchParams\n}\n\ninterface NextRequestLike {\n method: string\n nextUrl: NextURL\n headers: Headers\n clone(): { json(): Promise<unknown> }\n}\n\ninterface NextApiRequestLike {\n method?: string\n url?: string\n query: Record<string, string | string[]>\n body: unknown\n headers: Record<string, string | string[] | undefined>\n}\n\ninterface NextApiResponseLike {\n statusCode: number\n json: (body: unknown) => NextApiResponseLike\n getHeaders(): Record<string, string | string[] | number | undefined>\n}\n\n// ─── App Router ───────────────────────────────────────────────────────────────\n\ntype AppRouterContext = { params?: Promise<Record<string, string>> | Record<string, string> }\ntype AppRouterHandler = (req: NextRequestLike, ctx?: AppRouterContext) => Promise<Response> | Response\n\nexport function withEasydocs(handler: AppRouterHandler, config?: EasyDocsConfig): AppRouterHandler {\n const parsedConfig = parseConfig(config)\n const capturer = createCapturer(parsedConfig)\n return async (req, ctx) => {\n const startedAt = Date.now()\n const response = await handler(req, ctx)\n\n let responseBody: unknown = null\n try {\n responseBody = await response.clone().json()\n } catch {\n // non-JSON response\n }\n\n let resolvedParams: Record<string, string> = {}\n if (ctx?.params) {\n resolvedParams =\n ctx.params instanceof Promise ? await ctx.params : (ctx.params as Record<string, string>)\n }\n\n let requestBody: unknown = null\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n try {\n requestBody = await req.clone().json()\n } catch {\n // non-JSON body\n }\n }\n\n capturer.capture(\n buildCaptureEvent({\n method: req.method,\n path: req.nextUrl.pathname,\n query: Object.fromEntries(req.nextUrl.searchParams.entries()),\n params: resolvedParams,\n requestBody,\n responseBody,\n status: response.status,\n requestHeaders: Object.fromEntries(req.headers.entries()),\n responseHeaders: Object.fromEntries(response.headers.entries()),\n durationMs: Date.now() - startedAt,\n })\n )\n\n return response\n }\n}\n\n// ─── Pages Router ─────────────────────────────────────────────────────────────\n\ntype PagesHandler = (req: NextApiRequestLike, res: NextApiResponseLike) => void | Promise<void>\n\nexport function withEasydocsPagesHandler(\n handler: PagesHandler,\n config?: EasyDocsConfig\n): PagesHandler {\n const parsedConfig = parseConfig(config)\n const capturer = createCapturer(parsedConfig)\n return async (req, res) => {\n const startedAt = Date.now()\n const originalJson = res.json.bind(res)\n\n res.json = function (body: unknown) {\n capturer.capture(\n buildCaptureEvent({\n method: req.method ?? 'GET',\n path: req.url?.split('?')[0] ?? '/',\n query: req.query as Record<string, unknown>,\n requestBody: req.body,\n responseBody: body,\n status: res.statusCode,\n requestHeaders: req.headers as Record<string, unknown>,\n responseHeaders: res.getHeaders() as Record<string, unknown>,\n durationMs: Date.now() - startedAt,\n })\n )\n return originalJson(body)\n }\n\n await handler(req, res)\n }\n}\n"],"mappings":";AAAA,SAAS,gBAAgB,aAAa,yBAAyB;AAoCxD,SAAS,aAAa,SAA2B,QAA2C;AACjG,QAAM,eAAe,YAAY,MAAM;AACvC,QAAM,WAAW,eAAe,YAAY;AAC5C,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,WAAW,MAAM,QAAQ,KAAK,GAAG;AAEvC,QAAI,eAAwB;AAC5B,QAAI;AACF,qBAAe,MAAM,SAAS,MAAM,EAAE,KAAK;AAAA,IAC7C,QAAQ;AAAA,IAER;AAEA,QAAI,iBAAyC,CAAC;AAC9C,QAAI,KAAK,QAAQ;AACf,uBACE,IAAI,kBAAkB,UAAU,MAAM,IAAI,SAAU,IAAI;AAAA,IAC5D;AAEA,QAAI,cAAuB;AAC3B,QAAI,IAAI,WAAW,SAAS,IAAI,WAAW,QAAQ;AACjD,UAAI;AACF,sBAAc,MAAM,IAAI,MAAM,EAAE,KAAK;AAAA,MACvC,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,aAAS;AAAA,MACP,kBAAkB;AAAA,QAChB,QAAQ,IAAI;AAAA,QACZ,MAAM,IAAI,QAAQ;AAAA,QAClB,OAAO,OAAO,YAAY,IAAI,QAAQ,aAAa,QAAQ,CAAC;AAAA,QAC5D,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,gBAAgB,OAAO,YAAY,IAAI,QAAQ,QAAQ,CAAC;AAAA,QACxD,iBAAiB,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC;AAAA,QAC9D,YAAY,KAAK,IAAI,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;AAMO,SAAS,yBACd,SACA,QACc;AACd,QAAM,eAAe,YAAY,MAAM;AACvC,QAAM,WAAW,eAAe,YAAY;AAC5C,SAAO,OAAO,KAAK,QAAQ;AACzB,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,eAAe,IAAI,KAAK,KAAK,GAAG;AAEtC,QAAI,OAAO,SAAU,MAAe;AAClC,eAAS;AAAA,QACP,kBAAkB;AAAA,UAChB,QAAQ,IAAI,UAAU;AAAA,UACtB,MAAM,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,UAChC,OAAO,IAAI;AAAA,UACX,aAAa,IAAI;AAAA,UACjB,cAAc;AAAA,UACd,QAAQ,IAAI;AAAA,UACZ,gBAAgB,IAAI;AAAA,UACpB,iBAAiB,IAAI,WAAW;AAAA,UAChC,YAAY,KAAK,IAAI,IAAI;AAAA,QAC3B,CAAC;AAAA,MACH;AACA,aAAO,aAAa,IAAI;AAAA,IAC1B;AAEA,UAAM,QAAQ,KAAK,GAAG;AAAA,EACxB;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easydocs/nextjs",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "files": [
5
5
  "dist",
6
6
  "README.md"
@@ -18,16 +18,21 @@
18
18
  }
19
19
  },
20
20
  "dependencies": {
21
- "@easydocs/core": "0.5.0"
21
+ "@easydocs/core": "0.5.2"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "next": ">=14.0.0"
25
25
  },
26
26
  "devDependencies": {
27
- "next": "^15.1.6",
27
+ "next": "^16.2.6",
28
28
  "tsup": "^8.3.0",
29
29
  "typescript": "^5"
30
30
  },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/RubenGlez/easydocs",
34
+ "directory": ""
35
+ },
31
36
  "scripts": {
32
37
  "build": "tsup",
33
38
  "dev": "tsup --watch",