@digitaldefiance/express-suite-starter 2.1.41
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 +342 -0
- package/config/package-groups.json +83 -0
- package/config/presets/minimal.json +32 -0
- package/config/presets/standard.json +70 -0
- package/dist/scripts/addScriptsToPackageJson.d.ts +7 -0
- package/dist/scripts/addScriptsToPackageJson.d.ts.map +1 -0
- package/dist/scripts/addScriptsToPackageJson.js +69 -0
- package/dist/scripts/addScriptsToPackageJson.js.map +1 -0
- package/dist/scripts/albatross.d.ts +4 -0
- package/dist/scripts/albatross.d.ts.map +1 -0
- package/dist/scripts/albatross.js +36 -0
- package/dist/scripts/albatross.js.map +1 -0
- package/dist/scripts/fsUtils.d.ts +15 -0
- package/dist/scripts/fsUtils.d.ts.map +1 -0
- package/dist/scripts/fsUtils.js +99 -0
- package/dist/scripts/fsUtils.js.map +1 -0
- package/dist/scripts/generate-monorepo.d.ts +2 -0
- package/dist/scripts/generate-monorepo.d.ts.map +1 -0
- package/dist/scripts/generate-monorepo.js +227 -0
- package/dist/scripts/generate-monorepo.js.map +1 -0
- package/dist/scripts/licensePrompt.d.ts +5 -0
- package/dist/scripts/licensePrompt.d.ts.map +1 -0
- package/dist/scripts/licensePrompt.js +63 -0
- package/dist/scripts/licensePrompt.js.map +1 -0
- package/dist/scripts/monorepoConfig.d.ts +18 -0
- package/dist/scripts/monorepoConfig.d.ts.map +1 -0
- package/dist/scripts/monorepoConfig.js +83 -0
- package/dist/scripts/monorepoConfig.js.map +1 -0
- package/dist/scripts/nodeSetup.d.ts +5 -0
- package/dist/scripts/nodeSetup.d.ts.map +1 -0
- package/dist/scripts/nodeSetup.js +32 -0
- package/dist/scripts/nodeSetup.js.map +1 -0
- package/dist/scripts/passwordObfuscator.d.ts +14 -0
- package/dist/scripts/passwordObfuscator.d.ts.map +1 -0
- package/dist/scripts/passwordObfuscator.js +52 -0
- package/dist/scripts/passwordObfuscator.js.map +1 -0
- package/dist/scripts/shellUtils.d.ts +11 -0
- package/dist/scripts/shellUtils.d.ts.map +1 -0
- package/dist/scripts/shellUtils.js +28 -0
- package/dist/scripts/shellUtils.js.map +1 -0
- package/dist/scripts/templateUtils.d.ts +6 -0
- package/dist/scripts/templateUtils.d.ts.map +1 -0
- package/dist/scripts/templateUtils.js +15 -0
- package/dist/scripts/templateUtils.js.map +1 -0
- package/dist/src/cli/logger.d.ts +15 -0
- package/dist/src/cli/logger.d.ts.map +1 -0
- package/dist/src/cli/logger.js +48 -0
- package/dist/src/cli/logger.js.map +1 -0
- package/dist/src/cli.d.ts +6 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +12 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/core/config-schema.d.ts +3 -0
- package/dist/src/core/config-schema.d.ts.map +1 -0
- package/dist/src/core/config-schema.js +20 -0
- package/dist/src/core/config-schema.js.map +1 -0
- package/dist/src/core/dry-run-executor.d.ts +15 -0
- package/dist/src/core/dry-run-executor.d.ts.map +1 -0
- package/dist/src/core/dry-run-executor.js +86 -0
- package/dist/src/core/dry-run-executor.js.map +1 -0
- package/dist/src/core/interfaces/checkpoint.interface.d.ts +6 -0
- package/dist/src/core/interfaces/checkpoint.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/checkpoint.interface.js +3 -0
- package/dist/src/core/interfaces/checkpoint.interface.js.map +1 -0
- package/dist/src/core/interfaces/command-options.interface.d.ts +5 -0
- package/dist/src/core/interfaces/command-options.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/command-options.interface.js +3 -0
- package/dist/src/core/interfaces/command-options.interface.js.map +1 -0
- package/dist/src/core/interfaces/devcontainer-config.interface.d.ts +6 -0
- package/dist/src/core/interfaces/devcontainer-config.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/devcontainer-config.interface.js +3 -0
- package/dist/src/core/interfaces/devcontainer-config.interface.js.map +1 -0
- package/dist/src/core/interfaces/dry-run.interface.d.ts +16 -0
- package/dist/src/core/interfaces/dry-run.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/dry-run.interface.js +3 -0
- package/dist/src/core/interfaces/dry-run.interface.js.map +1 -0
- package/dist/src/core/interfaces/generator-config.interface.d.ts +17 -0
- package/dist/src/core/interfaces/generator-config.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/generator-config.interface.js +3 -0
- package/dist/src/core/interfaces/generator-config.interface.js.map +1 -0
- package/dist/src/core/interfaces/generator-context.interface.d.ts +6 -0
- package/dist/src/core/interfaces/generator-context.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/generator-context.interface.js +3 -0
- package/dist/src/core/interfaces/generator-context.interface.js.map +1 -0
- package/dist/src/core/interfaces/index.d.ts +16 -0
- package/dist/src/core/interfaces/index.d.ts.map +1 -0
- package/dist/src/core/interfaces/index.js +32 -0
- package/dist/src/core/interfaces/index.js.map +1 -0
- package/dist/src/core/interfaces/node-config.interface.d.ts +5 -0
- package/dist/src/core/interfaces/node-config.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/node-config.interface.js +3 -0
- package/dist/src/core/interfaces/node-config.interface.js.map +1 -0
- package/dist/src/core/interfaces/nx-config.interface.d.ts +9 -0
- package/dist/src/core/interfaces/nx-config.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/nx-config.interface.js +3 -0
- package/dist/src/core/interfaces/nx-config.interface.js.map +1 -0
- package/dist/src/core/interfaces/package-config.interface.d.ts +6 -0
- package/dist/src/core/interfaces/package-config.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/package-config.interface.js +3 -0
- package/dist/src/core/interfaces/package-config.interface.js.map +1 -0
- package/dist/src/core/interfaces/package-resolution.interface.d.ts +21 -0
- package/dist/src/core/interfaces/package-resolution.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/package-resolution.interface.js +3 -0
- package/dist/src/core/interfaces/package-resolution.interface.js.map +1 -0
- package/dist/src/core/interfaces/plugin.interface.d.ts +21 -0
- package/dist/src/core/interfaces/plugin.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/plugin.interface.js +3 -0
- package/dist/src/core/interfaces/plugin.interface.js.map +1 -0
- package/dist/src/core/interfaces/project-config.interface.d.ts +7 -0
- package/dist/src/core/interfaces/project-config.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/project-config.interface.js +3 -0
- package/dist/src/core/interfaces/project-config.interface.js.map +1 -0
- package/dist/src/core/interfaces/step.interface.d.ts +9 -0
- package/dist/src/core/interfaces/step.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/step.interface.js +3 -0
- package/dist/src/core/interfaces/step.interface.js.map +1 -0
- package/dist/src/core/interfaces/template-config.interface.d.ts +5 -0
- package/dist/src/core/interfaces/template-config.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/template-config.interface.js +3 -0
- package/dist/src/core/interfaces/template-config.interface.js.map +1 -0
- package/dist/src/core/interfaces/validation-issue.interface.d.ts +18 -0
- package/dist/src/core/interfaces/validation-issue.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/validation-issue.interface.js +3 -0
- package/dist/src/core/interfaces/validation-issue.interface.js.map +1 -0
- package/dist/src/core/interfaces/validation-result.interface.d.ts +5 -0
- package/dist/src/core/interfaces/validation-result.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/validation-result.interface.js +3 -0
- package/dist/src/core/interfaces/validation-result.interface.js.map +1 -0
- package/dist/src/core/interfaces/workspace-config.interface.d.ts +8 -0
- package/dist/src/core/interfaces/workspace-config.interface.d.ts.map +1 -0
- package/dist/src/core/interfaces/workspace-config.interface.js +3 -0
- package/dist/src/core/interfaces/workspace-config.interface.js.map +1 -0
- package/dist/src/core/package-resolver.d.ts +10 -0
- package/dist/src/core/package-resolver.d.ts.map +1 -0
- package/dist/src/core/package-resolver.js +68 -0
- package/dist/src/core/package-resolver.js.map +1 -0
- package/dist/src/core/plugin-manager.d.ts +13 -0
- package/dist/src/core/plugin-manager.d.ts.map +1 -0
- package/dist/src/core/plugin-manager.js +48 -0
- package/dist/src/core/plugin-manager.js.map +1 -0
- package/dist/src/core/plugins/example-plugin.d.ts +3 -0
- package/dist/src/core/plugins/example-plugin.d.ts.map +1 -0
- package/dist/src/core/plugins/example-plugin.js +30 -0
- package/dist/src/core/plugins/example-plugin.js.map +1 -0
- package/dist/src/core/project-config-builder.d.ts +11 -0
- package/dist/src/core/project-config-builder.d.ts.map +1 -0
- package/dist/src/core/project-config-builder.js +77 -0
- package/dist/src/core/project-config-builder.js.map +1 -0
- package/dist/src/core/project-generator.d.ts +11 -0
- package/dist/src/core/project-generator.d.ts.map +1 -0
- package/dist/src/core/project-generator.js +29 -0
- package/dist/src/core/project-generator.js.map +1 -0
- package/dist/src/core/step-executor.d.ts +19 -0
- package/dist/src/core/step-executor.d.ts.map +1 -0
- package/dist/src/core/step-executor.js +130 -0
- package/dist/src/core/step-executor.js.map +1 -0
- package/dist/src/core/validators/config-validator.d.ts +10 -0
- package/dist/src/core/validators/config-validator.d.ts.map +1 -0
- package/dist/src/core/validators/config-validator.js +44 -0
- package/dist/src/core/validators/config-validator.js.map +1 -0
- package/dist/src/core/validators/post-generation-validator.d.ts +10 -0
- package/dist/src/core/validators/post-generation-validator.d.ts.map +1 -0
- package/dist/src/core/validators/post-generation-validator.js +219 -0
- package/dist/src/core/validators/post-generation-validator.js.map +1 -0
- package/dist/src/generate-monorepo.d.ts +3 -0
- package/dist/src/generate-monorepo.d.ts.map +1 -0
- package/dist/src/generate-monorepo.js +668 -0
- package/dist/src/generate-monorepo.js.map +1 -0
- package/dist/src/templates/engines/handlebars-engine.d.ts +7 -0
- package/dist/src/templates/engines/handlebars-engine.d.ts.map +1 -0
- package/dist/src/templates/engines/handlebars-engine.js +19 -0
- package/dist/src/templates/engines/handlebars-engine.js.map +1 -0
- package/dist/src/templates/engines/mustache-engine.d.ts +5 -0
- package/dist/src/templates/engines/mustache-engine.d.ts.map +1 -0
- package/dist/src/templates/engines/mustache-engine.js +44 -0
- package/dist/src/templates/engines/mustache-engine.js.map +1 -0
- package/dist/src/templates/index.d.ts +5 -0
- package/dist/src/templates/index.d.ts.map +1 -0
- package/dist/src/templates/index.js +21 -0
- package/dist/src/templates/index.js.map +1 -0
- package/dist/src/templates/interfaces/template-engine.interface.d.ts +4 -0
- package/dist/src/templates/interfaces/template-engine.interface.d.ts.map +1 -0
- package/dist/src/templates/interfaces/template-engine.interface.js +3 -0
- package/dist/src/templates/interfaces/template-engine.interface.js.map +1 -0
- package/dist/src/templates/template-engine-factory.d.ts +3 -0
- package/dist/src/templates/template-engine-factory.d.ts.map +1 -0
- package/dist/src/templates/template-engine-factory.js +9 -0
- package/dist/src/templates/template-engine-factory.js.map +1 -0
- package/dist/src/utils/diff-viewer.d.ts +15 -0
- package/dist/src/utils/diff-viewer.d.ts.map +1 -0
- package/dist/src/utils/diff-viewer.js +61 -0
- package/dist/src/utils/diff-viewer.js.map +1 -0
- package/dist/src/utils/doc-generator.d.ts +8 -0
- package/dist/src/utils/doc-generator.d.ts.map +1 -0
- package/dist/src/utils/doc-generator.js +174 -0
- package/dist/src/utils/doc-generator.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +4 -0
- package/dist/src/utils/shell-utils.d.ts.map +1 -0
- package/dist/src/utils/shell-utils.js +32 -0
- package/dist/src/utils/shell-utils.js.map +1 -0
- package/dist/src/utils/system-check.d.ts +11 -0
- package/dist/src/utils/system-check.d.ts.map +1 -0
- package/dist/src/utils/system-check.js +71 -0
- package/dist/src/utils/system-check.js.map +1 -0
- package/dist/src/utils/template-renderer.d.ts +3 -0
- package/dist/src/utils/template-renderer.d.ts.map +1 -0
- package/dist/src/utils/template-renderer.js +127 -0
- package/dist/src/utils/template-renderer.js.map +1 -0
- package/package.json +51 -0
- package/templates/api/.env.example.mustache +57 -0
- package/templates/api-lib/README.md.mustache +23 -0
- package/templates/react-lib/README.md.mustache +23 -0
- package/templates/root/README.md.mustache +175 -0
- package/templates/root/reset.sh.mustache +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
# Node Express Suite Starter
|
|
2
|
+
|
|
3
|
+
<a alt="Nx logo" href="https://nx.dev" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-logo.png" width="45"></a>
|
|
4
|
+
|
|
5
|
+
Automated generator for MERN stack monorepos using [@digitaldefiance/node-express-suite](https://www.npmjs.com/package/@digitaldefiance/node-express-suite).
|
|
6
|
+
|
|
7
|
+
Part of [Express Suite](https://github.com/Digital-Defiance/express-suite)
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- 🚀 **Nx Monorepo** - Modern build system with caching
|
|
12
|
+
- ⚛️ **React 19** - Latest React with TypeScript
|
|
13
|
+
- 🔧 **Express 5** - Node.js API with @digitaldefiance/node-express-suite
|
|
14
|
+
- 🗄️ **MongoDB** - Database with Mongoose ODM
|
|
15
|
+
- 🎨 **Material-UI** - Component library
|
|
16
|
+
- 🔐 **ECIES Encryption** - Built-in cryptography
|
|
17
|
+
- 🌍 **i18n** - Multi-language support with @digitaldefiance/i18n-lib
|
|
18
|
+
- 🧪 **Testing** - Jest + Playwright E2E
|
|
19
|
+
- 🎯 **Enhanced CLI** - Chalk-powered interface with progress tracking
|
|
20
|
+
- 📦 **Package Groups** - Optional feature sets (auth, validation, docs)
|
|
21
|
+
- 🔄 **Rollback Support** - Checkpoint/restore for failed generations
|
|
22
|
+
- 🎨 **Template Engines** - Mustache with variable substitution
|
|
23
|
+
- 🐳 **DevContainer** - 4 options (none, simple, MongoDB, MongoDB replica set)
|
|
24
|
+
- 🔌 **Plugin System** - Extensible with lifecycle hooks
|
|
25
|
+
- ✅ **Validation** - Post-generation checks with fix suggestions
|
|
26
|
+
- 🖥️ **Cross-Platform** - Windows, macOS, and Linux support
|
|
27
|
+
|
|
28
|
+
## Quick Start
|
|
29
|
+
|
|
30
|
+
### NPX (Recommended)
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx @digitaldefiance/express-suite-starter
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Local Development
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
yarn install
|
|
40
|
+
yarn build
|
|
41
|
+
yarn start
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Follow the interactive prompts to generate your monorepo.
|
|
45
|
+
|
|
46
|
+
## What Gets Generated
|
|
47
|
+
|
|
48
|
+
### Projects (7 total, some optional)
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
my-app/
|
|
52
|
+
├── my-app-lib/ # Shared library (i18n, constants, enumerations)
|
|
53
|
+
├── my-app-api-lib/ # API business logic (App, Environment, Constants)
|
|
54
|
+
├── my-app-api/ # Express server (main.ts, views, .env)
|
|
55
|
+
├── my-app-api-e2e/ # API E2E tests (Jest)
|
|
56
|
+
├── my-app-react/ # React frontend (Vite + Material-UI)
|
|
57
|
+
├── my-app-react-lib/ # React component library (optional)
|
|
58
|
+
├── my-app-react-e2e/ # React E2E tests (Playwright, optional)
|
|
59
|
+
└── my-app-inituserdb/ # DB initialization (optional)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Note: Test utilities are provided by `@digitaldefiance/express-suite-test-utils` package.
|
|
63
|
+
|
|
64
|
+
### Scaffolding Files
|
|
65
|
+
|
|
66
|
+
- **lib**: i18n setup, string enumerations, constants, interfaces
|
|
67
|
+
- **api-lib**: Application class, Environment, Constants, interfaces
|
|
68
|
+
- **api**: main.ts entry point, EJS views, .env.example
|
|
69
|
+
- **react**: App structure, components, pages, assets
|
|
70
|
+
- **react-lib**: Theme configuration
|
|
71
|
+
- **root**: CI workflows, scripts, .gitignore, devcontainer
|
|
72
|
+
|
|
73
|
+
## Generated Scripts
|
|
74
|
+
|
|
75
|
+
The generated monorepo includes:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Development
|
|
79
|
+
yarn build:dev # Development build
|
|
80
|
+
yarn serve:dev # Start API server (dev mode)
|
|
81
|
+
yarn serve:dev:stream # Start API with streaming output
|
|
82
|
+
|
|
83
|
+
# Production
|
|
84
|
+
yarn build # Production build (copies .env to dist/)
|
|
85
|
+
yarn serve # Start API server (production mode)
|
|
86
|
+
node dist/example-project-api/main.js # Direct production run
|
|
87
|
+
|
|
88
|
+
# Testing & Database
|
|
89
|
+
yarn test:all # Run all tests
|
|
90
|
+
yarn inituserdb:full:drop # Initialize database
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Architecture
|
|
94
|
+
|
|
95
|
+
### Structure (v2.1.40)
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
src/
|
|
99
|
+
├── core/
|
|
100
|
+
│ ├── interfaces/ # 15+ TypeScript interfaces
|
|
101
|
+
│ ├── validators/ # Config + post-generation validation
|
|
102
|
+
│ ├── config-schema.ts # Configuration validation
|
|
103
|
+
│ ├── step-executor.ts # Step execution with rollback
|
|
104
|
+
│ ├── dry-run-executor.ts # Preview mode
|
|
105
|
+
│ ├── plugin-manager.ts # Plugin system with 5 hooks
|
|
106
|
+
│ ├── project-generator.ts # Nx project generation
|
|
107
|
+
│ ├── project-config-builder.ts # Dynamic project configs
|
|
108
|
+
│ └── package-resolver.ts # Version resolution
|
|
109
|
+
├── cli/
|
|
110
|
+
│ └── logger.ts # Chalk-based semantic logging
|
|
111
|
+
├── templates/
|
|
112
|
+
│ ├── engines/ # Mustache + Handlebars
|
|
113
|
+
│ └── template-engine-factory.ts
|
|
114
|
+
└── utils/
|
|
115
|
+
├── shell-utils.ts # Cross-platform commands
|
|
116
|
+
├── system-check.ts # Build tool validation
|
|
117
|
+
├── template-renderer.ts # File operations
|
|
118
|
+
├── doc-generator.ts # README/ARCHITECTURE/API docs
|
|
119
|
+
└── diff-viewer.ts # Dry-run preview
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Interactive Prompts
|
|
123
|
+
|
|
124
|
+
- **Workspace Configuration**: Name, prefix, namespace, parent directory
|
|
125
|
+
- **Optional Projects**: react-lib, api-lib, E2E tests, inituserdb, test-utils
|
|
126
|
+
- **Package Groups**: Authentication, validation, documentation, UI components
|
|
127
|
+
- **Express Suite Packages**: react-components, test-utils
|
|
128
|
+
- **DevContainer**: None, simple (Node.js), MongoDB, MongoDB replica set
|
|
129
|
+
- **Documentation**: Auto-generate README, ARCHITECTURE, API docs
|
|
130
|
+
- **Git**: Optional commit and push
|
|
131
|
+
- **Playwright**: Optional browser installation
|
|
132
|
+
|
|
133
|
+
### DevContainer Options
|
|
134
|
+
|
|
135
|
+
1. **None** - No devcontainer
|
|
136
|
+
2. **Simple** - Node.js 20 only
|
|
137
|
+
3. **MongoDB** - Node.js + MongoDB single instance
|
|
138
|
+
4. **MongoDB Replica Set** - Node.js + MongoDB with transactions support
|
|
139
|
+
|
|
140
|
+
All devcontainers include VS Code extensions and run on Linux regardless of host OS.
|
|
141
|
+
|
|
142
|
+
### Template Processing
|
|
143
|
+
|
|
144
|
+
**Scaffolding files** with `.mustache` extension are automatically processed:
|
|
145
|
+
- Variables replaced: `{{workspaceName}}`, `{{WorkspaceName}}`, `{{prefix}}`, `{{namespace}}`, `{{hostname}}`
|
|
146
|
+
- Extension stripped: `app.tsx.mustache` → `app.tsx`
|
|
147
|
+
- Non-mustache files copied directly without modification
|
|
148
|
+
|
|
149
|
+
**Example:**
|
|
150
|
+
```typescript
|
|
151
|
+
// scaffolding/lib/src/lib/i18n-setup.ts.mustache
|
|
152
|
+
export const ComponentId = '{{WorkspaceName}}';
|
|
153
|
+
|
|
154
|
+
// Generated as: example-project-lib/src/lib/i18n-setup.ts
|
|
155
|
+
export const ComponentId = 'ExampleProject';
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Development
|
|
159
|
+
|
|
160
|
+
### Build
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
yarn build # TypeScript compilation
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Test
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
yarn test # Run all tests (21 suites, 137 tests)
|
|
170
|
+
yarn test:watch # Watch mode
|
|
171
|
+
yarn test:coverage # Coverage report
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### System Requirements
|
|
175
|
+
|
|
176
|
+
Automatically checked before generation:
|
|
177
|
+
- **C++ compiler** (g++, clang++, or Visual Studio Build Tools)
|
|
178
|
+
- **Python 3** (for node-gyp)
|
|
179
|
+
- **make** (Unix) or **MSBuild** (Windows)
|
|
180
|
+
- **git** (optional, warning only)
|
|
181
|
+
|
|
182
|
+
### Cross-Platform Support
|
|
183
|
+
|
|
184
|
+
✅ **Windows**: Uses `where` for command checks, Visual Studio Build Tools
|
|
185
|
+
✅ **macOS**: Uses `command -v`, Xcode Command Line Tools
|
|
186
|
+
✅ **Linux**: Uses `command -v`, build-essential package
|
|
187
|
+
|
|
188
|
+
## Packages Installed
|
|
189
|
+
|
|
190
|
+
### Express Suite (Core)
|
|
191
|
+
- `@digitaldefiance/node-express-suite` - Backend framework with BaseApplication, BaseRouter
|
|
192
|
+
- `@digitaldefiance/suite-core-lib` - Core utilities and constants
|
|
193
|
+
- `@digitaldefiance/ecies-lib` - Browser ECIES encryption
|
|
194
|
+
- `@digitaldefiance/node-ecies-lib` - Node.js ECIES encryption
|
|
195
|
+
- `@digitaldefiance/i18n-lib` - Multi-language support with I18nEngine
|
|
196
|
+
|
|
197
|
+
### Express Suite (Optional)
|
|
198
|
+
- `@digitaldefiance/express-suite-react-components` - Pre-built React components (useAuth, etc.)
|
|
199
|
+
- `@digitaldefiance/express-suite-test-utils` - Testing utilities (always included)
|
|
200
|
+
|
|
201
|
+
### Core Stack
|
|
202
|
+
- **Backend**: Express 5, MongoDB, Mongoose
|
|
203
|
+
- **Frontend**: React 19, Vite, Material-UI
|
|
204
|
+
- **Testing**: Jest, Playwright
|
|
205
|
+
- **Build**: Nx, TypeScript, ESLint, Prettier
|
|
206
|
+
|
|
207
|
+
## Advanced Features
|
|
208
|
+
|
|
209
|
+
### Plugin System
|
|
210
|
+
|
|
211
|
+
Create custom plugins with 5 lifecycle hooks:
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
import { Plugin } from '@digitaldefiance/express-suite-starter';
|
|
215
|
+
|
|
216
|
+
export const myPlugin: Plugin = {
|
|
217
|
+
name: 'my-plugin',
|
|
218
|
+
hooks: {
|
|
219
|
+
beforeGeneration: async (context) => { /* ... */ },
|
|
220
|
+
afterGeneration: async (context) => { /* ... */ },
|
|
221
|
+
beforeStep: async (step, context) => { /* ... */ },
|
|
222
|
+
afterStep: async (step, context) => { /* ... */ },
|
|
223
|
+
onError: async (error, step, context) => { /* ... */ },
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Dry-Run Mode
|
|
229
|
+
|
|
230
|
+
Preview changes without creating files:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
npx @digitaldefiance/express-suite-starter --dry-run
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Post-Generation Validation
|
|
237
|
+
|
|
238
|
+
Automatic checks after generation:
|
|
239
|
+
- ✅ package.json validation
|
|
240
|
+
- ✅ Dependency conflict detection
|
|
241
|
+
- ✅ Best practices checking
|
|
242
|
+
- ✅ Fix suggestions
|
|
243
|
+
|
|
244
|
+
### Package Groups
|
|
245
|
+
|
|
246
|
+
Optional feature sets in `config/package-groups.json`:
|
|
247
|
+
- **testing**: Additional test utilities
|
|
248
|
+
- **linting**: Enhanced linting rules
|
|
249
|
+
- **ui-components**: Extra UI libraries
|
|
250
|
+
- **database**: Database tools
|
|
251
|
+
- **authentication**: Auth utilities
|
|
252
|
+
- **validation**: Validation libraries
|
|
253
|
+
- **documentation**: Doc generation tools
|
|
254
|
+
|
|
255
|
+
## CLI Features
|
|
256
|
+
|
|
257
|
+
### Progress Tracking
|
|
258
|
+
```
|
|
259
|
+
[1/15] Checking target directory ✓
|
|
260
|
+
[2/15] Creating Nx monorepo ✓
|
|
261
|
+
[3/15] Setting up git remote ✓
|
|
262
|
+
...
|
|
263
|
+
[15/15] Installing Playwright browsers ✓
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Color-Coded Output
|
|
267
|
+
- ✓ Green: Success
|
|
268
|
+
- ✗ Red: Errors
|
|
269
|
+
- ⚠ Yellow: Warnings
|
|
270
|
+
- ℹ Blue: Information
|
|
271
|
+
- $ Gray: Commands
|
|
272
|
+
|
|
273
|
+
### Semantic Logging
|
|
274
|
+
```typescript
|
|
275
|
+
Logger.success('message') // ✓ Green
|
|
276
|
+
Logger.error('message') // ✗ Red
|
|
277
|
+
Logger.warning('message') // ⚠ Yellow
|
|
278
|
+
Logger.info('message') // ℹ Blue
|
|
279
|
+
Logger.step(1, 5, 'msg') // [1/5] Cyan
|
|
280
|
+
Logger.command('cmd') // $ Gray
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
## Documentation
|
|
284
|
+
|
|
285
|
+
- **ARCHITECTURE.md** - Comprehensive architecture documentation
|
|
286
|
+
- **CONTEXT.md** - Development context and decisions
|
|
287
|
+
- **PLUGIN_GUIDE.md** - Plugin development guide
|
|
288
|
+
- **QUICKSTART.md** - 10-minute quick start
|
|
289
|
+
- **EXAMPLES.md** - Usage examples
|
|
290
|
+
|
|
291
|
+
## Testing
|
|
292
|
+
|
|
293
|
+
- **21 test suites** (18 unit + 3 integration)
|
|
294
|
+
- **137 tests** passing
|
|
295
|
+
- **95%+ coverage** on core components
|
|
296
|
+
- **100% coverage** on critical paths
|
|
297
|
+
|
|
298
|
+
## Environment Configuration
|
|
299
|
+
|
|
300
|
+
### Development
|
|
301
|
+
|
|
302
|
+
1. **API .env**: Update `{prefix}-api/.env` with your configuration
|
|
303
|
+
2. **DevContainer .env** (if using MongoDB devcontainer): Update `.devcontainer/.env`
|
|
304
|
+
- Replica set: `MONGO_URI=mongodb://localhost:27017/dbname?replicaSet=rs0&directConnection=true`
|
|
305
|
+
- Single instance: `MONGO_URI=mongodb://localhost:27017/dbname?directConnection=true`
|
|
306
|
+
|
|
307
|
+
### Production Deployment
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
# Build (copies .env to dist/)
|
|
311
|
+
yarn build
|
|
312
|
+
|
|
313
|
+
# Run from dist/
|
|
314
|
+
node dist/example-project-api/main.js
|
|
315
|
+
|
|
316
|
+
# Or use process manager
|
|
317
|
+
pm2 start dist/example-project-api/main.js
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
The `.env` file is automatically copied to `dist/` during build via `post-build` target in `project.json`.
|
|
321
|
+
|
|
322
|
+
## Version
|
|
323
|
+
|
|
324
|
+
**Current**: 2.1.40
|
|
325
|
+
|
|
326
|
+
**Status**: Production Ready ✅
|
|
327
|
+
|
|
328
|
+
## Links
|
|
329
|
+
|
|
330
|
+
- [Express Suite Packages](https://www.npmjs.com/search?q=%40digitaldefiance)
|
|
331
|
+
- [GitHub Repository](https://github.com/Digital-Defiance/express-suite)
|
|
332
|
+
- [Nx Documentation](https://nx.dev)
|
|
333
|
+
|
|
334
|
+
## License
|
|
335
|
+
|
|
336
|
+
MIT © Digital Defiance
|
|
337
|
+
|
|
338
|
+
## ChangeLog
|
|
339
|
+
|
|
340
|
+
### Version 2.1.41
|
|
341
|
+
|
|
342
|
+
- Update MONGO_URI and docs
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"groups": [
|
|
3
|
+
{
|
|
4
|
+
"name": "testing",
|
|
5
|
+
"description": "Testing utilities and frameworks",
|
|
6
|
+
"enabled": true,
|
|
7
|
+
"packages": [
|
|
8
|
+
"jest",
|
|
9
|
+
"@types/jest",
|
|
10
|
+
"ts-jest",
|
|
11
|
+
"playwright",
|
|
12
|
+
"@playwright/test"
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "linting",
|
|
17
|
+
"description": "Code quality and linting tools",
|
|
18
|
+
"enabled": true,
|
|
19
|
+
"packages": [
|
|
20
|
+
"eslint",
|
|
21
|
+
"@typescript-eslint/eslint-plugin",
|
|
22
|
+
"@typescript-eslint/parser",
|
|
23
|
+
"eslint-config-prettier",
|
|
24
|
+
"eslint-plugin-prettier"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "ui-components",
|
|
29
|
+
"description": "Material-UI component library",
|
|
30
|
+
"enabled": true,
|
|
31
|
+
"packages": [
|
|
32
|
+
"@mui/material",
|
|
33
|
+
"@mui/icons-material",
|
|
34
|
+
"@emotion/react",
|
|
35
|
+
"@emotion/styled"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "database",
|
|
40
|
+
"description": "MongoDB and database tools",
|
|
41
|
+
"enabled": true,
|
|
42
|
+
"packages": [
|
|
43
|
+
"mongodb",
|
|
44
|
+
"mongoose",
|
|
45
|
+
"mongodb-memory-server"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "authentication",
|
|
50
|
+
"description": "Authentication and security",
|
|
51
|
+
"enabled": false,
|
|
52
|
+
"packages": [
|
|
53
|
+
"jsonwebtoken",
|
|
54
|
+
"@types/jsonwebtoken",
|
|
55
|
+
"bcrypt",
|
|
56
|
+
"@types/bcrypt",
|
|
57
|
+
"passport",
|
|
58
|
+
"passport-jwt"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "validation",
|
|
63
|
+
"description": "Input validation libraries",
|
|
64
|
+
"enabled": false,
|
|
65
|
+
"packages": [
|
|
66
|
+
"joi",
|
|
67
|
+
"yup",
|
|
68
|
+
"validator",
|
|
69
|
+
"@types/validator"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "documentation",
|
|
74
|
+
"description": "API documentation tools",
|
|
75
|
+
"enabled": false,
|
|
76
|
+
"packages": [
|
|
77
|
+
"swagger-ui-express",
|
|
78
|
+
"@types/swagger-ui-express",
|
|
79
|
+
"swagger-jsdoc"
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"templates": {
|
|
3
|
+
"engine": "mustache"
|
|
4
|
+
},
|
|
5
|
+
"nx": {
|
|
6
|
+
"linter": "eslint",
|
|
7
|
+
"unitTestRunner": "jest",
|
|
8
|
+
"e2eTestRunner": "none",
|
|
9
|
+
"style": "css",
|
|
10
|
+
"bundler": "vite",
|
|
11
|
+
"ciProvider": "github"
|
|
12
|
+
},
|
|
13
|
+
"node": {
|
|
14
|
+
"version": "22",
|
|
15
|
+
"yarnVersion": "4.9.1"
|
|
16
|
+
},
|
|
17
|
+
"packages": {
|
|
18
|
+
"dev": [
|
|
19
|
+
"@typescript-eslint/eslint-plugin",
|
|
20
|
+
"@typescript-eslint/parser",
|
|
21
|
+
"@types/node",
|
|
22
|
+
"@types/react",
|
|
23
|
+
"@types/react-dom"
|
|
24
|
+
],
|
|
25
|
+
"prod": [
|
|
26
|
+
"react",
|
|
27
|
+
"react-dom",
|
|
28
|
+
"express",
|
|
29
|
+
"dotenv"
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"templates": {
|
|
3
|
+
"engine": "mustache"
|
|
4
|
+
},
|
|
5
|
+
"nx": {
|
|
6
|
+
"linter": "eslint",
|
|
7
|
+
"unitTestRunner": "jest",
|
|
8
|
+
"e2eTestRunner": "playwright",
|
|
9
|
+
"style": "scss",
|
|
10
|
+
"bundler": "vite",
|
|
11
|
+
"ciProvider": "github"
|
|
12
|
+
},
|
|
13
|
+
"node": {
|
|
14
|
+
"version": "22",
|
|
15
|
+
"yarnVersion": "4.9.1"
|
|
16
|
+
},
|
|
17
|
+
"packages": {
|
|
18
|
+
"dev": [
|
|
19
|
+
"@digitaldefiance/express-suite-test-utils@1.0.7",
|
|
20
|
+
"@typescript-eslint/eslint-plugin",
|
|
21
|
+
"@typescript-eslint/parser",
|
|
22
|
+
"eslint-config-prettier",
|
|
23
|
+
"eslint-plugin-prettier",
|
|
24
|
+
"eslint-plugin-react",
|
|
25
|
+
"eslint-plugin-react-hooks",
|
|
26
|
+
"eslint-plugin-import",
|
|
27
|
+
"eslint-plugin-jsx-a11y",
|
|
28
|
+
"eslint-plugin-playwright",
|
|
29
|
+
"mongodb-memory-server",
|
|
30
|
+
"supertest",
|
|
31
|
+
"patch-package",
|
|
32
|
+
"@types/cors",
|
|
33
|
+
"@types/express",
|
|
34
|
+
"@types/jsonwebtoken",
|
|
35
|
+
"@types/supertest",
|
|
36
|
+
"@types/node",
|
|
37
|
+
"@types/react",
|
|
38
|
+
"@types/react-dom",
|
|
39
|
+
"sass"
|
|
40
|
+
],
|
|
41
|
+
"prod": [
|
|
42
|
+
"@digitaldefiance/node-express-suite",
|
|
43
|
+
"@digitaldefiance/ecies-lib",
|
|
44
|
+
"@digitaldefiance/node-ecies-lib",
|
|
45
|
+
"@digitaldefiance/i18n-lib",
|
|
46
|
+
"@digitaldefiance/suite-core-lib",
|
|
47
|
+
"@digitaldefiance/express-suite-react-components",
|
|
48
|
+
"@emotion/react",
|
|
49
|
+
"@emotion/styled",
|
|
50
|
+
"@mui/icons-material",
|
|
51
|
+
"@mui/material",
|
|
52
|
+
"@mui/system",
|
|
53
|
+
"@mui/x-date-pickers",
|
|
54
|
+
"axios",
|
|
55
|
+
"bip39",
|
|
56
|
+
"currency-codes",
|
|
57
|
+
"date-fns",
|
|
58
|
+
"react",
|
|
59
|
+
"react-dom",
|
|
60
|
+
"react-router-dom",
|
|
61
|
+
"cors",
|
|
62
|
+
"dotenv",
|
|
63
|
+
"express",
|
|
64
|
+
"helmet",
|
|
65
|
+
"jsonwebtoken",
|
|
66
|
+
"mongodb",
|
|
67
|
+
"mongoose"
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adds or updates a script in the "scripts" section of a package.json file.
|
|
3
|
+
* @param packageJsonPath Path to the package.json file.
|
|
4
|
+
* @param scripts Object containing script names and their corresponding commands.
|
|
5
|
+
*/
|
|
6
|
+
export declare function addScriptsToPackageJson(packageJsonPath: string, scripts: Record<string, string>): void;
|
|
7
|
+
//# sourceMappingURL=addScriptsToPackageJson.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addScriptsToPackageJson.d.ts","sourceRoot":"","sources":["../../scripts/addScriptsToPackageJson.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,IAAI,CA4BN"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.addScriptsToPackageJson = addScriptsToPackageJson;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
/**
|
|
40
|
+
* Adds or updates a script in the "scripts" section of a package.json file.
|
|
41
|
+
* @param packageJsonPath Path to the package.json file.
|
|
42
|
+
* @param scripts Object containing script names and their corresponding commands.
|
|
43
|
+
*/
|
|
44
|
+
function addScriptsToPackageJson(packageJsonPath, scripts) {
|
|
45
|
+
const resolvedPath = path.resolve(packageJsonPath);
|
|
46
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
47
|
+
throw new Error(`package.json not found at path: ${resolvedPath}`);
|
|
48
|
+
}
|
|
49
|
+
const packageJsonRaw = fs.readFileSync(resolvedPath, 'utf-8');
|
|
50
|
+
let packageJson;
|
|
51
|
+
try {
|
|
52
|
+
packageJson = JSON.parse(packageJsonRaw);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
throw new Error(`Failed to parse package.json: ${err}`);
|
|
56
|
+
}
|
|
57
|
+
if (!packageJson.scripts || typeof packageJson.scripts !== 'object') {
|
|
58
|
+
packageJson.scripts = {};
|
|
59
|
+
}
|
|
60
|
+
for (const [scriptName, command] of Object.entries(scripts)) {
|
|
61
|
+
if (typeof scriptName !== 'string' || typeof command !== 'string') {
|
|
62
|
+
throw new Error(`Invalid script name or command: ${scriptName}, ${command}`);
|
|
63
|
+
}
|
|
64
|
+
packageJson.scripts[scriptName] = command;
|
|
65
|
+
}
|
|
66
|
+
// Write back with 2-space indentation
|
|
67
|
+
fs.writeFileSync(resolvedPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf-8');
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=addScriptsToPackageJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addScriptsToPackageJson.js","sourceRoot":"","sources":["../../scripts/addScriptsToPackageJson.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,0DA+BC;AAvCD,uCAAyB;AACzB,2CAA6B;AAE7B;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,eAAuB,EACvB,OAA+B;IAE/B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,WAAgB,CAAC;IACrB,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpE,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,mCAAmC,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAC5C,CAAC;IAED,sCAAsC;IACtC,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const STARTER_VERSION = "1.0.0";
|
|
2
|
+
export declare const STARTER_DESCRIPTION = "Node Express Suite Starter generates an NX monorepo MERN stack with React app, Express API, shared libraries, @digitaldefiance/node-express-suite, and @digitaldefiance/express-suite-react-components integration.";
|
|
3
|
+
export declare function printBanner(): void;
|
|
4
|
+
//# sourceMappingURL=albatross.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"albatross.d.ts","sourceRoot":"","sources":["../../scripts/albatross.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,mBAAmB,wNAAwN,CAAC;AAEzP,wBAAgB,WAAW,IAAI,IAAI,CA4BlC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STARTER_DESCRIPTION = exports.STARTER_VERSION = void 0;
|
|
4
|
+
exports.printBanner = printBanner;
|
|
5
|
+
exports.STARTER_VERSION = "1.0.0";
|
|
6
|
+
exports.STARTER_DESCRIPTION = "Node Express Suite Starter generates an NX monorepo MERN stack with React app, Express API, shared libraries, @digitaldefiance/node-express-suite, and @digitaldefiance/express-suite-react-components integration.";
|
|
7
|
+
function printBanner() {
|
|
8
|
+
console.log(`
|
|
9
|
+
\u001b[48;5;116m \u001b[m
|
|
10
|
+
\u001b[48;5;116m \u001b[m
|
|
11
|
+
\u001b[48;5;116m \u001b[m
|
|
12
|
+
\u001b[48;5;116m \u001b[m
|
|
13
|
+
\u001b[48;5;116m \u001b[38;5;254;48;5;152m▄\u001b[48;5;15m \u001b[38;5;15;48;5;254m▄\u001b[38;5;255;48;5;152m▄\u001b[38;5;250;48;5;116m▄\u001b[48;5;116m \u001b[m
|
|
14
|
+
\u001b[48;5;116m \u001b[38;5;255;48;5;116m▄\u001b[48;5;15m \u001b[38;5;15;48;5;240m▄▄\u001b[48;5;15m \u001b[38;5;187;48;5;223m▄\u001b[38;5;130;48;5;166m▄\u001b[38;5;166;48;5;167m▄▄▄▄\u001b[48;5;116m \u001b[m
|
|
15
|
+
\u001b[48;5;116m \u001b[48;5;255m \u001b[48;5;15m \u001b[38;5;255;48;5;15m▄▄\u001b[38;5;254;48;5;255m▄\u001b[38;5;116;48;5;116m▄\u001b[48;5;116m \u001b[m
|
|
16
|
+
\u001b[48;5;116m \u001b[38;5;152;48;5;116m▄\u001b[38;5;15;48;5;255m▄\u001b[48;5;15m \u001b[38;5;15;48;5;255m▄\u001b[38;5;255;48;5;255m▄\u001b[48;5;254m \u001b[48;5;116m \u001b[m
|
|
17
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;116m▄\u001b[38;5;247;48;5;116m▄▄▄▄▄▄▄▄▄▄▄▄▄\u001b[38;5;251;48;5;255m▄\u001b[48;5;15m \u001b[38;5;15;48;5;255m▄\u001b[48;5;254m \u001b[48;5;116m \u001b[m
|
|
18
|
+
\u001b[48;5;116m \u001b[38;5;242;48;5;116m▄\u001b[38;5;237;48;5;116m▄\u001b[38;5;237;48;5;238m▄▄\u001b[48;5;237m \u001b[38;5;237;48;5;237m▄\u001b[38;5;237;48;5;252m▄\u001b[38;5;249;48;5;15m▄\u001b[48;5;15m \u001b[38;5;255;48;5;254m▄\u001b[48;5;116m \u001b[m
|
|
19
|
+
\u001b[48;5;116m \u001b[38;5;109;48;5;109m▄\u001b[38;5;242;48;5;243m▄\u001b[38;5;237;48;5;109m▄▄\u001b[38;5;237;48;5;236m▄\u001b[38;5;236;48;5;236m▄\u001b[38;5;236;48;5;237m▄▄▄\u001b[48;5;237m \u001b[48;5;15m \u001b[48;5;255m \u001b[48;5;116m \u001b[m
|
|
20
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;66m▄\u001b[38;5;116;48;5;238m▄\u001b[38;5;246;48;5;237m▄\u001b[38;5;239;48;5;237m▄\u001b[38;5;239;48;5;236m▄\u001b[38;5;237;48;5;236m▄▄\u001b[38;5;241;48;5;236m▄\u001b[38;5;238;48;5;236m▄\u001b[38;5;236;48;5;236m▄▄\u001b[38;5;236;48;5;237m▄▄▄▄\u001b[38;5;237;48;5;237m▄▄▄▄▄▄\u001b[38;5;188;48;5;237m▄\u001b[38;5;15;48;5;251m▄\u001b[48;5;15m \u001b[38;5;15;48;5;255m▄\u001b[38;5;152;48;5;116m▄\u001b[48;5;116m \u001b[m
|
|
21
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;109m▄\u001b[38;5;116;48;5;253m▄\u001b[38;5;255;48;5;255m▄\u001b[38;5;15;48;5;255m▄\u001b[38;5;15;48;5;188m▄\u001b[38;5;15;48;5;236m▄\u001b[38;5;248;48;5;236m▄\u001b[38;5;245;48;5;236m▄\u001b[48;5;236m \u001b[38;5;240;48;5;236m▄\u001b[38;5;15;48;5;253m▄\u001b[48;5;15m \u001b[38;5;255;48;5;255m▄\u001b[38;5;116;48;5;116m▄\u001b[48;5;116m \u001b[m
|
|
22
|
+
\u001b[48;5;116m \u001b[38;5;152;48;5;254m▄\u001b[38;5;254;48;5;15m▄\u001b[38;5;255;48;5;15m▄▄\u001b[38;5;15;48;5;15m▄\u001b[48;5;15m \u001b[38;5;15;48;5;238m▄\u001b[38;5;252;48;5;236m▄\u001b[38;5;251;48;5;236m▄▄\u001b[38;5;255;48;5;238m▄\u001b[48;5;15m \u001b[38;5;152;48;5;255m▄\u001b[48;5;116m \u001b[m
|
|
23
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;116m▄\u001b[38;5;116;48;5;188m▄\u001b[38;5;116;48;5;254m▄\u001b[38;5;254;48;5;254m▄▄\u001b[38;5;254;48;5;255m▄▄\u001b[38;5;255;48;5;255m▄\u001b[48;5;15m \u001b[38;5;15;48;5;15m▄\u001b[38;5;116;48;5;255m▄\u001b[38;5;116;48;5;152m▄\u001b[48;5;116m \u001b[m
|
|
24
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;152m▄\u001b[38;5;152;48;5;152m▄\u001b[38;5;251;48;5;254m▄\u001b[38;5;254;48;5;255m▄\u001b[48;5;15m \u001b[38;5;255;48;5;15m▄\u001b[38;5;116;48;5;15m▄\u001b[38;5;116;48;5;152m▄▄\u001b[48;5;116m \u001b[m
|
|
25
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;251m▄\u001b[38;5;188;48;5;254m▄\u001b[48;5;15m \u001b[38;5;255;48;5;15m▄\u001b[38;5;116;48;5;255m▄\u001b[38;5;116;48;5;116m▄\u001b[48;5;116m \u001b[m
|
|
26
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;109m▄\u001b[38;5;8;48;5;102m▄\u001b[38;5;246;48;5;248m▄\u001b[38;5;250;48;5;116m▄\u001b[48;5;116m \u001b[m
|
|
27
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;116m▄\u001b[38;5;109;48;5;116m▄▄▄▄▄▄▄▄\u001b[38;5;109;48;5;247m▄\u001b[38;5;246;48;5;245m▄\u001b[38;5;247;48;5;246m▄\u001b[38;5;8;48;5;8m▄▄\u001b[38;5;8;48;5;245m▄\u001b[38;5;109;48;5;109m▄\u001b[38;5;109;48;5;116m▄▄▄▄▄\u001b[38;5;116;48;5;116m▄▄\u001b[48;5;116m \u001b[m
|
|
28
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;109m▄▄\u001b[48;5;109m \u001b[38;5;109;48;5;109m▄\u001b[38;5;109;48;5;248m▄▄▄▄▄\u001b[38;5;109;48;5;109m▄\u001b[48;5;109m \u001b[38;5;110;48;5;109m▄\u001b[38;5;116;48;5;109m▄\u001b[38;5;116;48;5;116m▄\u001b[48;5;116m \u001b[m
|
|
29
|
+
\u001b[48;5;116m \u001b[38;5;116;48;5;110m▄▄▄▄▄▄▄▄▄▄▄▄\u001b[38;5;116;48;5;116m▄\u001b[48;5;116m \u001b[m
|
|
30
|
+
\u001b[48;5;116m \u001b[m
|
|
31
|
+
\u001b[48;5;116m \u001b[m
|
|
32
|
+
\u001b[48;5;116m \u001b[m
|
|
33
|
+
`);
|
|
34
|
+
console.log(`\nNode Express Suite Starter (v${exports.STARTER_VERSION})\n\n${exports.STARTER_DESCRIPTION}\n`);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=albatross.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"albatross.js","sourceRoot":"","sources":["../../scripts/albatross.ts"],"names":[],"mappings":";;;AAGA,kCA4BC;AA/BY,QAAA,eAAe,GAAG,OAAO,CAAC;AAC1B,QAAA,mBAAmB,GAAG,qNAAqN,CAAC;AAEzP,SAAgB,WAAW;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyBf,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,kCAAkC,uBAAe,QAAQ,2BAAmB,IAAI,CAAC,CAAC;AAC9F,CAAC"}
|