@gravito/scaffold 1.0.0-beta.1
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/README.md +152 -0
- package/dist/index.cjs +3269 -0
- package/dist/index.d.cts +462 -0
- package/dist/index.d.ts +462 -0
- package/dist/index.js +3227 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# @gravito/scaffold
|
|
2
|
+
|
|
3
|
+
Project scaffolding generators for Gravito Framework.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun add @gravito/scaffold
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### With CLI (Recommended)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx gravito init my-app --architecture ddd
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Programmatic API
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { Scaffold, type ScaffoldOptions } from '@gravito/scaffold'
|
|
23
|
+
|
|
24
|
+
const options: ScaffoldOptions = {
|
|
25
|
+
name: 'my-app',
|
|
26
|
+
architecture: 'ddd',
|
|
27
|
+
targetPath: './my-app',
|
|
28
|
+
packageManager: 'bun',
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const scaffold = new Scaffold(options)
|
|
32
|
+
const result = await scaffold.generate()
|
|
33
|
+
|
|
34
|
+
console.log(`Created ${result.filesCreated} files`)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Architecture Types
|
|
38
|
+
|
|
39
|
+
| Type | Description |
|
|
40
|
+
|------|-------------|
|
|
41
|
+
| `enterprise-mvc` | Laravel-inspired MVC structure |
|
|
42
|
+
| `clean` | Clean Architecture with strict dependency rules |
|
|
43
|
+
| `ddd` | Domain-Driven Design with bounded contexts |
|
|
44
|
+
|
|
45
|
+
## Generators
|
|
46
|
+
|
|
47
|
+
### BaseGenerator
|
|
48
|
+
|
|
49
|
+
Abstract base class for all generators. Provides:
|
|
50
|
+
- Directory structure creation
|
|
51
|
+
- Package.json generation
|
|
52
|
+
- TypeScript configuration
|
|
53
|
+
- Environment files
|
|
54
|
+
- Architecture documentation
|
|
55
|
+
|
|
56
|
+
### StubGenerator
|
|
57
|
+
|
|
58
|
+
Handlebars-based template engine with built-in helpers:
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
import { StubGenerator } from '@gravito/scaffold'
|
|
62
|
+
|
|
63
|
+
const generator = new StubGenerator()
|
|
64
|
+
|
|
65
|
+
// Register custom helper
|
|
66
|
+
generator.registerHelper('uppercase', (str) => str.toUpperCase())
|
|
67
|
+
|
|
68
|
+
// Render template
|
|
69
|
+
const result = generator.render('Hello {{uppercase name}}!', { name: 'world' })
|
|
70
|
+
// => "Hello WORLD!"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Built-in Helpers:**
|
|
74
|
+
- `pascalCase` - Convert to PascalCase
|
|
75
|
+
- `camelCase` - Convert to camelCase
|
|
76
|
+
- `kebabCase` - Convert to kebab-case
|
|
77
|
+
- `snakeCase` - Convert to snake_case
|
|
78
|
+
- `upperCase` - Convert to UPPERCASE
|
|
79
|
+
- `lowerCase` - Convert to lowercase
|
|
80
|
+
- `pluralize` - Pluralize word
|
|
81
|
+
- `singularize` - Singularize word
|
|
82
|
+
|
|
83
|
+
## Extending
|
|
84
|
+
|
|
85
|
+
Create custom generators by extending `BaseGenerator`:
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { BaseGenerator, type GeneratorContext, type DirectoryNode } from '@gravito/scaffold'
|
|
89
|
+
|
|
90
|
+
export class MyCustomGenerator extends BaseGenerator {
|
|
91
|
+
getDirectoryStructure(context: GeneratorContext): DirectoryNode[] {
|
|
92
|
+
return [
|
|
93
|
+
{
|
|
94
|
+
type: 'directory',
|
|
95
|
+
name: 'src',
|
|
96
|
+
children: [
|
|
97
|
+
{ type: 'file', name: 'index.ts', content: this.generateIndex(context) },
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
protected generateArchitectureDoc(context: GeneratorContext): string {
|
|
104
|
+
return `# ${context.name}\n\nMy custom architecture.`
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private generateIndex(context: GeneratorContext): string {
|
|
108
|
+
return `console.log('Hello from ${context.name}!')`
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## API Reference
|
|
114
|
+
|
|
115
|
+
### ScaffoldOptions
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
interface ScaffoldOptions {
|
|
119
|
+
name: string // Project name
|
|
120
|
+
architecture: ArchitectureType // Architecture pattern
|
|
121
|
+
targetPath: string // Output directory
|
|
122
|
+
packageManager?: 'bun' | 'npm' | 'pnpm' | 'yarn'
|
|
123
|
+
skipInstall?: boolean
|
|
124
|
+
skipGit?: boolean
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### ScaffoldResult
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
interface ScaffoldResult {
|
|
132
|
+
success: boolean
|
|
133
|
+
projectPath: string
|
|
134
|
+
filesCreated: number
|
|
135
|
+
errors: string[]
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### DirectoryNode
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
interface DirectoryNode {
|
|
143
|
+
type: 'file' | 'directory'
|
|
144
|
+
name: string
|
|
145
|
+
content?: string // For files
|
|
146
|
+
children?: DirectoryNode[] // For directories
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
MIT
|