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/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-BGdIfp-D.js';
2
- export { a as MindooDBAppAttachmentApi, b as MindooDBAppAttachmentChunk, c as MindooDBAppAttachmentInfo, d as MindooDBAppBridgeConnectMessage, e as MindooDBAppBridgeConnectOptions, f as MindooDBAppBridgeConnectedMessage, g as MindooDBAppBridgeErrorPayload, h as MindooDBAppBridgePortMessage, i as MindooDBAppBridgeRpcError, j as MindooDBAppBridgeRpcMessage, k as MindooDBAppBridgeRpcRequest, l as MindooDBAppBridgeRpcSuccess, m as MindooDBAppBridgeStreamAbortRequest, n as MindooDBAppBridgeStreamAck, o as MindooDBAppBridgeStreamCloseRequest, p as MindooDBAppBridgeStreamError, q as MindooDBAppBridgeStreamMessage, r as MindooDBAppBridgeStreamOpenResult, s as MindooDBAppBridgeStreamReadRequest, t as MindooDBAppBridgeStreamWriteRequest, u as MindooDBAppBridgeThemeChangedMessage, v as MindooDBAppBridgeViewportChangedMessage, w as MindooDBAppCapability, x as MindooDBAppConfiguredViewCategorizationStyle, y as MindooDBAppConfiguredViewColumn, z as MindooDBAppConfiguredViewColumnRole, A as MindooDBAppConfiguredViewExpressionMode, B as MindooDBAppConfiguredViewFieldExpression, C as MindooDBAppConfiguredViewFilterDefinition, D as MindooDBAppConfiguredViewFilterMode, E as MindooDBAppConfiguredViewFilterRule, F as MindooDBAppConfiguredViewFormulaExpression, G as MindooDBAppConfiguredViewFormulaFilterDefinition, H as MindooDBAppConfiguredViewPreviewMode, I as MindooDBAppConfiguredViewRuleFilterDefinition, J as MindooDBAppConfiguredViewRuleMatchMode, K as MindooDBAppConfiguredViewRuleOperator, L as MindooDBAppConfiguredViewValueExpression, N as MindooDBAppCreateDocumentInput, O as MindooDBAppDatabase, P as MindooDBAppDatabaseInfo, Q as MindooDBAppDocument, R as MindooDBAppDocumentApi, S as MindooDBAppDocumentHistoryEntry, T as MindooDBAppDocumentListQuery, U as MindooDBAppDocumentListResult, V as MindooDBAppDocumentSummary, W as MindooDBAppHistoricalDocument, X as MindooDBAppHistoryQuery, Y as MindooDBAppHostTheme, Z as MindooDBAppLaunchContext, _ as MindooDBAppReadableAttachmentStream, $ as MindooDBAppResolvedViewDefinition, a0 as MindooDBAppResolvedViewSource, a1 as MindooDBAppRuntime, a2 as MindooDBAppSession, a3 as MindooDBAppThemeMode, a4 as MindooDBAppUpdateDocumentInput, a5 as MindooDBAppViewApi, a6 as MindooDBAppViewHandle, a7 as MindooDBAppViewport, a8 as MindooDBAppWritableAttachmentStream } from './types-BGdIfp-D.js';
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, databaseId, viewId) {
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
  };
@@ -1,10 +1,14 @@
1
- import { Z as MindooDBAppLaunchContext, P as MindooDBAppDatabaseInfo, R as MindooDBAppDocumentApi, a5 as MindooDBAppViewApi, a as MindooDBAppAttachmentApi, M as MindooDBAppBridge, a2 as MindooDBAppSession, k as MindooDBAppBridgeRpcRequest, Y as MindooDBAppHostTheme, a7 as MindooDBAppViewport, h as MindooDBAppBridgePortMessage } from '../types-BGdIfp-D.js';
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<MindooDBAppViewApi>;
11
+ views?: Partial<MockViewApi>;
8
12
  attachments?: Partial<MindooDBAppAttachmentApi>;
9
13
  };
10
14
  interface MockMindooDBAppDatabaseDefinition {