@danceroutine/tango-adapters-next 0.1.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.
@@ -0,0 +1,13 @@
1
+ import type { NextRequest } from 'next/server';
2
+ import { NextResponse } from 'next/server';
3
+ import { RequestContext } from '@danceroutine/tango-resources';
4
+ import type { FrameworkAdapter, FrameworkAdapterOptions } from '@danceroutine/tango-adapters-core/adapter';
5
+ export type NextRouteHandler = (request: NextRequest, context: {
6
+ params?: Promise<Record<string, string>>;
7
+ }) => Promise<NextResponse>;
8
+ export interface AdaptNextOptions extends FrameworkAdapterOptions<NextRequest> {
9
+ }
10
+ export declare class NextAdapter implements FrameworkAdapter<NextResponse, NextRouteHandler, NextRequest> {
11
+ adapt(handler: (ctx: RequestContext, ...args: unknown[]) => Promise<NextResponse>, options?: AdaptNextOptions): NextRouteHandler;
12
+ private createHandler;
13
+ }
@@ -0,0 +1,31 @@
1
+ import { NextResponse } from 'next/server';
2
+ import { RequestContext } from '@danceroutine/tango-resources';
3
+ export class NextAdapter {
4
+ adapt(handler, options = {}) {
5
+ return this.createHandler(handler, options);
6
+ }
7
+ createHandler(handler, options) {
8
+ return async (request, routeContext) => {
9
+ try {
10
+ const user = options.getUser ? await options.getUser(request) : null;
11
+ const params = routeContext?.params ? await routeContext.params : undefined;
12
+ const ctx = RequestContext.create(request, user);
13
+ if (params) {
14
+ ctx.params = params;
15
+ }
16
+ const id = params?.id;
17
+ if (id && handler.length > 1) {
18
+ return await handler(ctx, id);
19
+ }
20
+ return await handler(ctx);
21
+ }
22
+ catch (error) {
23
+ console.error('Adapter error:', error);
24
+ return new NextResponse(JSON.stringify({ error: 'Internal Server Error' }), {
25
+ status: 500,
26
+ headers: { 'Content-Type': 'application/json' },
27
+ });
28
+ }
29
+ };
30
+ }
31
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Domain boundary barrel: centralizes this subdomain's public contract.
3
+ */
4
+ export { NextAdapter, type AdaptNextOptions, type NextRouteHandler } from './NextAdapter';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Domain boundary barrel: centralizes this subdomain's public contract.
3
+ */
4
+ export { NextAdapter } from './NextAdapter';
@@ -0,0 +1,47 @@
1
+ import { NextResponse } from "next/server";
2
+ import { RequestContext } from "@danceroutine/tango-resources";
3
+
4
+ //#region rolldown:runtime
5
+ var __defProp = Object.defineProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all) __defProp(target, name, {
8
+ get: all[name],
9
+ enumerable: true
10
+ });
11
+ };
12
+
13
+ //#endregion
14
+ //#region src/adapter/NextAdapter.ts
15
+ var NextAdapter = class {
16
+ adapt(handler, options = {}) {
17
+ return this.createHandler(handler, options);
18
+ }
19
+ createHandler(handler, options) {
20
+ return async (request, routeContext) => {
21
+ try {
22
+ const user = options.getUser ? await options.getUser(request) : null;
23
+ const params = routeContext?.params ? await routeContext.params : undefined;
24
+ const ctx = RequestContext.create(request, user);
25
+ if (params) ctx.params = params;
26
+ const id = params?.id;
27
+ if (id && handler.length > 1) return await handler(ctx, id);
28
+ return await handler(ctx);
29
+ } catch (error) {
30
+ console.error("Adapter error:", error);
31
+ return new NextResponse(JSON.stringify({ error: "Internal Server Error" }), {
32
+ status: 500,
33
+ headers: { "Content-Type": "application/json" }
34
+ });
35
+ }
36
+ };
37
+ }
38
+ };
39
+
40
+ //#endregion
41
+ //#region src/adapter/index.ts
42
+ var adapter_exports = {};
43
+ __export(adapter_exports, { NextAdapter: () => NextAdapter });
44
+
45
+ //#endregion
46
+ export { NextAdapter, adapter_exports };
47
+ //# sourceMappingURL=adapter-BtnGpM5G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-BtnGpM5G.js","names":["handler: (ctx: RequestContext, ...args: unknown[]) => Promise<NextResponse>","options: AdaptNextOptions","request: NextRequest"],"sources":["../src/adapter/NextAdapter.ts","../src/adapter/index.ts"],"sourcesContent":["import type { NextRequest } from 'next/server';\nimport { NextResponse } from 'next/server';\nimport { RequestContext } from '@danceroutine/tango-resources';\nimport type { FrameworkAdapter, FrameworkAdapterOptions } from '@danceroutine/tango-adapters-core/adapter';\n\nexport type NextRouteHandler = (\n request: NextRequest,\n context: { params?: Promise<Record<string, string>> }\n) => Promise<NextResponse>;\n\nexport interface AdaptNextOptions extends FrameworkAdapterOptions<NextRequest> {}\n\nexport class NextAdapter implements FrameworkAdapter<NextResponse, NextRouteHandler, NextRequest> {\n adapt(\n handler: (ctx: RequestContext, ...args: unknown[]) => Promise<NextResponse>,\n options: AdaptNextOptions = {}\n ): NextRouteHandler {\n return this.createHandler(handler, options);\n }\n\n private createHandler(\n handler: (ctx: RequestContext, ...args: unknown[]) => Promise<NextResponse>,\n options: AdaptNextOptions\n ): NextRouteHandler {\n return async (request: NextRequest, routeContext) => {\n try {\n const user = options.getUser ? await options.getUser(request) : null;\n\n const params = routeContext?.params ? await routeContext.params : undefined;\n\n const ctx = RequestContext.create(request, user);\n if (params) {\n ctx.params = params;\n }\n\n const id = params?.id;\n if (id && handler.length > 1) {\n return await handler(ctx, id);\n }\n\n return await handler(ctx);\n } catch (error) {\n console.error('Adapter error:', error);\n return new NextResponse(JSON.stringify({ error: 'Internal Server Error' }), {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n };\n }\n}\n","/**\n * Domain boundary barrel: centralizes this subdomain's public contract.\n */\n\nexport { NextAdapter, type AdaptNextOptions, type NextRouteHandler } from './NextAdapter';\n"],"mappings":";;;;;;;;;;;;;;IAYa,cAAN,MAA2F;CAC9F,MACIA,SACAC,UAA4B,CAAE,GACd;AAChB,SAAO,KAAK,cAAc,SAAS,QAAQ;CAC9C;CAED,cACID,SACAC,SACgB;AAChB,SAAO,OAAOC,SAAsB,iBAAiB;AACjD,OAAI;IACA,MAAM,OAAO,QAAQ,UAAU,MAAM,QAAQ,QAAQ,QAAQ,GAAG;IAEhE,MAAM,SAAS,cAAc,SAAS,MAAM,aAAa,SAAS;IAElE,MAAM,MAAM,eAAe,OAAO,SAAS,KAAK;AAChD,QAAI,OACA,KAAI,SAAS;IAGjB,MAAM,KAAK,QAAQ;AACnB,QAAI,MAAM,QAAQ,SAAS,EACvB,QAAO,MAAM,QAAQ,KAAK,GAAG;AAGjC,WAAO,MAAM,QAAQ,IAAI;GAC5B,SAAQ,OAAO;AACZ,YAAQ,MAAM,kBAAkB,MAAM;AACtC,WAAO,IAAI,aAAa,KAAK,UAAU,EAAE,OAAO,wBAAyB,EAAC,EAAE;KACxE,QAAQ;KACR,SAAS,EAAE,gBAAgB,mBAAoB;IAClD;GACJ;EACJ;CACJ;AACJ"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Bundled exports for Django-style domain drill-down imports, plus curated
3
+ * top-level symbols for TS-native ergonomic imports.
4
+ */
5
+ export * as adapter from './adapter/index';
6
+ export { NextAdapter, type AdaptNextOptions, type NextRouteHandler } from './adapter/index';
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import { NextAdapter, adapter_exports } from "./adapter-BtnGpM5G.js";
2
+
3
+ export { NextAdapter, adapter_exports as adapter };
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@danceroutine/tango-adapters-next",
3
+ "version": "0.1.0",
4
+ "description": "Next.js App Router adapter for Tango viewsets",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./adapter": {
14
+ "types": "./dist/adapter/index.d.ts",
15
+ "import": "./dist/adapter/index.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsdown",
23
+ "test": "vitest run --coverage",
24
+ "test:watch": "vitest",
25
+ "typecheck": "tsc --noEmit"
26
+ },
27
+ "keywords": [
28
+ "tango",
29
+ "next",
30
+ "nextjs",
31
+ "adapter"
32
+ ],
33
+ "author": "Pedro Del Moral Lopez",
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/danceroutine/tango.git",
38
+ "directory": "packages/adapters/next"
39
+ },
40
+ "dependencies": {
41
+ "@danceroutine/tango-resources": "workspace:*",
42
+ "@danceroutine/tango-adapters-core": "workspace:*"
43
+ },
44
+ "peerDependencies": {
45
+ "next": "^15.0.0"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^22.9.0",
49
+ "next": "^15.0.3",
50
+ "tsdown": "^0.4.0",
51
+ "typescript": "^5.6.3",
52
+ "vitest": "^4.0.6"
53
+ }
54
+ }