@rool-dev/svelte 0.10.2-dev.9df035a → 0.10.2-dev.a0fe230
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 +114 -76
- package/dist/channel.svelte.d.ts +13 -9
- package/dist/channel.svelte.d.ts.map +1 -1
- package/dist/channel.svelte.js +34 -25
- package/dist/file-tree.svelte.d.ts +4 -4
- package/dist/file-tree.svelte.d.ts.map +1 -1
- package/dist/file-tree.svelte.js +12 -31
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/rool.svelte.d.ts +0 -2
- package/dist/rool.svelte.d.ts.map +1 -1
- package/dist/rool.svelte.js +0 -4
- package/dist/space.svelte.d.ts +1 -1
- package/dist/space.svelte.d.ts.map +1 -1
- package/dist/space.svelte.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Svelte 5 bindings for Rool Spaces. Adds reactive state to the SDK using `$state` runes.
|
|
4
4
|
|
|
5
|
-
**Requires Svelte 5.** For core concepts (objects, references, AI
|
|
5
|
+
**Requires Svelte 5.** For core concepts (objects, references, AI, WebDAV files, undo/redo), see the [SDK documentation](../sdk/README.md).
|
|
6
6
|
|
|
7
7
|
## Installation
|
|
8
8
|
|
|
@@ -13,16 +13,18 @@ npm install @rool-dev/svelte
|
|
|
13
13
|
## Quick Start
|
|
14
14
|
|
|
15
15
|
```svelte
|
|
16
|
-
<script>
|
|
17
|
-
import { createRool } from '@rool-dev/svelte';
|
|
16
|
+
<script lang="ts">
|
|
17
|
+
import { createRool, type ReactiveChannel } from '@rool-dev/svelte';
|
|
18
18
|
|
|
19
19
|
const rool = createRool();
|
|
20
|
-
rool.init();
|
|
20
|
+
void rool.init();
|
|
21
21
|
|
|
22
|
-
let channel = $state(null);
|
|
22
|
+
let channel = $state<ReactiveChannel | null>(null);
|
|
23
23
|
</script>
|
|
24
24
|
|
|
25
|
-
{#if
|
|
25
|
+
{#if rool.authenticated === null}
|
|
26
|
+
<p>Checking session...</p>
|
|
27
|
+
{:else if !rool.authenticated}
|
|
26
28
|
<button onclick={() => rool.login('My App')}>Login</button>
|
|
27
29
|
{:else}
|
|
28
30
|
<h1>My Spaces</h1>
|
|
@@ -48,14 +50,15 @@ The Svelte wrapper adds reactive state on top of the SDK:
|
|
|
48
50
|
| Reactive Property | Description |
|
|
49
51
|
|-------------------|-------------|
|
|
50
52
|
| `rool.authenticated` | Auth state (`null` = checking, `true`/`false` = known) |
|
|
53
|
+
| `rool.currentUser` | Current user profile after authentication |
|
|
51
54
|
| `rool.spaces` | List of available spaces |
|
|
52
55
|
| `rool.spacesLoading` | Whether spaces are loading |
|
|
53
56
|
| `rool.spacesError` | Error from loading spaces |
|
|
54
|
-
| `rool.connectionState` | SSE connection state |
|
|
57
|
+
| `rool.connectionState` | Client SSE connection state |
|
|
55
58
|
| `rool.userStorage` | User storage (cross-device preferences) |
|
|
56
59
|
| `space.fileTree` | Canonical reactive WebDAV tree for `/`, including `/space` objects and `/rool-drive` user files |
|
|
57
|
-
| `channel.interactions` |
|
|
58
|
-
| `channel.
|
|
60
|
+
| `channel.interactions` | Current conversation interactions |
|
|
61
|
+
| `channel.objectPaths` | Object paths derived from `space.fileTree` |
|
|
59
62
|
| `channel.collections` | Collection directories derived from `space.fileTree` |
|
|
60
63
|
| `channel.conversations` | Conversations in this channel (auto-updates on create/delete/rename) |
|
|
61
64
|
| `thread.interactions` | Interactions for a specific conversation (auto-updates) |
|
|
@@ -75,10 +78,10 @@ space.fileTree.nodes; // ReactiveFileNode[]
|
|
|
75
78
|
space.fileTree.byPath['/space']; // lookup by machine/WebDAV path
|
|
76
79
|
space.fileTree.childrenOf('/'); // /space and /rool-drive
|
|
77
80
|
space.fileTree.childrenOf('/rool-drive');
|
|
78
|
-
space.fileTree.
|
|
81
|
+
space.fileTree.objectPaths(); // object paths from /space/**/*.json
|
|
79
82
|
```
|
|
80
83
|
|
|
81
|
-
Use this tree when UI needs to react to both files and objects. Object helpers like `channel.object()`, `channel.watch()`, `channel.
|
|
84
|
+
Use this tree when UI needs to react to both files and objects. Object helpers like `channel.object()`, `channel.watch()`, `channel.objectPaths`, and `channel.collections` are backed by this tree.
|
|
82
85
|
|
|
83
86
|
## API
|
|
84
87
|
|
|
@@ -87,7 +90,7 @@ Use this tree when UI needs to react to both files and objects. Object helpers l
|
|
|
87
90
|
```typescript
|
|
88
91
|
const rool = createRool();
|
|
89
92
|
|
|
90
|
-
rool.init();
|
|
93
|
+
void rool.init(); // Process auth callbacks (call on app startup)
|
|
91
94
|
rool.login('My App'); // Redirect to login page
|
|
92
95
|
rool.signup('My App'); // Redirect to signup page
|
|
93
96
|
rool.verify(token); // Sign in from an email verification link (used by the official Rool app)
|
|
@@ -106,6 +109,7 @@ rool.destroy(); // Clean up all resources
|
|
|
106
109
|
// rool.spacesError → Error | null
|
|
107
110
|
// rool.connectionState → 'connected' | 'disconnected' | 'reconnecting'
|
|
108
111
|
// rool.userStorage → Record<string, unknown>
|
|
112
|
+
// rool.currentUser → CurrentUser | null
|
|
109
113
|
</script>
|
|
110
114
|
|
|
111
115
|
{#if rool.spacesLoading}
|
|
@@ -124,9 +128,10 @@ rool.destroy(); // Clean up all resources
|
|
|
124
128
|
Reactive cross-device storage for user preferences. Synced from server on `init()`, then kept up-to-date via SSE.
|
|
125
129
|
|
|
126
130
|
```svelte
|
|
127
|
-
<script>
|
|
131
|
+
<script lang="ts">
|
|
132
|
+
import { createRool } from '@rool-dev/svelte';
|
|
128
133
|
const rool = createRool();
|
|
129
|
-
rool.init();
|
|
134
|
+
void rool.init();
|
|
130
135
|
</script>
|
|
131
136
|
|
|
132
137
|
<!-- Reactive binding to storage values -->
|
|
@@ -137,9 +142,7 @@ Reactive cross-device storage for user preferences. Synced from server on `init(
|
|
|
137
142
|
{/if}
|
|
138
143
|
|
|
139
144
|
<!-- Theme toggle -->
|
|
140
|
-
<button onclick={() => rool.setUserStorage('theme',
|
|
141
|
-
rool.userStorage.theme === 'dark' ? 'light' : 'dark'
|
|
142
|
-
)}>
|
|
145
|
+
<button onclick={() => rool.setUserStorage('theme', rool.userStorage.theme === 'dark' ? 'light' : 'dark')}>
|
|
143
146
|
Toggle theme
|
|
144
147
|
</button>
|
|
145
148
|
```
|
|
@@ -176,47 +179,55 @@ space.close();
|
|
|
176
179
|
|
|
177
180
|
### ReactiveChannel
|
|
178
181
|
|
|
179
|
-
`space.openChannel()` returns a `ReactiveChannel` — the SDK's `RoolChannel` with reactive `interactions` and file-tree-backed object helpers:
|
|
182
|
+
`space.openChannel()` returns a `ReactiveChannel` — the SDK's `RoolChannel` with reactive `interactions`, `objectPaths`, `collections`, `conversations`, and file-tree-backed object helpers:
|
|
180
183
|
|
|
181
184
|
```svelte
|
|
182
|
-
<script>
|
|
183
|
-
|
|
184
|
-
|
|
185
|
+
<script lang="ts">
|
|
186
|
+
import { createRool, type ReactiveChannel, type ReactiveSpace } from '@rool-dev/svelte';
|
|
187
|
+
|
|
188
|
+
const rool = createRool();
|
|
189
|
+
void rool.init();
|
|
185
190
|
|
|
186
|
-
|
|
191
|
+
let space = $state<ReactiveSpace | null>(null);
|
|
192
|
+
let channel = $state<ReactiveChannel | null>(null);
|
|
193
|
+
|
|
194
|
+
async function open(spaceId: string) {
|
|
187
195
|
space = await rool.openSpace(spaceId);
|
|
188
196
|
channel = await space.openChannel('main');
|
|
189
197
|
}
|
|
190
198
|
</script>
|
|
191
199
|
|
|
192
200
|
{#if channel}
|
|
193
|
-
<!-- Reactive: updates
|
|
201
|
+
<!-- Reactive: updates when the current conversation changes -->
|
|
194
202
|
{#each channel.interactions as interaction}
|
|
195
203
|
<div>
|
|
196
|
-
<strong>{interaction.operation}</strong>: {interaction.output}
|
|
204
|
+
<strong>{interaction.operation}</strong>: {interaction.output ?? ''}
|
|
197
205
|
</div>
|
|
198
206
|
{/each}
|
|
199
207
|
|
|
200
208
|
<!-- All SDK methods work directly -->
|
|
201
|
-
<button onclick={() => channel.prompt('Hello')}>Send</button>
|
|
209
|
+
<button onclick={() => void channel.prompt('Hello')}>Send</button>
|
|
202
210
|
{/if}
|
|
203
211
|
```
|
|
204
212
|
|
|
205
213
|
### Reactive Object
|
|
206
214
|
|
|
207
|
-
Track a single object by
|
|
215
|
+
Track a single object by machine path with auto-updates:
|
|
208
216
|
|
|
209
217
|
```svelte
|
|
210
|
-
<script>
|
|
211
|
-
|
|
212
|
-
|
|
218
|
+
<script lang="ts">
|
|
219
|
+
import { createRool, type ReactiveChannel, type ReactiveObject } from '@rool-dev/svelte';
|
|
220
|
+
|
|
221
|
+
const rool = createRool();
|
|
222
|
+
void rool.init();
|
|
213
223
|
|
|
214
|
-
let
|
|
224
|
+
let channel = $state<ReactiveChannel | null>(null);
|
|
225
|
+
let item = $state<ReactiveObject | null>(null);
|
|
215
226
|
|
|
216
|
-
async function open(spaceId,
|
|
217
|
-
space = await rool.openSpace(spaceId);
|
|
227
|
+
async function open(spaceId: string, path: string) {
|
|
228
|
+
const space = await rool.openSpace(spaceId);
|
|
218
229
|
channel = await space.openChannel('main');
|
|
219
|
-
item = channel.object(
|
|
230
|
+
item = channel.object(path); // e.g. '/space/article/welcome.json'
|
|
220
231
|
}
|
|
221
232
|
</script>
|
|
222
233
|
|
|
@@ -224,7 +235,7 @@ Track a single object by location with auto-updates:
|
|
|
224
235
|
{#if item.loading}
|
|
225
236
|
<p>Loading...</p>
|
|
226
237
|
{:else if item.data}
|
|
227
|
-
<div>{item.data.body.title}</div>
|
|
238
|
+
<div>{String(item.data.body.title ?? '')}</div>
|
|
228
239
|
{:else}
|
|
229
240
|
<p>Object not found</p>
|
|
230
241
|
{/if}
|
|
@@ -248,13 +259,16 @@ item.close() // Stop listening for updates
|
|
|
248
259
|
Create auto-updating watches of objects filtered by field values:
|
|
249
260
|
|
|
250
261
|
```svelte
|
|
251
|
-
<script>
|
|
252
|
-
|
|
253
|
-
let articles = $state(null);
|
|
262
|
+
<script lang="ts">
|
|
263
|
+
import { createRool, type ReactiveChannel, type ReactiveSpace, type ReactiveWatch } from '@rool-dev/svelte';
|
|
254
264
|
|
|
255
|
-
|
|
265
|
+
const rool = createRool();
|
|
266
|
+
void rool.init();
|
|
256
267
|
|
|
257
|
-
|
|
268
|
+
let space = $state<ReactiveSpace | null>(null);
|
|
269
|
+
let channel = $state<ReactiveChannel | null>(null);
|
|
270
|
+
let articles = $state<ReactiveWatch | null>(null);
|
|
271
|
+
async function open(spaceId: string) {
|
|
258
272
|
space = await rool.openSpace(spaceId);
|
|
259
273
|
channel = await space.openChannel('main');
|
|
260
274
|
// Create a reactive watch of all objects in the 'article' collection
|
|
@@ -267,7 +281,7 @@ Create auto-updating watches of objects filtered by field values:
|
|
|
267
281
|
<p>Loading...</p>
|
|
268
282
|
{:else}
|
|
269
283
|
{#each articles.objects as article}
|
|
270
|
-
<div>{article.body.title}</div>
|
|
284
|
+
<div>{String(article.body.title ?? '')}</div>
|
|
271
285
|
{/each}
|
|
272
286
|
{/if}
|
|
273
287
|
{/if}
|
|
@@ -297,36 +311,51 @@ articles.close() // Stop listening for updates
|
|
|
297
311
|
|
|
298
312
|
### Reactive Channel List
|
|
299
313
|
|
|
300
|
-
`space.channels` is a reactive `ChannelInfo[]`
|
|
314
|
+
`space.channels` is a reactive `ChannelInfo[]` on an opened `ReactiveSpace`. If you only need a live channel list without managing a `ReactiveSpace`, use `rool.channels(spaceId)` and call `close()` when done.
|
|
301
315
|
|
|
302
316
|
```svelte
|
|
303
|
-
<script>
|
|
304
|
-
|
|
317
|
+
<script lang="ts">
|
|
318
|
+
import { createRool, type ReactiveSpace } from '@rool-dev/svelte';
|
|
319
|
+
|
|
320
|
+
const rool = createRool();
|
|
321
|
+
void rool.init();
|
|
305
322
|
|
|
306
|
-
|
|
323
|
+
let space = $state<ReactiveSpace | null>(null);
|
|
324
|
+
async function open(spaceId: string) {
|
|
307
325
|
space = await rool.openSpace(spaceId);
|
|
308
326
|
}
|
|
309
327
|
</script>
|
|
310
328
|
|
|
311
329
|
{#if space}
|
|
312
330
|
{#each space.channels as ch}
|
|
313
|
-
<button onclick={() => space.openChannel(ch.id)}>{ch.name ?? ch.id}</button>
|
|
331
|
+
<button onclick={() => void space.openChannel(ch.id)}>{ch.name ?? ch.id}</button>
|
|
314
332
|
{/each}
|
|
315
333
|
{/if}
|
|
316
334
|
```
|
|
317
335
|
|
|
336
|
+
```typescript
|
|
337
|
+
const channels = rool.channels(spaceId);
|
|
338
|
+
channels.list; // ChannelInfo[]
|
|
339
|
+
channels.loading; // boolean
|
|
340
|
+
await channels.refresh();
|
|
341
|
+
channels.close();
|
|
342
|
+
```
|
|
343
|
+
|
|
318
344
|
### Reactive Conversation Handle
|
|
319
345
|
|
|
320
346
|
For apps with multiple independent interaction threads (e.g., chat with threads), use `channel.conversation()` to get a handle with reactive interactions:
|
|
321
347
|
|
|
322
348
|
```svelte
|
|
323
|
-
<script>
|
|
324
|
-
|
|
325
|
-
let thread = $state(null);
|
|
349
|
+
<script lang="ts">
|
|
350
|
+
import { createRool, type ReactiveChannel, type ReactiveConversationHandle, type ReactiveSpace } from '@rool-dev/svelte';
|
|
326
351
|
|
|
327
|
-
|
|
352
|
+
const rool = createRool();
|
|
353
|
+
void rool.init();
|
|
328
354
|
|
|
329
|
-
|
|
355
|
+
let space = $state<ReactiveSpace | null>(null);
|
|
356
|
+
let channel = $state<ReactiveChannel | null>(null);
|
|
357
|
+
let thread = $state<ReactiveConversationHandle | null>(null);
|
|
358
|
+
async function openThread(spaceId: string, threadId: string) {
|
|
330
359
|
space = await rool.openSpace(spaceId);
|
|
331
360
|
channel = await space.openChannel('main');
|
|
332
361
|
thread = channel.conversation(threadId);
|
|
@@ -338,17 +367,18 @@ For apps with multiple independent interaction threads (e.g., chat with threads)
|
|
|
338
367
|
<div>{interaction.output}</div>
|
|
339
368
|
{/each}
|
|
340
369
|
|
|
341
|
-
<button onclick={() => thread.prompt('Hello')}>Send</button>
|
|
370
|
+
<button onclick={() => void thread.prompt('Hello')}>Send</button>
|
|
342
371
|
{/if}
|
|
343
372
|
```
|
|
344
373
|
|
|
345
374
|
```typescript
|
|
346
375
|
// Reactive state
|
|
347
|
-
thread.interactions // $state<Interaction[]> —
|
|
376
|
+
thread.interactions // $state<Interaction[]> — updates from space/channel events
|
|
348
377
|
|
|
349
|
-
//
|
|
378
|
+
// Conversation-scoped methods
|
|
350
379
|
await thread.prompt('Hello')
|
|
351
|
-
await thread.
|
|
380
|
+
await thread.putObject('/space/note/welcome.json', { text: 'Note' })
|
|
381
|
+
await thread.patchObject('/space/note/welcome.json', { data: { text: 'Updated' } })
|
|
352
382
|
await thread.setSystemInstruction('Respond in haiku')
|
|
353
383
|
await thread.rename('Research Thread')
|
|
354
384
|
thread.getInteractions() // Manual read
|
|
@@ -358,7 +388,7 @@ thread.getSystemInstruction()
|
|
|
358
388
|
thread.close() // Stop listening for updates
|
|
359
389
|
```
|
|
360
390
|
|
|
361
|
-
Conversations are auto-created
|
|
391
|
+
Conversations are auto-created when you first write history or settings. Real-time events are owned by the space subscription; conversation handles subscribe to channel events locally.
|
|
362
392
|
|
|
363
393
|
### Channel Management
|
|
364
394
|
|
|
@@ -384,13 +414,13 @@ channel.name
|
|
|
384
414
|
channel.role
|
|
385
415
|
channel.channelId
|
|
386
416
|
|
|
387
|
-
// Object operations — addressed by
|
|
388
|
-
|
|
389
|
-
await channel.
|
|
390
|
-
await channel.
|
|
391
|
-
await channel.
|
|
392
|
-
await channel.moveObject(
|
|
393
|
-
await channel.deleteObjects([
|
|
417
|
+
// Object operations — addressed by exact machine paths
|
|
418
|
+
const path = '/space/note/welcome.json';
|
|
419
|
+
await channel.getObject(path)
|
|
420
|
+
await channel.putObject(path, { text: 'Hello' })
|
|
421
|
+
await channel.patchObject(path, { data: { text: 'Updated' } })
|
|
422
|
+
await channel.moveObject(path, '/space/note/renamed.json')
|
|
423
|
+
await channel.deleteObjects(['/space/note/renamed.json'])
|
|
394
424
|
|
|
395
425
|
// AI
|
|
396
426
|
await channel.prompt('Summarize everything')
|
|
@@ -401,7 +431,7 @@ await channel.createCollection('article', [
|
|
|
401
431
|
{ name: 'title', type: { kind: 'string' } },
|
|
402
432
|
{ name: 'status', type: { kind: 'enum', values: ['draft', 'published'] } },
|
|
403
433
|
])
|
|
404
|
-
await channel.alterCollection('article',
|
|
434
|
+
await channel.alterCollection('article', updatedFields)
|
|
405
435
|
await channel.dropCollection('article')
|
|
406
436
|
|
|
407
437
|
// Undo/Redo
|
|
@@ -419,7 +449,7 @@ await channel.renameConversation('Research')
|
|
|
419
449
|
// Conversation handles (reactive interactions for specific conversations)
|
|
420
450
|
const thread = channel.conversation('thread-42');
|
|
421
451
|
await thread.prompt('Hello'); // Uses thread-42's interaction history
|
|
422
|
-
// thread.interactions is reactive $state —
|
|
452
|
+
// thread.interactions is reactive $state — updates from space/channel events
|
|
423
453
|
thread.close(); // Stop listening when done
|
|
424
454
|
|
|
425
455
|
// Channel admin
|
|
@@ -431,19 +461,23 @@ See the [SDK documentation](../sdk/README.md) for complete API details.
|
|
|
431
461
|
### Utilities
|
|
432
462
|
|
|
433
463
|
```typescript
|
|
434
|
-
import {
|
|
464
|
+
import { machinePath, machineUri, isObjectPath, generateId } from '@rool-dev/svelte';
|
|
465
|
+
|
|
466
|
+
machinePath('rool-machine:/rool-drive/docs/read%20me.md');
|
|
467
|
+
// '/rool-drive/docs/read me.md'
|
|
435
468
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
469
|
+
machineUri('/space/article/welcome.json');
|
|
470
|
+
// 'rool-machine:/space/article/welcome.json'
|
|
471
|
+
|
|
472
|
+
isObjectPath('/space/article/welcome.json'); // true
|
|
473
|
+
generateId(); // 6-character alphanumeric ID
|
|
440
474
|
```
|
|
441
475
|
|
|
442
476
|
## Exported Types
|
|
443
477
|
|
|
444
478
|
```typescript
|
|
445
479
|
// Package types
|
|
446
|
-
import type { Rool, ReactiveChannel, ReactiveConversationHandle, ReactiveObject, ReactiveWatch, WatchOptions, ReactiveChannelList } from '@rool-dev/svelte';
|
|
480
|
+
import type { Rool, ReactiveSpace, ReactiveChannel, ReactiveConversationHandle, ReactiveObject, ReactiveWatch, WatchOptions, ReactiveChannelList, ReactiveFileTree, ReactiveFileNode, ReactiveFileRoot, ReactiveFileTreeEvent, ReactiveFileTreeSyncResult } from '@rool-dev/svelte';
|
|
447
481
|
|
|
448
482
|
// Re-exported from @rool-dev/sdk
|
|
449
483
|
import type {
|
|
@@ -453,6 +487,7 @@ import type {
|
|
|
453
487
|
RoolSpace,
|
|
454
488
|
RoolSpaceInfo,
|
|
455
489
|
RoolObject,
|
|
490
|
+
GetObjectsResult,
|
|
456
491
|
RoolObjectStat,
|
|
457
492
|
RoolUserRole,
|
|
458
493
|
ConnectionState,
|
|
@@ -462,23 +497,26 @@ import type {
|
|
|
462
497
|
CurrentUser,
|
|
463
498
|
Interaction,
|
|
464
499
|
PromptOptions,
|
|
465
|
-
|
|
500
|
+
PromptAttachment,
|
|
466
501
|
UpdateObjectOptions,
|
|
467
502
|
MoveObjectOptions,
|
|
503
|
+
CollectionOptions,
|
|
468
504
|
FieldType,
|
|
469
505
|
FieldDef,
|
|
470
506
|
CollectionDef,
|
|
471
507
|
SpaceSchema,
|
|
472
508
|
SpaceMember,
|
|
473
509
|
UserResult,
|
|
510
|
+
SpaceFileStorageUsage,
|
|
511
|
+
RoolSpaceEvents,
|
|
512
|
+
WebDAVDepth,
|
|
513
|
+
WebDAVSyncLevel,
|
|
514
|
+
WebDAVPropName,
|
|
515
|
+
WebDAVResponse,
|
|
516
|
+
WebDAVProps,
|
|
474
517
|
} from '@rool-dev/svelte';
|
|
475
518
|
```
|
|
476
519
|
|
|
477
|
-
## Examples
|
|
478
|
-
|
|
479
|
-
- [soft-sql](../../examples/soft-sql) — SQL-style natural language queries with live tool call progress
|
|
480
|
-
- [flashcards](../../examples/flashcards) — Spaced repetition with AI-generated cards
|
|
481
|
-
|
|
482
520
|
## License
|
|
483
521
|
|
|
484
522
|
MIT - see [LICENSE](../../LICENSE) for details.
|
package/dist/channel.svelte.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ declare class ReactiveWatchImpl {
|
|
|
22
22
|
objects: RoolObject[];
|
|
23
23
|
loading: boolean;
|
|
24
24
|
constructor(channel: RoolChannel, fileTree: ReactiveFileTree, options: WatchOptions);
|
|
25
|
-
/** Re-fetch matching objects using the canonical file tree for
|
|
25
|
+
/** Re-fetch matching objects using the canonical file tree for paths. */
|
|
26
26
|
refresh(): Promise<void>;
|
|
27
27
|
close(): void;
|
|
28
28
|
}
|
|
@@ -34,7 +34,7 @@ declare class ReactiveObjectImpl {
|
|
|
34
34
|
#private;
|
|
35
35
|
data: RoolObject | undefined;
|
|
36
36
|
loading: boolean;
|
|
37
|
-
constructor(channel: RoolChannel, fileTree: ReactiveFileTree,
|
|
37
|
+
constructor(channel: RoolChannel, fileTree: ReactiveFileTree, path: string);
|
|
38
38
|
refresh(): Promise<void>;
|
|
39
39
|
close(): void;
|
|
40
40
|
}
|
|
@@ -51,11 +51,11 @@ declare class ReactiveConversationHandleImpl {
|
|
|
51
51
|
getSystemInstruction(): string | undefined;
|
|
52
52
|
setSystemInstruction(...args: Parameters<ConversationHandle['setSystemInstruction']>): Promise<void>;
|
|
53
53
|
rename(...args: Parameters<ConversationHandle['rename']>): Promise<void>;
|
|
54
|
-
|
|
54
|
+
putObject(...args: Parameters<ConversationHandle['putObject']>): Promise<{
|
|
55
55
|
object: RoolObject;
|
|
56
56
|
message: string;
|
|
57
57
|
}>;
|
|
58
|
-
|
|
58
|
+
patchObject(...args: Parameters<ConversationHandle['patchObject']>): Promise<{
|
|
59
59
|
object: RoolObject;
|
|
60
60
|
message: string;
|
|
61
61
|
}>;
|
|
@@ -64,6 +64,8 @@ declare class ReactiveConversationHandleImpl {
|
|
|
64
64
|
message: string;
|
|
65
65
|
}>;
|
|
66
66
|
deleteObjects(...args: Parameters<ConversationHandle['deleteObjects']>): Promise<void>;
|
|
67
|
+
/** @deprecated Use deleteObjects instead. */
|
|
68
|
+
deletePaths(...args: Parameters<ConversationHandle['deletePaths']>): Promise<void>;
|
|
67
69
|
prompt(...args: Parameters<ConversationHandle['prompt']>): Promise<{
|
|
68
70
|
message: string;
|
|
69
71
|
objects: RoolObject[];
|
|
@@ -82,7 +84,7 @@ export type ReactiveConversationHandle = ReactiveConversationHandleImpl;
|
|
|
82
84
|
declare class ReactiveChannelImpl {
|
|
83
85
|
#private;
|
|
84
86
|
interactions: Interaction[];
|
|
85
|
-
|
|
87
|
+
objectPaths: string[];
|
|
86
88
|
collections: string[];
|
|
87
89
|
conversations: ConversationInfo[];
|
|
88
90
|
constructor(channel: RoolChannel, fileTree: ReactiveFileTree);
|
|
@@ -99,11 +101,11 @@ declare class ReactiveChannelImpl {
|
|
|
99
101
|
getObject(...args: Parameters<RoolChannel['getObject']>): Promise<RoolObject | undefined>;
|
|
100
102
|
getObjects(...args: Parameters<RoolChannel['getObjects']>): Promise<import("@rool-dev/sdk").GetObjectsResult>;
|
|
101
103
|
stat(...args: Parameters<RoolChannel['stat']>): import("@rool-dev/sdk").RoolObjectStat | undefined;
|
|
102
|
-
|
|
104
|
+
putObject(...args: Parameters<RoolChannel['putObject']>): Promise<{
|
|
103
105
|
object: RoolObject;
|
|
104
106
|
message: string;
|
|
105
107
|
}>;
|
|
106
|
-
|
|
108
|
+
patchObject(...args: Parameters<RoolChannel['patchObject']>): Promise<{
|
|
107
109
|
object: RoolObject;
|
|
108
110
|
message: string;
|
|
109
111
|
}>;
|
|
@@ -112,6 +114,8 @@ declare class ReactiveChannelImpl {
|
|
|
112
114
|
message: string;
|
|
113
115
|
}>;
|
|
114
116
|
deleteObjects(...args: Parameters<RoolChannel['deleteObjects']>): Promise<void>;
|
|
117
|
+
/** @deprecated Use deleteObjects instead. */
|
|
118
|
+
deletePaths(...args: Parameters<RoolChannel['deletePaths']>): Promise<void>;
|
|
115
119
|
prompt(...args: Parameters<RoolChannel['prompt']>): Promise<{
|
|
116
120
|
message: string;
|
|
117
121
|
objects: RoolObject[];
|
|
@@ -144,9 +148,9 @@ declare class ReactiveChannelImpl {
|
|
|
144
148
|
on(...args: Parameters<RoolChannel['on']>): () => void;
|
|
145
149
|
off(...args: Parameters<RoolChannel['off']>): void;
|
|
146
150
|
/**
|
|
147
|
-
* Create a reactive object that auto-updates when the object at this
|
|
151
|
+
* Create a reactive object that auto-updates when the object at this path changes.
|
|
148
152
|
*/
|
|
149
|
-
object(
|
|
153
|
+
object(path: string): ReactiveObject;
|
|
150
154
|
/**
|
|
151
155
|
* Create a reactive watch that auto-updates when matching objects change.
|
|
152
156
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.svelte.d.ts","sourceRoot":"","sources":["../src/channel.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAqD,MAAM,uBAAuB,CAAC;AAE5G;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"channel.svelte.d.ts","sourceRoot":"","sources":["../src/channel.svelte.ts"],"names":[],"mappings":"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"}
|
package/dist/channel.svelte.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
function
|
|
1
|
+
import { isObjectPath, machinePath } from '@rool-dev/sdk';
|
|
2
|
+
function objectCollection(path) {
|
|
3
|
+
if (!isObjectPath(path))
|
|
4
|
+
return undefined;
|
|
5
|
+
return path.split('/')[2];
|
|
6
|
+
}
|
|
7
|
+
function eventTouchesObject(event, objectPath, collection) {
|
|
3
8
|
if (event.reset)
|
|
4
9
|
return true;
|
|
5
10
|
for (const path of [...event.changedPaths, ...event.deletedPaths]) {
|
|
6
|
-
if (
|
|
11
|
+
if (objectPath && path === objectPath)
|
|
7
12
|
return true;
|
|
8
|
-
if (!
|
|
9
|
-
if (!collection || path
|
|
13
|
+
if (!objectPath && isObjectPath(path)) {
|
|
14
|
+
if (!collection || objectCollection(path) === collection)
|
|
10
15
|
return true;
|
|
11
16
|
}
|
|
12
17
|
}
|
|
@@ -18,10 +23,10 @@ function sameJsonValue(a, b) {
|
|
|
18
23
|
async function watchObjectsFromTree(channel, fileTree, options) {
|
|
19
24
|
if (fileTree.loading)
|
|
20
25
|
await fileTree.ready();
|
|
21
|
-
const
|
|
26
|
+
const paths = fileTree.objectPaths({ collection: options.collection, order: options.order });
|
|
22
27
|
const objects = [];
|
|
23
|
-
for (const
|
|
24
|
-
const object = await channel.getObject(
|
|
28
|
+
for (const path of paths) {
|
|
29
|
+
const object = await channel.getObject(path);
|
|
25
30
|
if (!object)
|
|
26
31
|
continue;
|
|
27
32
|
if (options.where) {
|
|
@@ -66,7 +71,7 @@ class ReactiveWatchImpl {
|
|
|
66
71
|
});
|
|
67
72
|
this.#unsubscribers.push(unsubscribe);
|
|
68
73
|
}
|
|
69
|
-
/** Re-fetch matching objects using the canonical file tree for
|
|
74
|
+
/** Re-fetch matching objects using the canonical file tree for paths. */
|
|
70
75
|
async refresh() {
|
|
71
76
|
this.loading = true;
|
|
72
77
|
try {
|
|
@@ -88,25 +93,25 @@ class ReactiveWatchImpl {
|
|
|
88
93
|
class ReactiveObjectImpl {
|
|
89
94
|
#channel;
|
|
90
95
|
#fileTree;
|
|
91
|
-
#
|
|
96
|
+
#path;
|
|
92
97
|
#unsubscribers = [];
|
|
93
98
|
// Reactive state
|
|
94
99
|
data = $state(undefined);
|
|
95
100
|
loading = $state(true);
|
|
96
|
-
constructor(channel, fileTree,
|
|
101
|
+
constructor(channel, fileTree, path) {
|
|
97
102
|
this.#channel = channel;
|
|
98
103
|
this.#fileTree = fileTree;
|
|
99
|
-
this.#
|
|
104
|
+
this.#path = machinePath(path);
|
|
100
105
|
this.#setup();
|
|
101
106
|
}
|
|
102
107
|
#setup() {
|
|
103
108
|
this.refresh();
|
|
104
109
|
const unsubscribe = this.#fileTree.subscribe((event) => {
|
|
105
|
-
if (event.deletedPaths.has(this.#
|
|
110
|
+
if (event.deletedPaths.has(this.#path)) {
|
|
106
111
|
this.data = undefined;
|
|
107
112
|
return;
|
|
108
113
|
}
|
|
109
|
-
if (eventTouchesObject(event, this.#
|
|
114
|
+
if (eventTouchesObject(event, this.#path))
|
|
110
115
|
void this.refresh();
|
|
111
116
|
});
|
|
112
117
|
this.#unsubscribers.push(unsubscribe);
|
|
@@ -114,7 +119,7 @@ class ReactiveObjectImpl {
|
|
|
114
119
|
async refresh() {
|
|
115
120
|
this.loading = true;
|
|
116
121
|
try {
|
|
117
|
-
this.data = await this.#channel.getObject(this.#
|
|
122
|
+
this.data = await this.#channel.getObject(this.#path);
|
|
118
123
|
}
|
|
119
124
|
finally {
|
|
120
125
|
this.loading = false;
|
|
@@ -162,10 +167,12 @@ class ReactiveConversationHandleImpl {
|
|
|
162
167
|
setSystemInstruction(...args) { return this.#handle.setSystemInstruction(...args); }
|
|
163
168
|
rename(...args) { return this.#handle.rename(...args); }
|
|
164
169
|
// Object operations
|
|
165
|
-
|
|
166
|
-
|
|
170
|
+
putObject(...args) { return this.#handle.putObject(...args); }
|
|
171
|
+
patchObject(...args) { return this.#handle.patchObject(...args); }
|
|
167
172
|
moveObject(...args) { return this.#handle.moveObject(...args); }
|
|
168
173
|
deleteObjects(...args) { return this.#handle.deleteObjects(...args); }
|
|
174
|
+
/** @deprecated Use deleteObjects instead. */
|
|
175
|
+
deletePaths(...args) { return this.#handle.deletePaths(...args); }
|
|
169
176
|
// AI
|
|
170
177
|
prompt(...args) { return this.#handle.prompt(...args); }
|
|
171
178
|
// Schema
|
|
@@ -191,14 +198,14 @@ class ReactiveChannelImpl {
|
|
|
191
198
|
#closed = false;
|
|
192
199
|
// Reactive state
|
|
193
200
|
interactions = $state([]);
|
|
194
|
-
|
|
201
|
+
objectPaths = $state([]);
|
|
195
202
|
collections = $state([]);
|
|
196
203
|
conversations = $state([]);
|
|
197
204
|
constructor(channel, fileTree) {
|
|
198
205
|
this.#channel = channel;
|
|
199
206
|
this.#fileTree = fileTree;
|
|
200
207
|
this.interactions = channel.getInteractions();
|
|
201
|
-
this.
|
|
208
|
+
this.objectPaths = fileTree.objectPaths();
|
|
202
209
|
this.collections = fileTree.collections();
|
|
203
210
|
this.conversations = channel.getConversations();
|
|
204
211
|
const onChannelUpdated = () => {
|
|
@@ -213,7 +220,7 @@ class ReactiveChannelImpl {
|
|
|
213
220
|
channel.on('conversationUpdated', onConversationUpdated);
|
|
214
221
|
this.#unsubscribers.push(() => channel.off('conversationUpdated', onConversationUpdated));
|
|
215
222
|
const refreshFromFileTree = () => {
|
|
216
|
-
this.
|
|
223
|
+
this.objectPaths = fileTree.objectPaths();
|
|
217
224
|
this.collections = fileTree.collections();
|
|
218
225
|
};
|
|
219
226
|
this.#unsubscribers.push(fileTree.subscribe((event) => {
|
|
@@ -252,10 +259,12 @@ class ReactiveChannelImpl {
|
|
|
252
259
|
getObject(...args) { return this.#channel.getObject(...args); }
|
|
253
260
|
getObjects(...args) { return this.#channel.getObjects(...args); }
|
|
254
261
|
stat(...args) { return this.#channel.stat(...args); }
|
|
255
|
-
|
|
256
|
-
|
|
262
|
+
putObject(...args) { return this.#channel.putObject(...args); }
|
|
263
|
+
patchObject(...args) { return this.#channel.patchObject(...args); }
|
|
257
264
|
moveObject(...args) { return this.#channel.moveObject(...args); }
|
|
258
265
|
deleteObjects(...args) { return this.#channel.deleteObjects(...args); }
|
|
266
|
+
/** @deprecated Use deleteObjects instead. */
|
|
267
|
+
deletePaths(...args) { return this.#channel.deletePaths(...args); }
|
|
259
268
|
// AI
|
|
260
269
|
prompt(...args) { return this.#channel.prompt(...args); }
|
|
261
270
|
// Undo/redo
|
|
@@ -299,12 +308,12 @@ class ReactiveChannelImpl {
|
|
|
299
308
|
off(...args) { return this.#channel.off(...args); }
|
|
300
309
|
// Reactive primitives
|
|
301
310
|
/**
|
|
302
|
-
* Create a reactive object that auto-updates when the object at this
|
|
311
|
+
* Create a reactive object that auto-updates when the object at this path changes.
|
|
303
312
|
*/
|
|
304
|
-
object(
|
|
313
|
+
object(path) {
|
|
305
314
|
if (this.#closed)
|
|
306
315
|
throw new Error('Cannot create reactive object: channel is closed');
|
|
307
|
-
return new ReactiveObjectImpl(this.#channel, this.#fileTree,
|
|
316
|
+
return new ReactiveObjectImpl(this.#channel, this.#fileTree, path);
|
|
308
317
|
}
|
|
309
318
|
/**
|
|
310
319
|
* Create a reactive watch that auto-updates when matching objects change.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export type ReactiveFilePath =
|
|
1
|
+
import { type RoolSpace, type WebDAVDepth, type WebDAVPropName, type WebDAVResponse, type WebDAVSyncLevel } from '@rool-dev/sdk';
|
|
2
|
+
export type ReactiveFilePath = string;
|
|
3
3
|
export type ReactiveFileRoot = '' | 'space' | 'rool-drive';
|
|
4
4
|
export interface ReactiveFileNode {
|
|
5
5
|
/** Stable node id. Same as `path`. */
|
|
@@ -75,8 +75,8 @@ export declare class ReactiveFileTree {
|
|
|
75
75
|
has(path: string): boolean;
|
|
76
76
|
childrenOf(path: string): ReactiveFileNode[];
|
|
77
77
|
descendantsOf(path: string): ReactiveFileNode[];
|
|
78
|
-
/** Object file
|
|
79
|
-
|
|
78
|
+
/** Object file paths sorted by modified time descending. */
|
|
79
|
+
objectPaths(options?: {
|
|
80
80
|
collection?: string;
|
|
81
81
|
order?: 'asc' | 'desc';
|
|
82
82
|
limit?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-tree.svelte.d.ts","sourceRoot":"","sources":["../src/file-tree.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"file-tree.svelte.d.ts","sourceRoot":"","sources":["../src/file-tree.svelte.ts"],"names":[],"mappings":"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"}
|
package/dist/file-tree.svelte.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isObjectPath, machinePath, } from '@rool-dev/sdk';
|
|
2
2
|
const ROOT = '/';
|
|
3
3
|
const DEFAULT_PROPS = [
|
|
4
4
|
'displayname',
|
|
@@ -9,14 +9,7 @@ const DEFAULT_PROPS = [
|
|
|
9
9
|
'resourcetype',
|
|
10
10
|
];
|
|
11
11
|
function normalizePath(path) {
|
|
12
|
-
|
|
13
|
-
return ROOT;
|
|
14
|
-
const normalized = `/${path.replace(/^\/+|\/+$/g, '')}`;
|
|
15
|
-
if (normalized === '/space' || normalized.startsWith('/space/'))
|
|
16
|
-
return normalized;
|
|
17
|
-
if (normalized === '/rool-drive' || normalized.startsWith('/rool-drive/'))
|
|
18
|
-
return normalized;
|
|
19
|
-
return ROOT;
|
|
12
|
+
return machinePath(path);
|
|
20
13
|
}
|
|
21
14
|
function parentPath(path) {
|
|
22
15
|
if (path === ROOT)
|
|
@@ -25,7 +18,7 @@ function parentPath(path) {
|
|
|
25
18
|
parts.pop();
|
|
26
19
|
return parts.length === 0 ? ROOT : `/${parts.join('/')}`;
|
|
27
20
|
}
|
|
28
|
-
function
|
|
21
|
+
function leafName(path) {
|
|
29
22
|
if (path === ROOT)
|
|
30
23
|
return 'Space';
|
|
31
24
|
const leaf = path.split('/').filter(Boolean).pop() ?? '';
|
|
@@ -60,7 +53,7 @@ function nodeFromResponse(response) {
|
|
|
60
53
|
parent: parentPath(path),
|
|
61
54
|
name: typeof response.props.displayname === 'string' && response.props.displayname
|
|
62
55
|
? response.props.displayname
|
|
63
|
-
:
|
|
56
|
+
: leafName(path),
|
|
64
57
|
root: rootOf(path),
|
|
65
58
|
isCollection: response.isCollection,
|
|
66
59
|
size: typeof response.props.getcontentlength === 'number' ? response.props.getcontentlength : null,
|
|
@@ -150,16 +143,16 @@ export class ReactiveFileTree {
|
|
|
150
143
|
const root = normalizePath(path);
|
|
151
144
|
return this.nodes.filter((node) => node.path !== root && isDescendant(node.path, root));
|
|
152
145
|
}
|
|
153
|
-
/** Object file
|
|
154
|
-
|
|
155
|
-
const
|
|
156
|
-
.filter((node) => !node.isCollection &&
|
|
146
|
+
/** Object file paths sorted by modified time descending. */
|
|
147
|
+
objectPaths(options = {}) {
|
|
148
|
+
const paths = this.nodes
|
|
149
|
+
.filter((node) => !node.isCollection && isObjectPath(node.path))
|
|
157
150
|
.filter((node) => !options.collection || safeCollection(node.path) === options.collection)
|
|
158
151
|
.sort((a, b) => (b.modifiedAt ?? 0) - (a.modifiedAt ?? 0))
|
|
159
152
|
.map((node) => node.path);
|
|
160
153
|
if (options.order === 'asc')
|
|
161
|
-
|
|
162
|
-
return options.limit === undefined ?
|
|
154
|
+
paths.reverse();
|
|
155
|
+
return options.limit === undefined ? paths : paths.slice(0, options.limit);
|
|
163
156
|
}
|
|
164
157
|
collections() {
|
|
165
158
|
return this.childrenOf('/space')
|
|
@@ -399,20 +392,8 @@ function isDescendant(path, ancestor) {
|
|
|
399
392
|
return path !== ROOT;
|
|
400
393
|
return path.startsWith(`${ancestor}/`);
|
|
401
394
|
}
|
|
402
|
-
function isObjectLocation(path) {
|
|
403
|
-
try {
|
|
404
|
-
parseLocation(path);
|
|
405
|
-
return true;
|
|
406
|
-
}
|
|
407
|
-
catch {
|
|
408
|
-
return false;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
395
|
function safeCollection(path) {
|
|
412
|
-
|
|
413
|
-
return parseLocation(path).collection;
|
|
414
|
-
}
|
|
415
|
-
catch {
|
|
396
|
+
if (!isObjectPath(path))
|
|
416
397
|
return undefined;
|
|
417
|
-
|
|
398
|
+
return path.split('/')[2];
|
|
418
399
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { createRool, generateId } from './rool.svelte.js';
|
|
2
|
-
export {
|
|
3
|
-
export type { ParsedLocation, MachineResource } from '@rool-dev/sdk';
|
|
2
|
+
export { isObjectPath, machinePath, machineUri } from '@rool-dev/sdk';
|
|
4
3
|
export { wrapChannel } from './channel.svelte.js';
|
|
5
4
|
export { wrapSpace } from './space.svelte.js';
|
|
6
5
|
export { ReactiveFileTree } from './file-tree.svelte.js';
|
|
@@ -8,5 +7,5 @@ export type { Rool } from './rool.svelte.js';
|
|
|
8
7
|
export type { ReactiveChannel, ReactiveConversationHandle, ReactiveObject, ReactiveWatch, ReactiveChannelList, WatchOptions } from './channel.svelte.js';
|
|
9
8
|
export type { ReactiveSpace } from './space.svelte.js';
|
|
10
9
|
export type { ReactiveFileNode, ReactiveFilePath, ReactiveFileRoot, ReactiveFileTreeEvent, ReactiveFileTreeSyncResult } from './file-tree.svelte.js';
|
|
11
|
-
export type { RoolClientConfig, RoolChannel, RoolSpace, RoolSpaceInfo, RoolObject, GetObjectsResult, RoolObjectStat, RoolUserRole, ConnectionState, ChannelInfo, Conversation, ConversationInfo, CurrentUser, Interaction, PromptOptions, PromptAttachment,
|
|
10
|
+
export type { RoolClientConfig, RoolChannel, RoolSpace, RoolSpaceInfo, RoolObject, GetObjectsResult, RoolObjectStat, RoolUserRole, ConnectionState, ChannelInfo, Conversation, ConversationInfo, CurrentUser, Interaction, PromptOptions, PromptAttachment, UpdateObjectOptions, MoveObjectOptions, CollectionOptions, FieldType, FieldDef, CollectionDef, SpaceSchema, SpaceMember, UserResult, RoolClient, RoolSpaceEvents, SpaceFileStorageUsage, WebDAVDepth, WebDAVSyncLevel, WebDAVPropName, WebDAVResponse, WebDAVProps, } from '@rool-dev/sdk';
|
|
12
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,0BAA0B,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzJ,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAGrJ,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,cAAc,EACd,cAAc,EACd,WAAW,GACZ,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Main export
|
|
2
2
|
export { createRool, generateId } from './rool.svelte.js';
|
|
3
|
-
//
|
|
4
|
-
export {
|
|
3
|
+
// Machine path helpers — re-exported from the SDK for convenience
|
|
4
|
+
export { isObjectPath, machinePath, machineUri } from '@rool-dev/sdk';
|
|
5
5
|
// Reactive wrappers
|
|
6
6
|
export { wrapChannel } from './channel.svelte.js';
|
|
7
7
|
export { wrapSpace } from './space.svelte.js';
|
package/dist/rool.svelte.d.ts
CHANGED
|
@@ -120,8 +120,6 @@ declare class RoolImpl {
|
|
|
120
120
|
slug?: string;
|
|
121
121
|
marketingOptIn?: boolean;
|
|
122
122
|
}): Promise<CurrentUser>;
|
|
123
|
-
/** Respond to a server-initiated probe with a method-specific result or error. */
|
|
124
|
-
probeResponse(requestId: string, result?: unknown, error?: string): Promise<boolean>;
|
|
125
123
|
/**
|
|
126
124
|
* Create a reactive channel list for a space.
|
|
127
125
|
* Auto-updates when channels are created, updated, or deleted.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rool.svelte.d.ts","sourceRoot":"","sources":["../src/rool.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9H,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;GAQG;AACH,cAAM,QAAQ;;IAMZ,aAAa,iBAAgC;IAC7C,MAAM,8BAAkD;IACxD,aAAa,UAAiB;IAC9B,WAAW,eAA8B;IACzC,eAAe,kBAA2C;IAC1D,WAAW,0BAAuC;IAClD,WAAW,qBAAoC;gBAEnC,MAAM,CAAC,EAAE,gBAAgB;IAKrC;;;OAGG;IACH,IAAI,MAAM,IAAI,UAAU,CAEvB;IAwDD;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAgB9B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAI7D;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAI9D;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa7C;;OAEG;IACH,MAAM,IAAI,IAAI;IAQd;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOxD;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOvD;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAOjF;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C;;OAEG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACH,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIvD;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI5C;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKjD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM;IAIxB;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAOxE;;OAEG;IACH,IAAI,QAAQ,qCAEX;IAED;;OAEG;IACG,cAAc;IAMpB;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAOzF
|
|
1
|
+
{"version":3,"file":"rool.svelte.d.ts","sourceRoot":"","sources":["../src/rool.svelte.ts"],"names":[],"mappings":"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"}
|
package/dist/rool.svelte.js
CHANGED
|
@@ -260,10 +260,6 @@ class RoolImpl {
|
|
|
260
260
|
this.currentUser = user;
|
|
261
261
|
return user;
|
|
262
262
|
}
|
|
263
|
-
/** Respond to a server-initiated probe with a method-specific result or error. */
|
|
264
|
-
probeResponse(requestId, result, error) {
|
|
265
|
-
return this.#client.probeResponse(requestId, result, error);
|
|
266
|
-
}
|
|
267
263
|
/**
|
|
268
264
|
* Create a reactive channel list for a space.
|
|
269
265
|
* Auto-updates when channels are created, updated, or deleted.
|
package/dist/space.svelte.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ declare class ReactiveSpaceImpl {
|
|
|
32
32
|
get webdav(): import("@rool-dev/sdk").RoolWebDAV;
|
|
33
33
|
get fileTree(): ReactiveFileTree;
|
|
34
34
|
getStorageUsage(...args: Parameters<RoolSpace['getStorageUsage']>): Promise<import("@rool-dev/sdk").SpaceFileStorageUsage>;
|
|
35
|
-
|
|
35
|
+
fetchPath(...args: Parameters<RoolSpace['fetchPath']>): Promise<Response>;
|
|
36
36
|
rename(newName: string): Promise<void>;
|
|
37
37
|
delete(): Promise<void>;
|
|
38
38
|
listUsers(): Promise<SpaceMember[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space.svelte.d.ts","sourceRoot":"","sources":["../src/space.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;GAMG;AACH,cAAM,iBAAiB;;IASrB,eAAe,kBAA2C;gBAE9C,KAAK,EAAE,SAAS;IAoB5B,IAAI,QAAQ,YAA2B;IAEvC;;;OAGG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAY9D;;;OAGG;IACH,KAAK,IAAI,IAAI;IAiBb,IAAI,QAAQ,IAAI,WAAW,EAAE,CAA8B;IAG3D,IAAI,EAAE,IAAI,MAAM,CAA2B;IAC3C,IAAI,IAAI,IAAI,MAAM,CAA6B;IAC/C,IAAI,IAAI,IAAI,YAAY,CAA6B;IACrD,IAAI,UAAU,IAAI,UAAU,CAAmC;IAC/D,IAAI,WAAW,IAAI,MAAM,CAAoC;IAC7D,IAAI,MAAM,uCAAiC;IAC3C,IAAI,QAAQ,IAAI,gBAAgB,CAA2B;IAG3D,eAAe,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACjE,
|
|
1
|
+
{"version":3,"file":"space.svelte.d.ts","sourceRoot":"","sources":["../src/space.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;GAMG;AACH,cAAM,iBAAiB;;IASrB,eAAe,kBAA2C;gBAE9C,KAAK,EAAE,SAAS;IAoB5B,IAAI,QAAQ,YAA2B;IAEvC;;;OAGG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAY9D;;;OAGG;IACH,KAAK,IAAI,IAAI;IAiBb,IAAI,QAAQ,IAAI,WAAW,EAAE,CAA8B;IAG3D,IAAI,EAAE,IAAI,MAAM,CAA2B;IAC3C,IAAI,IAAI,IAAI,MAAM,CAA6B;IAC/C,IAAI,IAAI,IAAI,YAAY,CAA6B;IACrD,IAAI,UAAU,IAAI,UAAU,CAAmC;IAC/D,IAAI,WAAW,IAAI,MAAM,CAAoC;IAC7D,IAAI,MAAM,uCAAiC;IAC3C,IAAI,QAAQ,IAAI,gBAAgB,CAA2B;IAG3D,eAAe,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACjE,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAGrD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IACvB,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACjD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACzC,aAAa,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC7D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAGxB,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;CAC1C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAEzD;AAED,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC"}
|
package/dist/space.svelte.js
CHANGED
|
@@ -79,7 +79,7 @@ class ReactiveSpaceImpl {
|
|
|
79
79
|
get fileTree() { return this.#fileTree; }
|
|
80
80
|
// Proxy resource methods
|
|
81
81
|
getStorageUsage(...args) { return this.#space.getStorageUsage(...args); }
|
|
82
|
-
|
|
82
|
+
fetchPath(...args) { return this.#space.fetchPath(...args); }
|
|
83
83
|
// Proxy admin methods
|
|
84
84
|
rename(newName) { return this.#space.rename(newName); }
|
|
85
85
|
delete() { return this.#space.delete(); }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rool-dev/svelte",
|
|
3
|
-
"version": "0.10.2-dev.
|
|
3
|
+
"version": "0.10.2-dev.a0fe230",
|
|
4
4
|
"description": "Svelte 5 runes for Rool Spaces",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"svelte": "./dist/index.js",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"license": "MIT",
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@rool-dev/sdk": "0.10.2-dev.
|
|
44
|
+
"@rool-dev/sdk": "0.10.2-dev.a0fe230"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"svelte": "^5.0.0"
|