ugly-app 0.1.75 → 0.1.77
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/MIGRATION.md +128 -0
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/createSocket.d.ts +8 -4
- package/dist/client/createSocket.d.ts.map +1 -1
- package/dist/client/createSocket.js +10 -2
- package/dist/client/createSocket.js.map +1 -1
- package/dist/server/DB.d.ts +15 -25
- package/dist/server/DB.d.ts.map +1 -1
- package/dist/server/DB.js +117 -143
- package/dist/server/DB.js.map +1 -1
- package/dist/server/NatsStore.d.ts +22 -0
- package/dist/server/NatsStore.d.ts.map +1 -1
- package/dist/server/NatsStore.js +71 -1
- package/dist/server/NatsStore.js.map +1 -1
- package/dist/server/Socket.d.ts.map +1 -1
- package/dist/server/Socket.js +91 -27
- package/dist/server/Socket.js.map +1 -1
- package/dist/shared/DB.d.ts +29 -46
- package/dist/shared/DB.d.ts.map +1 -1
- package/dist/shared/DB.js +7 -7
- package/dist/shared/DB.js.map +1 -1
- package/package.json +1 -1
- package/templates/client/allPages.ts +1 -0
- package/templates/client/pages/HomePage.tsx +5 -0
- package/templates/client/pages/UIComponentsPage.tsx +987 -0
- package/templates/shared/collections.ts +24 -27
- package/templates/shared/pages.ts +1 -0
package/MIGRATION.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Migration Guide
|
|
2
|
+
|
|
3
|
+
## trackKeys Subscriptions + parentId Removal
|
|
4
|
+
|
|
5
|
+
### What changed
|
|
6
|
+
|
|
7
|
+
- `meta.parent` renamed to `meta.cascadeFrom` on `CollectionMeta` / `CollectionDef`
|
|
8
|
+
- `meta.trackKeys` added to `CollectionMeta` for scoped real-time subscriptions
|
|
9
|
+
- All `parentId` parameters removed from `TypedDB` methods
|
|
10
|
+
- `trackDocs` wire protocol changed: `filter` replaced by `keys` + `where`
|
|
11
|
+
- Client `socket.trackDocs` signature changed
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
### 1. Rename `parent` → `cascadeFrom` in collection definitions
|
|
16
|
+
|
|
17
|
+
**Before:**
|
|
18
|
+
```ts
|
|
19
|
+
message: {
|
|
20
|
+
type: {} as Message,
|
|
21
|
+
meta: { cache: false, trackable: true, public: true, parent: 'chat' },
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**After:**
|
|
26
|
+
```ts
|
|
27
|
+
message: {
|
|
28
|
+
type: {} as Message,
|
|
29
|
+
meta: { cache: false, trackable: true, public: true, cascadeFrom: 'chat', trackKeys: ['chatId'] },
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
### 2. Remove `parentId` from all `TypedDB` calls
|
|
36
|
+
|
|
37
|
+
**Before:**
|
|
38
|
+
```ts
|
|
39
|
+
await ctx.db.setDoc(collections.message, msg, { parentId: chatId });
|
|
40
|
+
await ctx.db.setDocFields(collections.message, msgId, fields, { parentId: chatId });
|
|
41
|
+
await ctx.db.getDocs(collections.message, filter, { parentId: chatId });
|
|
42
|
+
await ctx.db.deleteDoc(collections.message, msgId, { parentId: chatId });
|
|
43
|
+
await ctx.db.deleteQuery(collections.message, match, { parentId: chatId });
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**After:**
|
|
47
|
+
```ts
|
|
48
|
+
await ctx.db.setDoc(collections.message, msg);
|
|
49
|
+
await ctx.db.setDocFields(collections.message, msgId, fields);
|
|
50
|
+
await ctx.db.getDocs(collections.message, filter);
|
|
51
|
+
await ctx.db.deleteDoc(collections.message, msgId);
|
|
52
|
+
await ctx.db.deleteQuery(collections.message, match);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Because IDs are globally unique GUIDs, no scoping is needed.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### 3. Update `socket.trackDocs` on the client
|
|
60
|
+
|
|
61
|
+
**Before:**
|
|
62
|
+
```ts
|
|
63
|
+
const unsub = socket.trackDocs(
|
|
64
|
+
'message',
|
|
65
|
+
{ chatId: '1234' },
|
|
66
|
+
(messages) => setMessages(messages),
|
|
67
|
+
{ sort: { created: -1 }, limit: 50 },
|
|
68
|
+
);
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**After:**
|
|
72
|
+
```ts
|
|
73
|
+
const unsub = socket.trackDocs(
|
|
74
|
+
collections.message,
|
|
75
|
+
{ keys: { chatId: '1234' }, sort: { created: -1 }, limit: 50 },
|
|
76
|
+
(messages) => setMessages(messages),
|
|
77
|
+
);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
For collections without `trackKeys`, pass `keys: {}` and use `where` for filters:
|
|
81
|
+
```ts
|
|
82
|
+
socket.trackDocs(collections.post, { keys: {}, where: { published: true } }, (posts) => setPosts(posts));
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### 4. Wire protocol change (client/server must deploy together)
|
|
88
|
+
|
|
89
|
+
The WebSocket `trackDocs` message shape changed:
|
|
90
|
+
|
|
91
|
+
| Field | Before | After |
|
|
92
|
+
|-------|--------|-------|
|
|
93
|
+
| `filter` | `Record<string, unknown>` (equality) | removed |
|
|
94
|
+
| `keys` | — | `Record<string, string>` (trackKeys values) |
|
|
95
|
+
| `where` | — | `Record<string, unknown>` (extra equality filters) |
|
|
96
|
+
|
|
97
|
+
This is a **breaking wire change**. Deploy client and server together.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### 5. `trackKeys` immutability constraint
|
|
102
|
+
|
|
103
|
+
Fields listed in `trackKeys` are assumed immutable after document creation. If a
|
|
104
|
+
`trackKeys` field value changes after insert, subscribers on the old key channel
|
|
105
|
+
will not be notified. Design your data model so `trackKeys` fields never change
|
|
106
|
+
(e.g. `chatId` on a message is set at creation and never updated).
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
### 6. Data migration for existing apps using `parentId`
|
|
111
|
+
|
|
112
|
+
If your app previously used `parentId` in `setDoc`/`deleteDoc` calls, your MongoDB
|
|
113
|
+
documents may have compound `_id` values in the format `parentId:childId`. These
|
|
114
|
+
documents are no longer addressable by ugly-app's TypedDB after this change.
|
|
115
|
+
|
|
116
|
+
**Before deploying server changes**, run a migration to convert compound `_id` values
|
|
117
|
+
to plain leaf IDs. Write a migration script that:
|
|
118
|
+
1. Iterates each child collection (those that had `meta.parent` set)
|
|
119
|
+
2. Finds documents whose `_id` contains `:` (compound format: `parentId:childId`)
|
|
120
|
+
3. Inserts a copy with `_id` set to the leaf segment only (`childId`)
|
|
121
|
+
4. Deletes the original compound-ID document
|
|
122
|
+
|
|
123
|
+
Run the migration against staging first, then production.
|
|
124
|
+
|
|
125
|
+
Deployment order:
|
|
126
|
+
1. Deploy ugly-app framework update
|
|
127
|
+
2. Run the `_id` migration against your MongoDB
|
|
128
|
+
3. Deploy your app's server code changes (removing `parentId` from TypedDB calls)
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.77";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AppRegistryBase, RequestInput, RequestOutput } from '../shared/Api.js';
|
|
2
|
-
import type { DBObject, UserBase } from '../shared/DB.js';
|
|
2
|
+
import type { CollectionDef, DBObject, TrackKeyOf, UserBase } from '../shared/DB.js';
|
|
3
3
|
type Unsubscribe = () => void;
|
|
4
4
|
type TrackCallback<T> = (data: T) => void;
|
|
5
5
|
export interface AppSocket<R extends AppRegistryBase> {
|
|
@@ -7,11 +7,15 @@ export interface AppSocket<R extends AppRegistryBase> {
|
|
|
7
7
|
request<K extends keyof R['requests']>(name: K, input: RequestInput<R['requests'][K]>): Promise<RequestOutput<R['requests'][K]>>;
|
|
8
8
|
getDoc<T extends DBObject>(collection: string, id: string): Promise<T | null>;
|
|
9
9
|
trackDoc<T extends DBObject>(collection: string, id: string, cb: TrackCallback<T | null>): Unsubscribe;
|
|
10
|
-
trackDocs<T extends DBObject
|
|
11
|
-
|
|
10
|
+
trackDocs<T extends DBObject, C extends CollectionDef<T>>(collection: C, params: {
|
|
11
|
+
keys: {
|
|
12
|
+
[K in TrackKeyOf<C>]?: string;
|
|
13
|
+
};
|
|
14
|
+
where?: Partial<T>;
|
|
15
|
+
sort?: Partial<Record<keyof T, 1 | -1>>;
|
|
12
16
|
limit?: number;
|
|
13
17
|
skip?: number;
|
|
14
|
-
}): Unsubscribe;
|
|
18
|
+
}, cb: TrackCallback<T[]>): Unsubscribe;
|
|
15
19
|
uploadFile(file: File, key: string): Promise<string>;
|
|
16
20
|
disconnect(): void;
|
|
17
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSocket.d.ts","sourceRoot":"","sources":["../../src/client/createSocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"createSocket.d.ts","sourceRoot":"","sources":["../../src/client/createSocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAErF,KAAK,WAAW,GAAG,MAAM,IAAI,CAAC;AAC9B,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAE1C,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,eAAe;IAClD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,UAAU,CAAC,EACnC,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,CAAC,SAAS,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9E,QAAQ,CAAC,CAAC,SAAS,QAAQ,EACzB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,GAC1B,WAAW,CAAC;IACf,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EACtD,UAAU,EAAE,CAAC,EACb,MAAM,EAAE;QACN,IAAI,EAAE;aAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM;SAAE,CAAC;QACxC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,EACD,EAAE,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,GACrB,WAAW,CAAC;IACf,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,UAAU,IAAI,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,eAAe;IAC5D,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,eAAe,EACpD,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC3B,SAAS,CAAC,CAAC,CAAC,CAsLd"}
|
|
@@ -97,10 +97,18 @@ export function createSocket(opts) {
|
|
|
97
97
|
rpc('unsubscribe', { subId }).catch(() => { });
|
|
98
98
|
};
|
|
99
99
|
},
|
|
100
|
-
trackDocs(collection,
|
|
100
|
+
trackDocs(collection, params, cb) {
|
|
101
101
|
const subId = nextId();
|
|
102
102
|
trackCallbacks.set(subId, cb);
|
|
103
|
-
rpc('trackDocs', {
|
|
103
|
+
rpc('trackDocs', {
|
|
104
|
+
collection: collection.name,
|
|
105
|
+
keys: params.keys,
|
|
106
|
+
where: params.where,
|
|
107
|
+
subId,
|
|
108
|
+
sort: params.sort,
|
|
109
|
+
limit: params.limit,
|
|
110
|
+
skip: params.skip,
|
|
111
|
+
}).catch(console.error);
|
|
104
112
|
return () => {
|
|
105
113
|
trackCallbacks.delete(subId);
|
|
106
114
|
rpc('unsubscribe', { subId }).catch(() => { });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSocket.js","sourceRoot":"","sources":["../../src/client/createSocket.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createSocket.js","sourceRoot":"","sources":["../../src/client/createSocket.ts"],"names":[],"mappings":"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"}
|
package/dist/server/DB.d.ts
CHANGED
|
@@ -1,37 +1,27 @@
|
|
|
1
1
|
import { Document, Filter, MongoClient } from 'mongodb';
|
|
2
2
|
import { CollectionDefRegistry, DBObject, DocFields, MongoUpdateOp, TypedDB } from '../shared/DB.js';
|
|
3
|
-
/**
|
|
4
|
-
* Validate that a raw leaf id does not contain ':'.
|
|
5
|
-
* Compound ids (parentId) legitimately contain ':' and are NOT validated here.
|
|
6
|
-
*/
|
|
7
|
-
export declare function assertValidId(id: string): void;
|
|
8
3
|
export declare function initMongoClient(uri: string, dbName?: string): Promise<void>;
|
|
9
4
|
export declare function getMongoClient(): Promise<MongoClient>;
|
|
10
5
|
export declare function getDbName(): string;
|
|
11
6
|
export declare function stopMongo(): Promise<void>;
|
|
12
|
-
export declare function getDoc<T extends DBObject>(collection: string, id: string
|
|
7
|
+
export declare function getDoc<T extends DBObject>(collection: string, id: string): Promise<T | null>;
|
|
13
8
|
export declare function setDoc<T extends DBObject>(collection: string, doc: T, options?: {
|
|
14
9
|
skipIfExists?: boolean;
|
|
15
|
-
parentId?: string;
|
|
16
10
|
}): Promise<boolean>;
|
|
17
|
-
export declare function setDocFields<T extends DBObject>(collection: string, id: string, fields: DocFields<T
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export declare function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}): Promise<T | null>;
|
|
32
|
-
export declare function deleteDoc(collection: string, id: string, options?: {
|
|
33
|
-
parentId?: string;
|
|
34
|
-
}): Promise<void>;
|
|
11
|
+
export declare function setDocFields<T extends DBObject>(collection: string, id: string, fields: DocFields<T>): Promise<T>;
|
|
12
|
+
export declare function setDocFieldsOrIgnore<T extends DBObject>(collection: string, id: string, fields: DocFields<T>): Promise<T | null>;
|
|
13
|
+
export declare function setDocFieldsOrCreate<T extends DBObject>(collection: string, id: string, fields: DocFields<T>, obj: T): Promise<T>;
|
|
14
|
+
export declare function setDocOp<T extends DBObject>(collection: string, id: string, op: MongoUpdateOp<T>): Promise<T>;
|
|
15
|
+
export declare function setDocOpOrIgnore<T extends DBObject>(collection: string, id: string, op: MongoUpdateOp<T>): Promise<T | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Delete a document from a collection. Publishes a doc-level delete notification.
|
|
18
|
+
*
|
|
19
|
+
* NOTE: This standalone function does not have access to collection metadata,
|
|
20
|
+
* so it cannot publish key-channel delete notifications (publishDocKeyDeletes).
|
|
21
|
+
* Use createTypedDB's deleteDoc method instead if the collection declares
|
|
22
|
+
* trackKeys — that method calls publishDocKeyDeletes after deletion.
|
|
23
|
+
*/
|
|
24
|
+
export declare function deleteDoc(collection: string, id: string): Promise<void>;
|
|
35
25
|
export declare function getDocs<T extends DBObject>(collection: string, filter?: Filter<Document>, options?: {
|
|
36
26
|
sort?: Record<string, 1 | -1>;
|
|
37
27
|
limit?: number;
|
package/dist/server/DB.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DB.d.ts","sourceRoot":"","sources":["../../src/server/DB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAoB,MAAM,SAAS,CAAC;AAC1E,OAAO,EAEL,qBAAqB,EACrB,QAAQ,EACR,SAAS,EACT,aAAa,EACb,OAAO,EACR,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"DB.d.ts","sourceRoot":"","sources":["../../src/server/DB.ts"],"names":[],"mappings":"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"}
|