mindoodb-app-sdk 0.0.4 → 0.0.6
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 +493 -253
- package/TESTING.md +3 -1
- package/dist/index.d.ts +29 -3
- package/dist/index.js +93 -29
- package/dist/testing/index.d.ts +7 -3
- package/dist/testing/index.js +185 -39
- package/dist/{types-BGdIfp-D.d.ts → types-BDY_80wd.d.ts} +26 -8
- package/package.json +2 -2
package/TESTING.md
CHANGED
|
@@ -85,11 +85,13 @@ Both accept the same options:
|
|
|
85
85
|
- `databases`
|
|
86
86
|
- `onDisconnect`
|
|
87
87
|
|
|
88
|
+
When you pass `databases`, the mock session also exposes them through `session.getLaunchContext().databases`.
|
|
89
|
+
|
|
88
90
|
Each database entry can provide:
|
|
89
91
|
|
|
90
92
|
- `info`
|
|
91
93
|
- `methods.documents`
|
|
92
|
-
- `methods.views`
|
|
94
|
+
- `methods.views` for session-level `createView()` and `openView()` calls
|
|
93
95
|
- `methods.attachments`
|
|
94
96
|
|
|
95
97
|
## Level 2 example
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,33 @@
|
|
|
1
|
-
import { M as MindooDBAppBridge } from './types-
|
|
2
|
-
export {
|
|
1
|
+
import { M as MindooDBAppAttachmentPreviewMode, a as MindooDBAppBridge } from './types-BDY_80wd.js';
|
|
2
|
+
export { b as MindooDBAppAttachmentApi, c as MindooDBAppAttachmentChunk, d as MindooDBAppAttachmentInfo, e as MindooDBAppAttachmentPreviewOptions, f as MindooDBAppBridgeConnectMessage, g as MindooDBAppBridgeConnectOptions, h as MindooDBAppBridgeConnectedMessage, i as MindooDBAppBridgeErrorPayload, j as MindooDBAppBridgePortMessage, k as MindooDBAppBridgeRpcError, l as MindooDBAppBridgeRpcMessage, m as MindooDBAppBridgeRpcRequest, n as MindooDBAppBridgeRpcSuccess, o as MindooDBAppBridgeStreamAbortRequest, p as MindooDBAppBridgeStreamAck, q as MindooDBAppBridgeStreamCloseRequest, r as MindooDBAppBridgeStreamError, s as MindooDBAppBridgeStreamMessage, t as MindooDBAppBridgeStreamOpenResult, u as MindooDBAppBridgeStreamReadRequest, v as MindooDBAppBridgeStreamWriteRequest, w as MindooDBAppBridgeThemeChangedMessage, x as MindooDBAppBridgeViewportChangedMessage, y as MindooDBAppCapability, z as MindooDBAppConfiguredViewCategorizationStyle, A as MindooDBAppConfiguredViewColumn, B as MindooDBAppConfiguredViewColumnRole, C as MindooDBAppConfiguredViewExpressionMode, D as MindooDBAppConfiguredViewFieldExpression, E as MindooDBAppConfiguredViewFilterDefinition, F as MindooDBAppConfiguredViewFilterMode, G as MindooDBAppConfiguredViewFilterRule, H as MindooDBAppConfiguredViewFormulaExpression, I as MindooDBAppConfiguredViewFormulaFilterDefinition, J as MindooDBAppConfiguredViewPreviewMode, K as MindooDBAppConfiguredViewRuleFilterDefinition, L as MindooDBAppConfiguredViewRuleMatchMode, N as MindooDBAppConfiguredViewRuleOperator, O as MindooDBAppConfiguredViewValueExpression, P as MindooDBAppCreateDocumentInput, Q as MindooDBAppCreateViewInput, R as MindooDBAppDatabase, S as MindooDBAppDatabaseInfo, T as MindooDBAppDocument, U as MindooDBAppDocumentApi, V as MindooDBAppDocumentHistoryEntry, W as MindooDBAppDocumentListQuery, X as MindooDBAppDocumentListResult, Y as MindooDBAppDocumentSummary, Z as MindooDBAppHistoricalDocument, _ as MindooDBAppHistoryQuery, $ as MindooDBAppHostTheme, a0 as MindooDBAppLaunchContext, a1 as MindooDBAppReadableAttachmentStream, a2 as MindooDBAppResolvedViewDefinition, a3 as MindooDBAppResolvedViewSource, a4 as MindooDBAppRuntime, a5 as MindooDBAppSession, a6 as MindooDBAppThemeMode, a7 as MindooDBAppUpdateDocumentInput, a8 as MindooDBAppViewHandle, a9 as MindooDBAppViewport, aa as MindooDBAppWritableAttachmentStream } from './types-BDY_80wd.js';
|
|
3
3
|
export { MindooDBAppBooleanExpression, MindooDBAppExpression, MindooDBAppFilterDefinition, MindooDBAppViewCategoryChildrenPageRequest, MindooDBAppViewColumn, MindooDBAppViewColumnRole, MindooDBAppViewDefinition, MindooDBAppViewExpansionState, MindooDBAppViewExpressionBase, MindooDBAppViewExpressionDatePart, MindooDBAppViewExpressionOperation, MindooDBAppViewFieldExpression, MindooDBAppViewIfExpression, MindooDBAppViewLetExpression, MindooDBAppViewLiteralExpression, MindooDBAppViewLookupByPath, MindooDBAppViewOperationExpression, MindooDBAppViewOriginExpression, MindooDBAppViewPageRequest, MindooDBAppViewPageResult, MindooDBAppViewRow, MindooDBAppViewSortDirection, MindooDBAppViewTotalMode, MindooDBAppViewValueExpressionRef, MindooDBAppViewVariableExpression, createViewLanguage } from 'mindoodb-view-language';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Resolves whether Haven can render a built-in preview for an attachment.
|
|
7
|
+
*
|
|
8
|
+
* Apps can use this as a fast local check before calling
|
|
9
|
+
* `attachments.openPreview()`.
|
|
10
|
+
*/
|
|
11
|
+
declare function canPreviewAttachment(fileName: string, mimeType: string): MindooDBAppAttachmentPreviewMode | null;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Convert a canonical Notes name like `cn=Jane/ou=Dev/o=Mindoo`
|
|
15
|
+
* into the abbreviated form `Jane/Dev/Mindoo`.
|
|
16
|
+
*
|
|
17
|
+
* If the input is not a slash-separated canonical name, the trimmed
|
|
18
|
+
* original value is returned unchanged.
|
|
19
|
+
*/
|
|
20
|
+
declare function abbreviateCanonicalName(value: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Convert an abbreviated Notes name like `Jane/Dev/Mindoo`
|
|
23
|
+
* into canonical form `cn=Jane/ou=Dev/o=Mindoo`.
|
|
24
|
+
*
|
|
25
|
+
* The first segment becomes `cn=`, the last becomes `o=`, and any
|
|
26
|
+
* middle segments become `ou=` parts in order. Values with fewer than
|
|
27
|
+
* two segments are returned unchanged.
|
|
28
|
+
*/
|
|
29
|
+
declare function expandAbbreviatedName(value: string): string;
|
|
30
|
+
|
|
5
31
|
/**
|
|
6
32
|
* Creates the browser-side bridge entry point used by MindooDB apps.
|
|
7
33
|
*
|
|
@@ -11,4 +37,4 @@ export { MindooDBAppBooleanExpression, MindooDBAppExpression, MindooDBAppFilterD
|
|
|
11
37
|
*/
|
|
12
38
|
declare function createMindooDBAppBridge(): MindooDBAppBridge;
|
|
13
39
|
|
|
14
|
-
export { MindooDBAppBridge, createMindooDBAppBridge };
|
|
40
|
+
export { MindooDBAppAttachmentPreviewMode, MindooDBAppBridge, abbreviateCanonicalName, canPreviewAttachment, createMindooDBAppBridge, expandAbbreviatedName };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,76 @@
|
|
|
1
|
+
// src/attachmentPreview.ts
|
|
2
|
+
function canPreviewAttachment(fileName, mimeType) {
|
|
3
|
+
const normalizedMimeType = mimeType.toLowerCase();
|
|
4
|
+
const normalizedFileName = fileName.toLowerCase();
|
|
5
|
+
if (normalizedMimeType.startsWith("image/")) {
|
|
6
|
+
return "image";
|
|
7
|
+
}
|
|
8
|
+
if (normalizedMimeType.startsWith("video/")) {
|
|
9
|
+
return "video";
|
|
10
|
+
}
|
|
11
|
+
if (normalizedMimeType.startsWith("audio/")) {
|
|
12
|
+
return "audio";
|
|
13
|
+
}
|
|
14
|
+
if (normalizedMimeType === "application/pdf" || normalizedFileName.endsWith(".pdf")) {
|
|
15
|
+
return "pdf";
|
|
16
|
+
}
|
|
17
|
+
if (normalizedMimeType === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || normalizedMimeType === "application/vnd.ms-excel" || normalizedMimeType === "application/vnd.ms-excel.sheet.macroenabled.12" || normalizedMimeType === "application/vnd.ms-excel.sheet.binary.macroenabled.12" || normalizedFileName.endsWith(".xlsx") || normalizedFileName.endsWith(".xls") || normalizedFileName.endsWith(".xlsm") || normalizedFileName.endsWith(".xlsb")) {
|
|
18
|
+
return "spreadsheet";
|
|
19
|
+
}
|
|
20
|
+
if (normalizedMimeType === "application/vnd.openxmlformats-officedocument.wordprocessingml.document" || normalizedFileName.endsWith(".docx")) {
|
|
21
|
+
return "docx";
|
|
22
|
+
}
|
|
23
|
+
if (normalizedMimeType === "application/vnd.openxmlformats-officedocument.presentationml.presentation" || normalizedFileName.endsWith(".pptx")) {
|
|
24
|
+
return "pptx";
|
|
25
|
+
}
|
|
26
|
+
if (normalizedMimeType.startsWith("text/") || normalizedMimeType === "application/json" || normalizedMimeType === "application/xml" || normalizedMimeType === "image/svg+xml" || normalizedFileName.endsWith(".json") || normalizedFileName.endsWith(".txt") || normalizedFileName.endsWith(".md") || normalizedFileName.endsWith(".csv") || normalizedFileName.endsWith(".log") || normalizedFileName.endsWith(".xml") || normalizedFileName.endsWith(".yaml") || normalizedFileName.endsWith(".yml") || normalizedFileName.endsWith(".svg")) {
|
|
27
|
+
return "text";
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// src/canonicalNames.ts
|
|
33
|
+
var CANONICAL_PART_PATTERN = /^\s*([^=]+)\s*=\s*(.*?)\s*$/;
|
|
34
|
+
function splitNameParts(value) {
|
|
35
|
+
return value.split("/").map((part) => part.trim()).filter(Boolean);
|
|
36
|
+
}
|
|
37
|
+
function abbreviateCanonicalName(value) {
|
|
38
|
+
const parts = splitNameParts(value);
|
|
39
|
+
if (!parts.length) {
|
|
40
|
+
return value.trim();
|
|
41
|
+
}
|
|
42
|
+
const abbreviatedParts = [];
|
|
43
|
+
for (const part of parts) {
|
|
44
|
+
const match = CANONICAL_PART_PATTERN.exec(part);
|
|
45
|
+
if (!match) {
|
|
46
|
+
return value.trim();
|
|
47
|
+
}
|
|
48
|
+
const partValue = match[2].trim();
|
|
49
|
+
if (!partValue) {
|
|
50
|
+
return value.trim();
|
|
51
|
+
}
|
|
52
|
+
abbreviatedParts.push(partValue);
|
|
53
|
+
}
|
|
54
|
+
return abbreviatedParts.join("/");
|
|
55
|
+
}
|
|
56
|
+
function expandAbbreviatedName(value) {
|
|
57
|
+
const parts = splitNameParts(value);
|
|
58
|
+
if (parts.length < 2) {
|
|
59
|
+
return value.trim();
|
|
60
|
+
}
|
|
61
|
+
const [commonName, ...rest] = parts;
|
|
62
|
+
const organization = rest.at(-1);
|
|
63
|
+
if (!commonName || !organization) {
|
|
64
|
+
return value.trim();
|
|
65
|
+
}
|
|
66
|
+
const organizationUnits = rest.slice(0, -1);
|
|
67
|
+
return [
|
|
68
|
+
`cn=${commonName}`,
|
|
69
|
+
...organizationUnits.map((part) => `ou=${part}`),
|
|
70
|
+
`o=${organization}`
|
|
71
|
+
].join("/");
|
|
72
|
+
}
|
|
73
|
+
|
|
1
74
|
// src/client/portRpcClient.ts
|
|
2
75
|
var PROTOCOL = "mindoodb-app-bridge";
|
|
3
76
|
function normalizeRpcValue(value, seen = /* @__PURE__ */ new WeakMap()) {
|
|
@@ -235,86 +308,73 @@ function waitForConnectedPort(options, launchId) {
|
|
|
235
308
|
});
|
|
236
309
|
}
|
|
237
310
|
var MindooDBAppViewHandleImpl = class {
|
|
238
|
-
constructor(rpc,
|
|
311
|
+
constructor(rpc, viewId) {
|
|
239
312
|
this.rpc = rpc;
|
|
240
|
-
this.databaseId = databaseId;
|
|
241
313
|
this.viewId = viewId;
|
|
242
314
|
}
|
|
243
315
|
async getDefinition() {
|
|
244
316
|
return await this.rpc.call("views.getDefinition", {
|
|
245
|
-
databaseId: this.databaseId,
|
|
246
317
|
viewId: this.viewId
|
|
247
318
|
});
|
|
248
319
|
}
|
|
249
320
|
async refresh() {
|
|
250
321
|
await this.rpc.call("views.refresh", {
|
|
251
|
-
databaseId: this.databaseId,
|
|
252
322
|
viewId: this.viewId
|
|
253
323
|
});
|
|
254
324
|
}
|
|
255
325
|
async page(input) {
|
|
256
326
|
return await this.rpc.call("views.page", {
|
|
257
|
-
databaseId: this.databaseId,
|
|
258
327
|
viewId: this.viewId,
|
|
259
328
|
request: input ?? {}
|
|
260
329
|
});
|
|
261
330
|
}
|
|
262
331
|
async getExpansionState() {
|
|
263
332
|
return await this.rpc.call("views.expansion.get", {
|
|
264
|
-
databaseId: this.databaseId,
|
|
265
333
|
viewId: this.viewId
|
|
266
334
|
});
|
|
267
335
|
}
|
|
268
336
|
async setExpansionState(state) {
|
|
269
337
|
return await this.rpc.call("views.expansion.set", {
|
|
270
|
-
databaseId: this.databaseId,
|
|
271
338
|
viewId: this.viewId,
|
|
272
339
|
expansion: state
|
|
273
340
|
});
|
|
274
341
|
}
|
|
275
342
|
async expand(rowKey) {
|
|
276
343
|
return await this.rpc.call("views.expansion.expand", {
|
|
277
|
-
databaseId: this.databaseId,
|
|
278
344
|
viewId: this.viewId,
|
|
279
345
|
rowKey
|
|
280
346
|
});
|
|
281
347
|
}
|
|
282
348
|
async collapse(rowKey) {
|
|
283
349
|
return await this.rpc.call("views.expansion.collapse", {
|
|
284
|
-
databaseId: this.databaseId,
|
|
285
350
|
viewId: this.viewId,
|
|
286
351
|
rowKey
|
|
287
352
|
});
|
|
288
353
|
}
|
|
289
354
|
async expandAll() {
|
|
290
355
|
return await this.rpc.call("views.expansion.expandAll", {
|
|
291
|
-
databaseId: this.databaseId,
|
|
292
356
|
viewId: this.viewId
|
|
293
357
|
});
|
|
294
358
|
}
|
|
295
359
|
async collapseAll() {
|
|
296
360
|
return await this.rpc.call("views.expansion.collapseAll", {
|
|
297
|
-
databaseId: this.databaseId,
|
|
298
361
|
viewId: this.viewId
|
|
299
362
|
});
|
|
300
363
|
}
|
|
301
364
|
async getRow(rowKey) {
|
|
302
365
|
return await this.rpc.call("views.row.get", {
|
|
303
|
-
databaseId: this.databaseId,
|
|
304
366
|
viewId: this.viewId,
|
|
305
367
|
rowKey
|
|
306
368
|
});
|
|
307
369
|
}
|
|
308
370
|
async getCategory(input) {
|
|
309
371
|
return await this.rpc.call("views.category.get", {
|
|
310
|
-
databaseId: this.databaseId,
|
|
311
372
|
viewId: this.viewId,
|
|
312
373
|
lookup: input
|
|
313
374
|
});
|
|
314
375
|
}
|
|
315
376
|
async pageCategory(categoryKey, input) {
|
|
316
377
|
return await this.rpc.call("views.category.page", {
|
|
317
|
-
databaseId: this.databaseId,
|
|
318
378
|
viewId: this.viewId,
|
|
319
379
|
categoryKey,
|
|
320
380
|
request: input ?? {}
|
|
@@ -322,14 +382,12 @@ var MindooDBAppViewHandleImpl = class {
|
|
|
322
382
|
}
|
|
323
383
|
async listCategoryDocumentIds(categoryKey) {
|
|
324
384
|
return await this.rpc.call("views.category.documentIds", {
|
|
325
|
-
databaseId: this.databaseId,
|
|
326
385
|
viewId: this.viewId,
|
|
327
386
|
categoryKey
|
|
328
387
|
});
|
|
329
388
|
}
|
|
330
389
|
async dispose() {
|
|
331
390
|
await this.rpc.call("views.dispose", {
|
|
332
|
-
databaseId: this.databaseId,
|
|
333
391
|
viewId: this.viewId
|
|
334
392
|
});
|
|
335
393
|
}
|
|
@@ -522,16 +580,6 @@ var MindooDBAppDatabaseImpl = class {
|
|
|
522
580
|
timestamp
|
|
523
581
|
})
|
|
524
582
|
};
|
|
525
|
-
this.views = {
|
|
526
|
-
create: async (definition) => {
|
|
527
|
-
const result = await this.rpc.call("views.create", {
|
|
528
|
-
databaseId: this.databaseId,
|
|
529
|
-
definition
|
|
530
|
-
});
|
|
531
|
-
return new MindooDBAppViewHandleImpl(this.rpc, this.databaseId, result.viewId);
|
|
532
|
-
},
|
|
533
|
-
open: async (viewId) => new MindooDBAppViewHandleImpl(this.rpc, this.databaseId, viewId)
|
|
534
|
-
};
|
|
535
583
|
this.attachments = {
|
|
536
584
|
list: async (docId) => await this.rpc.call("attachments.list", {
|
|
537
585
|
databaseId: this.databaseId,
|
|
@@ -558,11 +606,16 @@ var MindooDBAppDatabaseImpl = class {
|
|
|
558
606
|
contentType
|
|
559
607
|
});
|
|
560
608
|
return new MindooDBAppWritableAttachmentStreamImpl(this.rpc, result.streamId);
|
|
561
|
-
}
|
|
609
|
+
},
|
|
610
|
+
openPreview: async (docId, attachmentName, options) => await this.rpc.call("attachments.openPreview", {
|
|
611
|
+
databaseId: this.databaseId,
|
|
612
|
+
docId,
|
|
613
|
+
attachmentName,
|
|
614
|
+
timestamp: options?.timestamp
|
|
615
|
+
})
|
|
562
616
|
};
|
|
563
617
|
}
|
|
564
618
|
documents;
|
|
565
|
-
views;
|
|
566
619
|
attachments;
|
|
567
620
|
/** Returns database metadata for the currently opened binding. */
|
|
568
621
|
async info() {
|
|
@@ -587,6 +640,14 @@ var MindooDBAppSessionImpl = class {
|
|
|
587
640
|
await this.rpc.call("session.openDatabase", { databaseId });
|
|
588
641
|
return new MindooDBAppDatabaseImpl(this.rpc, databaseId);
|
|
589
642
|
}
|
|
643
|
+
async createView(input) {
|
|
644
|
+
const result = await this.rpc.call("session.createView", input);
|
|
645
|
+
return new MindooDBAppViewHandleImpl(this.rpc, result.viewId);
|
|
646
|
+
}
|
|
647
|
+
async openView(viewId) {
|
|
648
|
+
await this.rpc.call("session.openView", { viewId });
|
|
649
|
+
return new MindooDBAppViewHandleImpl(this.rpc, viewId);
|
|
650
|
+
}
|
|
590
651
|
onThemeChange(listener) {
|
|
591
652
|
return this.rpc.addMessageListener((message) => {
|
|
592
653
|
if (isThemeChangedMessage(message)) {
|
|
@@ -629,6 +690,9 @@ import {
|
|
|
629
690
|
mindooDBViewLanguageHelpersByName
|
|
630
691
|
} from "mindoodb-view-language";
|
|
631
692
|
export {
|
|
693
|
+
abbreviateCanonicalName,
|
|
694
|
+
canPreviewAttachment,
|
|
632
695
|
createMindooDBAppBridge,
|
|
633
|
-
createViewLanguage
|
|
696
|
+
createViewLanguage,
|
|
697
|
+
expandAbbreviatedName
|
|
634
698
|
};
|
package/dist/testing/index.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import 'mindoodb-view-language';
|
|
1
|
+
import { a0 as MindooDBAppLaunchContext, S as MindooDBAppDatabaseInfo, U as MindooDBAppDocumentApi, a8 as MindooDBAppViewHandle, b as MindooDBAppAttachmentApi, a as MindooDBAppBridge, a5 as MindooDBAppSession, m as MindooDBAppBridgeRpcRequest, $ as MindooDBAppHostTheme, a9 as MindooDBAppViewport, j as MindooDBAppBridgePortMessage } from '../types-BDY_80wd.js';
|
|
2
|
+
import { MindooDBAppViewDefinition } from 'mindoodb-view-language';
|
|
3
3
|
|
|
4
4
|
type MaybePromise<T> = T | Promise<T>;
|
|
5
|
+
type MockViewApi = {
|
|
6
|
+
create(definition: MindooDBAppViewDefinition): MaybePromise<MindooDBAppViewHandle>;
|
|
7
|
+
open(viewId: string): MaybePromise<MindooDBAppViewHandle>;
|
|
8
|
+
};
|
|
5
9
|
type MockDatabaseMethods = {
|
|
6
10
|
documents?: Partial<MindooDBAppDocumentApi>;
|
|
7
|
-
views?: Partial<
|
|
11
|
+
views?: Partial<MockViewApi>;
|
|
8
12
|
attachments?: Partial<MindooDBAppAttachmentApi>;
|
|
9
13
|
};
|
|
10
14
|
interface MockMindooDBAppDatabaseDefinition {
|