@tensorix/metahub 0.5.7 → 0.6.0

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.
Files changed (124) hide show
  1. package/README.md +35 -14
  2. package/README.zh-CN.md +41 -13
  3. package/dist/cli.js +4436 -1328
  4. package/dist/cli.js.map +71 -48
  5. package/dist/core/blobs.d.ts.map +1 -1
  6. package/dist/core/blocks.d.ts +6 -2
  7. package/dist/core/blocks.d.ts.map +1 -1
  8. package/dist/core/compact.d.ts.map +1 -1
  9. package/dist/core/crdt.d.ts +5 -6
  10. package/dist/core/crdt.d.ts.map +1 -1
  11. package/dist/core/db.d.ts.map +1 -1
  12. package/dist/core/documents.d.ts +39 -0
  13. package/dist/core/documents.d.ts.map +1 -1
  14. package/dist/core/errors.d.ts +6 -1
  15. package/dist/core/errors.d.ts.map +1 -1
  16. package/dist/core/history-archive.d.ts +41 -0
  17. package/dist/core/history-archive.d.ts.map +1 -0
  18. package/dist/core/history.d.ts.map +1 -1
  19. package/dist/core/hlc.d.ts +4 -0
  20. package/dist/core/hlc.d.ts.map +1 -1
  21. package/dist/core/node.d.ts.map +1 -1
  22. package/dist/core/properties.d.ts +6 -0
  23. package/dist/core/properties.d.ts.map +1 -1
  24. package/dist/core/replica/drafts.d.ts +26 -0
  25. package/dist/core/replica/drafts.d.ts.map +1 -0
  26. package/dist/core/replica/rpc.d.ts +8 -0
  27. package/dist/core/replica/rpc.d.ts.map +1 -0
  28. package/dist/core/replica/service.d.ts +970 -0
  29. package/dist/core/replica/service.d.ts.map +1 -0
  30. package/dist/core/replica/sync.d.ts +55 -0
  31. package/dist/core/replica/sync.d.ts.map +1 -0
  32. package/dist/core/schema-init.d.ts +1 -1
  33. package/dist/core/schema-init.d.ts.map +1 -1
  34. package/dist/core/search.d.ts +34 -0
  35. package/dist/core/search.d.ts.map +1 -1
  36. package/dist/core/snapshot.d.ts.map +1 -1
  37. package/dist/core/sync/bucket-v2.d.ts +110 -0
  38. package/dist/core/sync/bucket-v2.d.ts.map +1 -0
  39. package/dist/core/sync/client.d.ts +14 -1
  40. package/dist/core/sync/client.d.ts.map +1 -1
  41. package/dist/core/sync/commit-log.d.ts +41 -0
  42. package/dist/core/sync/commit-log.d.ts.map +1 -0
  43. package/dist/core/sync/current-checkpoint.d.ts +47 -0
  44. package/dist/core/sync/current-checkpoint.d.ts.map +1 -0
  45. package/dist/core/sync/data-map-db.d.ts.map +1 -1
  46. package/dist/core/sync/data-version.d.ts +29 -0
  47. package/dist/core/sync/data-version.d.ts.map +1 -0
  48. package/dist/core/sync/drop-keys.d.ts.map +1 -1
  49. package/dist/core/sync/drop-pull.d.ts.map +1 -1
  50. package/dist/core/sync/e2ee.d.ts +5 -0
  51. package/dist/core/sync/e2ee.d.ts.map +1 -1
  52. package/dist/core/sync/enroll.d.ts +2 -0
  53. package/dist/core/sync/enroll.d.ts.map +1 -1
  54. package/dist/core/sync/history-observation.d.ts +5 -0
  55. package/dist/core/sync/history-observation.d.ts.map +1 -0
  56. package/dist/core/sync/http-status.d.ts.map +1 -1
  57. package/dist/core/sync/page-messages.d.ts +12 -0
  58. package/dist/core/sync/page-messages.d.ts.map +1 -1
  59. package/dist/core/sync/peer-v2.d.ts +9 -0
  60. package/dist/core/sync/peer-v2.d.ts.map +1 -0
  61. package/dist/core/sync/peers.d.ts +1 -0
  62. package/dist/core/sync/peers.d.ts.map +1 -1
  63. package/dist/core/sync/portable-json.d.ts +5 -0
  64. package/dist/core/sync/portable-json.d.ts.map +1 -0
  65. package/dist/core/sync/protocol.d.ts +32 -0
  66. package/dist/core/sync/protocol.d.ts.map +1 -1
  67. package/dist/core/sync/recovery-desktop.d.ts +6 -0
  68. package/dist/core/sync/recovery-desktop.d.ts.map +1 -0
  69. package/dist/core/sync/recovery-intent.d.ts +7 -0
  70. package/dist/core/sync/recovery-intent.d.ts.map +1 -0
  71. package/dist/core/sync/recovery-local.d.ts +21 -0
  72. package/dist/core/sync/recovery-local.d.ts.map +1 -0
  73. package/dist/core/sync/recovery-v2.d.ts +40 -0
  74. package/dist/core/sync/recovery-v2.d.ts.map +1 -0
  75. package/dist/core/sync/retention-executor.d.ts +77 -0
  76. package/dist/core/sync/retention-executor.d.ts.map +1 -0
  77. package/dist/core/sync/retention-protocol.d.ts +74 -0
  78. package/dist/core/sync/retention-protocol.d.ts.map +1 -0
  79. package/dist/core/sync/retention-state.d.ts +87 -0
  80. package/dist/core/sync/retention-state.d.ts.map +1 -0
  81. package/dist/core/sync/routes.d.ts +1 -1
  82. package/dist/core/sync/routes.d.ts.map +1 -1
  83. package/dist/core/sync/server.d.ts +1 -1
  84. package/dist/core/sync/server.d.ts.map +1 -1
  85. package/dist/core/sync/share-export.d.ts.map +1 -1
  86. package/dist/core/sync/share-serve.d.ts.map +1 -1
  87. package/dist/core/sync/share-table-client.d.ts +7 -0
  88. package/dist/core/sync/share-table-client.d.ts.map +1 -0
  89. package/dist/core/sync/share-table.d.ts +11 -0
  90. package/dist/core/sync/share-table.d.ts.map +1 -0
  91. package/dist/core/sync/share-tools.d.ts +10 -0
  92. package/dist/core/sync/share-tools.d.ts.map +1 -0
  93. package/dist/core/sync/storage-s3-bun.d.ts +3 -1
  94. package/dist/core/sync/storage-s3-bun.d.ts.map +1 -1
  95. package/dist/core/sync/storage-s3-fetch.d.ts +8 -0
  96. package/dist/core/sync/storage-s3-fetch.d.ts.map +1 -0
  97. package/dist/core/sync/storage-s3-sign.d.ts +3 -0
  98. package/dist/core/sync/storage-s3-sign.d.ts.map +1 -1
  99. package/dist/core/sync/storage-v2.d.ts +18 -0
  100. package/dist/core/sync/storage-v2.d.ts.map +1 -0
  101. package/dist/core/sync/storage.d.ts +47 -6
  102. package/dist/core/sync/storage.d.ts.map +1 -1
  103. package/dist/core/sync/transport.d.ts +4 -0
  104. package/dist/core/sync/transport.d.ts.map +1 -0
  105. package/dist/core/sync/v2-ingest.d.ts +10 -0
  106. package/dist/core/sync/v2-ingest.d.ts.map +1 -0
  107. package/dist/core/sync/v2-maintenance.d.ts +10 -0
  108. package/dist/core/sync/v2-maintenance.d.ts.map +1 -0
  109. package/dist/db-worker.js +212 -160
  110. package/dist/edge-worker.js +4956 -186
  111. package/dist/index.js +9461 -6468
  112. package/dist/index.js.map +69 -47
  113. package/dist/metahub-sdk.js +5 -5
  114. package/dist/mh-runtime.js +2 -2
  115. package/dist/shared/views/date.d.ts +21 -0
  116. package/dist/shared/views/date.d.ts.map +1 -0
  117. package/dist/shared/views/model.d.ts +65 -0
  118. package/dist/shared/views/model.d.ts.map +1 -0
  119. package/dist/shared/views/query.d.ts +47 -0
  120. package/dist/shared/views/query.d.ts.map +1 -0
  121. package/dist/sw.js +9 -9
  122. package/dist/webui/server/routes.d.ts.map +1 -1
  123. package/dist/webui.js +131 -130
  124. package/package.json +1 -1
@@ -0,0 +1,21 @@
1
+ /** Parse a "YYYY-MM-DD" (optionally with time) value into a local midnight Date.
2
+ * Returns null for empty / unparseable values. */
3
+ export declare function parseDate(v: unknown): Date | null;
4
+ /** Format a Date as "YYYY-MM-DD" in local time. */
5
+ export declare function toISO(d: Date): string;
6
+ /** A new Date n days after d (n may be negative). Time is normalized to midnight. */
7
+ export declare function addDays(d: Date, n: number): Date;
8
+ /** True when a and b fall on the same calendar day. */
9
+ export declare function sameDay(a: Date, b: Date): boolean;
10
+ export declare function startOfMonth(y: number, m: number): Date;
11
+ export declare function endOfMonth(y: number, m: number): Date;
12
+ /** Whole calendar days from a to b (b - a), rounded; same day → 0. */
13
+ export declare function daysBetween(a: Date, b: Date): number;
14
+ /** Today at local midnight. */
15
+ export declare function today(): Date;
16
+ /** Monday-of-the-week for d (Monday = start of week). */
17
+ export declare function startOfWeekMon(d: Date): Date;
18
+ /** A grid of weeks (each 7 days, Monday-first) that fully covers month (y, m).
19
+ * Always returns whole weeks; length is 5 or 6 rows. */
20
+ export declare function monthMatrix(y: number, m: number): Date[][];
21
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../../src/shared/views/date.ts"],"names":[],"mappings":"AASA;mDACmD;AACnD,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAQjD;AAED,mDAAmD;AACnD,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAKrC;AAED,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,uDAAuD;AACvD,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAEjD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAEvD;AACD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAIpD;AAED,+BAA+B;AAC/B,wBAAgB,KAAK,IAAI,IAAI,CAG5B;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAG5C;AAED;yDACyD;AACzD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,CAa1D"}
@@ -0,0 +1,65 @@
1
+ import type { PropertyRow as Prop, PropType } from "../../core/properties.ts";
2
+ import type { RecordRow as Rec } from "../../core/records.ts";
3
+ export type Layout = "table" | "board" | "calendar" | "timeline";
4
+ export type SortRule = {
5
+ prop: string;
6
+ desc: boolean;
7
+ };
8
+ export type FilterRule = {
9
+ id: string;
10
+ prop: string;
11
+ cond: string;
12
+ value?: unknown;
13
+ };
14
+ export type FilterSet = {
15
+ op: "and" | "or";
16
+ rules: FilterRule[];
17
+ };
18
+ export type CalcKind = "count" | "filled" | "empty" | "sum" | "avg" | "median" | "min" | "max" | "unique" | "checked" | "unchecked";
19
+ export interface ViewDef {
20
+ [key: string]: unknown;
21
+ id: string;
22
+ name: string;
23
+ layout: Layout;
24
+ sort: SortRule[];
25
+ filter: FilterSet;
26
+ hidden: string[];
27
+ group?: string;
28
+ dateProp?: string;
29
+ start?: string;
30
+ end?: string | null;
31
+ wrap?: boolean;
32
+ calc?: Record<string, CalcKind>;
33
+ }
34
+ export declare const LAYOUTS: Layout[];
35
+ export declare const LAYOUT_ICON: Record<Layout, string>;
36
+ export declare function layoutLabel(l: Layout): string;
37
+ export declare function newViewId(): string;
38
+ export declare function emptyView(layout: Layout, name?: string, id?: string): ViewDef;
39
+ /** The views a database shows before anyone saved one: one per layout, with
40
+ * stable ids so `?view=board` deep links and the old tab order keep working. */
41
+ export declare function defaultViews(): ViewDef[];
42
+ /** Validate a persisted `meta.views` value; anything malformed falls back to
43
+ * the defaults so a bad write can never blank the database page. */
44
+ export declare function normalizeViews(raw: unknown, label?: typeof layoutLabel): ViewDef[];
45
+ export type CondDef = {
46
+ id: string;
47
+ label: string;
48
+ value: "none" | "text" | "number" | "option" | "options" | "date" | "within" | "bool" | "refs";
49
+ };
50
+ export declare function condsFor(type: PropType): CondDef[];
51
+ export declare const WITHIN_PRESETS: {
52
+ id: string;
53
+ label: string;
54
+ }[];
55
+ export declare function withinRange(preset: string, now?: Date): [Date, Date];
56
+ /** Does one cell satisfy a rule? A rule with no value yet is a no-op (true). */
57
+ export declare function matchRule(rule: FilterRule, prop: Prop, value: unknown, now?: Date): boolean;
58
+ export declare function applyFilter(records: Rec[], props: Prop[], filter: FilterSet, now?: Date): Rec[];
59
+ export declare function compareCells(prop: Prop, a: unknown, b: unknown): number;
60
+ export declare function applySort(records: Rec[], props: Prop[], sort: SortRule[]): Rec[];
61
+ export declare function searchRecords(records: Rec[], props: Prop[], q: string): Rec[];
62
+ export declare function calcKindsFor(type: PropType): CalcKind[];
63
+ export declare function calcLabel(k: CalcKind): string;
64
+ export declare function computeCalc(k: CalcKind, prop: Prop, values: unknown[]): string;
65
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/shared/views/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { DbDriver } from "../../core/driver.ts";
2
+ import { type FilterSet, type SortRule } from "./model.ts";
3
+ export interface RecordQuery {
4
+ search?: string;
5
+ filter?: FilterSet;
6
+ sort?: SortRule[];
7
+ offset?: number;
8
+ limit?: number;
9
+ }
10
+ export declare function queryRecords(db: DbDriver, databaseId: string, query?: RecordQuery): {
11
+ records: {
12
+ id: string;
13
+ database_id: string;
14
+ cells: Record<string, unknown>;
15
+ values: Record<string, unknown>;
16
+ }[];
17
+ total: number;
18
+ hasMore: boolean;
19
+ offset: number;
20
+ limit: number;
21
+ };
22
+ /** Yield between SQLite chunks so native gestures and cancellation can run. */
23
+ export declare function queryRecordsAsync(db: DbDriver, databaseId: string, query?: RecordQuery, isCurrent?: () => boolean): Promise<{
24
+ records: {
25
+ id: string;
26
+ database_id: string;
27
+ cells: Record<string, unknown>;
28
+ values: Record<string, unknown>;
29
+ }[];
30
+ total: number;
31
+ hasMore: boolean;
32
+ offset: number;
33
+ limit: number;
34
+ }>;
35
+ /** Reference pickers only need document summaries; never hydrate their bodies. */
36
+ export declare function queryDocuments(db: DbDriver, query?: {
37
+ search?: string;
38
+ offset?: number;
39
+ limit?: number;
40
+ }): {
41
+ documents: import("../../index.ts").DocumentSummary[];
42
+ total: number;
43
+ hasMore: boolean;
44
+ offset: number;
45
+ limit: number;
46
+ };
47
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/shared/views/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAA4C,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErG,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4DD,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,WAAgB;;;;;;;;;;;EAKrF;AACD,+EAA+E;AAC/E,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,WAAgB,EAAE,SAAS,gBAAa;;;;;;;;;;;GAQxH;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAE;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAM;;;;;;EAQ1G"}