ugly-app 0.1.48 → 0.1.50
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 +71 -13
- package/dist/cli/upgrade.d.ts.map +1 -1
- package/dist/cli/upgrade.js +8 -2
- package/dist/cli/upgrade.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -414,7 +414,7 @@ Renders an `<a>` tag with the correct `href`. Intercepts clicks for client-side
|
|
|
414
414
|
|
|
415
415
|
#### Animation system
|
|
416
416
|
|
|
417
|
-
Built-in
|
|
417
|
+
Built-in animation primitives for transitions and popups. `Animated.div` and `Animated.span` accept `AnimatedStyle` — a style object where any CSS property can be an `AnimatedValueRef` or a `TransformedValue` instead of a static value.
|
|
418
418
|
|
|
419
419
|
```typescript
|
|
420
420
|
import {
|
|
@@ -431,7 +431,7 @@ import {
|
|
|
431
431
|
const spring = createAnimatedValue(0);
|
|
432
432
|
spring.start(1, { duration: 300, easing: easingFunctions.easeOut });
|
|
433
433
|
|
|
434
|
-
// Use in components
|
|
434
|
+
// Use in components — animated properties bypass React re-renders via direct DOM mutation
|
|
435
435
|
<Animated.div style={{ opacity: spring.to((v) => String(v)) }}>
|
|
436
436
|
Content
|
|
437
437
|
</Animated.div>
|
|
@@ -445,7 +445,22 @@ const anim = useAnimatedValue(0);
|
|
|
445
445
|
<SlideFromRight>{children}</SlideFromRight>
|
|
446
446
|
```
|
|
447
447
|
|
|
448
|
-
|
|
448
|
+
**`AnimatedValueRef` API:**
|
|
449
|
+
|
|
450
|
+
| Member | Description |
|
|
451
|
+
|--------|-------------|
|
|
452
|
+
| `current` | Current numeric value |
|
|
453
|
+
| `target` | Target value |
|
|
454
|
+
| `isAnimating` | Whether an animation is in progress |
|
|
455
|
+
| `start(target, config?)` | Animate to target. Returns `Promise<void>` |
|
|
456
|
+
| `set(value)` | Jump to value immediately (no animation) |
|
|
457
|
+
| `stop()` | Cancel the current animation |
|
|
458
|
+
| `subscribe(cb)` | Subscribe to value changes. Returns unsubscribe fn |
|
|
459
|
+
| `to(transform)` | Create a transformed value for use in `Animated` styles |
|
|
460
|
+
|
|
461
|
+
**`AnimConfig`:** `{ duration?, easing?, onRest?, onUpdate?, immediate? }`
|
|
462
|
+
|
|
463
|
+
Available easings: `easingFunctions.linear`, `easeIn`, `easeOut`, `easeInOut`, `springGentle`, `springSnappy`, `springBouncy`, `slow`.
|
|
449
464
|
|
|
450
465
|
#### Screenshot capture
|
|
451
466
|
|
|
@@ -455,6 +470,12 @@ import { captureScreenshot } from 'ugly-app/client';
|
|
|
455
470
|
const dataUrl = await captureScreenshot(); // captures the current viewport
|
|
456
471
|
```
|
|
457
472
|
|
|
473
|
+
#### UI components
|
|
474
|
+
|
|
475
|
+
`ugly-app/client` exports a set of built-in UI components:
|
|
476
|
+
|
|
477
|
+
`Button`, `Card`, `EnumInput`, `Header`, `Image`, `Input`, `Modal`, `PageLayout`, `Panel`, `PopupPanel`, `Pressable`, `ScrollView`, `SettingGroup`, `Text`, `Toast`, `View`
|
|
478
|
+
|
|
458
479
|
---
|
|
459
480
|
|
|
460
481
|
## Auth
|
|
@@ -497,6 +518,16 @@ configurator.setAuth({
|
|
|
497
518
|
});
|
|
498
519
|
```
|
|
499
520
|
|
|
521
|
+
The `AuthProvider` interface:
|
|
522
|
+
|
|
523
|
+
```typescript
|
|
524
|
+
interface AuthProvider {
|
|
525
|
+
verify(code: string): Promise<{ userId: string; email?: string; phone?: string }>;
|
|
526
|
+
authUrl(origin: string): string;
|
|
527
|
+
registerRoutes?(router: express.Router): void;
|
|
528
|
+
}
|
|
529
|
+
```
|
|
530
|
+
|
|
500
531
|
---
|
|
501
532
|
|
|
502
533
|
## Database (`TypedDB`)
|
|
@@ -612,14 +643,14 @@ const json = await textGen.generateJson(schema, messages); // Zod schema, re
|
|
|
612
643
|
const result = await textGen.generateWithTools(messages, tools); // automatic tool-call loop
|
|
613
644
|
```
|
|
614
645
|
|
|
615
|
-
| Provider | `provider` value | JSON | Tools | Vision |
|
|
616
|
-
|
|
617
|
-
| Together AI
|
|
618
|
-
| Anthropic
|
|
619
|
-
| OpenAI
|
|
620
|
-
| Google
|
|
621
|
-
| Groq
|
|
622
|
-
| Fireworks | `'fireworks'` | yes | yes | yes |
|
|
646
|
+
| Provider | `provider` value | Default model | JSON | Tools | Vision |
|
|
647
|
+
|----------|-----------------|---------------|------|-------|--------|
|
|
648
|
+
| Together AI | `'together'` | Llama-4-Maverick-17B-128E | yes | yes | yes |
|
|
649
|
+
| Anthropic | `'claude'` | claude-sonnet-4-6 | yes | yes | yes |
|
|
650
|
+
| OpenAI | `'openai'` | gpt-4o | yes | yes | yes |
|
|
651
|
+
| Google | `'google'` | gemini-2.5-flash | yes | yes | yes |
|
|
652
|
+
| Groq | `'groq'` | llama-3.3-70b-versatile | yes | yes | no |
|
|
653
|
+
| Fireworks | `'fireworks'` | llama-v3p1-70b-instruct | yes | yes | yes |
|
|
623
654
|
|
|
624
655
|
Use `provider: 'auto'` (default) to let the system pick based on requirements.
|
|
625
656
|
|
|
@@ -702,6 +733,17 @@ const { uploadUrl, resultUrl } = await storage.presignedPut('temp', key);
|
|
|
702
733
|
|
|
703
734
|
Buckets: `'public'` and `'temp'`. Supports Cloudflare R2 (production) or MinIO (dev).
|
|
704
735
|
|
|
736
|
+
The `StorageClient` interface:
|
|
737
|
+
|
|
738
|
+
```typescript
|
|
739
|
+
interface StorageClient {
|
|
740
|
+
put(bucket: 'public' | 'temp', key: string, body: Buffer, contentType: string): Promise<string>;
|
|
741
|
+
moveToPublic(tempKey: string, destKey: string): Promise<string>;
|
|
742
|
+
url(bucket: 'public' | 'temp', key: string): string;
|
|
743
|
+
presignedPut(bucket: 'temp', key: string): Promise<{ uploadUrl: string; resultUrl: string }>;
|
|
744
|
+
}
|
|
745
|
+
```
|
|
746
|
+
|
|
705
747
|
Static build-time assets go in `client/public/`. Never hardcode `/asset/...` paths — use the `buildId` from `shared/Build.ts`.
|
|
706
748
|
|
|
707
749
|
---
|
|
@@ -841,13 +883,17 @@ Run with `npm run db:migrate`. Use `npm run db:migrate -- --status` to preview p
|
|
|
841
883
|
|---------|-------------|
|
|
842
884
|
| `ugly-app init <name>` | Scaffold a new project |
|
|
843
885
|
| `ugly-app upgrade` | Upgrade framework config files to the latest version |
|
|
844
|
-
| `ugly-app
|
|
886
|
+
| `ugly-app configure` | Generate `.uglyapp` config |
|
|
887
|
+
| `ugly-app dev` | Start all dev services (Docker, server, Vite, tsc, eslint) |
|
|
845
888
|
| `ugly-app build` | Production build |
|
|
889
|
+
| `ugly-app login` | Login to ugly.bot |
|
|
846
890
|
| `ugly-app db:init` | Create/update MongoDB indexes |
|
|
847
891
|
| `ugly-app db:migrate` | Run pending migrations (`--status` to preview) |
|
|
848
892
|
| `ugly-app deploy:single` | Deploy to a single server |
|
|
849
893
|
| `ugly-app deploy:multi` | Deploy to multiple servers |
|
|
850
|
-
| `ugly-app publish:assets` | Push static assets to CDN |
|
|
894
|
+
| `ugly-app publish:assets` | Push static assets to CDN (`--dry-run` to preview) |
|
|
895
|
+
| `ugly-app purge:assets` | Clean old builds (`--keep <n>`, `--dry-run`) |
|
|
896
|
+
| `ugly-app test:e2e` | Run Playwright end-to-end tests (`--headed` for browser) |
|
|
851
897
|
| `ugly-app logs:local` | Query local dev logs |
|
|
852
898
|
| `ugly-app logs:server` | Query server logs from MongoDB |
|
|
853
899
|
| `ugly-app error:local` / `error:server` | Query error logs |
|
|
@@ -858,6 +904,18 @@ Run with `npm run db:migrate`. Use `npm run db:migrate -- --status` to preview p
|
|
|
858
904
|
|
|
859
905
|
---
|
|
860
906
|
|
|
907
|
+
## Package entry points
|
|
908
|
+
|
|
909
|
+
| Import path | Description |
|
|
910
|
+
|-------------|-------------|
|
|
911
|
+
| `ugly-app` | Server APIs (createApp, DB, auth, AI, email, storage, etc.) |
|
|
912
|
+
| `ugly-app/shared` | Shared types and utilities (defineRequests, defineCollections, definePage, Zod, etc.) |
|
|
913
|
+
| `ugly-app/client` | Client APIs (createSocket, createRouter, AppProvider, components, animations, etc.) |
|
|
914
|
+
| `ugly-app/playwright` | Playwright test utilities |
|
|
915
|
+
| `ugly-app/webrtc` | WebRTC utilities |
|
|
916
|
+
|
|
917
|
+
---
|
|
918
|
+
|
|
861
919
|
## Environment variables
|
|
862
920
|
|
|
863
921
|
| Variable | Description |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/cli/upgrade.ts"],"names":[],"mappings":"AA0BA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/cli/upgrade.ts"],"names":[],"mappings":"AA0BA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAsKhD"}
|
package/dist/cli/upgrade.js
CHANGED
|
@@ -26,11 +26,17 @@ export async function runUpgrade() {
|
|
|
26
26
|
throw new Error('Not an ugly-app project (no .uglyapp file found)');
|
|
27
27
|
}
|
|
28
28
|
// Print version info
|
|
29
|
-
const cliPkg = JSON.parse(await fs.readFile(path.join(__dirname, '../../package.json'), 'utf-8'));
|
|
30
29
|
const installedPkg = (await fs
|
|
31
30
|
.readJson(path.join(cwd, 'node_modules/ugly-app/package.json'))
|
|
32
31
|
.catch(() => ({ version: 'unknown' })));
|
|
33
|
-
|
|
32
|
+
let latestVersion = 'latest';
|
|
33
|
+
try {
|
|
34
|
+
latestVersion = execSync('npm show ugly-app version', { encoding: 'utf-8' }).trim();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// ignore
|
|
38
|
+
}
|
|
39
|
+
console.log(`[ugly-app] Upgrading from ${installedPkg.version} → ${latestVersion}`);
|
|
34
40
|
console.log('[ugly-app] Updating package...');
|
|
35
41
|
execSync('npm install ugly-app@latest', { cwd, stdio: 'inherit' });
|
|
36
42
|
const updated = [];
|
package/dist/cli/upgrade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/cli/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAE9D,MAAM,YAAY,GAAG;IACnB,eAAe;IACf,gBAAgB;IAChB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;IACf,mBAAmB;IACnB,WAAW;IACX,sBAAsB;IACtB,mBAAmB;IACnB,uBAAuB;CACxB,CAAC;AAEF,uFAAuF;AACvF,MAAM,aAAa,GAAyC,EAAE,CAAC;AAC/D,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,qBAAqB;IACrB,MAAM,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/cli/upgrade.ts"],"names":[],"mappings":"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"}
|