@trestleinc/replicate 0.1.0 → 1.1.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 (94) hide show
  1. package/README.md +356 -420
  2. package/dist/client/collection.d.ts +78 -76
  3. package/dist/client/errors.d.ts +59 -0
  4. package/dist/client/index.d.ts +22 -18
  5. package/dist/client/logger.d.ts +0 -1
  6. package/dist/client/merge.d.ts +77 -0
  7. package/dist/client/persistence/adapters/index.d.ts +8 -0
  8. package/dist/client/persistence/adapters/opsqlite.d.ts +46 -0
  9. package/dist/client/persistence/adapters/sqljs.d.ts +83 -0
  10. package/dist/client/persistence/index.d.ts +49 -0
  11. package/dist/client/persistence/indexeddb.d.ts +17 -0
  12. package/dist/client/persistence/memory.d.ts +16 -0
  13. package/dist/client/persistence/sqlite-browser.d.ts +51 -0
  14. package/dist/client/persistence/sqlite-level.d.ts +63 -0
  15. package/dist/client/persistence/sqlite-rn.d.ts +36 -0
  16. package/dist/client/persistence/sqlite.d.ts +47 -0
  17. package/dist/client/persistence/types.d.ts +42 -0
  18. package/dist/client/prose.d.ts +56 -0
  19. package/dist/client/replicate.d.ts +40 -0
  20. package/dist/client/services/checkpoint.d.ts +18 -0
  21. package/dist/client/services/reconciliation.d.ts +24 -0
  22. package/dist/component/_generated/api.d.ts +35 -0
  23. package/dist/component/_generated/api.js +3 -3
  24. package/dist/component/_generated/component.d.ts +89 -0
  25. package/dist/component/_generated/component.js +0 -0
  26. package/dist/component/_generated/dataModel.d.ts +45 -0
  27. package/dist/component/_generated/dataModel.js +0 -0
  28. package/{src → dist}/component/_generated/server.d.ts +9 -38
  29. package/dist/component/convex.config.d.ts +2 -2
  30. package/dist/component/convex.config.js +2 -1
  31. package/dist/component/logger.d.ts +8 -0
  32. package/dist/component/logger.js +30 -0
  33. package/dist/component/public.d.ts +36 -61
  34. package/dist/component/public.js +232 -58
  35. package/dist/component/schema.d.ts +32 -8
  36. package/dist/component/schema.js +19 -6
  37. package/dist/index.js +1553 -308
  38. package/dist/server/builder.d.ts +94 -0
  39. package/dist/server/index.d.ts +14 -17
  40. package/dist/server/schema.d.ts +17 -63
  41. package/dist/server/storage.d.ts +80 -0
  42. package/dist/server.js +268 -83
  43. package/dist/shared/index.d.ts +5 -0
  44. package/dist/shared/index.js +2 -0
  45. package/dist/shared/types.d.ts +50 -0
  46. package/dist/shared/types.js +6 -0
  47. package/dist/shared.js +6 -0
  48. package/package.json +59 -49
  49. package/src/client/collection.ts +877 -450
  50. package/src/client/errors.ts +45 -0
  51. package/src/client/index.ts +52 -26
  52. package/src/client/logger.ts +2 -28
  53. package/src/client/merge.ts +374 -0
  54. package/src/client/persistence/adapters/index.ts +8 -0
  55. package/src/client/persistence/adapters/opsqlite.ts +54 -0
  56. package/src/client/persistence/adapters/sqljs.ts +128 -0
  57. package/src/client/persistence/index.ts +54 -0
  58. package/src/client/persistence/indexeddb.ts +110 -0
  59. package/src/client/persistence/memory.ts +61 -0
  60. package/src/client/persistence/sqlite-browser.ts +107 -0
  61. package/src/client/persistence/sqlite-level.ts +407 -0
  62. package/src/client/persistence/sqlite-rn.ts +44 -0
  63. package/src/client/persistence/sqlite.ts +161 -0
  64. package/src/client/persistence/types.ts +49 -0
  65. package/src/client/prose.ts +369 -0
  66. package/src/client/replicate.ts +80 -0
  67. package/src/client/services/checkpoint.ts +86 -0
  68. package/src/client/services/reconciliation.ts +108 -0
  69. package/src/component/_generated/api.ts +52 -0
  70. package/src/component/_generated/component.ts +103 -0
  71. package/src/component/_generated/{dataModel.d.ts → dataModel.ts} +1 -1
  72. package/src/component/_generated/server.ts +161 -0
  73. package/src/component/convex.config.ts +3 -1
  74. package/src/component/logger.ts +36 -0
  75. package/src/component/public.ts +364 -111
  76. package/src/component/schema.ts +18 -5
  77. package/src/env.d.ts +31 -0
  78. package/src/server/builder.ts +85 -0
  79. package/src/server/index.ts +9 -24
  80. package/src/server/schema.ts +20 -76
  81. package/src/server/storage.ts +313 -0
  82. package/src/shared/index.ts +5 -0
  83. package/src/shared/types.ts +52 -0
  84. package/LICENSE.package +0 -201
  85. package/dist/client/storage.d.ts +0 -143
  86. package/dist/server/replication.d.ts +0 -122
  87. package/dist/server/ssr.d.ts +0 -79
  88. package/dist/ssr.js +0 -19
  89. package/src/client/storage.ts +0 -206
  90. package/src/component/_generated/api.d.ts +0 -95
  91. package/src/component/_generated/api.js +0 -23
  92. package/src/component/_generated/server.js +0 -90
  93. package/src/server/replication.ts +0 -244
  94. package/src/server/ssr.ts +0 -106
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Shared types for @trestleinc/replicate
3
+ *
4
+ * These types are used across client, server, and component code.
5
+ * They are safe to import in any environment (browser, Node.js, Convex).
6
+ */
7
+ /** Marker used during insert/update to signal a fragment field */
8
+ export interface FragmentValue {
9
+ __xmlFragment: true;
10
+ content?: XmlFragmentJSON;
11
+ }
12
+ /** ProseMirror-compatible JSON for XmlFragment serialization */
13
+ export interface XmlFragmentJSON {
14
+ type: "doc";
15
+ content?: XmlNodeJSON[];
16
+ }
17
+ /** ProseMirror node structure */
18
+ export interface XmlNodeJSON {
19
+ type: string;
20
+ attrs?: Record<string, unknown>;
21
+ content?: XmlNodeJSON[];
22
+ text?: string;
23
+ marks?: {
24
+ type: string;
25
+ attrs?: Record<string, unknown>;
26
+ }[];
27
+ }
28
+ /** Operation type for streaming changes */
29
+ export declare enum OperationType {
30
+ Delta = "delta",
31
+ Snapshot = "snapshot"
32
+ }
33
+ /**
34
+ * Extract field names from T where the value type is XmlFragmentJSON.
35
+ * Used for type-safe prose field configuration.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * interface Notebook {
40
+ * id: string;
41
+ * title: string;
42
+ * content: XmlFragmentJSON;
43
+ * }
44
+ *
45
+ * type Fields = ProseFields<Notebook>; // 'content'
46
+ * ```
47
+ */
48
+ export type ProseFields<T> = {
49
+ [K in keyof T]: T[K] extends XmlFragmentJSON ? K : never;
50
+ }[keyof T];
@@ -0,0 +1,6 @@
1
+ var types_OperationType = /*#__PURE__*/ function(OperationType) {
2
+ OperationType["Delta"] = "delta";
3
+ OperationType["Snapshot"] = "snapshot";
4
+ return OperationType;
5
+ }({});
6
+ export { types_OperationType as OperationType };
package/dist/shared.js ADDED
@@ -0,0 +1,6 @@
1
+ var types_OperationType = /*#__PURE__*/ function(OperationType) {
2
+ OperationType["Delta"] = "delta";
3
+ OperationType["Snapshot"] = "snapshot";
4
+ return OperationType;
5
+ }({});
6
+ export { types_OperationType as OperationType };
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@trestleinc/replicate",
3
- "version": "0.1.0",
3
+ "version": "1.1.0",
4
4
  "description": "Offline-first data replication with Yjs CRDTs and Convex",
5
- "repository": "github:trestleinc/convex-replicate",
6
- "homepage": "https://github.com/trestleinc/convex-replicate#readme",
5
+ "repository": "github:trestleinc/replicate",
6
+ "homepage": "https://github.com/trestleinc/replicate#readme",
7
7
  "bugs": {
8
- "url": "https://github.com/trestleinc/convex-replicate/issues"
8
+ "url": "https://github.com/trestleinc/replicate/issues"
9
9
  },
10
10
  "license": "Apache-2.0",
11
11
  "keywords": [
@@ -19,12 +19,23 @@
19
19
  "type": "module",
20
20
  "private": false,
21
21
  "resolutions": {
22
- "convex": "1.28.2"
22
+ "convex": "^1.31.0"
23
23
  },
24
24
  "overrides": {
25
- "convex": "1.28.2"
25
+ "convex": "^1.31.0"
26
+ },
27
+ "scripts": {
28
+ "build": "rslib build",
29
+ "dev": "rslib build --watch",
30
+ "clean": "rm -rf dist"
26
31
  },
27
32
  "exports": {
33
+ ".": {
34
+ "import": {
35
+ "types": "./dist/shared/index.d.ts",
36
+ "default": "./dist/shared.js"
37
+ }
38
+ },
28
39
  "./package.json": "./package.json",
29
40
  "./client": {
30
41
  "import": {
@@ -39,12 +50,6 @@
39
50
  "default": "./dist/server.js"
40
51
  }
41
52
  },
42
- "./ssr": {
43
- "import": {
44
- "types": "./dist/server/ssr.d.ts",
45
- "default": "./dist/ssr.js"
46
- }
47
- },
48
53
  "./convex.config": {
49
54
  "import": {
50
55
  "@convex-dev/component-source": "./src/component/convex.config.ts",
@@ -60,49 +65,54 @@
60
65
  "LICENSE"
61
66
  ],
62
67
  "dependencies": {
63
- "yjs": "13.6.27",
64
- "@tanstack/offline-transactions": "0.1.3",
65
- "@logtape/logtape": "1.1.2"
68
+ "@effect/platform": "0.93.8",
69
+ "@logtape/logtape": "1.2.2",
70
+ "abstract-level": "3.1.1",
71
+ "browser-level": "3.0.0",
72
+ "effect": "3.19.12",
73
+ "y-indexeddb": "9.0.12",
74
+ "y-leveldb": "0.2.0"
66
75
  },
67
76
  "peerDependencies": {
68
- "convex": "1.28.2",
69
- "@tanstack/db": "0.4.20"
77
+ "@tanstack/db": "^0.5.0",
78
+ "convex": "^1.31.0",
79
+ "lib0": "^0.2.0",
80
+ "yjs": "^13.6.0"
81
+ },
82
+ "peerDependenciesMeta": {
83
+ "sql.js": {
84
+ "optional": true
85
+ },
86
+ "@op-engineering/op-sqlite": {
87
+ "optional": true
88
+ }
70
89
  },
71
90
  "devDependencies": {
72
- "@biomejs/biome": "2.3.4",
73
- "@rslib/core": "0.17.1",
74
- "@semantic-release/changelog": "6.0.3",
75
- "@semantic-release/exec": "7.1.0",
76
- "@semantic-release/git": "10.0.1",
77
- "@semantic-release/github": "12.0.1",
78
- "@tanstack/db": "0.4.20",
79
- "@types/node": "24.10.0",
80
- "convex": "1.28.2",
81
- "semantic-release": "25.0.1",
91
+ "@convex-dev/eslint-plugin": "1.1.1",
92
+ "@edge-runtime/vm": "5.0.0",
93
+ "@microsoft/api-extractor": "7.55.2",
94
+ "@rsbuild/plugin-eslint": "1.2.0",
95
+ "@rsbuild/plugin-type-check": "1.3.2",
96
+ "@rslib/core": "0.18.4",
97
+ "@stylistic/eslint-plugin": "5.6.1",
98
+ "@tanstack/db": "0.5.12",
99
+ "@types/node": "25.0.2",
100
+ "@types/sql.js": "1.4.9",
101
+ "convex": "1.31.0",
102
+ "dotenv": "17.2.3",
103
+ "eslint": "9.39.2",
104
+ "fake-indexeddb": "6.2.5",
105
+ "globals": "16.5.0",
106
+ "lib0": "0.2.114",
82
107
  "typescript": "5.9.3",
83
- "zod": "4.1.12"
108
+ "typescript-eslint": "8.50.0",
109
+ "yjs": "13.6.27",
110
+ "zod": "4.1.13"
84
111
  },
85
- "main": "./dist/index.js",
86
- "types": "./dist/client/index.d.ts",
87
- "module": "./dist/index.js",
112
+ "main": "./dist/shared.js",
113
+ "types": "./dist/shared/index.d.ts",
114
+ "module": "./dist/shared.js",
88
115
  "publishConfig": {
89
116
  "access": "public"
90
- },
91
- "scripts": {
92
- "build": "rslib build",
93
- "dev": "rslib build --watch",
94
- "clean": "rm -rf dist",
95
- "typecheck": "tsc --noEmit",
96
- "dev:example": "cd examples/tanstack-start && pnpm run dev",
97
- "build:example": "cd examples/tanstack-start && pnpm run build",
98
- "lint": "biome lint .",
99
- "lint:fix": "biome lint --write .",
100
- "format": "biome format --write .",
101
- "format:check": "biome format .",
102
- "check": "biome check .",
103
- "check:fix": "biome check --write .",
104
- "version-packages": "node scripts/version-packages.js",
105
- "publish:npm": "pnpm run build && pnpm run check:fix && pnpm publish --access public",
106
- "prepublish": "pnpm run build && pnpm run check:fix"
107
117
  }
108
- }
118
+ }