@shohaghinfo/aerojs 0.1.2 → 0.2.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.
Files changed (53) hide show
  1. package/README.md +181 -7
  2. package/dist/cli/runner.d.ts.map +1 -1
  3. package/dist/cli/runner.js +16 -2
  4. package/dist/cli/runner.js.map +1 -1
  5. package/dist/http/http.d.ts +44 -0
  6. package/dist/http/http.d.ts.map +1 -0
  7. package/dist/http/http.js +132 -0
  8. package/dist/http/http.js.map +1 -0
  9. package/dist/http/index.d.ts +8 -0
  10. package/dist/http/index.d.ts.map +1 -0
  11. package/dist/http/index.js +8 -0
  12. package/dist/http/index.js.map +1 -0
  13. package/dist/http/request-builder.d.ts +48 -0
  14. package/dist/http/request-builder.d.ts.map +1 -0
  15. package/dist/http/request-builder.js +186 -0
  16. package/dist/http/request-builder.js.map +1 -0
  17. package/dist/http/response.d.ts +34 -0
  18. package/dist/http/response.d.ts.map +1 -0
  19. package/dist/http/response.js +77 -0
  20. package/dist/http/response.js.map +1 -0
  21. package/dist/index.d.ts +3 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +3 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/mail/drivers/smtp-mail-driver.d.ts +39 -0
  26. package/dist/mail/drivers/smtp-mail-driver.d.ts.map +1 -0
  27. package/dist/mail/drivers/smtp-mail-driver.js +318 -0
  28. package/dist/mail/drivers/smtp-mail-driver.js.map +1 -0
  29. package/dist/mail/index.d.ts +1 -0
  30. package/dist/mail/index.d.ts.map +1 -1
  31. package/dist/mail/index.js +1 -0
  32. package/dist/mail/index.js.map +1 -1
  33. package/dist/mail/mailer.d.ts +20 -3
  34. package/dist/mail/mailer.d.ts.map +1 -1
  35. package/dist/mail/mailer.js +28 -1
  36. package/dist/mail/mailer.js.map +1 -1
  37. package/dist/queue/drivers/redis-queue-driver.d.ts +20 -0
  38. package/dist/queue/drivers/redis-queue-driver.d.ts.map +1 -1
  39. package/dist/queue/drivers/redis-queue-driver.js +92 -33
  40. package/dist/queue/drivers/redis-queue-driver.js.map +1 -1
  41. package/dist/queue/queue-manager.d.ts +4 -1
  42. package/dist/queue/queue-manager.d.ts.map +1 -1
  43. package/dist/queue/queue-manager.js +8 -1
  44. package/dist/queue/queue-manager.js.map +1 -1
  45. package/dist/security/index.d.ts +1 -1
  46. package/dist/security/index.d.ts.map +1 -1
  47. package/dist/security/index.js +1 -1
  48. package/dist/security/index.js.map +1 -1
  49. package/dist/security/rate-limiter.d.ts +20 -0
  50. package/dist/security/rate-limiter.d.ts.map +1 -1
  51. package/dist/security/rate-limiter.js +85 -0
  52. package/dist/security/rate-limiter.js.map +1 -1
  53. package/package.json +6 -2
package/README.md CHANGED
@@ -5,7 +5,8 @@
5
5
  ### The Blazing-Fast, Zero-Dependency Full-Stack Web Framework for Node.js
6
6
 
7
7
  [![CI](https://github.com/atifsoftware/AeroJS/actions/workflows/ci.yml/badge.svg)](https://github.com/atifsoftware/AeroJS/actions/workflows/ci.yml)
8
- [![NPM Version](https://img.shields.io/badge/npm-v0.1.0-blue.svg)](https://npmjs.com/package/aerojs)
8
+ [![NPM Version](https://img.shields.io/npm/v/@shohaghinfo/aerojs.svg?style=flat-square&color=blue)](https://www.npmjs.com/package/@shohaghinfo/aerojs)
9
+ [![NPM Downloads](https://img.shields.io/npm/dm/@shohaghinfo/aerojs.svg?style=flat-square&color=green)](https://www.npmjs.com/package/@shohaghinfo/aerojs)
9
10
  [![Coverage: 88%+](https://img.shields.io/badge/coverage-88%25-brightgreen.svg)](package.json)
10
11
  [![Zero Dependencies](https://img.shields.io/badge/dependencies-0-success.svg)](package.json)
11
12
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-darkgreen.svg)](package.json)
@@ -57,6 +58,10 @@
57
58
  28. [Background Queue & Mail System (`Queue`, `Mail`)](#28-background-queue--mail-system-queue-mail)
58
59
  29. [OpenAPI 3.0 & Interactive Swagger UI (`useSwagger`)](#29-openapi-30--interactive-swagger-ui-useswagger)
59
60
  30. [Aero Command-Line Interface (`aero` CLI)](#30-aero-command-line-interface-aero-cli)
61
+ 31. [SMTP Mail Driver (`SmtpMailDriver`, `Mail`)](#31-smtp-mail-driver-smtpmaildriver-mail)
62
+ 32. [Distributed Redis Rate Limiter (`RedisRateLimitStore`)](#32-distributed-redis-rate-limiter-redisratelimitstore)
63
+ 33. [Redis Queue Driver with DLQ (`RedisQueueDriver`)](#33-redis-queue-driver-with-dlq-redisqueuedriver)
64
+ 34. [Fluent HTTP Client (`Http`, `HttpResponse`)](#34-fluent-http-client-http-httpresponse)
60
65
  - [Performance, Size & Advantages](#-performance-size--advantages)
61
66
  - [Comparison Matrix](#-comparison-matrix)
62
67
  - [License](#-license)
@@ -146,13 +151,50 @@ Aero is engineered from first principles to combine the best architectural conce
146
151
 
147
152
  ## 📦 Installation
148
153
 
154
+ ### Option 1: Create a New Project (Recommended)
155
+
156
+ Scaffold a complete production-ready application in seconds using `npx`:
157
+
149
158
  ```bash
150
- npm install aerojs
159
+ # Interactive project creation
160
+ npx @shohaghinfo/aerojs new my-app
161
+
162
+ # Or scaffold in current directory
163
+ npx @shohaghinfo/aerojs init
151
164
  ```
152
165
 
153
- Requirements:
154
- - Node.js >= 20.0.0
155
- - ESM project (`"type": "module"` in `package.json`)
166
+ ### Option 2: Install into an Existing Project
167
+
168
+ Add AeroJS to your project with your favorite package manager:
169
+
170
+ ```bash
171
+ # npm
172
+ npm install @shohaghinfo/aerojs
173
+
174
+ # pnpm
175
+ pnpm add @shohaghinfo/aerojs
176
+
177
+ # yarn
178
+ yarn add @shohaghinfo/aerojs
179
+
180
+ # bun
181
+ bun add @shohaghinfo/aerojs
182
+ ```
183
+
184
+ ### Option 3: Global CLI Installation
185
+
186
+ ```bash
187
+ npm install -g @shohaghinfo/aerojs
188
+
189
+ # Now you can use the 'aero' command anywhere:
190
+ aero new my-app
191
+ # or
192
+ aerojs new my-app
193
+ ```
194
+
195
+ #### Requirements:
196
+ - **Node.js**: `>= 20.0.0`
197
+ - **Module System**: ESM (`"type": "module"` in `package.json`)
156
198
 
157
199
  ---
158
200
 
@@ -1145,7 +1187,7 @@ Unlike legacy Node.js frameworks that ship with bloated dependency trees, AeroJS
1145
1187
  - Ideal for **Serverless environments** (AWS Lambda, Cloudflare Containers, Vercel Serverless, Google Cloud Run) and autoscaling Docker microservices.
1146
1188
 
1147
1189
  #### 🏎️ Lightning-Fast CI/CD Deployments
1148
- - `npm install aero` downloads only a few kilobytes and completes in **1–2 seconds**, drastically cutting down pipeline build times and bandwidth costs.
1190
+ - `npm install @shohaghinfo/aerojs` downloads only a few kilobytes and completes in **1–2 seconds**, drastically cutting down pipeline build times and bandwidth costs.
1149
1191
 
1150
1192
  #### 🌐 Unified Full-Stack Architecture
1151
1193
  - Eliminates context switching and multi-repository overhead: build **REST APIs**, **React/Vue 3 SPAs (Inertia.js)**, and traditional **SSR Views (Edge.js/EJS)** in a single cohesive codebase.
@@ -1155,9 +1197,141 @@ Unlike legacy Node.js frameworks that ship with bloated dependency trees, AeroJS
1155
1197
 
1156
1198
  ---
1157
1199
 
1200
+ ### 31. SMTP Mail Driver (`SmtpMailDriver`, `Mail`)
1201
+
1202
+ AeroJS includes a **zero-dependency native SMTP transport** directly built on Node.js `net` and `tls` sockets. Supports SSL (port 465), STARTTLS (port 587/25), AUTH LOGIN, multipart HTML & plain text, and base64 attachments.
1203
+
1204
+ ```typescript
1205
+ import { Mail, MailMessage, SmtpMailDriver } from '@shohaghinfo/aerojs';
1206
+
1207
+ // 1. Configure in MailManager
1208
+ Mail.configure({
1209
+ default: 'smtp',
1210
+ mailers: {
1211
+ smtp: {
1212
+ driver: 'smtp',
1213
+ host: 'smtp.mailtrap.io',
1214
+ port: 587,
1215
+ auth: {
1216
+ user: process.env.SMTP_USER!,
1217
+ pass: process.env.SMTP_PASS!,
1218
+ },
1219
+ },
1220
+ },
1221
+ });
1222
+
1223
+ // 2. Dispatch with attachments & HTML
1224
+ await Mail.send((msg) => {
1225
+ msg.to('patient@example.com')
1226
+ .from('billing@hospital.org', 'Hospital Billing')
1227
+ .subject('Monthly Statement & Invoice')
1228
+ .html('<h1>Hello!</h1><p>Please find your medical invoice attached.</p>')
1229
+ .attach('invoice.pdf', pdfBuffer, 'application/pdf');
1230
+ });
1231
+ ```
1232
+
1233
+ ---
1234
+
1235
+ ### 32. Distributed Redis Rate Limiter (`RedisRateLimitStore`)
1236
+
1237
+ For distributed production deployments running behind reverse proxies or multiple server nodes, `RedisRateLimitStore` synchronizes rate limit counters across all instances via atomic Redis commands.
1238
+
1239
+ ```typescript
1240
+ import { Aero, rateLimit, RedisRateLimitStore, RedisClient } from '@shohaghinfo/aerojs';
1241
+
1242
+ const app = new Aero();
1243
+ const redis = new RedisClient({ host: '127.0.0.1', port: 6379 });
1244
+
1245
+ app.use(
1246
+ rateLimit({
1247
+ windowMs: 60_000, // 1 minute
1248
+ max: 100, // 100 requests per minute
1249
+ store: new RedisRateLimitStore({
1250
+ client: redis,
1251
+ prefix: 'rl:api:',
1252
+ fallbackToMemory: true, // Gracefully handles Redis disconnection
1253
+ }),
1254
+ })
1255
+ );
1256
+ ```
1257
+
1258
+ ---
1259
+
1260
+ ### 33. Redis Queue Driver with DLQ (`RedisQueueDriver`)
1261
+
1262
+ AeroJS provides a production-grade background job queue backed by Redis with FIFO execution (`LPUSH`/`RPOP`), delayed scheduling (`ZADD`), worker reservation tracking, retry backoff, and a Dead Letter Queue (DLQ).
1263
+
1264
+ ```typescript
1265
+ import { Queue, Job, RedisQueueDriver, RedisClient } from '@shohaghinfo/aerojs';
1266
+
1267
+ // 1. Configure Redis Queue Connection
1268
+ Queue.configure({
1269
+ default: 'redis',
1270
+ connections: {
1271
+ redis: {
1272
+ driver: 'redis',
1273
+ redis: new RedisClient({ host: '127.0.0.1', port: 6379 }),
1274
+ },
1275
+ },
1276
+ });
1277
+
1278
+ // 2. Define Background Job
1279
+ class ProcessPayrollJob extends Job {
1280
+ public async handle(): Promise<void> {
1281
+ console.log(`Processing payroll batch #${this.data.batchId}...`);
1282
+ }
1283
+ }
1284
+ Queue.registerJob('ProcessPayrollJob', ProcessPayrollJob);
1285
+
1286
+ // 3. Dispatch Job (Immediate or Delayed)
1287
+ await Queue.dispatch(new ProcessPayrollJob({ batchId: 402 }), {
1288
+ delay: 10, // Wait 10 seconds before execution
1289
+ });
1290
+
1291
+ // 4. Start Worker
1292
+ const worker = Queue.createWorker({ concurrency: 5 });
1293
+ await worker.start();
1294
+ ```
1295
+
1296
+ ---
1297
+
1298
+ ### 34. Fluent HTTP Client (`Http`, `HttpResponse`)
1299
+
1300
+ AeroJS ships with a powerful, zero-dependency fluent HTTP client built on native `fetch`. It supports automatic JSON serialization, query string formatting, Bearer/Basic authentication, timeouts, retries, and comprehensive testing fakes.
1301
+
1302
+ ```typescript
1303
+ import { Http } from '@shohaghinfo/aerojs';
1304
+
1305
+ // 1. Fluent API calls
1306
+ const response = await Http.baseUrl('https://api.hospital-network.com/v1')
1307
+ .withToken(process.env.API_KEY!)
1308
+ .withQuery({ status: 'active', limit: 50 })
1309
+ .timeout(5000)
1310
+ .retry(3, 200)
1311
+ .get('/patients');
1312
+
1313
+ if (response.successful) {
1314
+ const patients = response.json();
1315
+ console.log('Patients fetched:', patients);
1316
+ }
1317
+
1318
+ // 2. Testing Fakes (Mocking external services)
1319
+ Http.fake({
1320
+ '/patients': [{ id: 1, name: 'Alice Smith' }],
1321
+ '/billing': Http.response({ invoiceId: 'INV-101' }, 201),
1322
+ });
1323
+
1324
+ const res = await Http.post('https://api.hospital-network.com/v1/billing', { amount: 500 });
1325
+ expect(res.status).toBe(201);
1326
+
1327
+ Http.assertSent((req) => req.url.includes('/billing') && req.method === 'POST');
1328
+ ```
1329
+
1330
+ ---
1331
+
1158
1332
  ## 📊 Comparison Matrix
1159
1333
 
1160
- | Feature | Express | Koa | Fastify | AdonisJS | **Aero** |
1334
+ | Feature | Express | Koa | Fastify | AdonisJS | **AeroJS** |
1161
1335
  |---|:---:|:---:|:---:|:---:|:---:|
1162
1336
  | **Zero Runtime Dependencies** | ❌ (30+) | ❌ (20+) | ❌ (15+) | ❌ (50+) | **✅ ZERO** |
1163
1337
  | **Radix Tree Routing** | ❌ | ❌ | ✅ | ❌ | **✅ O(k)** |
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,qBAAa,OAAO;IAClB,OAAc,OAAO,SAAW;WAEZ,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;WAmLlE,SAAS,IAAI,IAAI;CA+BhC"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,qBAAa,OAAO;IAClB,OAAc,OAAO,SAAwB;WAEzB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;WAmLlE,SAAS,IAAI,IAAI;CA+BhC"}
@@ -5,13 +5,27 @@
5
5
  import fs from 'node:fs';
6
6
  import path from 'node:path';
7
7
  import { pathToFileURL } from 'node:url';
8
+ import { fileURLToPath } from 'node:url';
8
9
  import { makeController, makeModel, makeMigration, makeMiddleware, makeSeeder } from './commands/make.js';
9
10
  import { initProject } from './commands/init.js';
10
11
  import { createNewProject } from './commands/new.js';
11
12
  import { encryptEnv, decryptEnv } from './commands/vault.js';
12
13
  import { Migrator } from '../database/migrator.js';
14
+ function readPackageVersion() {
15
+ try {
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = path.dirname(__filename);
18
+ // dist/cli/runner.js → ../../package.json
19
+ const pkgPath = path.resolve(__dirname, '../../package.json');
20
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
21
+ return pkg.version ?? '0.1.2';
22
+ }
23
+ catch {
24
+ return '0.1.2';
25
+ }
26
+ }
13
27
  export class AeroCLI {
14
- static version = '0.1.0';
28
+ static version = readPackageVersion();
15
29
  static async run(argv = process.argv.slice(2)) {
16
30
  const command = argv[0];
17
31
  if (!command || command === '--help' || command === '-h' || command === 'help') {
@@ -186,7 +200,7 @@ Options:
186
200
 
187
201
  Available Commands:
188
202
  init [dir] Scaffold a complete production AeroJS application
189
- new <name> Create a new AeroJS application in a new directory
203
+ new <name> [--template] Create a new AeroJS app (api-starter, react-inertia, vue-inertia, hospital-erp)
190
204
 
191
205
  make:controller <name> Create a new RESTful controller class
192
206
  make:model <name> [-m] Create a new Active Record Model (optionally with migration)
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,OAAO,OAAO;IACX,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAEzB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC/E,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC;YACH,QAAQ,OAAO,EAAE,CAAC;gBAChB,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;wBAChF,OAAO,CAAC,CAAC;oBACX,CAAC;oBAED,IAAI,QAAQ,GAAG,WAAW,CAAC;oBAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;oBACvF,IAAI,WAAW,EAAE,CAAC;wBAChB,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;oBACtD,CAAC;oBAED,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACxC,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;oBACjC,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,uDAAuD,SAAS,MAAM,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC;oBACtH,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBAC3B,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;oBACtC,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;oBAChC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBAClC,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;oBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;wBAC7F,OAAO,CAAC,CAAC;oBACX,CAAC;oBACD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;oBAC7C,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;wBACnF,OAAO,CAAC,CAAC;oBACX,CAAC;oBACD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;oBACzE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;oBACzD,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;oBACjD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;wBACtB,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;oBAC3D,CAAC;oBACD,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,aAAa,CAAC,CAAC,CAAC;oBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;wBAC3F,OAAO,CAAC,CAAC;oBACX,CAAC;oBACD,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;oBAC/C,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;oBAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oCAAoC,CAAC,CAAC;oBACrF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oCAAoC,CAAC,CAAC;oBAEvF,IAAI,UAAU,GAAG,EAAE,CAAC;oBACpB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC7B,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;oBAC/C,CAAC;yBAAM,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBACtC,UAAU,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;oBACjD,CAAC;yBAAM,CAAC;wBACL,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;wBACxF,OAAO,CAAC,CAAC;oBACZ,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;oBACxC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,CAAC;oBAE5D,IAAI,CAAC,WAAW,EAAE,CAAC;wBAChB,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;wBACvE,OAAO,CAAC,CAAC;oBACZ,CAAC;oBAED,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;oBACjC,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;oBACxD,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;oBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;wBACzG,OAAO,CAAC,CAAC;oBACX,CAAC;oBACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;oBACjC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;oBAC5C,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;oBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;wBAC7F,OAAO,CAAC,CAAC;oBACX,CAAC;oBACD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;oBAC7C,OAAO,CAAC,CAAC;gBACX,CAAC;gBAEO,KAAK,aAAa,CAAC,CAAC,CAAC;oBAC3B,UAAU,EAAE,CAAC;oBACb,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,aAAa,CAAC,CAAC,CAAC;oBACnB,UAAU,EAAE,CAAC;oBACb,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAChC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,CAAC,MAAM,uBAAuB,CAAC,CAAC;oBAC9E,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;oBACvC,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;oBACpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBACnC,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;oBACtB,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAChC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,qBAAqB,EAAE,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;oBACzD,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5D,CAAC;oBACD,OAAO,CAAC,CAAC;gBACX,CAAC;gBAED;oBACE,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,wDAAwD,CAAC,CAAC;oBACpG,OAAO,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,4BAA4B,OAAO,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;YAC3E,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,SAAS;QACrB,OAAO,CAAC,GAAG,CAAC;gDACgC,IAAI,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B3D,CAAC,CAAC;IACD,CAAC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @file http.ts
3
+ * @description Central Http client facade and fluent API for AeroJS.
4
+ */
5
+ import { HttpRequestBuilder, type HttpFakeHandler, type RequestSentRecord } from './request-builder.js';
6
+ import { HttpResponse } from './response.js';
7
+ export declare class Http {
8
+ /**
9
+ * Creates a new fluent HTTP request builder.
10
+ */
11
+ static create(): HttpRequestBuilder;
12
+ static baseUrl(url: string): HttpRequestBuilder;
13
+ static withToken(token: string, type?: string): HttpRequestBuilder;
14
+ static withBasicAuth(username: string, password?: string): HttpRequestBuilder;
15
+ static withHeaders(headers: Record<string, string>): HttpRequestBuilder;
16
+ static withQuery(query: Record<string, any>): HttpRequestBuilder;
17
+ static timeout(ms: number): HttpRequestBuilder;
18
+ static retry(times?: number, delayMs?: number): HttpRequestBuilder;
19
+ static acceptJson(): HttpRequestBuilder;
20
+ static asJson(): HttpRequestBuilder;
21
+ static asForm(): HttpRequestBuilder;
22
+ static get(url: string, query?: Record<string, any>): Promise<HttpResponse>;
23
+ static post(url: string, data?: any): Promise<HttpResponse>;
24
+ static put(url: string, data?: any): Promise<HttpResponse>;
25
+ static patch(url: string, data?: any): Promise<HttpResponse>;
26
+ static delete(url: string, data?: any): Promise<HttpResponse>;
27
+ static head(url: string): Promise<HttpResponse>;
28
+ /**
29
+ * Helper to construct a synthetic mock HttpResponse.
30
+ */
31
+ static response(body?: any, status?: number, headers?: Record<string, string>): HttpResponse;
32
+ /**
33
+ * Intercepts outgoing requests for testing assertions.
34
+ */
35
+ static fake(patternOrHandler?: string | RegExp | HttpFakeHandler | Record<string, any>, handler?: HttpFakeHandler): void;
36
+ /**
37
+ * Resets all fakes and recorded requests.
38
+ */
39
+ static reset(): void;
40
+ static getSent(): RequestSentRecord[];
41
+ static assertSent(callback: (request: RequestSentRecord) => boolean): void;
42
+ static assertNotSent(callback: (request: RequestSentRecord) => boolean): void;
43
+ }
44
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/http/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,qBAAa,IAAI;IACf;;OAEG;WACW,MAAM,IAAI,kBAAkB;WAI5B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;WAIxC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAW,GAAG,kBAAkB;WAI7D,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,kBAAkB;WAIlE,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,kBAAkB;WAIhE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,kBAAkB;WAIzD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB;WAIvC,KAAK,CAAC,KAAK,SAAI,EAAE,OAAO,SAAM,GAAG,kBAAkB;WAInD,UAAU,IAAI,kBAAkB;WAIhC,MAAM,IAAI,kBAAkB;WAI5B,MAAM,IAAI,kBAAkB;WAM5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;WAIpE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;WAIpD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;WAInD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;WAIrD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;WAItD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAMtD;;OAEG;WACW,QAAQ,CAAC,IAAI,GAAE,GAAQ,EAAE,MAAM,SAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,YAAY;IASxG;;OAEG;WACW,IAAI,CAChB,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1E,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI;IA8BP;;OAEG;WACW,KAAK,IAAI,IAAI;WAIb,OAAO,IAAI,iBAAiB,EAAE;WAI9B,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,GAAG,IAAI;WAQnE,aAAa,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,GAAG,IAAI;CAOrF"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @file http.ts
3
+ * @description Central Http client facade and fluent API for AeroJS.
4
+ */
5
+ import { HttpRequestBuilder } from './request-builder.js';
6
+ import { HttpResponse } from './response.js';
7
+ export class Http {
8
+ /**
9
+ * Creates a new fluent HTTP request builder.
10
+ */
11
+ static create() {
12
+ return new HttpRequestBuilder();
13
+ }
14
+ static baseUrl(url) {
15
+ return new HttpRequestBuilder().baseUrl(url);
16
+ }
17
+ static withToken(token, type = 'Bearer') {
18
+ return new HttpRequestBuilder().withToken(token, type);
19
+ }
20
+ static withBasicAuth(username, password = '') {
21
+ return new HttpRequestBuilder().withBasicAuth(username, password);
22
+ }
23
+ static withHeaders(headers) {
24
+ return new HttpRequestBuilder().withHeaders(headers);
25
+ }
26
+ static withQuery(query) {
27
+ return new HttpRequestBuilder().withQuery(query);
28
+ }
29
+ static timeout(ms) {
30
+ return new HttpRequestBuilder().timeout(ms);
31
+ }
32
+ static retry(times = 3, delayMs = 100) {
33
+ return new HttpRequestBuilder().retry(times, delayMs);
34
+ }
35
+ static acceptJson() {
36
+ return new HttpRequestBuilder().acceptJson();
37
+ }
38
+ static asJson() {
39
+ return new HttpRequestBuilder().asJson();
40
+ }
41
+ static asForm() {
42
+ return new HttpRequestBuilder().asForm();
43
+ }
44
+ // --- Convenience HTTP Verbs ---
45
+ static get(url, query) {
46
+ return new HttpRequestBuilder().get(url, query);
47
+ }
48
+ static post(url, data) {
49
+ return new HttpRequestBuilder().post(url, data);
50
+ }
51
+ static put(url, data) {
52
+ return new HttpRequestBuilder().put(url, data);
53
+ }
54
+ static patch(url, data) {
55
+ return new HttpRequestBuilder().patch(url, data);
56
+ }
57
+ static delete(url, data) {
58
+ return new HttpRequestBuilder().delete(url, data);
59
+ }
60
+ static head(url) {
61
+ return new HttpRequestBuilder().head(url);
62
+ }
63
+ // --- Testing Utilities ---
64
+ /**
65
+ * Helper to construct a synthetic mock HttpResponse.
66
+ */
67
+ static response(body = {}, status = 200, headers = {}) {
68
+ const rawBody = typeof body === 'string' ? body : JSON.stringify(body);
69
+ const headerObj = new Headers(headers);
70
+ if (!headerObj.has('content-type') && typeof body === 'object') {
71
+ headerObj.set('content-type', 'application/json');
72
+ }
73
+ return new HttpResponse(status, status === 200 ? 'OK' : 'Mock Response', headerObj, rawBody);
74
+ }
75
+ /**
76
+ * Intercepts outgoing requests for testing assertions.
77
+ */
78
+ static fake(patternOrHandler, handler) {
79
+ if (typeof patternOrHandler === 'object' && !(patternOrHandler instanceof RegExp)) {
80
+ // Map of URL -> response or mock data
81
+ const routes = patternOrHandler;
82
+ HttpRequestBuilder.setFake((url) => {
83
+ for (const [routePattern, mockResponse] of Object.entries(routes)) {
84
+ if (url.includes(routePattern) || routePattern === '*') {
85
+ if (mockResponse instanceof HttpResponse) {
86
+ return mockResponse;
87
+ }
88
+ return Http.response(mockResponse);
89
+ }
90
+ }
91
+ return Http.response({}, 404);
92
+ });
93
+ return;
94
+ }
95
+ if (typeof patternOrHandler === 'function') {
96
+ HttpRequestBuilder.setFake(patternOrHandler);
97
+ }
98
+ else if (typeof patternOrHandler === 'string' || patternOrHandler instanceof RegExp) {
99
+ if (handler) {
100
+ HttpRequestBuilder.setFake(patternOrHandler, handler);
101
+ }
102
+ }
103
+ else {
104
+ // Default stub response if called with Http.fake()
105
+ HttpRequestBuilder.setFake(() => Http.response({ mocked: true }, 200));
106
+ }
107
+ }
108
+ /**
109
+ * Resets all fakes and recorded requests.
110
+ */
111
+ static reset() {
112
+ HttpRequestBuilder.clearFakes();
113
+ }
114
+ static getSent() {
115
+ return HttpRequestBuilder.getSent();
116
+ }
117
+ static assertSent(callback) {
118
+ const sent = HttpRequestBuilder.getSent();
119
+ const match = sent.some(callback);
120
+ if (!match) {
121
+ throw new Error(`Expected HTTP request matching condition was not sent. Total requests sent: ${sent.length}`);
122
+ }
123
+ }
124
+ static assertNotSent(callback) {
125
+ const sent = HttpRequestBuilder.getSent();
126
+ const match = sent.some(callback);
127
+ if (match) {
128
+ throw new Error('Unexpected HTTP request matching condition was sent.');
129
+ }
130
+ }
131
+ }
132
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/http/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file index.ts
3
+ * @description AeroJS Fluent HTTP Client Module.
4
+ */
5
+ export * from './response.js';
6
+ export * from './request-builder.js';
7
+ export * from './http.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file index.ts
3
+ * @description AeroJS Fluent HTTP Client Module.
4
+ */
5
+ export * from './response.js';
6
+ export * from './request-builder.js';
7
+ export * from './http.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @file request-builder.ts
3
+ * @description Fluent Request Builder for AeroJS HTTP client.
4
+ */
5
+ import { HttpResponse } from './response.js';
6
+ export type HttpFakeHandler = (url: string, init?: RequestInit) => HttpResponse | Promise<HttpResponse>;
7
+ export interface RequestSentRecord {
8
+ url: string;
9
+ method: string;
10
+ headers: Record<string, string>;
11
+ body?: any;
12
+ }
13
+ export declare class HttpRequestBuilder {
14
+ private _baseUrl;
15
+ private _headers;
16
+ private _query;
17
+ private _timeoutMs;
18
+ private _retryCount;
19
+ private _retryDelayMs;
20
+ private _contentType;
21
+ private static fakeHandlers;
22
+ private static defaultFakeHandler?;
23
+ private static sentRequests;
24
+ static setFake(pattern: string | RegExp | HttpFakeHandler, handler?: HttpFakeHandler): void;
25
+ static clearFakes(): void;
26
+ static recordSent(record: RequestSentRecord): void;
27
+ static getSent(): RequestSentRecord[];
28
+ baseUrl(url: string): this;
29
+ withHeaders(headers: Record<string, string>): this;
30
+ withToken(token: string, type?: string): this;
31
+ withBasicAuth(username: string, password?: string): this;
32
+ accept(mimeType: string): this;
33
+ acceptJson(): this;
34
+ asJson(): this;
35
+ asForm(): this;
36
+ withQuery(query: Record<string, any>): this;
37
+ timeout(ms: number): this;
38
+ retry(times?: number, delayMs?: number): this;
39
+ get(url: string, query?: Record<string, any>): Promise<HttpResponse>;
40
+ post(url: string, data?: any): Promise<HttpResponse>;
41
+ put(url: string, data?: any): Promise<HttpResponse>;
42
+ patch(url: string, data?: any): Promise<HttpResponse>;
43
+ delete(url: string, data?: any): Promise<HttpResponse>;
44
+ head(url: string): Promise<HttpResponse>;
45
+ send(method: string, path: string, data?: any): Promise<HttpResponse>;
46
+ private findFake;
47
+ }
48
+ //# sourceMappingURL=request-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-builder.d.ts","sourceRoot":"","sources":["../../src/http/request-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAExG,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAEd;IACF,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAO;IAC5B,OAAO,CAAC,YAAY,CAAsB;IAG1C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAoD;IAC/E,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAkB;IACpD,OAAO,CAAC,MAAM,CAAC,YAAY,CAA2B;WAExC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;WAQpF,UAAU,IAAI,IAAI;WAMlB,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;WAI3C,OAAO,IAAI,iBAAiB,EAAE;IAIrC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK1B,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAKlD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAW,GAAG,IAAI;IAK/C,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,IAAI;IAMpD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK9B,UAAU,IAAI,IAAI;IAIlB,MAAM,IAAI,IAAI;IAKd,MAAM,IAAI,IAAI;IAKd,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAK3C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKzB,KAAK,CAAC,KAAK,SAAI,EAAE,OAAO,SAAM,GAAG,IAAI;IAQrC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAKpE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAIpD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAInD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAIrD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IAItD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAMlC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;IA4ElF,OAAO,CAAC,QAAQ;CAWjB"}