384 lines
7.4 KiB
Markdown
384 lines
7.4 KiB
Markdown
# Dart - Brick Generator
|
|
|
|
A simple command-line application which allows to generate the template of a brick from a project which compiles.
|
|
|
|
With an entrypoint in `bin/` , library code in `lib/` .
|
|
|
|
## How to use
|
|
|
|
* Add your app in `apps/`.
|
|
* Add `brickgen.yaml` in you app folder and add this fields:
|
|
|
|
```yaml
|
|
name: brick_name
|
|
description: An awesome brick
|
|
|
|
version: 0.1.0
|
|
|
|
vars:
|
|
bundle_id:
|
|
compilable: io.wyattapp.new
|
|
type: string
|
|
description: The bundle id used in Android and iOS
|
|
default: io.wyattapp.new
|
|
prompt: "What is the bundle id?"
|
|
|
|
flutter:
|
|
type: boolean
|
|
description: If this app is a Flutter or Dart project.
|
|
default: false
|
|
prompt: "Is it Flutter app ?"
|
|
|
|
brickgen:
|
|
path_to_brickify: brick_folder
|
|
ignore:
|
|
- .env
|
|
- node_modules/
|
|
hooks: true
|
|
boolean_file_system:
|
|
flutter:
|
|
folders:
|
|
on_true:
|
|
- android
|
|
- ios
|
|
on_false:
|
|
- bin
|
|
files:
|
|
on_true:
|
|
- l10n.yaml
|
|
- trapeze.yaml
|
|
|
|
```
|
|
|
|
Project structure must be like:
|
|
|
|
```
|
|
apps
|
|
├── brick_name
|
|
│ ├── brickgen.yaml
|
|
│ ├── hooks
|
|
│ │ └── pre_gen.dart
|
|
│ ├── brick_folder
|
|
│ │ └── ... compilable project
|
|
```
|
|
|
|
Then run command with project path
|
|
|
|
```sh
|
|
dart ./tools/brick_generator/bin/brickgen.dart ./apps/brick_name ./bricks/
|
|
```
|
|
|
|
Available options:
|
|
|
|
```text
|
|
-h, --help Show this help dialog
|
|
-v, --verbose Show additional diagnostic info
|
|
-r, --remove-empty Remove empty folders (if not it creates .gitkeep in each empty folders)
|
|
```
|
|
|
|
## TODO
|
|
|
|
* [ ] hooks
|
|
- [x] post hooks
|
|
- [x] pre hooks
|
|
- [ ] add partial hooks
|
|
* [ ] bool variables
|
|
- [x] boolean file system
|
|
- [ ] boolean mapping
|
|
* [ ] enum variables
|
|
* [ ] array variables
|
|
|
|
## Current specification
|
|
|
|
### File Structure
|
|
|
|
```
|
|
apps
|
|
├── <brick_name>
|
|
│ ├── brickgen.yaml
|
|
│ ├── hooks
|
|
│ │ └── pre_gen.dart
|
|
│ ├── <brick_folder>
|
|
│ │ └── ... compilable project
|
|
```
|
|
|
|
### Brick (Mason)
|
|
|
|
```yaml
|
|
name: <brick_name>
|
|
description: <brick_description>
|
|
|
|
version: 0.1.0
|
|
|
|
vars:
|
|
...
|
|
```
|
|
|
|
- name: the brick name (will be in `brick.yaml`)
|
|
- description: the brick description (will be in `brick.yaml`)
|
|
- version: the brick version (will be in `brick.yaml`)
|
|
- vars: the brick variables (will be in `brick.yaml`)
|
|
|
|
#### String variable
|
|
|
|
```yaml
|
|
name:
|
|
compilable: <compilable>
|
|
type: string
|
|
description: <description>
|
|
default: <default>
|
|
prompt: <prompt>
|
|
formats:
|
|
- ...
|
|
```
|
|
|
|
- name: the variable name (will be in `brick.yaml`)
|
|
- compilable: the variable compilable name used in brickgen project
|
|
- type: variable type, here string, (will be in `brick.yaml`)
|
|
- default: default value (will be in `brick.yaml`)
|
|
- prompt: the displayed prompt at the brick generation (will be in `brick.yaml`)
|
|
- formats: optional list of formats that are detected.
|
|
- if no formats provided, all possible syntaxes are detected.
|
|
|
|
#### Boolean variable
|
|
|
|
```yaml
|
|
name:
|
|
type: boolean
|
|
description: <description>
|
|
default: <default>
|
|
prompt: <prompt>
|
|
```
|
|
|
|
- name: the variable name (will be in `brick.yaml`)
|
|
- type: variable type, here string, (will be in `brick.yaml`)
|
|
- default: default value (will be in `brick.yaml`)
|
|
- prompt: the displayed prompt at the brick generation (will be in `brick.yaml`)
|
|
|
|
> Identical to Mason
|
|
|
|
### Brickgen
|
|
|
|
```yaml
|
|
brickgen:
|
|
path_to_brickify: <brick_folder>
|
|
ignore:
|
|
- ...
|
|
hooks: true
|
|
boolean_file_system:
|
|
...
|
|
```
|
|
|
|
- path_to_brickify: the path of the compilable project that will be brickified
|
|
- ignore: list of the ignored files and folders.
|
|
- be sure to add an `/` at the end of the folders name.
|
|
- hooks: copy or not `hooks` folder
|
|
- boolean_file_system: list of the boolean file system variables
|
|
|
|
#### Boolean File System
|
|
|
|
```yaml
|
|
boolean_file_system:
|
|
boolean:
|
|
folders:
|
|
on_true:
|
|
- ...
|
|
on_false:
|
|
- ...
|
|
files:
|
|
on_true:
|
|
- ...
|
|
on_false:
|
|
- ...
|
|
```
|
|
|
|
- boolean: name of the `boolean` variable used.
|
|
- folders
|
|
- on_true: list of the folders includes if the variable is `true`
|
|
- on_true: list of the folders includes if the variable is `false`
|
|
- files
|
|
- on_true: list of the files includes if the variable is `true`
|
|
- on_true: list of the files includes if the variable is `false`
|
|
|
|
> `on_true` and `on_false` are optionnal. (You are allowed to set one or two of them).
|
|
|
|
## Specifications (WIP)
|
|
|
|
File structure:
|
|
|
|
```
|
|
apps
|
|
├── <brick_name>
|
|
│ ├── brickgen.yaml
|
|
│ ├── hooks
|
|
│ │ └── pre_gen.dart
|
|
│ ├── <brick_folder>
|
|
│ │ └── ... compilable project
|
|
```
|
|
|
|
Configuration: `brickgen.yaml`
|
|
|
|
```yaml
|
|
name: <brick_name>
|
|
description: <brick_description>
|
|
|
|
version: 0.1.0
|
|
|
|
vars:
|
|
display_name:
|
|
compilable: Display Name
|
|
type: string
|
|
description: The display name
|
|
default: Display Name
|
|
prompt: "What is the display name?"
|
|
formats:
|
|
- title_case
|
|
|
|
project_name:
|
|
compilable: wyatt_app_template
|
|
type: string
|
|
description: The project name
|
|
default: wyatt_app
|
|
prompt: "What is the project name?"
|
|
formats:
|
|
- snake_case
|
|
|
|
bundle_id:
|
|
compilable: io.wyattapp.new
|
|
type: string
|
|
description: The bundle id used in Android and iOS
|
|
default: io.wyattapp.new
|
|
prompt: "What is the bundle id?"
|
|
formats:
|
|
- dot_case
|
|
|
|
flutter:
|
|
type: boolean
|
|
description: If this app is a Flutter or Dart project.
|
|
default: false
|
|
prompt: "Is it Flutter app ?"
|
|
|
|
brickgen:
|
|
path_to_brickify: <brick_folder>
|
|
ignore:
|
|
- .env
|
|
- node_modules/
|
|
hooks: true
|
|
boolean_mapping:
|
|
flutter:
|
|
folders:
|
|
- "test":
|
|
on_true: "test"
|
|
on_false: "test_dart"
|
|
files:
|
|
- "pubspec.yaml":
|
|
on_true: pubspec.yaml
|
|
on_false: pubspec.dart.yaml
|
|
boolean_file_system:
|
|
flutter:
|
|
folders:
|
|
on_true:
|
|
- android
|
|
- ios
|
|
on_false:
|
|
- bin
|
|
files:
|
|
on_true:
|
|
- l10n.yaml
|
|
- trapeze.yaml
|
|
```
|
|
|
|
Will generate:
|
|
|
|
```
|
|
bricks
|
|
├── <brick_name>
|
|
│ ├── brick.yaml
|
|
│ ├── hooks
|
|
│ │ └── pre_gen.dart
|
|
│ ├── __brick__
|
|
│ │ └── <brick_folder>
|
|
```
|
|
|
|
> It creates a sub folder in __brick__
|
|
|
|
|
|
### How copy works
|
|
|
|
- Case 1
|
|
|
|
```
|
|
apps
|
|
├── brick_1
|
|
│ ├── brickgen.yaml
|
|
│ ├── hooks
|
|
│ │ └── pre_gen.dart
|
|
│ ├── brick_1
|
|
│ │ ├── lib/
|
|
│ │ └── pubspec.yaml
|
|
```
|
|
|
|
```yaml
|
|
...
|
|
name: awesome_brick_1
|
|
brickgen:
|
|
path_to_brickify: brick_1
|
|
hooks: true
|
|
...
|
|
```
|
|
|
|
```sh
|
|
dart ./tools/brick_generator/bin/brickgen.dart ./apps/brick_1 ./bricks/
|
|
```
|
|
|
|
Will generate:
|
|
|
|
```
|
|
bricks
|
|
├── awesome_brick_1
|
|
│ ├── brick.yaml
|
|
│ ├── hooks
|
|
│ │ └── pre_gen.dart
|
|
│ ├── __brick__
|
|
│ │ ├── lib/
|
|
│ │ └── pubspec.yaml
|
|
```
|
|
|
|
***
|
|
|
|
- Case 2
|
|
|
|
```
|
|
apps
|
|
├── brick_2
|
|
│ ├── brickgen.yaml
|
|
│ ├── hooks
|
|
│ │ └── pre_gen.dart
|
|
│ ├── brick_2
|
|
│ │ ├── lib
|
|
│ │ │ └── widget.dart
|
|
│ │ └── pubspec.yaml
|
|
```
|
|
|
|
```yaml
|
|
...
|
|
name: awesome_brick_2
|
|
brickgen:
|
|
path_to_brickify: brick_2/lib
|
|
hooks: false
|
|
...
|
|
```
|
|
|
|
```sh
|
|
dart ./tools/brick_generator/bin/brickgen.dart ./apps/brick_2 ./bricks/
|
|
```
|
|
|
|
Will generate:
|
|
|
|
```
|
|
bricks
|
|
├── awesome_brick_2
|
|
│ ├── brick.yaml
|
|
│ ├── __brick__
|
|
│ │ └── widget.dart
|
|
``` |