@plumbus/ui 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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/generators/__tests__/auth-generator.test.d.ts +2 -0
- package/dist/generators/__tests__/auth-generator.test.d.ts.map +1 -0
- package/dist/generators/__tests__/auth-generator.test.js +222 -0
- package/dist/generators/__tests__/auth-generator.test.js.map +1 -0
- package/dist/generators/__tests__/client-generator.test.d.ts +2 -0
- package/dist/generators/__tests__/client-generator.test.d.ts.map +1 -0
- package/dist/generators/__tests__/client-generator.test.js +224 -0
- package/dist/generators/__tests__/client-generator.test.js.map +1 -0
- package/dist/generators/__tests__/form-generator.test.d.ts +2 -0
- package/dist/generators/__tests__/form-generator.test.d.ts.map +1 -0
- package/dist/generators/__tests__/form-generator.test.js +192 -0
- package/dist/generators/__tests__/form-generator.test.js.map +1 -0
- package/dist/generators/__tests__/nextjs-template.test.d.ts +2 -0
- package/dist/generators/__tests__/nextjs-template.test.d.ts.map +1 -0
- package/dist/generators/__tests__/nextjs-template.test.js +214 -0
- package/dist/generators/__tests__/nextjs-template.test.js.map +1 -0
- package/dist/generators/auth-generator.d.ts +31 -0
- package/dist/generators/auth-generator.d.ts.map +1 -0
- package/dist/generators/auth-generator.js +292 -0
- package/dist/generators/auth-generator.js.map +1 -0
- package/dist/generators/client-generator.d.ts +31 -0
- package/dist/generators/client-generator.d.ts.map +1 -0
- package/dist/generators/client-generator.js +336 -0
- package/dist/generators/client-generator.js.map +1 -0
- package/dist/generators/form-generator.d.ts +47 -0
- package/dist/generators/form-generator.d.ts.map +1 -0
- package/dist/generators/form-generator.js +189 -0
- package/dist/generators/form-generator.js.map +1 -0
- package/dist/generators/index.d.ts +9 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +6 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/nextjs-template.d.ts +44 -0
- package/dist/generators/nextjs-template.d.ts.map +1 -0
- package/dist/generators/nextjs-template.js +444 -0
- package/dist/generators/nextjs-template.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/instructions/auth-generator.md +154 -0
- package/instructions/client-generator.md +149 -0
- package/instructions/form-generator.md +157 -0
- package/instructions/framework.md +108 -0
- package/instructions/nextjs-template.md +160 -0
- package/instructions/patterns.md +109 -0
- package/instructions/testing.md +211 -0
- package/package.json +52 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { CapabilityContract } from '@plumbus/core';
|
|
2
|
+
export type FormFieldType = 'text' | 'number' | 'boolean' | 'select' | 'textarea' | 'date' | 'hidden';
|
|
3
|
+
export interface FormFieldHint {
|
|
4
|
+
/** Field name / key */
|
|
5
|
+
name: string;
|
|
6
|
+
/** Display label (derived from field name) */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Suggested form input type */
|
|
9
|
+
fieldType: FormFieldType;
|
|
10
|
+
/** Whether the field is required */
|
|
11
|
+
required: boolean;
|
|
12
|
+
/** Default value if any */
|
|
13
|
+
defaultValue?: unknown;
|
|
14
|
+
/** Zod type string for documentation */
|
|
15
|
+
zodType: string;
|
|
16
|
+
/** For enum/select fields — available options */
|
|
17
|
+
options?: string[];
|
|
18
|
+
/** Validation constraints extracted from schema */
|
|
19
|
+
validation: FormValidation;
|
|
20
|
+
/** Field description from .describe() */
|
|
21
|
+
description?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface FormValidation {
|
|
24
|
+
min?: number;
|
|
25
|
+
max?: number;
|
|
26
|
+
minLength?: number;
|
|
27
|
+
maxLength?: number;
|
|
28
|
+
pattern?: string;
|
|
29
|
+
nullable?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface FormHints {
|
|
32
|
+
/** Capability name */
|
|
33
|
+
capabilityName: string;
|
|
34
|
+
/** Capability kind */
|
|
35
|
+
kind: string;
|
|
36
|
+
/** Form fields in order */
|
|
37
|
+
fields: FormFieldHint[];
|
|
38
|
+
}
|
|
39
|
+
/** Extract form field hints from a single Zod schema field */
|
|
40
|
+
export declare function extractFieldHint(name: string, schema: unknown): FormFieldHint;
|
|
41
|
+
/** Extract form hints from a capability's input schema */
|
|
42
|
+
export declare function extractFormHints(cap: CapabilityContract): FormHints;
|
|
43
|
+
/** Generate a TypeScript form hints constant from a capability */
|
|
44
|
+
export declare function generateFormHintsCode(cap: CapabilityContract): string;
|
|
45
|
+
/** Generate a module exporting form hints for all capabilities */
|
|
46
|
+
export declare function generateFormHintsModule(capabilities: CapabilityContract[]): string;
|
|
47
|
+
//# sourceMappingURL=form-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-generator.d.ts","sourceRoot":"","sources":["../../src/generators/form-generator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,UAAU,GACV,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,SAAS,EAAE,aAAa,CAAC;IACzB,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,mDAAmD;IACnD,UAAU,EAAE,cAAc,CAAC;IAC3B,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAiID,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,aAAa,CAoB7E;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG,SAAS,CAqBnE;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAKrE;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,kBAAkB,EAAE,GAAG,MAAM,CASlF"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
// ── Form Generation Hints Generator ──
|
|
2
|
+
// Extracts form field metadata from capability input schemas
|
|
3
|
+
// so that UI components can consume field names, types, validation rules,
|
|
4
|
+
// and required flags for rendering form fields.
|
|
5
|
+
// ── Helpers ──
|
|
6
|
+
function toLabel(name) {
|
|
7
|
+
return name
|
|
8
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
9
|
+
.replace(/[_-]/g, ' ')
|
|
10
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
11
|
+
}
|
|
12
|
+
function zodTypeToFieldType(typeName) {
|
|
13
|
+
switch (typeName) {
|
|
14
|
+
case 'ZodString':
|
|
15
|
+
return 'text';
|
|
16
|
+
case 'ZodNumber':
|
|
17
|
+
case 'ZodBigInt':
|
|
18
|
+
return 'number';
|
|
19
|
+
case 'ZodBoolean':
|
|
20
|
+
return 'boolean';
|
|
21
|
+
case 'ZodDate':
|
|
22
|
+
return 'date';
|
|
23
|
+
case 'ZodEnum':
|
|
24
|
+
case 'ZodNativeEnum':
|
|
25
|
+
return 'select';
|
|
26
|
+
case 'ZodObject':
|
|
27
|
+
case 'ZodArray':
|
|
28
|
+
case 'ZodRecord':
|
|
29
|
+
return 'textarea';
|
|
30
|
+
default:
|
|
31
|
+
return 'text';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function getZodTypeName(schema) {
|
|
35
|
+
if (schema && typeof schema === 'object' && '_def' in schema) {
|
|
36
|
+
const def = schema._def;
|
|
37
|
+
if (typeof def.typeName === 'string')
|
|
38
|
+
return def.typeName;
|
|
39
|
+
}
|
|
40
|
+
return 'ZodUnknown';
|
|
41
|
+
}
|
|
42
|
+
function extractChecks(schema) {
|
|
43
|
+
const validation = {};
|
|
44
|
+
if (!schema || typeof schema !== 'object' || !('_def' in schema))
|
|
45
|
+
return validation;
|
|
46
|
+
const def = schema._def;
|
|
47
|
+
// ZodString/ZodNumber checks
|
|
48
|
+
if (Array.isArray(def.checks)) {
|
|
49
|
+
for (const check of def.checks) {
|
|
50
|
+
if (check.kind === 'min' && typeof check.value === 'number') {
|
|
51
|
+
const typeName = getZodTypeName(schema);
|
|
52
|
+
if (typeName === 'ZodString')
|
|
53
|
+
validation.minLength = check.value;
|
|
54
|
+
else
|
|
55
|
+
validation.min = check.value;
|
|
56
|
+
}
|
|
57
|
+
if (check.kind === 'max' && typeof check.value === 'number') {
|
|
58
|
+
const typeName = getZodTypeName(schema);
|
|
59
|
+
if (typeName === 'ZodString')
|
|
60
|
+
validation.maxLength = check.value;
|
|
61
|
+
else
|
|
62
|
+
validation.max = check.value;
|
|
63
|
+
}
|
|
64
|
+
if (check.kind === 'regex' && check.regex instanceof RegExp) {
|
|
65
|
+
validation.pattern = check.regex.source;
|
|
66
|
+
}
|
|
67
|
+
if (check.kind === 'email')
|
|
68
|
+
validation.pattern = 'email';
|
|
69
|
+
if (check.kind === 'url')
|
|
70
|
+
validation.pattern = 'url';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Nullable / optional
|
|
74
|
+
if (def.typeName === 'ZodNullable')
|
|
75
|
+
validation.nullable = true;
|
|
76
|
+
return validation;
|
|
77
|
+
}
|
|
78
|
+
function unwrapSchema(schema) {
|
|
79
|
+
if (!schema || typeof schema !== 'object' || !('_def' in schema))
|
|
80
|
+
return schema;
|
|
81
|
+
const def = schema._def;
|
|
82
|
+
const typeName = def.typeName;
|
|
83
|
+
// Unwrap wrappers to find underlying type
|
|
84
|
+
if (typeName === 'ZodOptional' || typeName === 'ZodNullable' || typeName === 'ZodDefault') {
|
|
85
|
+
return unwrapSchema(def.innerType);
|
|
86
|
+
}
|
|
87
|
+
return schema;
|
|
88
|
+
}
|
|
89
|
+
function getEnumValues(schema) {
|
|
90
|
+
if (!schema || typeof schema !== 'object' || !('_def' in schema))
|
|
91
|
+
return undefined;
|
|
92
|
+
const def = schema._def;
|
|
93
|
+
if (def.typeName === 'ZodEnum' && Array.isArray(def.values)) {
|
|
94
|
+
return def.values;
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
function getDefault(schema) {
|
|
99
|
+
if (!schema || typeof schema !== 'object' || !('_def' in schema))
|
|
100
|
+
return undefined;
|
|
101
|
+
const def = schema._def;
|
|
102
|
+
if (def.typeName === 'ZodDefault' && 'defaultValue' in def) {
|
|
103
|
+
const fn = def.defaultValue;
|
|
104
|
+
if (typeof fn === 'function') {
|
|
105
|
+
try {
|
|
106
|
+
return fn();
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return fn;
|
|
113
|
+
}
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
function getDescription(schema) {
|
|
117
|
+
if (!schema || typeof schema !== 'object' || !('_def' in schema))
|
|
118
|
+
return undefined;
|
|
119
|
+
const def = schema._def;
|
|
120
|
+
return typeof def.description === 'string' ? def.description : undefined;
|
|
121
|
+
}
|
|
122
|
+
function isOptional(schema) {
|
|
123
|
+
if (!schema || typeof schema !== 'object' || !('_def' in schema))
|
|
124
|
+
return false;
|
|
125
|
+
const def = schema._def;
|
|
126
|
+
if (def.typeName === 'ZodOptional' || def.typeName === 'ZodDefault')
|
|
127
|
+
return true;
|
|
128
|
+
if (def.typeName === 'ZodNullable')
|
|
129
|
+
return isOptional(def.innerType);
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
// ── Main Extraction ──
|
|
133
|
+
/** Extract form field hints from a single Zod schema field */
|
|
134
|
+
export function extractFieldHint(name, schema) {
|
|
135
|
+
const inner = unwrapSchema(schema);
|
|
136
|
+
const typeName = getZodTypeName(inner);
|
|
137
|
+
const fieldType = zodTypeToFieldType(typeName);
|
|
138
|
+
return {
|
|
139
|
+
name,
|
|
140
|
+
label: toLabel(name),
|
|
141
|
+
fieldType,
|
|
142
|
+
required: !isOptional(schema),
|
|
143
|
+
defaultValue: getDefault(schema),
|
|
144
|
+
zodType: typeName,
|
|
145
|
+
options: getEnumValues(inner),
|
|
146
|
+
validation: {
|
|
147
|
+
...extractChecks(inner),
|
|
148
|
+
...(isOptional(schema) ? {} : {}),
|
|
149
|
+
nullable: getZodTypeName(schema) === 'ZodNullable' || undefined,
|
|
150
|
+
},
|
|
151
|
+
description: getDescription(schema) ?? getDescription(inner),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/** Extract form hints from a capability's input schema */
|
|
155
|
+
export function extractFormHints(cap) {
|
|
156
|
+
const fields = [];
|
|
157
|
+
const schema = cap.input;
|
|
158
|
+
if (schema && typeof schema === 'object' && '_def' in schema) {
|
|
159
|
+
const def = schema._def;
|
|
160
|
+
// ZodObject — iterate the shape
|
|
161
|
+
if (def.typeName === 'ZodObject' && def.shape && typeof def.shape === 'function') {
|
|
162
|
+
const shape = def.shape();
|
|
163
|
+
for (const [name, fieldSchema] of Object.entries(shape)) {
|
|
164
|
+
fields.push(extractFieldHint(name, fieldSchema));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
capabilityName: cap.name,
|
|
170
|
+
kind: cap.kind,
|
|
171
|
+
fields,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/** Generate a TypeScript form hints constant from a capability */
|
|
175
|
+
export function generateFormHintsCode(cap) {
|
|
176
|
+
const hints = extractFormHints(cap);
|
|
177
|
+
const pascal = cap.name.replace(/(^|[-_ ])(\w)/g, (_, _s, c) => c.toUpperCase());
|
|
178
|
+
return `export const ${pascal}FormHints = ${JSON.stringify(hints, null, 2)} as const;`;
|
|
179
|
+
}
|
|
180
|
+
/** Generate a module exporting form hints for all capabilities */
|
|
181
|
+
export function generateFormHintsModule(capabilities) {
|
|
182
|
+
const lines = ['// Auto-generated by @plumbus/ui — do not edit', ''];
|
|
183
|
+
for (const cap of capabilities) {
|
|
184
|
+
lines.push(generateFormHintsCode(cap));
|
|
185
|
+
lines.push('');
|
|
186
|
+
}
|
|
187
|
+
return lines.join('\n');
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=form-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-generator.js","sourceRoot":"","sources":["../../src/generators/form-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { generateCapabilityTypes, generateClientModule, generateErrorTypes, generateFlowTrigger, generateHooksModule, generateMutationHook, generateQueryHook, generateReactHook, generateTypedClient, } from './client-generator.js';
|
|
2
|
+
export type { ClientGeneratorConfig, FlowTriggerInput } from './client-generator.js';
|
|
3
|
+
export { generateAuthFunctions, generateAuthModule, generateAuthTypes, generateRouteGuard, generateTenantContext, generateTokenUtils, generateUseAuthHook, generateUseCurrentUserHook, } from './auth-generator.js';
|
|
4
|
+
export type { AuthHelperConfig } from './auth-generator.js';
|
|
5
|
+
export { generateAuthProvider, generateCapabilityPage, generateHomePage, generateLayout, generateNextjsTemplate, generatePackageJson, generatePlaceholderFiles, generateTsConfig, } from './nextjs-template.js';
|
|
6
|
+
export type { GeneratedFile, NextjsTemplateConfig } from './nextjs-template.js';
|
|
7
|
+
export { extractFieldHint, extractFormHints, generateFormHintsCode, generateFormHintsModule, } from './form-generator.js';
|
|
8
|
+
export type { FormFieldHint, FormFieldType, FormHints, FormValidation, } from './form-generator.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAErF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,aAAa,EACb,aAAa,EACb,SAAS,EACT,cAAc,GACf,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// ── @plumbus/ui Generators Barrel ──
|
|
2
|
+
export { generateCapabilityTypes, generateClientModule, generateErrorTypes, generateFlowTrigger, generateHooksModule, generateMutationHook, generateQueryHook, generateReactHook, generateTypedClient, } from './client-generator.js';
|
|
3
|
+
export { generateAuthFunctions, generateAuthModule, generateAuthTypes, generateRouteGuard, generateTenantContext, generateTokenUtils, generateUseAuthHook, generateUseCurrentUserHook, } from './auth-generator.js';
|
|
4
|
+
export { generateAuthProvider, generateCapabilityPage, generateHomePage, generateLayout, generateNextjsTemplate, generatePackageJson, generatePlaceholderFiles, generateTsConfig, } from './nextjs-template.js';
|
|
5
|
+
export { extractFieldHint, extractFormHints, generateFormHintsCode, generateFormHintsModule, } from './form-generator.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { CapabilityContract } from '@plumbus/core';
|
|
2
|
+
export interface NextjsTemplateConfig {
|
|
3
|
+
/** Application name */
|
|
4
|
+
appName: string;
|
|
5
|
+
/** Whether to include auth wiring */
|
|
6
|
+
auth?: boolean;
|
|
7
|
+
/** Base URL for API calls */
|
|
8
|
+
apiBaseUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface GeneratedFile {
|
|
11
|
+
path: string;
|
|
12
|
+
content: string;
|
|
13
|
+
}
|
|
14
|
+
/** Generate package.json for the Next.js project */
|
|
15
|
+
export declare function generatePackageJson(config: NextjsTemplateConfig): GeneratedFile;
|
|
16
|
+
/** Generate tsconfig.json */
|
|
17
|
+
export declare function generateTsConfig(): GeneratedFile;
|
|
18
|
+
/** Generate globals.css with Tailwind import and basic resets */
|
|
19
|
+
export declare function generateGlobalsCss(): GeneratedFile;
|
|
20
|
+
/** Generate postcss.config.mjs for Tailwind CSS */
|
|
21
|
+
export declare function generatePostcssConfig(): GeneratedFile;
|
|
22
|
+
/** Generate the layout component */
|
|
23
|
+
export declare function generateLayout(config: NextjsTemplateConfig): GeneratedFile;
|
|
24
|
+
/** Generate the home page */
|
|
25
|
+
export declare function generateHomePage(config: NextjsTemplateConfig): GeneratedFile;
|
|
26
|
+
/** Generate example page for a capability */
|
|
27
|
+
export declare function generateCapabilityPage(cap: CapabilityContract): GeneratedFile;
|
|
28
|
+
/** Generate AuthProvider component */
|
|
29
|
+
export declare function generateAuthProvider(): GeneratedFile;
|
|
30
|
+
/** Generate the "generated" directory placeholder */
|
|
31
|
+
export declare function generatePlaceholderFiles(): GeneratedFile[];
|
|
32
|
+
/** Generate .env.local template with Plumbus-specific variables */
|
|
33
|
+
export declare function generateEnvLocal(config: NextjsTemplateConfig): GeneratedFile;
|
|
34
|
+
/** Generate a global error boundary component */
|
|
35
|
+
export declare function generateErrorBoundary(): GeneratedFile;
|
|
36
|
+
/** Generate a global loading component */
|
|
37
|
+
export declare function generateLoadingComponent(): GeneratedFile;
|
|
38
|
+
/** Generate Next.js middleware for auth token forwarding */
|
|
39
|
+
export declare function generateMiddleware(config: NextjsTemplateConfig): GeneratedFile;
|
|
40
|
+
/** Generate API route helper for proxying to the Plumbus backend */
|
|
41
|
+
export declare function generateApiRouteHelper(config: NextjsTemplateConfig): GeneratedFile;
|
|
42
|
+
/** Generate the complete Next.js template file set */
|
|
43
|
+
export declare function generateNextjsTemplate(config: NextjsTemplateConfig, capabilities?: CapabilityContract[]): GeneratedFile[];
|
|
44
|
+
//# sourceMappingURL=nextjs-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nextjs-template.d.ts","sourceRoot":"","sources":["../../src/generators/nextjs-template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiBD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CA8B/E;AAED,6BAA6B;AAC7B,wBAAgB,gBAAgB,IAAI,aAAa,CA6BhD;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,IAAI,aAAa,CAyBlD;AAED,mDAAmD;AACnD,wBAAgB,qBAAqB,IAAI,aAAa,CAKrD;AAED,oCAAoC;AACpC,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CA4B1E;AAED,6BAA6B;AAC7B,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAa5E;AAED,6CAA6C;AAC7C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,kBAAkB,GAAG,aAAa,CAgE7E;AAED,sCAAsC;AACtC,wBAAgB,oBAAoB,IAAI,aAAa,CAoDpD;AAED,qDAAqD;AACrD,wBAAgB,wBAAwB,IAAI,aAAa,EAAE,CAW1D;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAe5E;AAED,iDAAiD;AACjD,wBAAgB,qBAAqB,IAAI,aAAa,CA4BrD;AAED,0CAA0C;AAC1C,wBAAgB,wBAAwB,IAAI,aAAa,CAcxD;AAED,4DAA4D;AAC5D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAkC9E;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CA4ClF;AAED,sDAAsD;AACtD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,EAC5B,YAAY,CAAC,EAAE,kBAAkB,EAAE,GAClC,aAAa,EAAE,CA2BjB"}
|