@underpeaks/generator-nextjs 1.0.19
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/generator.d.ts +3 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +113 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/algolia.d.ts +3 -0
- package/dist/integrations/algolia.d.ts.map +1 -0
- package/dist/integrations/algolia.js +56 -0
- package/dist/integrations/algolia.js.map +1 -0
- package/dist/integrations/anthropic.d.ts +3 -0
- package/dist/integrations/anthropic.d.ts.map +1 -0
- package/dist/integrations/anthropic.js +54 -0
- package/dist/integrations/anthropic.js.map +1 -0
- package/dist/integrations/aws-s3.d.ts +3 -0
- package/dist/integrations/aws-s3.d.ts.map +1 -0
- package/dist/integrations/aws-s3.js +59 -0
- package/dist/integrations/aws-s3.js.map +1 -0
- package/dist/integrations/clerk.d.ts +3 -0
- package/dist/integrations/clerk.d.ts.map +1 -0
- package/dist/integrations/clerk.js +34 -0
- package/dist/integrations/clerk.js.map +1 -0
- package/dist/integrations/cloudinary.d.ts +3 -0
- package/dist/integrations/cloudinary.d.ts.map +1 -0
- package/dist/integrations/cloudinary.js +57 -0
- package/dist/integrations/cloudinary.js.map +1 -0
- package/dist/integrations/crisp.d.ts +3 -0
- package/dist/integrations/crisp.d.ts.map +1 -0
- package/dist/integrations/crisp.js +53 -0
- package/dist/integrations/crisp.js.map +1 -0
- package/dist/integrations/firebase.d.ts +3 -0
- package/dist/integrations/firebase.d.ts.map +1 -0
- package/dist/integrations/firebase.js +53 -0
- package/dist/integrations/firebase.js.map +1 -0
- package/dist/integrations/flutterwave.d.ts +3 -0
- package/dist/integrations/flutterwave.d.ts.map +1 -0
- package/dist/integrations/flutterwave.js +53 -0
- package/dist/integrations/flutterwave.js.map +1 -0
- package/dist/integrations/gemini.d.ts +3 -0
- package/dist/integrations/gemini.d.ts.map +1 -0
- package/dist/integrations/gemini.js +40 -0
- package/dist/integrations/gemini.js.map +1 -0
- package/dist/integrations/github.d.ts +3 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +53 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/hubspot.d.ts +3 -0
- package/dist/integrations/hubspot.d.ts.map +1 -0
- package/dist/integrations/hubspot.js +54 -0
- package/dist/integrations/hubspot.js.map +1 -0
- package/dist/integrations/index.d.ts +3 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +63 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/lemonsqueezy.d.ts +3 -0
- package/dist/integrations/lemonsqueezy.d.ts.map +1 -0
- package/dist/integrations/lemonsqueezy.js +43 -0
- package/dist/integrations/lemonsqueezy.js.map +1 -0
- package/dist/integrations/mailchimp.d.ts +3 -0
- package/dist/integrations/mailchimp.d.ts.map +1 -0
- package/dist/integrations/mailchimp.js +52 -0
- package/dist/integrations/mailchimp.js.map +1 -0
- package/dist/integrations/openai.d.ts +3 -0
- package/dist/integrations/openai.d.ts.map +1 -0
- package/dist/integrations/openai.js +78 -0
- package/dist/integrations/openai.js.map +1 -0
- package/dist/integrations/payfast.d.ts +3 -0
- package/dist/integrations/payfast.d.ts.map +1 -0
- package/dist/integrations/payfast.js +94 -0
- package/dist/integrations/payfast.js.map +1 -0
- package/dist/integrations/pusher.d.ts +3 -0
- package/dist/integrations/pusher.d.ts.map +1 -0
- package/dist/integrations/pusher.js +86 -0
- package/dist/integrations/pusher.js.map +1 -0
- package/dist/integrations/resend.d.ts +3 -0
- package/dist/integrations/resend.d.ts.map +1 -0
- package/dist/integrations/resend.js +45 -0
- package/dist/integrations/resend.js.map +1 -0
- package/dist/integrations/sendgrid.d.ts +3 -0
- package/dist/integrations/sendgrid.d.ts.map +1 -0
- package/dist/integrations/sendgrid.js +42 -0
- package/dist/integrations/sendgrid.js.map +1 -0
- package/dist/integrations/sentry.d.ts +3 -0
- package/dist/integrations/sentry.d.ts.map +1 -0
- package/dist/integrations/sentry.js +49 -0
- package/dist/integrations/sentry.js.map +1 -0
- package/dist/integrations/slack.d.ts +3 -0
- package/dist/integrations/slack.d.ts.map +1 -0
- package/dist/integrations/slack.js +54 -0
- package/dist/integrations/slack.js.map +1 -0
- package/dist/integrations/storage.d.ts +3 -0
- package/dist/integrations/storage.d.ts.map +1 -0
- package/dist/integrations/storage.js +71 -0
- package/dist/integrations/storage.js.map +1 -0
- package/dist/integrations/stripe.d.ts +3 -0
- package/dist/integrations/stripe.d.ts.map +1 -0
- package/dist/integrations/stripe.js +65 -0
- package/dist/integrations/stripe.js.map +1 -0
- package/dist/integrations/twilio.d.ts +3 -0
- package/dist/integrations/twilio.d.ts.map +1 -0
- package/dist/integrations/twilio.js +45 -0
- package/dist/integrations/twilio.js.map +1 -0
- package/dist/integrations/uploadthing.d.ts +3 -0
- package/dist/integrations/uploadthing.d.ts.map +1 -0
- package/dist/integrations/uploadthing.js +41 -0
- package/dist/integrations/uploadthing.js.map +1 -0
- package/dist/templates/api-builder.d.ts +12 -0
- package/dist/templates/api-builder.d.ts.map +1 -0
- package/dist/templates/api-builder.js +76 -0
- package/dist/templates/api-builder.js.map +1 -0
- package/dist/templates/api-route-id.d.ts +3 -0
- package/dist/templates/api-route-id.d.ts.map +1 -0
- package/dist/templates/api-route-id.js +137 -0
- package/dist/templates/api-route-id.js.map +1 -0
- package/dist/templates/api-route.d.ts +3 -0
- package/dist/templates/api-route.d.ts.map +1 -0
- package/dist/templates/api-route.js +85 -0
- package/dist/templates/api-route.js.map +1 -0
- package/dist/templates/app-nav.d.ts +23 -0
- package/dist/templates/app-nav.d.ts.map +1 -0
- package/dist/templates/app-nav.js +132 -0
- package/dist/templates/app-nav.js.map +1 -0
- package/dist/templates/env.d.ts +3 -0
- package/dist/templates/env.d.ts.map +1 -0
- package/dist/templates/env.js +39 -0
- package/dist/templates/env.js.map +1 -0
- package/dist/templates/layout.d.ts +3 -0
- package/dist/templates/layout.d.ts.map +1 -0
- package/dist/templates/layout.js +50 -0
- package/dist/templates/layout.js.map +1 -0
- package/dist/templates/navigation.d.ts +3 -0
- package/dist/templates/navigation.d.ts.map +1 -0
- package/dist/templates/navigation.js +129 -0
- package/dist/templates/navigation.js.map +1 -0
- package/dist/templates/nxf-client.d.ts +3 -0
- package/dist/templates/nxf-client.d.ts.map +1 -0
- package/dist/templates/nxf-client.js +96 -0
- package/dist/templates/nxf-client.js.map +1 -0
- package/dist/templates/page-auth.d.ts +3 -0
- package/dist/templates/page-auth.d.ts.map +1 -0
- package/dist/templates/page-auth.js +344 -0
- package/dist/templates/page-auth.js.map +1 -0
- package/dist/templates/page-detail.d.ts +3 -0
- package/dist/templates/page-detail.d.ts.map +1 -0
- package/dist/templates/page-detail.js +86 -0
- package/dist/templates/page-detail.js.map +1 -0
- package/dist/templates/page-form.d.ts +3 -0
- package/dist/templates/page-form.d.ts.map +1 -0
- package/dist/templates/page-form.js +159 -0
- package/dist/templates/page-form.js.map +1 -0
- package/dist/templates/page-landing.d.ts +3 -0
- package/dist/templates/page-landing.d.ts.map +1 -0
- package/dist/templates/page-landing.js +140 -0
- package/dist/templates/page-landing.js.map +1 -0
- package/dist/templates/page-list.d.ts +3 -0
- package/dist/templates/page-list.d.ts.map +1 -0
- package/dist/templates/page-list.js +130 -0
- package/dist/templates/page-list.js.map +1 -0
- package/dist/templates/page-remaining.d.ts +3 -0
- package/dist/templates/page-remaining.d.ts.map +1 -0
- package/dist/templates/page-remaining.js +870 -0
- package/dist/templates/page-remaining.js.map +1 -0
- package/dist/templates/readme.d.ts +3 -0
- package/dist/templates/readme.d.ts.map +1 -0
- package/dist/templates/readme.js +87 -0
- package/dist/templates/readme.js.map +1 -0
- package/dist/templates/tailwind.d.ts +3 -0
- package/dist/templates/tailwind.d.ts.map +1 -0
- package/dist/templates/tailwind.js +63 -0
- package/dist/templates/tailwind.js.map +1 -0
- package/dist/templates/theme.d.ts +3 -0
- package/dist/templates/theme.d.ts.map +1 -0
- package/dist/templates/theme.js +49 -0
- package/dist/templates/theme.js.map +1 -0
- package/dist/templates/types.d.ts +3 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/templates/types.js +74 -0
- package/dist/templates/types.js.map +1 -0
- package/dist/templates/validators.d.ts +3 -0
- package/dist/templates/validators.d.ts.map +1 -0
- package/dist/templates/validators.js +37 -0
- package/dist/templates/validators.js.map +1 -0
- package/package.json +24 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/stripe.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateStripeNextjs = generateStripeNextjs;
|
|
5
|
+
function generateStripeNextjs(config) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
8
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
9
|
+
lines.push(`// Integration: Stripe`);
|
|
10
|
+
lines.push(``);
|
|
11
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
12
|
+
lines.push(`// 1. npm install stripe @stripe/stripe-js @stripe/react-stripe-js`);
|
|
13
|
+
lines.push(`// 2. Add STRIPE_SECRET_KEY and NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY to .env.local`);
|
|
14
|
+
lines.push(``);
|
|
15
|
+
lines.push(`import Stripe from 'stripe'`);
|
|
16
|
+
lines.push(``);
|
|
17
|
+
lines.push(`// ── Server-side Stripe instance ───────────────────────────────────────────`);
|
|
18
|
+
lines.push(`// Only use this in API routes or Server Components`);
|
|
19
|
+
lines.push(``);
|
|
20
|
+
lines.push(`export function getStripe() {`);
|
|
21
|
+
lines.push(` return new Stripe(process.env.STRIPE_SECRET_KEY ?? '', {`);
|
|
22
|
+
lines.push(` apiVersion: '2024-04-10',`);
|
|
23
|
+
lines.push(` })`);
|
|
24
|
+
lines.push(`}`);
|
|
25
|
+
lines.push(``);
|
|
26
|
+
lines.push(`export async function createPaymentIntent({`);
|
|
27
|
+
lines.push(` amount,`);
|
|
28
|
+
lines.push(` currency = 'usd',`);
|
|
29
|
+
lines.push(`}: {`);
|
|
30
|
+
lines.push(` amount: number`);
|
|
31
|
+
lines.push(` currency?: string`);
|
|
32
|
+
lines.push(`}): Promise<string> {`);
|
|
33
|
+
lines.push(` const stripe = getStripe()`);
|
|
34
|
+
lines.push(` const intent = await stripe.paymentIntents.create({ amount, currency })`);
|
|
35
|
+
lines.push(` return intent.client_secret ?? ''`);
|
|
36
|
+
lines.push(`}`);
|
|
37
|
+
lines.push(``);
|
|
38
|
+
lines.push(`export async function createCheckoutSession({`);
|
|
39
|
+
lines.push(` priceId,`);
|
|
40
|
+
lines.push(` successUrl,`);
|
|
41
|
+
lines.push(` cancelUrl,`);
|
|
42
|
+
lines.push(` customerId,`);
|
|
43
|
+
lines.push(`}: {`);
|
|
44
|
+
lines.push(` priceId: string`);
|
|
45
|
+
lines.push(` successUrl: string`);
|
|
46
|
+
lines.push(` cancelUrl: string`);
|
|
47
|
+
lines.push(` customerId?: string`);
|
|
48
|
+
lines.push(`}): Promise<string> {`);
|
|
49
|
+
lines.push(` const stripe = getStripe()`);
|
|
50
|
+
lines.push(` const session = await stripe.checkout.sessions.create({`);
|
|
51
|
+
lines.push(` mode: 'subscription',`);
|
|
52
|
+
lines.push(` line_items: [{ price: priceId, quantity: 1 }],`);
|
|
53
|
+
lines.push(` success_url: successUrl,`);
|
|
54
|
+
lines.push(` cancel_url: cancelUrl,`);
|
|
55
|
+
lines.push(` customer: customerId,`);
|
|
56
|
+
lines.push(` })`);
|
|
57
|
+
lines.push(` return session.url ?? ''`);
|
|
58
|
+
lines.push(`}`);
|
|
59
|
+
return {
|
|
60
|
+
path: 'lib/generated/integrations/stripe.ts',
|
|
61
|
+
content: lines.join('\n'),
|
|
62
|
+
category: 'generated',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=stripe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/integrations/stripe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twilio.d.ts","sourceRoot":"","sources":["../../src/integrations/twilio.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAyClF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/twilio.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateTwilioNextjs = generateTwilioNextjs;
|
|
5
|
+
function generateTwilioNextjs(config) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
8
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
9
|
+
lines.push(`// Integration: Twilio`);
|
|
10
|
+
lines.push(``);
|
|
11
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
12
|
+
lines.push(`// 1. npm install twilio`);
|
|
13
|
+
lines.push(`// 2. Add TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_FROM_NUMBER to .env.local`);
|
|
14
|
+
lines.push(`// 3. Only use in API routes or Server Actions`);
|
|
15
|
+
lines.push(``);
|
|
16
|
+
lines.push(`import twilio from 'twilio'`);
|
|
17
|
+
lines.push(``);
|
|
18
|
+
lines.push(`export function getTwilioClient() {`);
|
|
19
|
+
lines.push(` return twilio(`);
|
|
20
|
+
lines.push(` process.env.TWILIO_ACCOUNT_SID,`);
|
|
21
|
+
lines.push(` process.env.TWILIO_AUTH_TOKEN,`);
|
|
22
|
+
lines.push(` )`);
|
|
23
|
+
lines.push(`}`);
|
|
24
|
+
lines.push(``);
|
|
25
|
+
lines.push(`export async function sendSms({`);
|
|
26
|
+
lines.push(` to,`);
|
|
27
|
+
lines.push(` message,`);
|
|
28
|
+
lines.push(`}: {`);
|
|
29
|
+
lines.push(` to: string`);
|
|
30
|
+
lines.push(` message: string`);
|
|
31
|
+
lines.push(`}) {`);
|
|
32
|
+
lines.push(` const client = getTwilioClient()`);
|
|
33
|
+
lines.push(` return client.messages.create({`);
|
|
34
|
+
lines.push(` to,`);
|
|
35
|
+
lines.push(` from: process.env.TWILIO_FROM_NUMBER ?? '',`);
|
|
36
|
+
lines.push(` body: message,`);
|
|
37
|
+
lines.push(` })`);
|
|
38
|
+
lines.push(`}`);
|
|
39
|
+
return {
|
|
40
|
+
path: 'lib/generated/integrations/twilio.ts',
|
|
41
|
+
content: lines.join('\n'),
|
|
42
|
+
category: 'generated',
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=twilio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twilio.js","sourceRoot":"","sources":["../../src/integrations/twilio.ts"],"names":[],"mappings":";AAAA,gFAAgF;;AAIhF,oDAyCC;AAzCD,SAAgB,oBAAoB,CAAC,MAA8B;IACjE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC3F,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACtC,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAA;IAC/F,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IACjD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IACjD,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC7D,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,sCAAsC;QAChD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,WAAW;KACtB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploadthing.d.ts","sourceRoot":"","sources":["../../src/integrations/uploadthing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAqCvF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/uploadthing.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateUploadthingNextjs = generateUploadthingNextjs;
|
|
5
|
+
function generateUploadthingNextjs(config) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
8
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
9
|
+
lines.push(`// Integration: Uploadthing`);
|
|
10
|
+
lines.push(``);
|
|
11
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
12
|
+
lines.push(`// 1. npm install uploadthing @uploadthing/react`);
|
|
13
|
+
lines.push(`// 2. Add UPLOADTHING_SECRET to .env.local`);
|
|
14
|
+
lines.push(`// 3. Create app/api/uploadthing/core.ts and app/api/uploadthing/route.ts`);
|
|
15
|
+
lines.push(``);
|
|
16
|
+
lines.push(`import { createUploadthing, type FileRouter } from 'uploadthing/next'`);
|
|
17
|
+
lines.push(``);
|
|
18
|
+
lines.push(`const f = createUploadthing()`);
|
|
19
|
+
lines.push(``);
|
|
20
|
+
lines.push(`// ── File router ───────────────────────────────────────────────────────────`);
|
|
21
|
+
lines.push(`// Copy this to app/api/uploadthing/core.ts`);
|
|
22
|
+
lines.push(``);
|
|
23
|
+
lines.push(`export const uploadRouter = {`);
|
|
24
|
+
lines.push(` imageUploader: f({ image: { maxFileSize: '4MB', maxFileCount: 1 } })`);
|
|
25
|
+
lines.push(` .middleware(async () => {`);
|
|
26
|
+
lines.push(` // Add auth check here if needed`);
|
|
27
|
+
lines.push(` return {}`);
|
|
28
|
+
lines.push(` })`);
|
|
29
|
+
lines.push(` .onUploadComplete(async ({ file }) => {`);
|
|
30
|
+
lines.push(` return { url: file.url }`);
|
|
31
|
+
lines.push(` }),`);
|
|
32
|
+
lines.push(`} satisfies FileRouter`);
|
|
33
|
+
lines.push(``);
|
|
34
|
+
lines.push(`export type NxfUploadRouter = typeof uploadRouter`);
|
|
35
|
+
return {
|
|
36
|
+
path: 'lib/generated/integrations/uploadthing.ts',
|
|
37
|
+
content: lines.join('\n'),
|
|
38
|
+
category: 'generated',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=uploadthing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploadthing.js","sourceRoot":"","sources":["../../src/integrations/uploadthing.ts"],"names":[],"mappings":";AAAA,qFAAqF;;AAIrF,8DAqCC;AArCD,SAAgB,yBAAyB,CAAC,MAA8B;IACtE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC3F,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IAC9D,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IACxD,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;IACvF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAA;IACnF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC3F,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;IACzD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IAC3C,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IACpF,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IAC3C,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IACpD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACpB,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;IACzD,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC5C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IAE/D,OAAO;QACL,IAAI,EAAM,2CAA2C;QACrD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,WAAW;KACtB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
+
interface Endpoint {
|
|
3
|
+
endpoint_id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
method: string;
|
|
6
|
+
path: string;
|
|
7
|
+
model_name: string;
|
|
8
|
+
operation: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function generateApiBuilderNextjs(endpoints: Endpoint[]): GeneratedFile;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=api-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-builder.d.ts","sourceRoot":"","sources":["../../src/templates/api-builder.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,UAAU,QAAQ;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAS,MAAM,CAAA;IACnB,MAAM,EAAO,MAAM,CAAA;IACnB,IAAI,EAAS,MAAM,CAAA;IACnB,UAAU,EAAG,MAAM,CAAA;IACnB,SAAS,EAAI,MAAM,CAAA;CACpB;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,aAAa,CAuE7E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/api-builder.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateApiBuilderNextjs = generateApiBuilderNextjs;
|
|
5
|
+
function generateApiBuilderNextjs(endpoints) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
8
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
9
|
+
lines.push(`// Custom endpoints from API Builder`);
|
|
10
|
+
lines.push(`// Regenerate: nxf generate nextjs`);
|
|
11
|
+
lines.push(``);
|
|
12
|
+
lines.push(`// ── Custom API endpoints ─────────────────────────────────────────────────`);
|
|
13
|
+
lines.push(`// These are endpoints you built in the Underpeaks API Builder.`);
|
|
14
|
+
lines.push(`// Do not edit this file — regenerate using: nxf generate nextjs`);
|
|
15
|
+
lines.push(``);
|
|
16
|
+
lines.push(`const BASE_URL = process.env.NXF_STUDIO_URL ?? 'https://studio.underpeaks.com'`);
|
|
17
|
+
lines.push(`const PROJECT_ID = process.env.NXF_PROJECT_ID ?? ''`);
|
|
18
|
+
lines.push(`const API_KEY = process.env.NXF_API_KEY ?? ''`);
|
|
19
|
+
lines.push(``);
|
|
20
|
+
lines.push(`const headers = {`);
|
|
21
|
+
lines.push(` 'Content-Type': 'application/json',`);
|
|
22
|
+
lines.push(` 'Authorization': \`Bearer \${API_KEY}\`,`);
|
|
23
|
+
lines.push(`}`);
|
|
24
|
+
lines.push(``);
|
|
25
|
+
if (endpoints.length === 0) {
|
|
26
|
+
lines.push(`// No custom endpoints defined yet.`);
|
|
27
|
+
lines.push(`// Add endpoints in Studio → API Builder to generate functions here.`);
|
|
28
|
+
}
|
|
29
|
+
for (const ep of endpoints) {
|
|
30
|
+
const fnName = toCamelCase(ep.name);
|
|
31
|
+
const method = ep.method.toUpperCase();
|
|
32
|
+
const hasBody = ['POST', 'PUT', 'PATCH'].includes(method);
|
|
33
|
+
const hasFilters = method === 'GET';
|
|
34
|
+
lines.push(`// ── ${ep.name} ─────────────────────────────────────────────────────────`);
|
|
35
|
+
lines.push(`// ${method} ${ep.path}`);
|
|
36
|
+
lines.push(`export async function ${fnName}(${hasFilters ? 'filters?: Record<string, string>' : hasBody ? 'body?: Record<string, unknown>' : ''}) {`);
|
|
37
|
+
lines.push(` const url = new URL(`);
|
|
38
|
+
lines.push(` \`\${BASE_URL}/api-public/v1/\${PROJECT_ID}${ep.path}\``);
|
|
39
|
+
lines.push(` )`);
|
|
40
|
+
if (hasFilters) {
|
|
41
|
+
lines.push(` if (filters) {`);
|
|
42
|
+
lines.push(` Object.entries(filters).forEach(([k, v]) => url.searchParams.set(k, v))`);
|
|
43
|
+
lines.push(` }`);
|
|
44
|
+
}
|
|
45
|
+
lines.push(``);
|
|
46
|
+
lines.push(` const res = await fetch(url.toString(), {`);
|
|
47
|
+
lines.push(` method: '${method}',`);
|
|
48
|
+
lines.push(` headers,`);
|
|
49
|
+
if (hasBody) {
|
|
50
|
+
lines.push(` body: JSON.stringify(body ?? {}),`);
|
|
51
|
+
}
|
|
52
|
+
lines.push(` cache: 'no-store',`);
|
|
53
|
+
lines.push(` })`);
|
|
54
|
+
lines.push(``);
|
|
55
|
+
lines.push(` if (!res.ok) {`);
|
|
56
|
+
lines.push(` const error = await res.json().catch(() => ({ error: 'Unknown error' }))`);
|
|
57
|
+
lines.push(` throw new Error(error.error ?? \`${ep.name} failed: \${res.status}\`)`);
|
|
58
|
+
lines.push(` }`);
|
|
59
|
+
lines.push(``);
|
|
60
|
+
lines.push(` return res.json()`);
|
|
61
|
+
lines.push(`}`);
|
|
62
|
+
lines.push(``);
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
path: 'lib/generated/api/custom-endpoints.ts',
|
|
66
|
+
content: lines.join('\n'),
|
|
67
|
+
category: 'generated',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function toCamelCase(str) {
|
|
71
|
+
return str
|
|
72
|
+
.toLowerCase()
|
|
73
|
+
.replace(/[^a-z0-9]+(.)/g, (_, c) => c.toUpperCase())
|
|
74
|
+
.replace(/^[A-Z]/, (c) => c.toLowerCase());
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=api-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-builder.js","sourceRoot":"","sources":["../../src/templates/api-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-route-id.d.ts","sourceRoot":"","sources":["../../src/templates/api-route-id.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AASnF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,WAAW,CAAC,QAAQ,CAAY,GAAG,aAAa,CA6HxG"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/api-route-id.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateApiRouteId = generateApiRouteId;
|
|
5
|
+
const generator_core_1 = require("@underpeaks/generator-core");
|
|
6
|
+
// FIX: hardcoded /builder/{slug}/{id} path (GET/PUT/DELETE) — broken
|
|
7
|
+
// against Core's real gateway, which has no /builder/ segment AND doesn't
|
|
8
|
+
// use a /[id] URL segment at all: Core's [table]/route.ts reads id via
|
|
9
|
+
// ?id= query param on GET, and { id } in the request body for
|
|
10
|
+
// PATCH/DELETE (not PUT). source now controls both the path shape and
|
|
11
|
+
// the request shape per method.
|
|
12
|
+
function generateApiRouteId(model, source = 'hosted') {
|
|
13
|
+
const className = (0, generator_core_1.modelToClassName)(model.name);
|
|
14
|
+
const fileName = (0, generator_core_1.modelToFileName)(model.name);
|
|
15
|
+
const pk = (0, generator_core_1.getPrimaryKey)(model);
|
|
16
|
+
const pkName = pk?.name ?? 'id';
|
|
17
|
+
const modelSlug = model.name.replace('nxf_', '').replace(/_/g, '-');
|
|
18
|
+
const isCore = source === 'core';
|
|
19
|
+
const basePath = isCore ? model.name : `builder/${modelSlug}`;
|
|
20
|
+
const lines = [];
|
|
21
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
22
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
23
|
+
lines.push(`// Source model: ${model.name}`);
|
|
24
|
+
lines.push(``);
|
|
25
|
+
lines.push(`import { NextRequest, NextResponse } from 'next/server'`);
|
|
26
|
+
lines.push(`import type {`);
|
|
27
|
+
lines.push(` ${className},`);
|
|
28
|
+
lines.push(` Update${className}Dto,`);
|
|
29
|
+
lines.push(`} from '../../../../generated/types/${fileName}.types'`);
|
|
30
|
+
lines.push(`import { nxfFetch } from '../../../../lib/nxf-client'`);
|
|
31
|
+
lines.push(``);
|
|
32
|
+
lines.push(`type Params = { ${pkName}: string }`);
|
|
33
|
+
lines.push(``);
|
|
34
|
+
lines.push(`// ── GET /api/${modelSlug}/[${pkName}] ─────────────────────────────────────`);
|
|
35
|
+
lines.push(``);
|
|
36
|
+
lines.push(`export async function GET(`);
|
|
37
|
+
lines.push(` req: NextRequest,`);
|
|
38
|
+
lines.push(` { params }: { params: Promise<Params> },`);
|
|
39
|
+
lines.push(`) {`);
|
|
40
|
+
lines.push(` try {`);
|
|
41
|
+
lines.push(` const { ${pkName} } = await params`);
|
|
42
|
+
if (isCore) {
|
|
43
|
+
lines.push(` // Core's gateway takes the record id as a ?id= query param, not a`);
|
|
44
|
+
lines.push(` // path segment.`);
|
|
45
|
+
lines.push(` const data = await nxfFetch<${className}>(`);
|
|
46
|
+
lines.push(` \`/api-public/v1/\${process.env.NXF_PROJECT_ID}/${basePath}?id=\${${pkName}}\``);
|
|
47
|
+
lines.push(` )`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
lines.push(` const data = await nxfFetch<${className}>(`);
|
|
51
|
+
lines.push(` \`/api-public/v1/\${process.env.NXF_PROJECT_ID}/${basePath}/\${${pkName}}\``);
|
|
52
|
+
lines.push(` )`);
|
|
53
|
+
}
|
|
54
|
+
lines.push(` return NextResponse.json({ data })`);
|
|
55
|
+
lines.push(` } catch (err: any) {`);
|
|
56
|
+
lines.push(` const status = err.message?.includes('404') ? 404 : 500`);
|
|
57
|
+
lines.push(` return NextResponse.json({ error: err.message }, { status })`);
|
|
58
|
+
lines.push(` }`);
|
|
59
|
+
lines.push(`}`);
|
|
60
|
+
lines.push(``);
|
|
61
|
+
if (isCore) {
|
|
62
|
+
lines.push(`// ── PATCH /api/${modelSlug}/[${pkName}] ───────────────────────────────────`);
|
|
63
|
+
lines.push(`// Core's gateway only implements PATCH for updates, not PUT — and takes`);
|
|
64
|
+
lines.push(`// { id, ...data } in the request body rather than an id in the URL.`);
|
|
65
|
+
lines.push(``);
|
|
66
|
+
lines.push(`export async function PATCH(`);
|
|
67
|
+
lines.push(` req: NextRequest,`);
|
|
68
|
+
lines.push(` { params }: { params: Promise<Params> },`);
|
|
69
|
+
lines.push(`) {`);
|
|
70
|
+
lines.push(` try {`);
|
|
71
|
+
lines.push(` const { ${pkName} } = await params`);
|
|
72
|
+
lines.push(` const body = await req.json() as Update${className}Dto`);
|
|
73
|
+
lines.push(` const data = await nxfFetch<${className}>(`);
|
|
74
|
+
lines.push(` \`/api-public/v1/\${process.env.NXF_PROJECT_ID}/${basePath}\`,`);
|
|
75
|
+
lines.push(` { method: 'PATCH', body: JSON.stringify({ id: ${pkName}, ...body }) },`);
|
|
76
|
+
lines.push(` )`);
|
|
77
|
+
lines.push(` return NextResponse.json({ data })`);
|
|
78
|
+
lines.push(` } catch (err: any) {`);
|
|
79
|
+
lines.push(` return NextResponse.json({ error: err.message }, { status: 500 })`);
|
|
80
|
+
lines.push(` }`);
|
|
81
|
+
lines.push(`}`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
lines.push(`// ── PUT /api/${modelSlug}/[${pkName}] ─────────────────────────────────────`);
|
|
85
|
+
lines.push(``);
|
|
86
|
+
lines.push(`export async function PUT(`);
|
|
87
|
+
lines.push(` req: NextRequest,`);
|
|
88
|
+
lines.push(` { params }: { params: Promise<Params> },`);
|
|
89
|
+
lines.push(`) {`);
|
|
90
|
+
lines.push(` try {`);
|
|
91
|
+
lines.push(` const { ${pkName} } = await params`);
|
|
92
|
+
lines.push(` const body = await req.json() as Update${className}Dto`);
|
|
93
|
+
lines.push(` const data = await nxfFetch<${className}>(`);
|
|
94
|
+
lines.push(` \`/api-public/v1/\${process.env.NXF_PROJECT_ID}/${basePath}/\${${pkName}}\`,`);
|
|
95
|
+
lines.push(` { method: 'PUT', body: JSON.stringify(body) },`);
|
|
96
|
+
lines.push(` )`);
|
|
97
|
+
lines.push(` return NextResponse.json({ data })`);
|
|
98
|
+
lines.push(` } catch (err: any) {`);
|
|
99
|
+
lines.push(` return NextResponse.json({ error: err.message }, { status: 500 })`);
|
|
100
|
+
lines.push(` }`);
|
|
101
|
+
lines.push(`}`);
|
|
102
|
+
}
|
|
103
|
+
lines.push(``);
|
|
104
|
+
lines.push(`// ── DELETE /api/${modelSlug}/[${pkName}] ──────────────────────────────────`);
|
|
105
|
+
lines.push(``);
|
|
106
|
+
lines.push(`export async function DELETE(`);
|
|
107
|
+
lines.push(` req: NextRequest,`);
|
|
108
|
+
lines.push(` { params }: { params: Promise<Params> },`);
|
|
109
|
+
lines.push(`) {`);
|
|
110
|
+
lines.push(` try {`);
|
|
111
|
+
lines.push(` const { ${pkName} } = await params`);
|
|
112
|
+
if (isCore) {
|
|
113
|
+
lines.push(` // Core's gateway takes { id } in the DELETE request body, not a`);
|
|
114
|
+
lines.push(` // path segment.`);
|
|
115
|
+
lines.push(` await nxfFetch(`);
|
|
116
|
+
lines.push(` \`/api-public/v1/\${process.env.NXF_PROJECT_ID}/${basePath}\`,`);
|
|
117
|
+
lines.push(` { method: 'DELETE', body: JSON.stringify({ id: ${pkName} }) },`);
|
|
118
|
+
lines.push(` )`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
lines.push(` await nxfFetch(`);
|
|
122
|
+
lines.push(` \`/api-public/v1/\${process.env.NXF_PROJECT_ID}/${basePath}/\${${pkName}}\`,`);
|
|
123
|
+
lines.push(` { method: 'DELETE' },`);
|
|
124
|
+
lines.push(` )`);
|
|
125
|
+
}
|
|
126
|
+
lines.push(` return NextResponse.json({ success: true })`);
|
|
127
|
+
lines.push(` } catch (err: any) {`);
|
|
128
|
+
lines.push(` return NextResponse.json({ error: err.message }, { status: 500 })`);
|
|
129
|
+
lines.push(` }`);
|
|
130
|
+
lines.push(`}`);
|
|
131
|
+
return {
|
|
132
|
+
path: `app/api/${modelSlug}/[${pkName}]/route.ts`,
|
|
133
|
+
content: lines.join('\n'),
|
|
134
|
+
category: 'generated',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=api-route-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-route-id.js","sourceRoot":"","sources":["../../src/templates/api-route-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-route.d.ts","sourceRoot":"","sources":["../../src/templates/api-route.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAUnF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,WAAW,CAAC,QAAQ,CAAY,GAAG,aAAa,CA+EtG"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/templates/api-route.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateApiRoute = generateApiRoute;
|
|
5
|
+
const generator_core_1 = require("@underpeaks/generator-core");
|
|
6
|
+
// FIX: hardcoded /builder/{slug} path — broken for Core, whose real gateway
|
|
7
|
+
// has no /builder/ segment and expects X-API-Key, not the Bearer token
|
|
8
|
+
// nxf-client.ts sends. source now threads through from ProjectData.
|
|
9
|
+
function generateApiRoute(model, source = 'hosted') {
|
|
10
|
+
const className = (0, generator_core_1.modelToClassName)(model.name);
|
|
11
|
+
const fileName = (0, generator_core_1.modelToFileName)(model.name);
|
|
12
|
+
const pk = (0, generator_core_1.getPrimaryKey)(model);
|
|
13
|
+
const pkName = pk?.name ?? 'id';
|
|
14
|
+
const modelSlug = model.name.replace('nxf_', '').replace(/_/g, '-');
|
|
15
|
+
// Core: exact table name, no slug transform (matches [table]/route.ts's
|
|
16
|
+
// m.name === tableName lookup against nxf_system_models).
|
|
17
|
+
const endpointPath = source === 'core' ? model.name : `builder/${modelSlug}`;
|
|
18
|
+
const lines = [];
|
|
19
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
20
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
21
|
+
lines.push(`// Source model: ${model.name}`);
|
|
22
|
+
lines.push(`// Regenerate: nxf generate nextjs --model=${className}`);
|
|
23
|
+
lines.push(``);
|
|
24
|
+
lines.push(`import { NextRequest, NextResponse } from 'next/server'`);
|
|
25
|
+
lines.push(`import type {`);
|
|
26
|
+
lines.push(` ${className},`);
|
|
27
|
+
lines.push(` Create${className}Dto,`);
|
|
28
|
+
lines.push(` Update${className}Dto,`);
|
|
29
|
+
lines.push(`} from '../../../generated/types/${fileName}.types'`);
|
|
30
|
+
lines.push(`import { nxfFetch } from '../../../lib/nxf-client'`);
|
|
31
|
+
lines.push(``);
|
|
32
|
+
lines.push(`// ── GET /api/${modelSlug} — list all ─────────────────────────────────────`);
|
|
33
|
+
lines.push(``);
|
|
34
|
+
lines.push(`export async function GET(req: NextRequest) {`);
|
|
35
|
+
lines.push(` try {`);
|
|
36
|
+
lines.push(` const { searchParams } = req.nextUrl`);
|
|
37
|
+
lines.push(` const page = searchParams.get('page') ?? '1'`);
|
|
38
|
+
lines.push(` const limit = searchParams.get('limit') ?? '20'`);
|
|
39
|
+
lines.push(``);
|
|
40
|
+
lines.push(` const params = new URLSearchParams()`);
|
|
41
|
+
lines.push(` params.set('page', page)`);
|
|
42
|
+
lines.push(` params.set('limit', limit)`);
|
|
43
|
+
lines.push(` searchParams.forEach((value, key) => {`);
|
|
44
|
+
lines.push(` if (key !== 'page' && key !== 'limit') params.set(key, value)`);
|
|
45
|
+
lines.push(` })`);
|
|
46
|
+
lines.push(``);
|
|
47
|
+
lines.push(` const data = await nxfFetch<${className}[]>(`);
|
|
48
|
+
lines.push(` \`/api-public/v1/\${process.env.NXF_PROJECT_ID}/${endpointPath}?\${params}\``);
|
|
49
|
+
lines.push(` )`);
|
|
50
|
+
lines.push(``);
|
|
51
|
+
lines.push(` return NextResponse.json({ data })`);
|
|
52
|
+
lines.push(` } catch (err: any) {`);
|
|
53
|
+
lines.push(` return NextResponse.json(`);
|
|
54
|
+
lines.push(` { error: err.message },`);
|
|
55
|
+
lines.push(` { status: 500 },`);
|
|
56
|
+
lines.push(` )`);
|
|
57
|
+
lines.push(` }`);
|
|
58
|
+
lines.push(`}`);
|
|
59
|
+
lines.push(``);
|
|
60
|
+
lines.push(`// ── POST /api/${modelSlug} — create ──────────────────────────────────────`);
|
|
61
|
+
lines.push(``);
|
|
62
|
+
lines.push(`export async function POST(req: NextRequest) {`);
|
|
63
|
+
lines.push(` try {`);
|
|
64
|
+
lines.push(` const body = await req.json() as Create${className}Dto`);
|
|
65
|
+
lines.push(``);
|
|
66
|
+
lines.push(` const data = await nxfFetch<${className}>(`);
|
|
67
|
+
lines.push(` \`/api-public/v1/\${process.env.NXF_PROJECT_ID}/${endpointPath}\`,`);
|
|
68
|
+
lines.push(` { method: 'POST', body: JSON.stringify(body) },`);
|
|
69
|
+
lines.push(` )`);
|
|
70
|
+
lines.push(``);
|
|
71
|
+
lines.push(` return NextResponse.json({ data }, { status: 201 })`);
|
|
72
|
+
lines.push(` } catch (err: any) {`);
|
|
73
|
+
lines.push(` return NextResponse.json(`);
|
|
74
|
+
lines.push(` { error: err.message },`);
|
|
75
|
+
lines.push(` { status: 500 },`);
|
|
76
|
+
lines.push(` )`);
|
|
77
|
+
lines.push(` }`);
|
|
78
|
+
lines.push(`}`);
|
|
79
|
+
return {
|
|
80
|
+
path: `app/api/${modelSlug}/route.ts`,
|
|
81
|
+
content: lines.join('\n'),
|
|
82
|
+
category: 'generated',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=api-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-route.js","sourceRoot":"","sources":["../../src/templates/api-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PageDef, GeneratedFile } from '@underpeaks/generator-core';
|
|
2
|
+
/**
|
|
3
|
+
* generateAppNav
|
|
4
|
+
*
|
|
5
|
+
* Was referenced by layout.ts ('../components/AppNav') but never actually
|
|
6
|
+
* generated by any template — every project with a nav page would fail to
|
|
7
|
+
* build. This is the missing piece.
|
|
8
|
+
*
|
|
9
|
+
* Mirrors Flutter's navigation.ts shell/drawer split, adapted for the web:
|
|
10
|
+
* - top-nav / bottom-nav → a horizontal nav bar (bottom-nav has no native
|
|
11
|
+
* web equivalent as a persistent OS-level bar the way it does on mobile;
|
|
12
|
+
* rendered as a top bar here, same as top-nav, since both express "the
|
|
13
|
+
* same links are always visible" intent).
|
|
14
|
+
* - sidebar-nav / drawer-nav → a collapsible side panel (drawer becomes a
|
|
15
|
+
* toggleable off-canvas panel on mobile widths, persistent sidebar on
|
|
16
|
+
* desktop — matches how most Next.js dashboard layouts behave).
|
|
17
|
+
* If pages mix nav types, sidebar/drawer takes visual priority (rendered
|
|
18
|
+
* as the persistent panel) and top/bottom pages are folded into it as
|
|
19
|
+
* regular links, rather than trying to render two separate nav structures
|
|
20
|
+
* at once.
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateAppNav(pages: PageDef[]): GeneratedFile;
|
|
23
|
+
//# sourceMappingURL=app-nav.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-nav.d.ts","sourceRoot":"","sources":["../../src/templates/app-nav.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAExE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,aAAa,CAgH9D"}
|