@dxos/plugin-wnfs 0.8.4-main.422d1c7879 → 0.8.4-main.4f23b4e393

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 (154) hide show
  1. package/dist/lib/neutral/FileContainer-YXSTSMA6.mjs +58 -0
  2. package/dist/lib/neutral/FileContainer-YXSTSMA6.mjs.map +7 -0
  3. package/dist/lib/neutral/WnfsPlugin.mjs +50 -0
  4. package/dist/lib/neutral/WnfsPlugin.mjs.map +7 -0
  5. package/dist/lib/neutral/WnfsPlugin.node.mjs +23 -0
  6. package/dist/lib/neutral/WnfsPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/blockstore-3NLSWC7Z.mjs +190 -0
  8. package/dist/lib/neutral/blockstore-3NLSWC7Z.mjs.map +7 -0
  9. package/dist/lib/neutral/capabilities/index.mjs +19 -0
  10. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  11. package/dist/lib/{browser/chunk-N6Y4QPNF.mjs → neutral/chunk-7KFJ6LYH.mjs} +51 -17
  12. package/dist/lib/neutral/chunk-7KFJ6LYH.mjs.map +7 -0
  13. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  14. package/dist/lib/neutral/chunk-LHUHUCBD.mjs +18 -0
  15. package/dist/lib/neutral/chunk-LHUHUCBD.mjs.map +7 -0
  16. package/dist/lib/neutral/chunk-UIZBWELF.mjs +8 -0
  17. package/dist/lib/neutral/chunk-UIZBWELF.mjs.map +7 -0
  18. package/dist/lib/neutral/chunk-VWVCHTUK.mjs +125 -0
  19. package/dist/lib/neutral/chunk-VWVCHTUK.mjs.map +7 -0
  20. package/dist/lib/neutral/components/index.mjs +63 -0
  21. package/dist/lib/neutral/components/index.mjs.map +7 -0
  22. package/dist/lib/neutral/containers/index.mjs +9 -0
  23. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  24. package/dist/lib/neutral/create-4ERE5CA4.mjs +23 -0
  25. package/dist/lib/neutral/create-4ERE5CA4.mjs.map +7 -0
  26. package/dist/lib/neutral/create-file-RAHDIJVU.mjs +40 -0
  27. package/dist/lib/neutral/create-file-RAHDIJVU.mjs.map +7 -0
  28. package/dist/lib/neutral/create-object-7PJC47BB.mjs +33 -0
  29. package/dist/lib/neutral/create-object-7PJC47BB.mjs.map +7 -0
  30. package/dist/lib/neutral/file-uploader-WOF3H3FN.mjs +34 -0
  31. package/dist/lib/neutral/file-uploader-WOF3H3FN.mjs.map +7 -0
  32. package/dist/lib/neutral/helpers/index.mjs +26 -0
  33. package/dist/lib/neutral/helpers/index.mjs.map +7 -0
  34. package/dist/lib/neutral/index.mjs +40 -0
  35. package/dist/lib/neutral/index.mjs.map +7 -0
  36. package/dist/lib/neutral/markdown-I4FYAUCA.mjs +204 -0
  37. package/dist/lib/neutral/markdown-I4FYAUCA.mjs.map +7 -0
  38. package/dist/lib/neutral/meta.json +1 -0
  39. package/dist/lib/neutral/meta.mjs +8 -0
  40. package/dist/lib/neutral/meta.mjs.map +7 -0
  41. package/dist/lib/neutral/operation-handler-NPYSIPMR.mjs +13 -0
  42. package/dist/lib/neutral/operation-handler-NPYSIPMR.mjs.map +7 -0
  43. package/dist/lib/neutral/operations/index.mjs +8 -0
  44. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  45. package/dist/lib/neutral/plugin.mjs +16 -0
  46. package/dist/lib/neutral/plugin.mjs.map +7 -0
  47. package/dist/lib/neutral/react-surface-S4FB2UJ2.mjs +53 -0
  48. package/dist/lib/neutral/react-surface-S4FB2UJ2.mjs.map +7 -0
  49. package/dist/lib/neutral/translations.mjs +30 -0
  50. package/dist/lib/neutral/translations.mjs.map +7 -0
  51. package/dist/lib/neutral/types/index.mjs +14 -0
  52. package/dist/lib/neutral/types/index.mjs.map +7 -0
  53. package/dist/lib/neutral/upload-VA5CSUEP.mjs +33 -0
  54. package/dist/lib/neutral/upload-VA5CSUEP.mjs.map +7 -0
  55. package/dist/types/src/WnfsPlugin.d.ts +1 -0
  56. package/dist/types/src/WnfsPlugin.d.ts.map +1 -1
  57. package/dist/types/src/WnfsPlugin.node.d.ts +4 -0
  58. package/dist/types/src/WnfsPlugin.node.d.ts.map +1 -0
  59. package/dist/types/src/WnfsPlugin.test.d.ts +2 -0
  60. package/dist/types/src/WnfsPlugin.test.d.ts.map +1 -0
  61. package/dist/types/src/blockstore.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/blockstore.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  64. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  65. package/dist/types/src/capabilities/file-uploader.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/index.d.ts +7 -1
  67. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/markdown.d.ts +2 -1
  69. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  71. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  72. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  73. package/dist/types/src/components/FileInput/FileInput.d.ts.map +1 -1
  74. package/dist/types/src/components/FilePreview/FilePreview.d.ts +1 -1
  75. package/dist/types/src/containers/FileContainer/FileContainer.d.ts +1 -1
  76. package/dist/types/src/containers/FileContainer/FileContainer.d.ts.map +1 -1
  77. package/dist/types/src/extensions/image.d.ts.map +1 -1
  78. package/dist/types/src/extensions/image.stories.d.ts.map +1 -1
  79. package/dist/types/src/helpers/common.d.ts.map +1 -1
  80. package/dist/types/src/helpers/load.d.ts.map +1 -1
  81. package/dist/types/src/helpers/upload.d.ts.map +1 -1
  82. package/dist/types/src/helpers/wnfs-url.d.ts.map +1 -1
  83. package/dist/types/src/index.d.ts +2 -2
  84. package/dist/types/src/index.d.ts.map +1 -1
  85. package/dist/types/src/operations/create-file.d.ts +3 -3
  86. package/dist/types/src/operations/create-file.d.ts.map +1 -1
  87. package/dist/types/src/operations/create.d.ts +3 -3
  88. package/dist/types/src/operations/create.d.ts.map +1 -1
  89. package/dist/types/src/operations/index.d.ts +1 -2
  90. package/dist/types/src/operations/index.d.ts.map +1 -1
  91. package/dist/types/src/operations/upload.d.ts +3 -3
  92. package/dist/types/src/operations/upload.d.ts.map +1 -1
  93. package/dist/types/src/plugin.d.ts +4 -0
  94. package/dist/types/src/plugin.d.ts.map +1 -0
  95. package/dist/types/src/translations.d.ts +24 -16
  96. package/dist/types/src/translations.d.ts.map +1 -1
  97. package/dist/types/src/types/WnfsCapabilities.d.ts +11 -0
  98. package/dist/types/src/types/WnfsCapabilities.d.ts.map +1 -0
  99. package/dist/types/src/types/{File.d.ts → WnfsFile.d.ts} +4 -4
  100. package/dist/types/src/types/WnfsFile.d.ts.map +1 -0
  101. package/dist/types/src/{operations/definitions.d.ts → types/WnfsOperation.d.ts} +3 -3
  102. package/dist/types/src/types/WnfsOperation.d.ts.map +1 -0
  103. package/dist/types/src/types/index.d.ts +3 -2
  104. package/dist/types/src/types/index.d.ts.map +1 -1
  105. package/dist/types/src/types/types.d.ts.map +1 -1
  106. package/dist/types/tsconfig.tsbuildinfo +1 -1
  107. package/package.json +89 -47
  108. package/src/WnfsPlugin.node.ts +19 -0
  109. package/src/WnfsPlugin.test.ts +27 -0
  110. package/src/WnfsPlugin.tsx +8 -33
  111. package/src/capabilities/blockstore.ts +1 -1
  112. package/src/capabilities/create-object.ts +33 -0
  113. package/src/capabilities/file-uploader.ts +2 -2
  114. package/src/capabilities/index.ts +2 -1
  115. package/src/capabilities/markdown.ts +16 -12
  116. package/src/capabilities/operation-handler.ts +1 -1
  117. package/src/capabilities/react-surface.tsx +14 -8
  118. package/src/containers/FileContainer/FileContainer.tsx +1 -1
  119. package/src/helpers/load.ts +2 -2
  120. package/src/helpers/upload.ts +1 -1
  121. package/src/index.ts +2 -2
  122. package/src/operations/create-file.ts +4 -5
  123. package/src/operations/create.ts +3 -4
  124. package/src/operations/index.ts +1 -3
  125. package/src/operations/upload.ts +4 -5
  126. package/src/plugin.ts +11 -0
  127. package/src/translations.ts +1 -1
  128. package/src/types/WnfsCapabilities.ts +18 -0
  129. package/src/types/{File.ts → WnfsFile.ts} +5 -3
  130. package/src/{operations/definitions.ts → types/WnfsOperation.ts} +7 -4
  131. package/src/types/index.ts +4 -2
  132. package/dist/lib/browser/chunk-BM3MEFES.mjs +0 -69
  133. package/dist/lib/browser/chunk-BM3MEFES.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-N6Y4QPNF.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-VXUCZHVZ.mjs +0 -69
  136. package/dist/lib/browser/chunk-VXUCZHVZ.mjs.map +0 -7
  137. package/dist/lib/browser/create-NOHKWE67.mjs +0 -24
  138. package/dist/lib/browser/create-NOHKWE67.mjs.map +0 -7
  139. package/dist/lib/browser/create-file-N7ADCFOF.mjs +0 -49
  140. package/dist/lib/browser/create-file-N7ADCFOF.mjs.map +0 -7
  141. package/dist/lib/browser/index.mjs +0 -117
  142. package/dist/lib/browser/index.mjs.map +0 -7
  143. package/dist/lib/browser/meta.json +0 -1
  144. package/dist/lib/browser/operations/index.mjs +0 -13
  145. package/dist/lib/browser/operations/index.mjs.map +0 -7
  146. package/dist/lib/browser/types/index.mjs +0 -11
  147. package/dist/lib/browser/upload-DA7GBOXF.mjs +0 -42
  148. package/dist/lib/browser/upload-DA7GBOXF.mjs.map +0 -7
  149. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  150. package/dist/types/src/types/File.d.ts.map +0 -1
  151. package/dist/types/src/types/capabilities.d.ts +0 -13
  152. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  153. package/src/types/capabilities.ts +0 -18
  154. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-wnfs",
3
- "version": "0.8.4-main.422d1c7879",
3
+ "version": "0.8.4-main.4f23b4e393",
4
4
  "description": "WNFS file management plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -12,28 +12,71 @@
12
12
  "author": "DXOS.org",
13
13
  "type": "module",
14
14
  "imports": {
15
- "#capabilities": "./src/capabilities/index.ts",
16
- "#components": "./src/components/index.ts",
17
- "#containers": "./src/containers/index.ts",
18
- "#meta": "./src/meta.ts",
19
- "#operations": "./src/operations/index.ts",
20
- "#types": "./src/types/index.ts"
15
+ "#capabilities": {
16
+ "source": "./src/capabilities/index.ts",
17
+ "types": "./dist/types/src/capabilities/index.d.ts",
18
+ "default": "./dist/lib/neutral/capabilities/index.mjs"
19
+ },
20
+ "#components": {
21
+ "source": "./src/components/index.ts",
22
+ "types": "./dist/types/src/components/index.d.ts",
23
+ "default": "./dist/lib/neutral/components/index.mjs"
24
+ },
25
+ "#containers": {
26
+ "source": "./src/containers/index.ts",
27
+ "types": "./dist/types/src/containers/index.d.ts",
28
+ "default": "./dist/lib/neutral/containers/index.mjs"
29
+ },
30
+ "#helpers": {
31
+ "source": "./src/helpers/index.ts",
32
+ "types": "./dist/types/src/helpers/index.d.ts",
33
+ "default": "./dist/lib/neutral/helpers/index.mjs"
34
+ },
35
+ "#meta": {
36
+ "source": "./src/meta.ts",
37
+ "types": "./dist/types/src/meta.d.ts",
38
+ "default": "./dist/lib/neutral/meta.mjs"
39
+ },
40
+ "#operations": {
41
+ "source": "./src/operations/index.ts",
42
+ "types": "./dist/types/src/operations/index.d.ts",
43
+ "default": "./dist/lib/neutral/operations/index.mjs"
44
+ },
45
+ "#plugin": {
46
+ "source": {
47
+ "node": "./src/WnfsPlugin.node.ts",
48
+ "default": "./src/WnfsPlugin.tsx"
49
+ },
50
+ "types": "./dist/types/src/WnfsPlugin.d.ts",
51
+ "node": "./dist/lib/neutral/WnfsPlugin.node.mjs",
52
+ "default": "./dist/lib/neutral/WnfsPlugin.mjs"
53
+ },
54
+ "#translations": {
55
+ "source": "./src/translations.ts",
56
+ "types": "./dist/types/src/translations.d.ts",
57
+ "default": "./dist/lib/neutral/translations.mjs"
58
+ },
59
+ "#types": {
60
+ "source": "./src/types/index.ts",
61
+ "types": "./dist/types/src/types/index.d.ts",
62
+ "default": "./dist/lib/neutral/types/index.mjs"
63
+ }
21
64
  },
22
65
  "exports": {
23
66
  ".": {
24
67
  "source": "./src/index.ts",
25
- "browser": "./dist/lib/browser/index.mjs",
26
- "types": "./dist/types/src/index.d.ts"
68
+ "types": "./dist/types/src/index.d.ts",
69
+ "default": "./dist/lib/neutral/index.mjs"
27
70
  },
28
- "./operations": {
29
- "source": "./src/operations/index.ts",
30
- "browser": "./dist/lib/browser/operations/index.mjs",
31
- "types": "./dist/types/src/operations/index.d.ts"
71
+ "./plugin": {
72
+ "source": "./src/plugin.ts",
73
+ "types": "./dist/types/src/plugin.d.ts",
74
+ "default": "./dist/lib/neutral/plugin.mjs"
32
75
  },
33
- "./types": {
34
- "source": "./src/types/index.ts",
35
- "browser": "./dist/lib/browser/types/index.mjs",
36
- "types": "./dist/types/src/types/index.d.ts"
76
+ "./translations": {
77
+ "source": "./src/translations.ts",
78
+ "types": "./dist/types/src/translations.d.ts",
79
+ "default": "./dist/lib/neutral/translations.mjs"
37
80
  }
38
81
  },
39
82
  "types": "dist/types/src/index.d.ts",
@@ -44,7 +87,7 @@
44
87
  "dependencies": {
45
88
  "@codemirror/language": "^6.11.3",
46
89
  "@codemirror/state": "^6.5.2",
47
- "@codemirror/view": "^6.38.4",
90
+ "@codemirror/view": "^6.38.5",
48
91
  "@ipld/car": "^5.3.3",
49
92
  "blockstore-core": "^5.0.1",
50
93
  "blockstore-idb": "^2.0.0",
@@ -57,45 +100,44 @@
57
100
  "react-dropzone": "^14.2.3",
58
101
  "uint8arrays": "^5.1.0",
59
102
  "wnfs": "0.2.2",
60
- "@dxos/app-toolkit": "0.8.4-main.422d1c7879",
61
- "@dxos/echo": "0.8.4-main.422d1c7879",
62
- "@dxos/effect": "0.8.4-main.422d1c7879",
63
- "@dxos/crypto": "0.8.4-main.422d1c7879",
64
- "@dxos/invariant": "0.8.4-main.422d1c7879",
65
- "@dxos/log": "0.8.4-main.422d1c7879",
66
- "@dxos/operation": "0.8.4-main.422d1c7879",
67
- "@dxos/plugin-client": "0.8.4-main.422d1c7879",
68
- "@dxos/plugin-markdown": "0.8.4-main.422d1c7879",
69
- "@dxos/plugin-space": "0.8.4-main.422d1c7879",
70
- "@dxos/app-framework": "0.8.4-main.422d1c7879",
71
- "@dxos/react-ui": "0.8.4-main.422d1c7879",
72
- "@dxos/react-client": "0.8.4-main.422d1c7879",
73
- "@dxos/react-ui-editor": "0.8.4-main.422d1c7879",
74
- "@dxos/react-ui-form": "0.8.4-main.422d1c7879",
75
- "@dxos/react-ui-mosaic": "0.8.4-main.422d1c7879",
76
- "@dxos/react-ui-stack": "0.8.4-main.422d1c7879",
77
- "@dxos/schema": "0.8.4-main.422d1c7879",
78
- "@dxos/util": "0.8.4-main.422d1c7879",
79
- "@dxos/ui-editor": "0.8.4-main.422d1c7879"
103
+ "@dxos/app-framework": "0.8.4-main.4f23b4e393",
104
+ "@dxos/compute": "0.8.4-main.4f23b4e393",
105
+ "@dxos/app-toolkit": "0.8.4-main.4f23b4e393",
106
+ "@dxos/echo": "0.8.4-main.4f23b4e393",
107
+ "@dxos/crypto": "0.8.4-main.4f23b4e393",
108
+ "@dxos/log": "0.8.4-main.4f23b4e393",
109
+ "@dxos/effect": "0.8.4-main.4f23b4e393",
110
+ "@dxos/invariant": "0.8.4-main.4f23b4e393",
111
+ "@dxos/keys": "0.8.4-main.4f23b4e393",
112
+ "@dxos/plugin-client": "0.8.4-main.4f23b4e393",
113
+ "@dxos/plugin-markdown": "0.8.4-main.4f23b4e393",
114
+ "@dxos/react-client": "0.8.4-main.4f23b4e393",
115
+ "@dxos/react-ui": "0.8.4-main.4f23b4e393",
116
+ "@dxos/plugin-space": "0.8.4-main.4f23b4e393",
117
+ "@dxos/react-ui-editor": "0.8.4-main.4f23b4e393",
118
+ "@dxos/react-ui-mosaic": "0.8.4-main.4f23b4e393",
119
+ "@dxos/react-ui-form": "0.8.4-main.4f23b4e393",
120
+ "@dxos/react-ui-stack": "0.8.4-main.4f23b4e393",
121
+ "@dxos/schema": "0.8.4-main.4f23b4e393",
122
+ "@dxos/ui-editor": "0.8.4-main.4f23b4e393",
123
+ "@dxos/util": "0.8.4-main.4f23b4e393"
80
124
  },
81
125
  "devDependencies": {
82
126
  "@types/react": "~19.2.7",
83
127
  "@types/react-dom": "~19.2.3",
84
128
  "react": "~19.2.3",
85
129
  "react-dom": "~19.2.3",
86
- "vite": "^7.1.11",
87
- "@dxos/random": "0.8.4-main.422d1c7879",
88
- "@dxos/ui-theme": "0.8.4-main.422d1c7879",
89
- "@dxos/storybook-utils": "0.8.4-main.422d1c7879"
130
+ "vite": "^8.0.10",
131
+ "@dxos/plugin-testing": "0.8.4-main.4f23b4e393",
132
+ "@dxos/random": "0.8.4-main.4f23b4e393",
133
+ "@dxos/ui-theme": "0.8.4-main.4f23b4e393",
134
+ "@dxos/storybook-utils": "0.8.4-main.4f23b4e393"
90
135
  },
91
136
  "peerDependencies": {
92
137
  "effect": "3.20.0",
93
138
  "react": "~19.2.3",
94
139
  "react-dom": "~19.2.3",
95
- "@dxos/react-ui": "0.8.4-main.422d1c7879",
96
- "@dxos/ui-theme": "0.8.4-main.422d1c7879"
97
- },
98
- "publishConfig": {
99
- "access": "public"
140
+ "@dxos/react-ui": "0.8.4-main.4f23b4e393",
141
+ "@dxos/ui-theme": "0.8.4-main.4f23b4e393"
100
142
  }
101
143
  }
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { AppPlugin } from '@dxos/app-toolkit';
7
+
8
+ import { CreateObject, OperationHandler } from '#capabilities';
9
+ import { meta } from '#meta';
10
+ import { WnfsFile } from '#types';
11
+
12
+ export const WnfsPlugin = Plugin.define(meta).pipe(
13
+ AppPlugin.addCreateObjectModule({ activate: CreateObject }),
14
+ AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
15
+ AppPlugin.addSchemaModule({ schema: [WnfsFile.WnfsFile] }),
16
+ Plugin.make,
17
+ );
18
+
19
+ export default WnfsPlugin;
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import { ClientPlugin } from '@dxos/plugin-client/plugin';
8
+ import { createComposerTestApp } from '@dxos/plugin-testing/harness';
9
+
10
+ import { WnfsPlugin } from '#plugin';
11
+
12
+ import { meta } from './meta';
13
+
14
+ const moduleId = (name: string) => `${meta.id}.module.${name}`;
15
+
16
+ describe('WnfsPlugin', () => {
17
+ test('modules activate on the expected events', async ({ expect }) => {
18
+ await using harness = await createComposerTestApp({
19
+ plugins: [ClientPlugin({}), WnfsPlugin()],
20
+ });
21
+
22
+ // After autoStart: CreateObject, schema, and OperationHandler all auto-cascade.
23
+ expect(harness.manager.getActive()).toEqual(
24
+ expect.arrayContaining([moduleId('CreateObject'), moduleId('schema'), moduleId('OperationHandler')]),
25
+ );
26
+ });
27
+ });
@@ -3,48 +3,21 @@
3
3
  //
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
- import * as Option from 'effect/Option';
7
6
 
8
7
  import { Capability, Plugin } from '@dxos/app-framework';
9
8
  import { AppPlugin } from '@dxos/app-toolkit';
10
- import { Annotation } from '@dxos/echo';
11
- import { Operation } from '@dxos/operation';
12
- import { ClientEvents } from '@dxos/plugin-client/types';
9
+ import { ClientEvents } from '@dxos/plugin-client';
13
10
  import { MarkdownEvents } from '@dxos/plugin-markdown';
14
- import { SpaceOperation } from '@dxos/plugin-space/operations';
15
- import { type CreateObject } from '@dxos/plugin-space/types';
16
11
 
17
- import { Blockstore, FileUploader, Markdown, OperationHandler, ReactSurface } from '#capabilities';
12
+ import { Blockstore, CreateObject, FileUploader, Markdown, OperationHandler, ReactSurface } from '#capabilities';
18
13
  import { meta } from '#meta';
19
- import { WnfsOperation } from '#operations';
20
- import { WnfsAction, WnfsCapabilities, WnfsFile } from '#types';
21
-
22
- import { translations } from './translations';
14
+ import { translations } from '#translations';
15
+ import { WnfsCapabilities, WnfsFile } from '#types';
23
16
 
24
17
  export const WnfsPlugin = Plugin.define(meta).pipe(
25
- AppPlugin.addMetadataModule({
26
- metadata: {
27
- id: WnfsFile.File.typename,
28
- metadata: {
29
- // TODO(wittjosiah): Would be nice if icon could change based on the type of the file.
30
- icon: Annotation.IconAnnotation.get(WnfsFile.File).pipe(Option.getOrThrow).icon,
31
- iconHue: Annotation.IconAnnotation.get(WnfsFile.File).pipe(Option.getOrThrow).hue ?? 'white',
32
- inputSchema: WnfsAction.UploadFileSchema,
33
- createObject: ((props, options) =>
34
- Effect.gen(function* () {
35
- const { object } = yield* Operation.invoke(WnfsOperation.CreateFile, { ...props, db: options.db });
36
- return yield* Operation.invoke(SpaceOperation.AddObject, {
37
- object,
38
- target: options.target,
39
- hidden: true,
40
- targetNodeId: options.targetNodeId,
41
- });
42
- })) satisfies CreateObject,
43
- },
44
- },
45
- }),
18
+ AppPlugin.addCreateObjectModule({ activate: CreateObject }),
46
19
  AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
47
- AppPlugin.addSchemaModule({ schema: [WnfsFile.File] }),
20
+ AppPlugin.addSchemaModule({ schema: [WnfsFile.WnfsFile] }),
48
21
  AppPlugin.addSurfaceModule({ activate: ReactSurface }),
49
22
  AppPlugin.addTranslationsModule({ translations }),
50
23
  Plugin.addModule({
@@ -73,3 +46,5 @@ export const WnfsPlugin = Plugin.define(meta).pipe(
73
46
  }),
74
47
  Plugin.make,
75
48
  );
49
+
50
+ export default WnfsPlugin;
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
- import { ClientCapabilities } from '@dxos/plugin-client/types';
8
+ import { ClientCapabilities } from '@dxos/plugin-client';
9
9
 
10
10
  import { WnfsCapabilities } from '#types';
11
11
 
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/compute';
9
+ import { SpaceOperation } from '@dxos/plugin-space';
10
+ import { SpaceCapabilities } from '@dxos/plugin-space';
11
+
12
+ import { WnfsOperation } from '#types';
13
+ import { WnfsAction, WnfsFile } from '#types';
14
+
15
+ export default Capability.makeModule(
16
+ Effect.fnUntraced(function* () {
17
+ return Capability.contributes(SpaceCapabilities.CreateObjectEntry, {
18
+ id: WnfsFile.WnfsFile.typename,
19
+ inputSchema: WnfsAction.UploadFileSchema,
20
+ // TODO(wittjosiah): Would be nice if icon could change based on the type of the file.
21
+ createObject: (props, options) =>
22
+ Effect.gen(function* () {
23
+ const { object } = yield* Operation.invoke(WnfsOperation.CreateFile, { ...props, db: options.db });
24
+ return yield* Operation.invoke(SpaceOperation.AddObject, {
25
+ object,
26
+ target: options.target,
27
+ hidden: true,
28
+ targetNodeId: options.targetNodeId,
29
+ });
30
+ }),
31
+ });
32
+ }),
33
+ );
@@ -7,9 +7,9 @@ import * as Effect from 'effect/Effect';
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
8
  import { AppCapabilities } from '@dxos/app-toolkit';
9
9
  import { runAndForwardErrors } from '@dxos/effect';
10
- import { SpaceOperation } from '@dxos/plugin-space/operations';
10
+ import { SpaceOperation } from '@dxos/plugin-space';
11
11
 
12
- import { WnfsOperation } from '#operations';
12
+ import { WnfsOperation } from '#types';
13
13
 
14
14
  export default Capability.makeModule(
15
15
  Effect.fnUntraced(function* () {
@@ -3,9 +3,10 @@
3
3
  //
4
4
 
5
5
  import { Capability } from '@dxos/app-framework';
6
- import { OperationHandlerSet } from '@dxos/operation';
6
+ import { OperationHandlerSet } from '@dxos/compute';
7
7
 
8
8
  export const Blockstore = Capability.lazy('Blockstore', () => import('./blockstore'));
9
+ export const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));
9
10
  export const FileUploader = Capability.lazy('FileUploader', () => import('./file-uploader'));
10
11
  export const Markdown = Capability.lazy('Markdown', () => import('./markdown'));
11
12
  export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
- import { MarkdownCapabilities } from '@dxos/plugin-markdown';
8
+ import { type MarkdownExtensionProvider, MarkdownCapabilities } from '@dxos/plugin-markdown';
9
9
  import { getSpace } from '@dxos/react-client/echo';
10
10
 
11
11
  import { WnfsCapabilities } from '#types';
@@ -17,18 +17,22 @@ export default Capability.makeModule(
17
17
  // Get context for lazy capability access in callbacks.
18
18
  const capabilities = yield* Capability.Service;
19
19
 
20
- return Capability.contributes(MarkdownCapabilities.Extensions, [
21
- ({ document }: { document?: any }) => {
22
- const blockstore = capabilities.get(WnfsCapabilities.Blockstore);
23
- const instances = capabilities.get(WnfsCapabilities.Instances);
20
+ const provider: MarkdownExtensionProvider = ({ document, viewMode }) => {
21
+ if (viewMode === 'source') {
22
+ return undefined;
23
+ }
24
24
 
25
- if (document) {
26
- const space = getSpace(document);
27
- return space ? [image({ blockstore, instances, space })] : [];
28
- }
25
+ const blockstore = capabilities.get(WnfsCapabilities.Blockstore);
26
+ const instances = capabilities.get(WnfsCapabilities.Instances);
29
27
 
30
- return [];
31
- },
32
- ]);
28
+ if (document) {
29
+ const space = getSpace(document);
30
+ return space ? [image({ blockstore, instances, space })] : undefined;
31
+ }
32
+
33
+ return undefined;
34
+ };
35
+
36
+ return Capability.contributes(MarkdownCapabilities.Extensions, [provider]);
33
37
  }),
34
38
  );
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
- import type { OperationHandlerSet } from '@dxos/operation';
8
+ import type { OperationHandlerSet } from '@dxos/compute';
9
9
 
10
10
  import { WnfsOperationHandlerSet } from '#operations';
11
11
 
@@ -4,6 +4,7 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
  import type * as Schema from 'effect/Schema';
7
+ import * as SchemaAST from 'effect/SchemaAST';
7
8
  import React, { useCallback } from 'react';
8
9
 
9
10
  import { Capabilities, Capability } from '@dxos/app-framework';
@@ -23,27 +24,32 @@ export default Capability.makeModule(() =>
23
24
  id: 'article',
24
25
  // TODO(wittjosiah): Split into multiple surfaces if this filter proves too strict for non-article roles.
25
26
  filter: AppSurface.oneOf(
26
- AppSurface.object(AppSurface.Article, WnfsFile.File),
27
- AppSurface.object(AppSurface.Section, WnfsFile.File),
28
- AppSurface.object(AppSurface.Slide, WnfsFile.File),
27
+ AppSurface.object(AppSurface.Article, WnfsFile.WnfsFile),
28
+ AppSurface.object(AppSurface.Section, WnfsFile.WnfsFile),
29
+ AppSurface.object(AppSurface.Slide, WnfsFile.WnfsFile),
29
30
  ),
30
31
  component: ({ data, role }) => <FileContainer role={role} subject={data.subject} />,
31
32
  }),
32
33
  Surface.create({
33
34
  id: 'create-form',
34
35
  role: 'form-input',
35
- filter: (data): data is { prop: string; schema: Schema.Schema.Any } => {
36
+ filter: (data): data is { prop: string; schema: Schema.Schema.Any; fieldPropertyAst?: SchemaAST.AST } => {
36
37
  const annotation = findAnnotation<boolean>(
37
38
  (data.schema as Schema.Schema.All).ast,
38
39
  WnfsAction.UploadAnnotationId,
39
40
  );
40
41
  return !!annotation;
41
42
  },
42
- component: ({ data: { schema }, ...props }) => {
43
- const inputProps = props as unknown as FormFieldComponentProps;
43
+ component: ({ data: { schema, fieldPropertyAst }, ...props }) => {
44
+ const ast = fieldPropertyAst;
45
+ if (!ast) {
46
+ return null;
47
+ }
48
+
49
+ const inputProps = { ...props, type: ast } as unknown as FormFieldComponentProps;
44
50
  const handleChange = useCallback(
45
- (file: File) => inputProps.onValueChange?.(inputProps.type, file),
46
- [inputProps.type, inputProps.onValueChange],
51
+ (file: File) => inputProps.onValueChange?.(ast, file),
52
+ [ast, inputProps.onValueChange],
47
53
  );
48
54
 
49
55
  return <FileInput schema={schema} onChange={handleChange} />;
@@ -15,7 +15,7 @@ import { WnfsCapabilities, type WnfsFile } from '#types';
15
15
 
16
16
  import { filePath, getBlobUrl, loadWnfs, wnfsUrl } from '../../helpers';
17
17
 
18
- export type FileContainerProps = AppSurface.ObjectArticleProps<WnfsFile.File>;
18
+ export type FileContainerProps = AppSurface.ObjectArticleProps<WnfsFile.WnfsFile>;
19
19
 
20
20
  export const FileContainer = ({ role, subject: file }: FileContainerProps) => {
21
21
  const blockstore = useCapability(WnfsCapabilities.Blockstore);
@@ -30,7 +30,7 @@ export const loadWnfs = async ({
30
30
  // TODO(wittjosiah): Remove.
31
31
  // Delete old properties if they exist.
32
32
  if (space.properties.wnfs_access_key !== undefined && space.properties.wnfs_private_forest_cid !== undefined) {
33
- Obj.change(space.properties, (obj) => {
33
+ Obj.update(space.properties, (obj) => {
34
34
  delete obj['wnfs_access_key'];
35
35
  delete obj['wnfs_private_forest_cid'];
36
36
  });
@@ -68,7 +68,7 @@ const createWnfsDir = async (blockstore: Blockstore, space: Space) => {
68
68
 
69
69
  const cidBytes = await newForest.store(wnfsStore);
70
70
 
71
- Obj.change(space.properties, (obj) => {
71
+ Obj.update(space.properties, (obj) => {
72
72
  obj.wnfs = {
73
73
  accessKey: Uint8Arrays.toString(accessKeyRaw.toBytes(), 'base64'),
74
74
  privateForestCid: CID.decode(cidBytes).toString(),
@@ -47,7 +47,7 @@ export const upload = async ({
47
47
  const cidBytes = await updatedForest.store(wnfsStore);
48
48
 
49
49
  // Update the forest pointer on the associated space.
50
- Obj.change(space.properties, (obj) => {
50
+ Obj.update(space.properties, (obj) => {
51
51
  obj.wnfs.privateForestCid = CID.decode(cidBytes).toString();
52
52
  });
53
53
 
package/src/index.ts CHANGED
@@ -2,6 +2,6 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export { WnfsCapabilities } from './types';
5
+ export * from './helpers';
6
6
  export * from './meta';
7
- export * from './WnfsPlugin';
7
+ export * from './types';
@@ -5,15 +5,14 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/compute';
8
9
  import { invariant } from '@dxos/invariant';
9
- import { Operation } from '@dxos/operation';
10
- import { ClientCapabilities } from '@dxos/plugin-client/types';
10
+ import { ClientCapabilities } from '@dxos/plugin-client';
11
11
 
12
12
  import { upload } from '../helpers';
13
- import { WnfsCapabilities, WnfsFile } from '../types';
14
- import { CreateFile } from './definitions';
13
+ import { WnfsCapabilities, WnfsFile, WnfsOperation } from '../types';
15
14
 
16
- const handler: Operation.WithHandler<typeof CreateFile> = CreateFile.pipe(
15
+ const handler: Operation.WithHandler<typeof WnfsOperation.CreateFile> = WnfsOperation.CreateFile.pipe(
17
16
  Operation.withHandler(
18
17
  Effect.fnUntraced(function* ({ file, db }) {
19
18
  const client = yield* Capability.get(ClientCapabilities.Client);
@@ -4,12 +4,11 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Operation } from '@dxos/operation';
7
+ import { Operation } from '@dxos/compute';
8
8
 
9
- import { WnfsFile } from '../types';
10
- import { Create } from './definitions';
9
+ import { WnfsFile, WnfsOperation } from '../types';
11
10
 
12
- const handler: Operation.WithHandler<typeof Create> = Create.pipe(
11
+ const handler: Operation.WithHandler<typeof WnfsOperation.Create> = WnfsOperation.Create.pipe(
13
12
  Operation.withHandler(
14
13
  Effect.fnUntraced(function* ({ name, type, cid }) {
15
14
  return {
@@ -2,9 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { OperationHandlerSet } from '@dxos/operation';
6
-
7
- export * as WnfsOperation from './definitions';
5
+ import { OperationHandlerSet } from '@dxos/compute';
8
6
 
9
7
  export const WnfsOperationHandlerSet = OperationHandlerSet.lazy(
10
8
  () => import('./create'),
@@ -5,15 +5,14 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/compute';
8
9
  import { invariant } from '@dxos/invariant';
9
- import { Operation } from '@dxos/operation';
10
- import { ClientCapabilities } from '@dxos/plugin-client/types';
10
+ import { ClientCapabilities } from '@dxos/plugin-client';
11
11
 
12
12
  import { upload } from '../helpers';
13
- import { WnfsCapabilities } from '../types';
14
- import { Upload } from './definitions';
13
+ import { WnfsCapabilities, WnfsOperation } from '../types';
15
14
 
16
- const handler: Operation.WithHandler<typeof Upload> = Upload.pipe(
15
+ const handler: Operation.WithHandler<typeof WnfsOperation.Upload> = WnfsOperation.Upload.pipe(
17
16
  Operation.withHandler(
18
17
  Effect.fnUntraced(function* ({ file, db }) {
19
18
  const client = yield* Capability.get(ClientCapabilities.Client);
package/src/plugin.ts ADDED
@@ -0,0 +1,11 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+
7
+ import { meta } from './meta';
8
+
9
+ export const WnfsPlugin = Plugin.lazy(meta, () => import('#plugin'));
10
+
11
+ export { WnfsOperationHandlerSet } from './operations';
@@ -10,7 +10,7 @@ import { WnfsFile } from '#types';
10
10
  export const translations = [
11
11
  {
12
12
  'en-US': {
13
- [WnfsFile.File.typename]: {
13
+ [WnfsFile.WnfsFile.typename]: {
14
14
  'typename.label': 'File',
15
15
  'typename.label_zero': 'Files',
16
16
  'typename.label_one': 'File',
@@ -0,0 +1,18 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import { type Blockstore as BlockstoreInterface } from 'interface-blockstore';
8
+ import { type PrivateDirectory, type PrivateForest } from 'wnfs';
9
+
10
+ import { Capability } from '@dxos/app-framework';
11
+ import { type SpaceId } from '@dxos/keys';
12
+
13
+ import { meta } from '#meta';
14
+
15
+ export const Blockstore = Capability.make<BlockstoreInterface>(`${meta.id}.capability.blockstore`);
16
+
17
+ export type Instances = Record<SpaceId, { directory: PrivateDirectory; forest: PrivateForest }>;
18
+ export const Instances = Capability.make<Instances>(`${meta.id}.capability.instances`);