ugly-app 0.1.78 → 0.1.79
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 +6 -143
- package/coverage/.tmp/coverage-0.json +1 -0
- package/coverage/.tmp/coverage-1.json +1 -0
- package/coverage/.tmp/coverage-10.json +1 -0
- package/coverage/.tmp/coverage-11.json +1 -0
- package/coverage/.tmp/coverage-12.json +1 -0
- package/coverage/.tmp/coverage-13.json +1 -0
- package/coverage/.tmp/coverage-14.json +1 -0
- package/coverage/.tmp/coverage-15.json +1 -0
- package/coverage/.tmp/coverage-16.json +1 -0
- package/coverage/.tmp/coverage-17.json +1 -0
- package/coverage/.tmp/coverage-18.json +1 -0
- package/coverage/.tmp/coverage-19.json +1 -0
- package/coverage/.tmp/coverage-2.json +1 -0
- package/coverage/.tmp/coverage-20.json +1 -0
- package/coverage/.tmp/coverage-21.json +1 -0
- package/coverage/.tmp/coverage-22.json +1 -0
- package/coverage/.tmp/coverage-23.json +1 -0
- package/coverage/.tmp/coverage-24.json +1 -0
- package/coverage/.tmp/coverage-25.json +1 -0
- package/coverage/.tmp/coverage-26.json +1 -0
- package/coverage/.tmp/coverage-27.json +1 -0
- package/coverage/.tmp/coverage-28.json +1 -0
- package/coverage/.tmp/coverage-29.json +1 -0
- package/coverage/.tmp/coverage-3.json +1 -0
- package/coverage/.tmp/coverage-30.json +1 -0
- package/coverage/.tmp/coverage-31.json +1 -0
- package/coverage/.tmp/coverage-32.json +1 -0
- package/coverage/.tmp/coverage-33.json +1 -0
- package/coverage/.tmp/coverage-34.json +1 -0
- package/coverage/.tmp/coverage-35.json +1 -0
- package/coverage/.tmp/coverage-36.json +1 -0
- package/coverage/.tmp/coverage-37.json +1 -0
- package/coverage/.tmp/coverage-38.json +1 -0
- package/coverage/.tmp/coverage-39.json +1 -0
- package/coverage/.tmp/coverage-4.json +1 -0
- package/coverage/.tmp/coverage-40.json +1 -0
- package/coverage/.tmp/coverage-41.json +1 -0
- package/coverage/.tmp/coverage-42.json +1 -0
- package/coverage/.tmp/coverage-5.json +1 -0
- package/coverage/.tmp/coverage-6.json +1 -0
- package/coverage/.tmp/coverage-7.json +1 -0
- package/coverage/.tmp/coverage-8.json +1 -0
- package/coverage/.tmp/coverage-9.json +1 -0
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/components/Button.d.ts +3 -3
- package/dist/client/components/Button.d.ts.map +1 -1
- package/dist/client/components/Button.js +27 -13
- package/dist/client/components/Button.js.map +1 -1
- package/dist/client/components/Card.d.ts +3 -3
- package/dist/client/components/Card.d.ts.map +1 -1
- package/dist/client/components/Card.js +10 -3
- package/dist/client/components/Card.js.map +1 -1
- package/dist/client/components/EnumInput.d.ts +3 -3
- package/dist/client/components/EnumInput.d.ts.map +1 -1
- package/dist/client/components/EnumInput.js +17 -2
- package/dist/client/components/EnumInput.js.map +1 -1
- package/dist/client/components/PageLayout.d.ts +3 -3
- package/dist/client/components/PageLayout.d.ts.map +1 -1
- package/dist/client/components/PageLayout.js +14 -2
- package/dist/client/components/PageLayout.js.map +1 -1
- package/dist/client/components/Panel.d.ts +1 -2
- package/dist/client/components/Panel.d.ts.map +1 -1
- package/dist/client/components/Panel.js +7 -2
- package/dist/client/components/Panel.js.map +1 -1
- package/dist/client/components/PopupPanel.d.ts +3 -3
- package/dist/client/components/PopupPanel.d.ts.map +1 -1
- package/dist/client/components/PopupPanel.js +11 -2
- package/dist/client/components/PopupPanel.js.map +1 -1
- package/dist/client/components/Pressable.d.ts +1 -2
- package/dist/client/components/Pressable.d.ts.map +1 -1
- package/dist/client/components/Pressable.js +8 -2
- package/dist/client/components/Pressable.js.map +1 -1
- package/dist/client/components/ScrollView.js +1 -1
- package/dist/client/components/ScrollView.js.map +1 -1
- package/dist/client/components/SettingGroup.d.ts +3 -3
- package/dist/client/components/SettingGroup.d.ts.map +1 -1
- package/dist/client/components/SettingGroup.js +15 -2
- package/dist/client/components/SettingGroup.js.map +1 -1
- package/dist/client/components/ValidatedTextInput.d.ts.map +1 -1
- package/dist/client/components/ValidatedTextInput.js +0 -1
- package/dist/client/components/ValidatedTextInput.js.map +1 -1
- package/dist/client/createSocket.d.ts.map +1 -1
- package/dist/client/createSocket.js +3 -3
- package/dist/client/createSocket.js.map +1 -1
- package/dist/server/App.d.ts +29 -3
- package/dist/server/App.d.ts.map +1 -1
- package/dist/server/App.js +69 -6
- package/dist/server/App.js.map +1 -1
- package/dist/server/Router.d.ts +1 -1
- package/dist/server/Router.d.ts.map +1 -1
- package/dist/server/Router.js +6 -1
- package/dist/server/Router.js.map +1 -1
- package/dist/server/Socket.js +10 -10
- package/dist/server/Socket.js.map +1 -1
- package/dist/server/StoreHandlers.d.ts +4 -0
- package/dist/server/StoreHandlers.d.ts.map +1 -0
- package/dist/server/StoreHandlers.js +160 -0
- package/dist/server/StoreHandlers.js.map +1 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/shared/Socket.d.ts +33 -3
- package/dist/shared/Socket.d.ts.map +1 -1
- package/eslint.config.js +106 -0
- package/package.json +1 -1
- package/templates/client/pages/AITestPage.tsx +17 -56
- package/templates/client/pages/AuthDemoPage.tsx +13 -33
- package/templates/client/pages/HomePage.tsx +14 -22
- package/templates/client/pages/SearchPage.tsx +7 -13
- package/templates/client/pages/UserPage.tsx +7 -13
- package/templates/client/styles.css +0 -3
- package/templates/eslint.config.js +78 -0
- package/templates/package.json +0 -1
- package/templates/postcss.config.js +0 -1
- package/templates/tailwind.config.js +0 -6
package/README.md
CHANGED
|
@@ -8,8 +8,7 @@ A full-stack TypeScript framework for building production-ready web applications
|
|
|
8
8
|
- **Client**: React + Vite with typed routing, lazy pages, and popup management
|
|
9
9
|
- **Database**: MongoDB with typed collections, dot-notation updates, indexes, migrations, and live document tracking
|
|
10
10
|
- **Auth**: JWT + HttpOnly cookies, ugly.bot OAuth out of the box, extensible via `AuthProvider`
|
|
11
|
-
- **AI**: Text generation (Together, Claude, OpenAI, Google, Groq, Fireworks
|
|
12
|
-
- **Analytics**: EventCounter (high-throughput counters), EventLog (event capture), A/B experiments
|
|
11
|
+
- **AI**: Text generation (Together, Claude, OpenAI, Google, Groq, Fireworks) + image generation (Together, FAL, Google, Wavespeed) + embeddings + STT/TTS
|
|
13
12
|
- **Storage**: Cloudflare R2 / AWS S3 with presigned uploads
|
|
14
13
|
- **CLI**: `ugly-app` commands for dev, build, deploy, migrations, logs, and auth utilities
|
|
15
14
|
|
|
@@ -32,22 +31,16 @@ Entry point for the server. Creates an Express + WebSocket server with typed RPC
|
|
|
32
31
|
```typescript
|
|
33
32
|
import {
|
|
34
33
|
createApp,
|
|
35
|
-
createImageGen,
|
|
36
|
-
createTextGen,
|
|
37
34
|
createUserHelper,
|
|
38
|
-
eventLogCapture,
|
|
39
|
-
eventLogServerCapture,
|
|
40
35
|
getFeedbackHandlers,
|
|
41
|
-
getExperimentAssignments,
|
|
42
36
|
type AppConfigurator,
|
|
43
37
|
type RequestHandlers,
|
|
44
38
|
} from 'ugly-app';
|
|
45
39
|
import { dbDefaults } from 'ugly-app/shared';
|
|
46
40
|
import { requests } from '../shared/api';
|
|
47
|
-
import type { User } from '../shared/collections';
|
|
48
41
|
import { collections } from '../shared/collections';
|
|
49
|
-
import { experiments } from '../shared/experiments';
|
|
50
42
|
import { pages } from '../shared/pages';
|
|
43
|
+
import type { User } from '../shared/collections';
|
|
51
44
|
|
|
52
45
|
const userHelper = createUserHelper<User>(collections.user);
|
|
53
46
|
const maintainBotUserId = process.env.MAINTAIN_BOT_USER_ID ?? '';
|
|
@@ -56,38 +49,10 @@ const app = createApp(
|
|
|
56
49
|
{ requests },
|
|
57
50
|
{
|
|
58
51
|
...getFeedbackHandlers(maintainBotUserId),
|
|
59
|
-
|
|
60
52
|
getMe: async (userId: string) => {
|
|
61
53
|
const user = await userHelper.get(app.db, userId);
|
|
62
54
|
return { userId, email: user?.email, phone: user?.phone };
|
|
63
55
|
},
|
|
64
|
-
|
|
65
|
-
// Experiment bucketing + session start event
|
|
66
|
-
initSession: async (userId, { sessionId }) => {
|
|
67
|
-
const branches = getExperimentAssignments(userId, sessionId, experiments);
|
|
68
|
-
await eventLogServerCapture('SESSION_START', {}, sessionId, userId, branches);
|
|
69
|
-
return { branches };
|
|
70
|
-
},
|
|
71
|
-
|
|
72
|
-
// Generic event capture with experiment branch tagging
|
|
73
|
-
captureEvent: async (userId, { eventName, sessionId, properties }) => {
|
|
74
|
-
const branches = getExperimentAssignments(userId, sessionId, experiments);
|
|
75
|
-
const { eventId } = await eventLogCapture(
|
|
76
|
-
{ eventName, sessionId, userId, properties: properties ?? {}, experimentBranches: branches },
|
|
77
|
-
userId,
|
|
78
|
-
);
|
|
79
|
-
return { eventId };
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
textGen: async (userId, { model, messages }) => {
|
|
83
|
-
const text = await createTextGen(userId).generate(messages, { model });
|
|
84
|
-
return { text };
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
imageGen: async (userId, { model, prompt }) => {
|
|
88
|
-
const url = await createImageGen(userId).generate(prompt, { model });
|
|
89
|
-
return { url };
|
|
90
|
-
},
|
|
91
56
|
} satisfies RequestHandlers<typeof requests>,
|
|
92
57
|
collections,
|
|
93
58
|
(configurator: AppConfigurator) => {
|
|
@@ -672,16 +637,14 @@ Run `npm run db:init` to create/update indexes.
|
|
|
672
637
|
### Text generation
|
|
673
638
|
|
|
674
639
|
```typescript
|
|
675
|
-
import {
|
|
676
|
-
const textGen =
|
|
640
|
+
import { createTextGenClient } from 'ugly-app';
|
|
641
|
+
const textGen = createTextGenClient();
|
|
677
642
|
|
|
678
643
|
const text = await textGen.generate(messages);
|
|
679
644
|
const json = await textGen.generateJson(schema, messages); // Zod schema, retries on parse failure
|
|
680
645
|
const result = await textGen.generateWithTools(messages, tools); // automatic tool-call loop
|
|
681
646
|
```
|
|
682
647
|
|
|
683
|
-
`createTextGen(userId, defaults?)` creates a client scoped to a user (for rate limiting and billing). Optional `defaults` set provider, model, temperature, etc.
|
|
684
|
-
|
|
685
648
|
| Provider | `provider` value | Default model | JSON | Tools | Vision |
|
|
686
649
|
|----------|-----------------|---------------|------|-------|--------|
|
|
687
650
|
| Together AI | `'together'` | Llama-4-Maverick-17B-128E | yes | yes | yes |
|
|
@@ -697,14 +660,12 @@ Use `provider: 'auto'` (default) to let the system pick based on requirements.
|
|
|
697
660
|
### Image generation
|
|
698
661
|
|
|
699
662
|
```typescript
|
|
700
|
-
import {
|
|
701
|
-
const imageGen =
|
|
663
|
+
import { createImageGenClient } from 'ugly-app';
|
|
664
|
+
const imageGen = createImageGenClient();
|
|
702
665
|
|
|
703
666
|
const url = await imageGen.generate(prompt, { width: 1024, height: 1024 });
|
|
704
667
|
```
|
|
705
668
|
|
|
706
|
-
`createImageGen(userId, defaults?)` works the same way — user-scoped with optional defaults.
|
|
707
|
-
|
|
708
669
|
| Provider | `provider` value |
|
|
709
670
|
|----------|-----------------|
|
|
710
671
|
| Together AI (FLUX schnell) | `'together'` |
|
|
@@ -885,104 +846,6 @@ submitFeedback: authReq({
|
|
|
885
846
|
|
|
886
847
|
The framework enforces rate limits automatically before calling the handler.
|
|
887
848
|
|
|
888
|
-
### EventCounter
|
|
889
|
-
|
|
890
|
-
High-throughput counters aggregated into hourly buckets in MongoDB. Increments are instant (in-memory) and flushed every 60 seconds.
|
|
891
|
-
|
|
892
|
-
```typescript
|
|
893
|
-
import {
|
|
894
|
-
eventCounterIncrement,
|
|
895
|
-
startEventCounterFlush,
|
|
896
|
-
flushCountersToMongo,
|
|
897
|
-
eventCounterGetCounts,
|
|
898
|
-
eventCounterGetTopTypes,
|
|
899
|
-
} from 'ugly-app';
|
|
900
|
-
|
|
901
|
-
// Increment a counter (instant, no DB write)
|
|
902
|
-
eventCounterIncrement('api_getMe');
|
|
903
|
-
|
|
904
|
-
// Start periodic flush — call once at server startup
|
|
905
|
-
startEventCounterFlush();
|
|
906
|
-
|
|
907
|
-
// Manually flush (e.g. on graceful shutdown)
|
|
908
|
-
await flushCountersToMongo();
|
|
909
|
-
|
|
910
|
-
// Query counts (admin only)
|
|
911
|
-
const { counts } = await eventCounterGetCounts(
|
|
912
|
-
{ granularity: 'hours', intervals: 24, category: 'api' },
|
|
913
|
-
isAdmin,
|
|
914
|
-
);
|
|
915
|
-
|
|
916
|
-
// Query top counter types (admin only)
|
|
917
|
-
const { types } = await eventCounterGetTopTypes(
|
|
918
|
-
{ limit: 10, category: 'api' },
|
|
919
|
-
isAdmin,
|
|
920
|
-
);
|
|
921
|
-
```
|
|
922
|
-
|
|
923
|
-
Counter type names use a `category_name` convention (e.g. `api_getMe`, `ai_textGen`). Data is auto-expired after 30 days via MongoDB TTL.
|
|
924
|
-
|
|
925
|
-
### EventLog
|
|
926
|
-
|
|
927
|
-
Structured event capture for analytics. Events are stored in MongoDB with session, user, and experiment branch associations.
|
|
928
|
-
|
|
929
|
-
```typescript
|
|
930
|
-
import { eventLogCapture, eventLogServerCapture } from 'ugly-app';
|
|
931
|
-
|
|
932
|
-
// Capture an event (returns eventId)
|
|
933
|
-
const { eventId } = await eventLogCapture(
|
|
934
|
-
{
|
|
935
|
-
eventName: 'BUTTON_CLICK',
|
|
936
|
-
sessionId,
|
|
937
|
-
userId,
|
|
938
|
-
properties: { page: 'home', target: 'cta' },
|
|
939
|
-
experimentBranches: branches,
|
|
940
|
-
},
|
|
941
|
-
userId,
|
|
942
|
-
);
|
|
943
|
-
|
|
944
|
-
// Server-side shorthand (fire-and-forget, no eventId returned)
|
|
945
|
-
await eventLogServerCapture('SESSION_START', { source: 'web' }, sessionId, userId, branches);
|
|
946
|
-
```
|
|
947
|
-
|
|
948
|
-
Admin query functions: `eventLogGetList`, `eventLogGetCounts`, `eventLogGetTopEvents`, `eventLogGetTopUsers`, `eventLogGetTopSessions`, `eventLogGetUniqueUsersCounts`, `eventLogGetUniqueSessionsCounts`.
|
|
949
|
-
|
|
950
|
-
### Experiments (A/B testing)
|
|
951
|
-
|
|
952
|
-
Define experiments in `shared/experiments.ts` and use deterministic bucketing to assign users to branches.
|
|
953
|
-
|
|
954
|
-
```typescript
|
|
955
|
-
// shared/experiments.ts
|
|
956
|
-
import type { Experiment } from 'ugly-app/shared';
|
|
957
|
-
|
|
958
|
-
export const experiments: Experiment[] = [
|
|
959
|
-
{
|
|
960
|
-
id: 'onboarding-v2',
|
|
961
|
-
name: 'Onboarding V2',
|
|
962
|
-
description: 'Test new onboarding flow',
|
|
963
|
-
branches: [
|
|
964
|
-
{ id: 'control', name: 'Control', weight: 1 },
|
|
965
|
-
{ id: 'variant', name: 'Variant', weight: 1 },
|
|
966
|
-
],
|
|
967
|
-
events: ['ONBOARDING_COMPLETE', 'SIGNUP'],
|
|
968
|
-
active: true,
|
|
969
|
-
},
|
|
970
|
-
];
|
|
971
|
-
```
|
|
972
|
-
|
|
973
|
-
```typescript
|
|
974
|
-
// Server-side assignment
|
|
975
|
-
import { getExperimentAssignments, getExperimentBranch } from 'ugly-app';
|
|
976
|
-
|
|
977
|
-
// Get all branch assignments for a user/session (deterministic hash)
|
|
978
|
-
const branches = getExperimentAssignments(userId, sessionId, experiments);
|
|
979
|
-
|
|
980
|
-
// Get a single experiment branch
|
|
981
|
-
const branch = getExperimentBranch(userId, sessionId, experiment);
|
|
982
|
-
```
|
|
983
|
-
|
|
984
|
-
Shared helpers: `getActiveExperiments`, `getExperimentById`, `getExperimentBranch`, `getExperimentAssignments`. Server admin: `experimentGetMetrics` for per-branch analytics.
|
|
985
|
-
|
|
986
849
|
---
|
|
987
850
|
|
|
988
851
|
## Built-in endpoints
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"result":[{"scriptId":"233","url":"file:///Users/admin/Documents/GitHub/ugly-app/tests/server/audio/tts/InWorld.test.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":47019,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":47019,"count":1}],"isBlockCoverage":true},{"functionName":"makeWavBuffer","ranges":[{"startOffset":667,"endOffset":872,"count":10}],"isBlockCoverage":true},{"functionName":"makeNdjsonResponse","ranges":[{"startOffset":933,"endOffset":1284,"count":7}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1008,"endOffset":1032,"count":9}],"isBlockCoverage":true},{"functionName":"start","ranges":[{"startOffset":1163,"endOffset":1236,"count":7}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1344,"endOffset":13691,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1390,"endOffset":1540,"count":15}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1580,"endOffset":1681,"count":15}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1746,"endOffset":1956,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2035,"endOffset":2888,"count":1},{"startOffset":2668,"endOffset":2702,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2967,"endOffset":3810,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3888,"endOffset":4228,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4295,"endOffset":4693,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4788,"endOffset":5770,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5859,"endOffset":7230,"count":1}],"isBlockCoverage":true},{"functionName":"start","ranges":[{"startOffset":6402,"endOffset":6508,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7305,"endOffset":7632,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7711,"endOffset":8133,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8208,"endOffset":8836,"count":1}],"isBlockCoverage":true},{"functionName":"start","ranges":[{"startOffset":8351,"endOffset":8429,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8914,"endOffset":9526,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9609,"endOffset":10386,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10499,"endOffset":11717,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11811,"endOffset":12696,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12812,"endOffset":13687,"count":1}],"isBlockCoverage":true},{"functionName":"start","ranges":[{"startOffset":13111,"endOffset":13187,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13745,"endOffset":15370,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13790,"endOffset":13844,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13952,"endOffset":14437,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":14528,"endOffset":15040,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":15135,"endOffset":15366,"count":1}],"isBlockCoverage":true}],"startOffset":209},{"scriptId":"235","url":"file:///Users/admin/Documents/GitHub/ugly-app/src/server/audio/tts/registry.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":2383,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":2383,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":256,"endOffset":309,"count":2},{"startOffset":299,"endOffset":307,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":357,"endOffset":408,"count":1},{"startOffset":398,"endOffset":406,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":457,"endOffset":509,"count":4},{"startOffset":499,"endOffset":507,"count":0}],"isBlockCoverage":true},{"functionName":"registerTTSProvider","ranges":[{"startOffset":534,"endOffset":606,"count":2}],"isBlockCoverage":true},{"functionName":"selectTTSProvider","ranges":[{"startOffset":670,"endOffset":761,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":724,"endOffset":757,"count":1}],"isBlockCoverage":true},{"functionName":"getAllTTSProviders","ranges":[{"startOffset":763,"endOffset":820,"count":4}],"isBlockCoverage":true}],"startOffset":209},{"scriptId":"236","url":"file:///Users/admin/Documents/GitHub/ugly-app/src/server/audio/tts/InWorld.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":15311,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":15311,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":255,"endOffset":307,"count":15},{"startOffset":297,"endOffset":305,"count":0}],"isBlockCoverage":true},{"functionName":"parseOffsetSeconds","ranges":[{"startOffset":466,"endOffset":684,"count":10},{"startOffset":537,"endOffset":551,"count":2},{"startOffset":551,"endOffset":659,"count":8},{"startOffset":659,"endOffset":683,"count":0}],"isBlockCoverage":true},{"functionName":"parseVisemesFromAlignment","ranges":[{"startOffset":685,"endOffset":1206,"count":1},{"startOffset":826,"endOffset":835,"count":0},{"startOffset":911,"endOffset":920,"count":0},{"startOffset":959,"endOffset":1179,"count":2}],"isBlockCoverage":true},{"functionName":"stream","ranges":[{"startOffset":1286,"endOffset":4181,"count":14},{"startOffset":1437,"endOffset":1494,"count":1},{"startOffset":1494,"endOffset":1513,"count":13},{"startOffset":1513,"endOffset":1573,"count":1},{"startOffset":1573,"endOffset":2114,"count":12},{"startOffset":2114,"endOffset":2248,"count":1},{"startOffset":2248,"endOffset":2272,"count":11},{"startOffset":2272,"endOffset":2333,"count":1},{"startOffset":2333,"endOffset":3653,"count":10},{"startOffset":3653,"endOffset":4042,"count":20},{"startOffset":3716,"endOffset":3722,"count":9},{"startOffset":3722,"endOffset":4038,"count":11},{"startOffset":4021,"endOffset":4033,"count":9},{"startOffset":4042,"endOffset":4104,"count":9},{"startOffset":4104,"endOffset":4178,"count":1}],"isBlockCoverage":true},{"functionName":"processLine","ranges":[{"startOffset":2461,"endOffset":3636,"count":12},{"startOffset":2494,"endOffset":2506,"count":0},{"startOffset":2567,"endOffset":2650,"count":1},{"startOffset":2650,"endOffset":2681,"count":11},{"startOffset":2681,"endOffset":2693,"count":1},{"startOffset":2693,"endOffset":2855,"count":10},{"startOffset":2855,"endOffset":2870,"count":5},{"startOffset":2889,"endOffset":2912,"count":5},{"startOffset":2914,"endOffset":3610,"count":5},{"startOffset":3433,"endOffset":3449,"count":2},{"startOffset":3451,"endOffset":3586,"count":1},{"startOffset":3610,"endOffset":3635,"count":5}],"isBlockCoverage":true}],"startOffset":209}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"result":[{"scriptId":"233","url":"file:///Users/admin/Documents/GitHub/ugly-app/tests/server/billing/LimitEnforcer.test.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":90488,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":90488,"count":1}],"isBlockCoverage":true},{"functionName":"makeMockLedger","ranges":[{"startOffset":846,"endOffset":1380,"count":45},{"startOffset":1026,"endOffset":1055,"count":27}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1030,"endOffset":1054,"count":0}],"isBlockCoverage":false},{"functionName":"makeMockUserLimits","ranges":[{"startOffset":1381,"endOffset":1639,"count":45}],"isBlockCoverage":true},{"functionName":"makeCharge","ranges":[{"startOffset":1640,"endOffset":1784,"count":63}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2020,"endOffset":3969,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2107,"endOffset":2406,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2490,"endOffset":2791,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2874,"endOffset":3174,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3263,"endOffset":3569,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3661,"endOffset":3965,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4227,"endOffset":7219,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4273,"endOffset":4319,"count":5}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4359,"endOffset":4405,"count":5}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4479,"endOffset":4737,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4843,"endOffset":5189,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5281,"endOffset":5735,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5548,"endOffset":5556,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5825,"endOffset":6454,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6526,"endOffset":7215,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6625,"endOffset":6649,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7481,"endOffset":10668,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7576,"endOffset":8030,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8106,"endOffset":8568,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8480,"endOffset":8488,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8650,"endOffset":9149,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9239,"endOffset":9578,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9683,"endOffset":10137,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10208,"endOffset":10664,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10918,"endOffset":14374,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11023,"endOffset":11570,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11128,"endOffset":11152,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11385,"endOffset":11393,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11668,"endOffset":12179,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11714,"endOffset":11739,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11995,"endOffset":12003,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12279,"endOffset":12812,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12325,"endOffset":12351,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12627,"endOffset":12635,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12897,"endOffset":13344,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13435,"endOffset":13771,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13481,"endOffset":13505,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":13870,"endOffset":14370,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":14284,"endOffset":14292,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":14628,"endOffset":18586,"count":1}],"isBlockCoverage":true},{"functionName":"makeMockCreditStore","ranges":[{"startOffset":14637,"endOffset":14922,"count":4}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":15020,"endOffset":15562,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":15066,"endOffset":15092,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":15679,"endOffset":16204,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":15725,"endOffset":15751,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":16299,"endOffset":16714,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":16345,"endOffset":16371,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":16810,"endOffset":17556,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":16856,"endOffset":16882,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":17269,"endOffset":17277,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":17633,"endOffset":18058,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":17679,"endOffset":17704,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":18136,"endOffset":18582,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":18182,"endOffset":18208,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":18870,"endOffset":19567,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":18969,"endOffset":19563,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":19048,"endOffset":19074,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":19359,"endOffset":19367,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":19825,"endOffset":30551,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":19925,"endOffset":20614,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":20722,"endOffset":21223,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":21309,"endOffset":22035,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":22135,"endOffset":22892,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":22278,"endOffset":22304,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":22987,"endOffset":23742,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":23131,"endOffset":23157,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":23838,"endOffset":24543,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":23934,"endOffset":23959,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":24638,"endOffset":25252,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":24723,"endOffset":24777,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":24812,"endOffset":24838,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":25341,"endOffset":26015,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":26112,"endOffset":26481,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":26577,"endOffset":26910,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":27004,"endOffset":27397,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":27501,"endOffset":28131,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":28224,"endOffset":28843,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":28761,"endOffset":28769,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":28954,"endOffset":29411,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":29050,"endOffset":29076,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":29519,"endOffset":29948,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":29565,"endOffset":29591,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":30038,"endOffset":30547,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":30123,"endOffset":30172,"count":1}],"isBlockCoverage":true}],"startOffset":209},{"scriptId":"235","url":"file:///Users/admin/Documents/GitHub/ugly-app/src/server/billing/LimitEnforcer.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":33174,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":33174,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":250,"endOffset":297,"count":45},{"startOffset":287,"endOffset":295,"count":0}],"isBlockCoverage":true},{"functionName":"<instance_members_initializer>","ranges":[{"startOffset":1384,"endOffset":10259,"count":45}],"isBlockCoverage":true},{"functionName":"LimitEnforcer","ranges":[{"startOffset":1576,"endOffset":1742,"count":45}],"isBlockCoverage":true},{"functionName":"setUserThresholdCallback","ranges":[{"startOffset":1744,"endOffset":1806,"count":5}],"isBlockCoverage":true},{"functionName":"setGlobalThresholdCallback","ranges":[{"startOffset":1808,"endOffset":1874,"count":9}],"isBlockCoverage":true},{"functionName":"init","ranges":[{"startOffset":2018,"endOffset":2445,"count":1},{"startOffset":2267,"endOffset":2272,"count":0},{"startOffset":2275,"endOffset":2442,"count":0}],"isBlockCoverage":true},{"functionName":"check","ranges":[{"startOffset":2753,"endOffset":5037,"count":63},{"startOffset":2880,"endOffset":2895,"count":61},{"startOffset":2897,"endOffset":3029,"count":4},{"startOffset":3029,"endOffset":3071,"count":59},{"startOffset":3106,"endOffset":3209,"count":1},{"startOffset":3209,"endOffset":3428,"count":58},{"startOffset":3428,"endOffset":3546,"count":6},{"startOffset":3546,"endOffset":3669,"count":52},{"startOffset":3669,"endOffset":3681,"count":16},{"startOffset":3681,"endOffset":3692,"count":13},{"startOffset":3753,"endOffset":4011,"count":13},{"startOffset":3898,"endOffset":4007,"count":4},{"startOffset":4011,"endOffset":4167,"count":48},{"startOffset":4167,"endOffset":4225,"count":9},{"startOffset":4225,"endOffset":4278,"count":48},{"startOffset":4278,"endOffset":4621,"count":17},{"startOffset":4344,"endOffset":4350,"count":10},{"startOffset":4350,"endOffset":4617,"count":7},{"startOffset":4529,"endOffset":4596,"count":1},{"startOffset":4621,"endOffset":4873,"count":41},{"startOffset":4873,"endOffset":5034,"count":8}],"isBlockCoverage":true},{"functionName":"addToAccumulator","ranges":[{"startOffset":5236,"endOffset":5401,"count":58},{"startOffset":5315,"endOffset":5320,"count":47}],"isBlockCoverage":true},{"functionName":"removeFromAccumulator","ranges":[{"startOffset":5491,"endOffset":5758,"count":8},{"startOffset":5592,"endOffset":5599,"count":0},{"startOffset":5755,"endOffset":5757,"count":0}],"isBlockCoverage":true},{"functionName":"pruneAccumulator","ranges":[{"startOffset":5760,"endOffset":6156,"count":71},{"startOffset":5850,"endOffset":5873,"count":24},{"startOffset":5875,"endOffset":5882,"count":50},{"startOffset":5882,"endOffset":6035,"count":21},{"startOffset":6035,"endOffset":6153,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5947,"endOffset":5967,"count":22}],"isBlockCoverage":true},{"functionName":"sumAccumulator","ranges":[{"startOffset":6158,"endOffset":6308,"count":71},{"startOffset":6242,"endOffset":6251,"count":47},{"startOffset":6251,"endOffset":6307,"count":24}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6276,"endOffset":6300,"count":20}],"isBlockCoverage":true},{"functionName":"checkUserLimits","ranges":[{"startOffset":6506,"endOffset":7970,"count":17},{"startOffset":6614,"endOffset":6621,"count":1},{"startOffset":6621,"endOffset":6677,"count":16},{"startOffset":6677,"endOffset":7072,"count":14},{"startOffset":6794,"endOffset":6948,"count":6},{"startOffset":6931,"endOffset":6948,"count":1},{"startOffset":6948,"endOffset":7058,"count":8},{"startOffset":7058,"endOffset":7066,"count":3},{"startOffset":7072,"endOffset":7127,"count":10},{"startOffset":7127,"endOffset":7515,"count":5},{"startOffset":7242,"endOffset":7394,"count":2},{"startOffset":7377,"endOffset":7394,"count":1},{"startOffset":7394,"endOffset":7502,"count":3},{"startOffset":7502,"endOffset":7509,"count":1},{"startOffset":7515,"endOffset":7572,"count":8},{"startOffset":7572,"endOffset":7967,"count":3},{"startOffset":7689,"endOffset":7843,"count":2},{"startOffset":7826,"endOffset":7843,"count":1},{"startOffset":7843,"endOffset":7961,"count":1}],"isBlockCoverage":true},{"functionName":"tryCreditsOrThrow","ranges":[{"startOffset":8116,"endOffset":8308,"count":10},{"startOffset":8189,"endOffset":8286,"count":4},{"startOffset":8275,"endOffset":8282,"count":3},{"startOffset":8286,"endOffset":8307,"count":7}],"isBlockCoverage":true},{"functionName":"maybeFireGlobalThreshold","ranges":[{"startOffset":8780,"endOffset":9441,"count":49},{"startOffset":8894,"endOffset":8923,"count":14},{"startOffset":8924,"endOffset":8937,"count":12},{"startOffset":8939,"endOffset":8946,"count":37},{"startOffset":8946,"endOffset":9055,"count":12},{"startOffset":9055,"endOffset":9081,"count":9},{"startOffset":9083,"endOffset":9090,"count":5},{"startOffset":9090,"endOffset":9149,"count":7},{"startOffset":9182,"endOffset":9189,"count":0},{"startOffset":9189,"endOffset":9317,"count":7},{"startOffset":9317,"endOffset":9336,"count":1},{"startOffset":9337,"endOffset":9354,"count":6},{"startOffset":9430,"endOffset":9438,"count":1}],"isBlockCoverage":true},{"functionName":"maybeFireUserThreshold","ranges":[{"startOffset":9603,"endOffset":10257,"count":12},{"startOffset":9717,"endOffset":9746,"count":5},{"startOffset":9747,"endOffset":9760,"count":4},{"startOffset":9762,"endOffset":9769,"count":8},{"startOffset":9769,"endOffset":9904,"count":4},{"startOffset":9906,"endOffset":9913,"count":0},{"startOffset":9913,"endOffset":10017,"count":4},{"startOffset":10050,"endOffset":10057,"count":0},{"startOffset":10057,"endOffset":10246,"count":4},{"startOffset":10246,"endOffset":10254,"count":1}],"isBlockCoverage":true}],"startOffset":209},{"scriptId":"236","url":"file:///Users/admin/Documents/GitHub/ugly-app/src/server/billing/BillingLedger.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":24685,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":24685,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":250,"endOffset":297,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":337,"endOffset":380,"count":3},{"startOffset":370,"endOffset":378,"count":0}],"isBlockCoverage":true},{"functionName":"<instance_members_initializer>","ranges":[{"startOffset":600,"endOffset":5779,"count":0}],"isBlockCoverage":true},{"functionName":"storedToPublic","ranges":[{"startOffset":5959,"endOffset":6686,"count":0}],"isBlockCoverage":false}],"startOffset":209},{"scriptId":"237","url":"file:///Users/admin/Documents/GitHub/ugly-app/src/server/billing/types.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":6881,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":6881,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":254,"endOffset":305,"count":32},{"startOffset":295,"endOffset":303,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":358,"endOffset":414,"count":10},{"startOffset":404,"endOffset":412,"count":0}],"isBlockCoverage":true},{"functionName":"BillingLimitError","ranges":[{"startOffset":458,"endOffset":714,"count":20}],"isBlockCoverage":true},{"functionName":"BillingValidationError","ranges":[{"startOffset":764,"endOffset":880,"count":5}],"isBlockCoverage":true}],"startOffset":209}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"result":[{"scriptId":"233","url":"file:///Users/admin/Documents/GitHub/ugly-app/tests/server/NatsStore.test.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":35573,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":35573,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":454,"endOffset":682,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":743,"endOffset":849,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":800,"endOffset":814,"count":15}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":890,"endOffset":1000,"count":1}],"isBlockCoverage":true},{"functionName":"StringCodec","ranges":[{"startOffset":912,"endOffset":997,"count":1}],"isBlockCoverage":true},{"functionName":"encode","ranges":[{"startOffset":930,"endOffset":951,"count":0}],"isBlockCoverage":false},{"functionName":"decode","ranges":[{"startOffset":962,"endOffset":994,"count":6}],"isBlockCoverage":true},{"functionName":"createControllableSub","ranges":[{"startOffset":1540,"endOffset":2010,"count":15}],"isBlockCoverage":true},{"functionName":"sub","ranges":[{"startOffset":1659,"endOffset":1792,"count":15}],"isBlockCoverage":true},{"functionName":"next","ranges":[{"startOffset":1698,"endOffset":1785,"count":21}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1730,"endOffset":1778,"count":21}],"isBlockCoverage":true},{"functionName":"push","ranges":[{"startOffset":1811,"endOffset":1979,"count":6}],"isBlockCoverage":true},{"functionName":"tick","ranges":[{"startOffset":2103,"endOffset":2157,"count":15}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2121,"endOffset":2156,"count":15}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2214,"endOffset":12668,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2260,"endOffset":2314,"count":20}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2536,"endOffset":4734,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2613,"endOffset":3115,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3187,"endOffset":3611,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3692,"endOffset":3965,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4030,"endOffset":4327,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4426,"endOffset":4729,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4970,"endOffset":7655,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5067,"endOffset":5569,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5661,"endOffset":6083,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6163,"endOffset":6430,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6529,"endOffset":6830,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6937,"endOffset":7650,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7881,"endOffset":10681,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7928,"endOffset":7971,"count":6}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8083,"endOffset":8450,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8543,"endOffset":9096,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9193,"endOffset":9471,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9555,"endOffset":9828,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9888,"endOffset":10238,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10333,"endOffset":10676,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10383,"endOffset":10433,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10592,"endOffset":10656,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10909,"endOffset":12664,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11000,"endOffset":11300,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11359,"endOffset":11663,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11735,"endOffset":12254,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12341,"endOffset":12659,"count":1}],"isBlockCoverage":true}],"startOffset":209},{"scriptId":"235","url":"file:///Users/admin/Documents/GitHub/ugly-app/src/server/NatsStore.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":17030,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":17030,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":249,"endOffset":295,"count":5},{"startOffset":285,"endOffset":293,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":345,"endOffset":398,"count":6},{"startOffset":388,"endOffset":396,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":443,"endOffset":491,"count":6},{"startOffset":481,"endOffset":489,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":542,"endOffset":596,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":642,"endOffset":691,"count":4},{"startOffset":681,"endOffset":689,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":737,"endOffset":786,"count":0}],"isBlockCoverage":false},{"functionName":"checkLeak","ranges":[{"startOffset":1453,"endOffset":1632,"count":15},{"startOffset":1534,"endOffset":1630,"count":0}],"isBlockCoverage":true},{"functionName":"subscribeDoc","ranges":[{"startOffset":1884,"endOffset":2533,"count":5}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2116,"endOffset":2366,"count":5},{"startOffset":2161,"endOffset":2363,"count":2},{"startOffset":2251,"endOffset":2359,"count":0},{"startOffset":2363,"endOffset":2365,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2376,"endOffset":2471,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":2482,"endOffset":2530,"count":1}],"isBlockCoverage":true},{"functionName":"subscribeCollection","ranges":[{"startOffset":2891,"endOffset":3522,"count":6}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3105,"endOffset":3355,"count":6},{"startOffset":3150,"endOffset":3352,"count":3},{"startOffset":3240,"endOffset":3348,"count":0},{"startOffset":3352,"endOffset":3354,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3365,"endOffset":3460,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":3471,"endOffset":3519,"count":1}],"isBlockCoverage":true},{"functionName":"publishDocKeys","ranges":[{"startOffset":3942,"endOffset":4287,"count":6},{"startOffset":4024,"endOffset":4285,"count":7},{"startOffset":4068,"endOffset":4081,"count":6},{"startOffset":4083,"endOffset":4092,"count":2},{"startOffset":4092,"endOffset":4274,"count":5},{"startOffset":4274,"endOffset":4282,"count":1}],"isBlockCoverage":true},{"functionName":"publishDocKeyDeletes","ranges":[{"startOffset":4543,"endOffset":4895,"count":0}],"isBlockCoverage":false},{"functionName":"subscribeDocKey","ranges":[{"startOffset":5090,"endOffset":5751,"count":4}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5334,"endOffset":5584,"count":4},{"startOffset":5379,"endOffset":5581,"count":1},{"startOffset":5469,"endOffset":5577,"count":0},{"startOffset":5581,"endOffset":5583,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5594,"endOffset":5689,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":5700,"endOffset":5748,"count":1}],"isBlockCoverage":true},{"functionName":"escapeNatsToken","ranges":[{"startOffset":5753,"endOffset":5899,"count":14}],"isBlockCoverage":true}],"startOffset":209}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"result":[{"scriptId":"233","url":"file:///Users/admin/Documents/GitHub/ugly-app/tests/server/PushNotification.test.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":32410,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":32410,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":791,"endOffset":853,"count":15}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":892,"endOffset":954,"count":15}],"isBlockCoverage":true},{"functionName":"makeMockWs","ranges":[{"startOffset":957,"endOffset":1163,"count":15}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1085,"endOffset":1128,"count":12}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1219,"endOffset":9474,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1291,"endOffset":3398,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1392,"endOffset":1602,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1700,"endOffset":2406,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2508,"endOffset":2979,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3065,"endOffset":3393,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3451,"endOffset":4776,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3548,"endOffset":3960,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4034,"endOffset":4501,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4588,"endOffset":4771,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4835,"endOffset":9470,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4936,"endOffset":5562,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5666,"endOffset":6852,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6965,"endOffset":7885,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7975,"endOffset":8673,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8752,"endOffset":9465,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8860,"endOffset":8910,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9004,"endOffset":9012,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9727,"endOffset":11949,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9772,"endOffset":9920,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10029,"endOffset":10461,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10128,"endOffset":10136,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10552,"endOffset":11116,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10793,"endOffset":10801,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11212,"endOffset":11945,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11475,"endOffset":11483,"count":1}],"isBlockCoverage":true}],"startOffset":209},{"scriptId":"235","url":"file:///Users/admin/Documents/GitHub/ugly-app/src/server/PushNotification.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":14768,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":14768,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":259,"endOffset":315,"count":16},{"startOffset":305,"endOffset":313,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":354,"endOffset":396,"count":14},{"startOffset":386,"endOffset":394,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":438,"endOffset":483,"count":3},{"startOffset":473,"endOffset":481,"count":0}],"isBlockCoverage":true},{"functionName":"registerPushConnection","ranges":[{"startOffset":1048,"endOffset":2070,"count":16},{"startOffset":1136,"endOffset":1183,"count":13},{"startOffset":1486,"endOffset":1741,"count":13}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1521,"endOffset":1529,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":1630,"endOffset":1695,"count":11}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1751,"endOffset":2067,"count":4},{"startOffset":1890,"endOffset":2060,"count":3}],"isBlockCoverage":true},{"functionName":"deliverToLocalConnections","ranges":[{"startOffset":2072,"endOffset":2665,"count":11},{"startOffset":2196,"endOffset":2203,"count":0},{"startOffset":2271,"endOffset":2386,"count":0},{"startOffset":2419,"endOffset":2663,"count":14},{"startOffset":2448,"endOffset":2660,"count":13},{"startOffset":2557,"endOffset":2656,"count":1}],"isBlockCoverage":true},{"functionName":"sendPush","ranges":[{"startOffset":2836,"endOffset":3100,"count":14}],"isBlockCoverage":true},{"functionName":"sendFcmPush","ranges":[{"startOffset":3262,"endOffset":4645,"count":3},{"startOffset":3502,"endOffset":3516,"count":1},{"startOffset":3517,"endOffset":3532,"count":1},{"startOffset":3534,"endOffset":3624,"count":2},{"startOffset":3624,"endOffset":3949,"count":1},{"startOffset":3949,"endOffset":4382,"count":0},{"startOffset":4383,"endOffset":4394,"count":0},{"startOffset":4422,"endOffset":4526,"count":0},{"startOffset":4527,"endOffset":4538,"count":0},{"startOffset":4572,"endOffset":4576,"count":0},{"startOffset":4576,"endOffset":4643,"count":1}],"isBlockCoverage":true}],"startOffset":209},{"scriptId":"236","url":"file:///Users/admin/Documents/GitHub/ugly-app/src/server/Redis.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":21519,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":21519,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":249,"endOffset":295,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":340,"endOffset":388,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":427,"endOffset":469,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":508,"endOffset":550,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":589,"endOffset":631,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":674,"endOffset":720,"count":14},{"startOffset":710,"endOffset":718,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":765,"endOffset":813,"count":13},{"startOffset":803,"endOffset":811,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":860,"endOffset":910,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":951,"endOffset":995,"count":30},{"startOffset":985,"endOffset":993,"count":0}],"isBlockCoverage":true},{"functionName":"onRedisMessage","ranges":[{"startOffset":1659,"endOffset":1956,"count":0}],"isBlockCoverage":false},{"functionName":"connectRedis","ranges":[{"startOffset":2061,"endOffset":3340,"count":0}],"isBlockCoverage":false},{"functionName":"getRedisClient","ranges":[{"startOffset":3599,"endOffset":3649,"count":0}],"isBlockCoverage":false},{"functionName":"redisGet","ranges":[{"startOffset":3718,"endOffset":4032,"count":0}],"isBlockCoverage":false},{"functionName":"redisSet","ranges":[{"startOffset":4092,"endOffset":4462,"count":0}],"isBlockCoverage":false},{"functionName":"redisDel","ranges":[{"startOffset":4496,"endOffset":4620,"count":0}],"isBlockCoverage":false},{"functionName":"redisPublish","ranges":[{"startOffset":4854,"endOffset":5307,"count":14},{"startOffset":4920,"endOffset":4981,"count":0},{"startOffset":5114,"endOffset":5305,"count":13},{"startOffset":5153,"endOffset":5302,"count":11},{"startOffset":5191,"endOffset":5298,"count":0}],"isBlockCoverage":true},{"functionName":"redisSubscribe","ranges":[{"startOffset":5818,"endOffset":6951,"count":13},{"startOffset":5891,"endOffset":6711,"count":0},{"startOffset":6776,"endOffset":6827,"count":12}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6322,"endOffset":6707,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":6885,"endOffset":6948,"count":3}],"isBlockCoverage":true},{"functionName":"isRedisConnected","ranges":[{"startOffset":7027,"endOffset":7088,"count":0}],"isBlockCoverage":false},{"functionName":"closeRedis","ranges":[{"startOffset":7166,"endOffset":7452,"count":30},{"startOffset":7245,"endOffset":7299,"count":0},{"startOffset":7324,"endOffset":7450,"count":0}],"isBlockCoverage":true}],"startOffset":209}]}
|