@dxos/plugin-wnfs 0.8.4-main.abd8ff62ef → 0.8.4-main.bc2380dfbc

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 (144) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/FileArticle-B3NF2VKL.mjs +58 -0
  4. package/dist/lib/neutral/FileArticle-B3NF2VKL.mjs.map +7 -0
  5. package/dist/lib/neutral/WnfsPlugin.mjs +50 -0
  6. package/dist/lib/neutral/WnfsPlugin.mjs.map +7 -0
  7. package/dist/lib/neutral/WnfsPlugin.node.mjs +23 -0
  8. package/dist/lib/neutral/WnfsPlugin.node.mjs.map +7 -0
  9. package/dist/lib/neutral/WnfsPlugin.workerd.mjs +21 -0
  10. package/dist/lib/neutral/WnfsPlugin.workerd.mjs.map +7 -0
  11. package/dist/lib/neutral/blockstore-3NLSWC7Z.mjs +190 -0
  12. package/dist/lib/neutral/blockstore-3NLSWC7Z.mjs.map +7 -0
  13. package/dist/lib/neutral/capabilities/index.mjs +19 -0
  14. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  15. package/dist/lib/{browser/index.mjs → neutral/chunk-LHUHUCBD.mjs} +1 -13
  16. package/dist/lib/neutral/chunk-LHUHUCBD.mjs.map +7 -0
  17. package/dist/lib/neutral/chunk-UIZBWELF.mjs +8 -0
  18. package/dist/lib/neutral/chunk-UIZBWELF.mjs.map +7 -0
  19. package/dist/lib/neutral/chunk-VWVCHTUK.mjs +125 -0
  20. package/dist/lib/neutral/chunk-VWVCHTUK.mjs.map +7 -0
  21. package/dist/lib/neutral/components/index.mjs +63 -0
  22. package/dist/lib/neutral/components/index.mjs.map +7 -0
  23. package/dist/lib/neutral/containers/index.mjs +9 -0
  24. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  25. package/dist/lib/{browser/create-QRLX4IMZ.mjs → neutral/create-4ERE5CA4.mjs} +6 -8
  26. package/dist/lib/neutral/create-4ERE5CA4.mjs.map +7 -0
  27. package/dist/lib/{browser/create-file-INAT56PX.mjs → neutral/create-file-RAHDIJVU.mjs} +11 -13
  28. package/dist/lib/neutral/create-file-RAHDIJVU.mjs.map +7 -0
  29. package/dist/lib/neutral/create-object-7PJC47BB.mjs +33 -0
  30. package/dist/lib/neutral/create-object-7PJC47BB.mjs.map +7 -0
  31. package/dist/lib/neutral/file-uploader-WOF3H3FN.mjs +34 -0
  32. package/dist/lib/neutral/file-uploader-WOF3H3FN.mjs.map +7 -0
  33. package/dist/lib/neutral/index.mjs +40 -0
  34. package/dist/lib/neutral/markdown-I4FYAUCA.mjs +204 -0
  35. package/dist/lib/neutral/markdown-I4FYAUCA.mjs.map +7 -0
  36. package/dist/lib/neutral/meta.json +1 -0
  37. package/dist/lib/neutral/meta.mjs +8 -0
  38. package/dist/lib/neutral/meta.mjs.map +7 -0
  39. package/dist/lib/neutral/operation-handler-NPYSIPMR.mjs +13 -0
  40. package/dist/lib/neutral/operation-handler-NPYSIPMR.mjs.map +7 -0
  41. package/dist/lib/neutral/operations/index.mjs +8 -0
  42. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  43. package/dist/lib/neutral/plugin.mjs +16 -0
  44. package/dist/lib/neutral/plugin.mjs.map +7 -0
  45. package/dist/lib/neutral/react-surface-6QHCDYC3.mjs +53 -0
  46. package/dist/lib/neutral/react-surface-6QHCDYC3.mjs.map +7 -0
  47. package/dist/lib/{browser → neutral}/translations.mjs +1 -1
  48. package/dist/lib/neutral/translations.mjs.map +7 -0
  49. package/dist/lib/neutral/types/index.mjs +14 -0
  50. package/dist/lib/neutral/types/index.mjs.map +7 -0
  51. package/dist/lib/{browser/upload-ZQI66T4Y.mjs → neutral/upload-VA5CSUEP.mjs} +9 -11
  52. package/dist/lib/neutral/upload-VA5CSUEP.mjs.map +7 -0
  53. package/dist/types/src/WnfsPlugin.d.ts.map +1 -1
  54. package/dist/types/src/WnfsPlugin.node.d.ts.map +1 -1
  55. package/dist/types/src/WnfsPlugin.workerd.d.ts +4 -0
  56. package/dist/types/src/WnfsPlugin.workerd.d.ts.map +1 -0
  57. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  58. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  59. package/dist/types/src/capabilities/index.d.ts +7 -1
  60. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  61. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  62. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  63. package/dist/types/src/containers/FileArticle/FileArticle.d.ts +7 -0
  64. package/dist/types/src/containers/FileArticle/FileArticle.d.ts.map +1 -0
  65. package/dist/types/src/containers/FileArticle/index.d.ts +2 -0
  66. package/dist/types/src/containers/FileArticle/index.d.ts.map +1 -0
  67. package/dist/types/src/containers/index.d.ts +1 -1
  68. package/dist/types/src/containers/index.d.ts.map +1 -1
  69. package/dist/types/src/index.d.ts +2 -3
  70. package/dist/types/src/index.d.ts.map +1 -1
  71. package/dist/types/src/operations/create-file.d.ts +2 -2
  72. package/dist/types/src/operations/create-file.d.ts.map +1 -1
  73. package/dist/types/src/operations/create.d.ts +2 -2
  74. package/dist/types/src/operations/create.d.ts.map +1 -1
  75. package/dist/types/src/operations/index.d.ts +0 -1
  76. package/dist/types/src/operations/index.d.ts.map +1 -1
  77. package/dist/types/src/operations/upload.d.ts +2 -2
  78. package/dist/types/src/operations/upload.d.ts.map +1 -1
  79. package/dist/types/src/plugin.d.ts +4 -0
  80. package/dist/types/src/plugin.d.ts.map +1 -0
  81. package/dist/types/src/types/WnfsCapabilities.d.ts +11 -0
  82. package/dist/types/src/types/WnfsCapabilities.d.ts.map +1 -0
  83. package/dist/types/src/types/{File.d.ts → WnfsFile.d.ts} +4 -4
  84. package/dist/types/src/types/WnfsFile.d.ts.map +1 -0
  85. package/dist/types/src/{operations/definitions.d.ts → types/WnfsOperation.d.ts} +1 -1
  86. package/dist/types/src/types/WnfsOperation.d.ts.map +1 -0
  87. package/dist/types/src/types/index.d.ts +3 -2
  88. package/dist/types/src/types/index.d.ts.map +1 -1
  89. package/dist/types/tsconfig.tsbuildinfo +1 -1
  90. package/package.json +87 -61
  91. package/src/WnfsPlugin.node.ts +4 -32
  92. package/src/WnfsPlugin.test.ts +3 -3
  93. package/src/WnfsPlugin.tsx +6 -32
  94. package/src/WnfsPlugin.workerd.ts +18 -0
  95. package/src/capabilities/blockstore.ts +1 -1
  96. package/src/capabilities/create-object.ts +33 -0
  97. package/src/capabilities/file-uploader.ts +2 -2
  98. package/src/capabilities/index.ts +1 -0
  99. package/src/capabilities/markdown.ts +1 -1
  100. package/src/capabilities/react-surface.tsx +5 -5
  101. package/src/containers/{FileContainer/FileContainer.tsx → FileArticle/FileArticle.tsx} +3 -3
  102. package/src/containers/FileArticle/index.ts +5 -0
  103. package/src/containers/index.ts +1 -1
  104. package/src/index.ts +2 -8
  105. package/src/operations/create-file.ts +3 -4
  106. package/src/operations/create.ts +2 -3
  107. package/src/operations/index.ts +0 -2
  108. package/src/operations/upload.ts +3 -4
  109. package/src/plugin.ts +11 -0
  110. package/src/translations.ts +1 -1
  111. package/src/types/WnfsCapabilities.ts +18 -0
  112. package/src/types/{File.ts → WnfsFile.ts} +5 -3
  113. package/src/{operations/definitions.ts → types/WnfsOperation.ts} +6 -3
  114. package/src/types/index.ts +4 -2
  115. package/dist/lib/browser/chunk-4D4K5JCC.mjs +0 -66
  116. package/dist/lib/browser/chunk-4D4K5JCC.mjs.map +0 -7
  117. package/dist/lib/browser/chunk-DK62NQ5T.mjs +0 -71
  118. package/dist/lib/browser/chunk-DK62NQ5T.mjs.map +0 -7
  119. package/dist/lib/browser/create-QRLX4IMZ.mjs.map +0 -7
  120. package/dist/lib/browser/create-file-INAT56PX.mjs.map +0 -7
  121. package/dist/lib/browser/index.mjs.map +0 -7
  122. package/dist/lib/browser/meta.json +0 -1
  123. package/dist/lib/browser/operations/index.mjs +0 -14
  124. package/dist/lib/browser/operations/index.mjs.map +0 -7
  125. package/dist/lib/browser/translations.mjs.map +0 -7
  126. package/dist/lib/browser/types/index.mjs +0 -12
  127. package/dist/lib/browser/upload-ZQI66T4Y.mjs.map +0 -7
  128. package/dist/types/src/containers/FileContainer/FileContainer.d.ts +0 -7
  129. package/dist/types/src/containers/FileContainer/FileContainer.d.ts.map +0 -1
  130. package/dist/types/src/containers/FileContainer/index.d.ts +0 -2
  131. package/dist/types/src/containers/FileContainer/index.d.ts.map +0 -1
  132. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  133. package/dist/types/src/types/File.d.ts.map +0 -1
  134. package/dist/types/src/types/capabilities.d.ts +0 -13
  135. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  136. package/src/containers/FileContainer/index.ts +0 -5
  137. package/src/types/capabilities.ts +0 -18
  138. /package/dist/lib/{browser → neutral}/chunk-7KFJ6LYH.mjs +0 -0
  139. /package/dist/lib/{browser → neutral}/chunk-7KFJ6LYH.mjs.map +0 -0
  140. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  141. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  142. /package/dist/lib/{browser → neutral}/helpers/index.mjs +0 -0
  143. /package/dist/lib/{browser → neutral}/helpers/index.mjs.map +0 -0
  144. /package/dist/lib/{browser/types → neutral}/index.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.abd8ff62ef",
3
+ "version": "0.8.4-main.bc2380dfbc",
4
4
  "description": "WNFS file management plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -8,49 +8,77 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/dxos/dxos"
10
10
  },
11
- "license": "MIT",
11
+ "license": "FSL-1.1-Apache-2.0",
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",
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
+ },
20
45
  "#plugin": {
21
- "browser": "./src/WnfsPlugin.tsx",
22
- "node": "./src/WnfsPlugin.node.ts",
23
- "default": "./src/WnfsPlugin.tsx"
46
+ "source": {
47
+ "workerd": "./src/WnfsPlugin.workerd.ts",
48
+ "node": "./src/WnfsPlugin.node.ts",
49
+ "default": "./src/WnfsPlugin.tsx"
50
+ },
51
+ "types": "./dist/types/src/WnfsPlugin.d.ts",
52
+ "workerd": "./dist/lib/neutral/WnfsPlugin.workerd.mjs",
53
+ "node": "./dist/lib/neutral/WnfsPlugin.node.mjs",
54
+ "default": "./dist/lib/neutral/WnfsPlugin.mjs"
24
55
  },
25
- "#translations": "./src/translations.ts",
26
- "#types": "./src/types/index.ts"
56
+ "#translations": {
57
+ "source": "./src/translations.ts",
58
+ "types": "./dist/types/src/translations.d.ts",
59
+ "default": "./dist/lib/neutral/translations.mjs"
60
+ },
61
+ "#types": {
62
+ "source": "./src/types/index.ts",
63
+ "types": "./dist/types/src/types/index.d.ts",
64
+ "default": "./dist/lib/neutral/types/index.mjs"
65
+ }
27
66
  },
28
67
  "exports": {
29
68
  ".": {
30
69
  "source": "./src/index.ts",
31
- "browser": "./dist/lib/browser/index.mjs",
32
- "types": "./dist/types/src/index.d.ts"
70
+ "types": "./dist/types/src/index.d.ts",
71
+ "default": "./dist/lib/neutral/index.mjs"
33
72
  },
34
- "./helpers": {
35
- "source": "./src/helpers/index.ts",
36
- "browser": "./dist/lib/browser/helpers/index.mjs",
37
- "types": "./dist/types/src/helpers/index.d.ts"
38
- },
39
- "./operations": {
40
- "source": "./src/operations/index.ts",
41
- "browser": "./dist/lib/browser/operations/index.mjs",
42
- "types": "./dist/types/src/operations/index.d.ts"
73
+ "./plugin": {
74
+ "source": "./src/plugin.ts",
75
+ "types": "./dist/types/src/plugin.d.ts",
76
+ "default": "./dist/lib/neutral/plugin.mjs"
43
77
  },
44
78
  "./translations": {
45
79
  "source": "./src/translations.ts",
46
80
  "types": "./dist/types/src/translations.d.ts",
47
- "browser": "./dist/lib/browser/translations.mjs",
48
- "node": "./dist/lib/node-esm/translations.mjs"
49
- },
50
- "./types": {
51
- "source": "./src/types/index.ts",
52
- "browser": "./dist/lib/browser/types/index.mjs",
53
- "types": "./dist/types/src/types/index.d.ts"
81
+ "default": "./dist/lib/neutral/translations.mjs"
54
82
  }
55
83
  },
56
84
  "types": "dist/types/src/index.d.ts",
@@ -61,7 +89,7 @@
61
89
  "dependencies": {
62
90
  "@codemirror/language": "^6.11.3",
63
91
  "@codemirror/state": "^6.5.2",
64
- "@codemirror/view": "^6.38.4",
92
+ "@codemirror/view": "^6.38.5",
65
93
  "@ipld/car": "^5.3.3",
66
94
  "blockstore-core": "^5.0.1",
67
95
  "blockstore-idb": "^2.0.0",
@@ -74,46 +102,44 @@
74
102
  "react-dropzone": "^14.2.3",
75
103
  "uint8arrays": "^5.1.0",
76
104
  "wnfs": "0.2.2",
77
- "@dxos/app-toolkit": "0.8.4-main.abd8ff62ef",
78
- "@dxos/compute": "0.8.4-main.abd8ff62ef",
79
- "@dxos/app-framework": "0.8.4-main.abd8ff62ef",
80
- "@dxos/crypto": "0.8.4-main.abd8ff62ef",
81
- "@dxos/echo": "0.8.4-main.abd8ff62ef",
82
- "@dxos/invariant": "0.8.4-main.abd8ff62ef",
83
- "@dxos/plugin-client": "0.8.4-main.abd8ff62ef",
84
- "@dxos/plugin-space": "0.8.4-main.abd8ff62ef",
85
- "@dxos/log": "0.8.4-main.abd8ff62ef",
86
- "@dxos/plugin-markdown": "0.8.4-main.abd8ff62ef",
87
- "@dxos/react-client": "0.8.4-main.abd8ff62ef",
88
- "@dxos/react-ui": "0.8.4-main.abd8ff62ef",
89
- "@dxos/react-ui-editor": "0.8.4-main.abd8ff62ef",
90
- "@dxos/effect": "0.8.4-main.abd8ff62ef",
91
- "@dxos/react-ui-form": "0.8.4-main.abd8ff62ef",
92
- "@dxos/react-ui-stack": "0.8.4-main.abd8ff62ef",
93
- "@dxos/react-ui-mosaic": "0.8.4-main.abd8ff62ef",
94
- "@dxos/schema": "0.8.4-main.abd8ff62ef",
95
- "@dxos/util": "0.8.4-main.abd8ff62ef",
96
- "@dxos/ui-editor": "0.8.4-main.abd8ff62ef"
105
+ "@dxos/app-framework": "0.8.4-main.bc2380dfbc",
106
+ "@dxos/app-toolkit": "0.8.4-main.bc2380dfbc",
107
+ "@dxos/echo": "0.8.4-main.bc2380dfbc",
108
+ "@dxos/invariant": "0.8.4-main.bc2380dfbc",
109
+ "@dxos/crypto": "0.8.4-main.bc2380dfbc",
110
+ "@dxos/effect": "0.8.4-main.bc2380dfbc",
111
+ "@dxos/compute": "0.8.4-main.bc2380dfbc",
112
+ "@dxos/keys": "0.8.4-main.bc2380dfbc",
113
+ "@dxos/log": "0.8.4-main.bc2380dfbc",
114
+ "@dxos/plugin-client": "0.8.4-main.bc2380dfbc",
115
+ "@dxos/plugin-markdown": "0.8.4-main.bc2380dfbc",
116
+ "@dxos/plugin-space": "0.8.4-main.bc2380dfbc",
117
+ "@dxos/react-client": "0.8.4-main.bc2380dfbc",
118
+ "@dxos/react-ui": "0.8.4-main.bc2380dfbc",
119
+ "@dxos/react-ui-editor": "0.8.4-main.bc2380dfbc",
120
+ "@dxos/react-ui-form": "0.8.4-main.bc2380dfbc",
121
+ "@dxos/schema": "0.8.4-main.bc2380dfbc",
122
+ "@dxos/react-ui-stack": "0.8.4-main.bc2380dfbc",
123
+ "@dxos/react-ui-mosaic": "0.8.4-main.bc2380dfbc",
124
+ "@dxos/ui-editor": "0.8.4-main.bc2380dfbc",
125
+ "@dxos/util": "0.8.4-main.bc2380dfbc"
97
126
  },
98
127
  "devDependencies": {
99
128
  "@types/react": "~19.2.7",
100
129
  "@types/react-dom": "~19.2.3",
101
130
  "react": "~19.2.3",
102
131
  "react-dom": "~19.2.3",
103
- "vite": "^8.0.10",
104
- "@dxos/random": "0.8.4-main.abd8ff62ef",
105
- "@dxos/plugin-testing": "0.8.4-main.abd8ff62ef",
106
- "@dxos/storybook-utils": "0.8.4-main.abd8ff62ef",
107
- "@dxos/ui-theme": "0.8.4-main.abd8ff62ef"
132
+ "vite": "^8.0.13",
133
+ "@dxos/plugin-testing": "0.8.4-main.bc2380dfbc",
134
+ "@dxos/random": "0.8.4-main.bc2380dfbc",
135
+ "@dxos/storybook-utils": "0.8.4-main.bc2380dfbc",
136
+ "@dxos/ui-theme": "0.8.4-main.bc2380dfbc"
108
137
  },
109
138
  "peerDependencies": {
110
139
  "effect": "3.20.0",
111
140
  "react": "~19.2.3",
112
141
  "react-dom": "~19.2.3",
113
- "@dxos/react-ui": "0.8.4-main.abd8ff62ef",
114
- "@dxos/ui-theme": "0.8.4-main.abd8ff62ef"
115
- },
116
- "publishConfig": {
117
- "access": "public"
142
+ "@dxos/ui-theme": "0.8.4-main.bc2380dfbc",
143
+ "@dxos/react-ui": "0.8.4-main.bc2380dfbc"
118
144
  }
119
145
  }
@@ -2,45 +2,17 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import * as Effect from 'effect/Effect';
6
- import * as Option from 'effect/Option';
7
-
8
5
  import { Plugin } from '@dxos/app-framework';
9
6
  import { AppPlugin } from '@dxos/app-toolkit';
10
- import { Operation } from '@dxos/compute';
11
- import { Annotation } from '@dxos/echo';
12
- import { SpaceOperation } from '@dxos/plugin-space/operations';
13
- import { type CreateObject } from '@dxos/plugin-space/types';
14
7
 
15
- import { OperationHandler } from '#capabilities';
8
+ import { CreateObject, OperationHandler } from '#capabilities';
16
9
  import { meta } from '#meta';
17
- import { WnfsOperation } from '#operations';
18
- import { WnfsAction, WnfsFile } from '#types';
10
+ import { WnfsFile } from '#types';
19
11
 
20
12
  export const WnfsPlugin = Plugin.define(meta).pipe(
21
- AppPlugin.addMetadataModule({
22
- metadata: {
23
- id: WnfsFile.File.typename,
24
- metadata: {
25
- // TODO(wittjosiah): Would be nice if icon could change based on the type of the file.
26
- icon: Annotation.IconAnnotation.get(WnfsFile.File).pipe(Option.getOrThrow).icon,
27
- iconHue: Annotation.IconAnnotation.get(WnfsFile.File).pipe(Option.getOrThrow).hue ?? 'white',
28
- inputSchema: WnfsAction.UploadFileSchema,
29
- createObject: ((props, options) =>
30
- Effect.gen(function* () {
31
- const { object } = yield* Operation.invoke(WnfsOperation.CreateFile, { ...props, db: options.db });
32
- return yield* Operation.invoke(SpaceOperation.AddObject, {
33
- object,
34
- target: options.target,
35
- hidden: true,
36
- targetNodeId: options.targetNodeId,
37
- });
38
- })) satisfies CreateObject,
39
- },
40
- },
41
- }),
13
+ AppPlugin.addCreateObjectModule({ activate: CreateObject }),
42
14
  AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
43
- AppPlugin.addSchemaModule({ schema: [WnfsFile.File] }),
15
+ AppPlugin.addSchemaModule({ schema: [WnfsFile.WnfsFile] }),
44
16
  Plugin.make,
45
17
  );
46
18
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { describe, test } from 'vitest';
6
6
 
7
- import { ClientPlugin } from '@dxos/plugin-client';
7
+ import { ClientPlugin } from '@dxos/plugin-client/plugin';
8
8
  import { createComposerTestApp } from '@dxos/plugin-testing/harness';
9
9
 
10
10
  import { WnfsPlugin } from '#plugin';
@@ -19,9 +19,9 @@ describe('WnfsPlugin', () => {
19
19
  plugins: [ClientPlugin({}), WnfsPlugin()],
20
20
  });
21
21
 
22
- // After autoStart: metadata, schema, and OperationHandler all auto-cascade.
22
+ // After autoStart: CreateObject, schema, and OperationHandler all auto-cascade.
23
23
  expect(harness.manager.getActive()).toEqual(
24
- expect.arrayContaining([moduleId('metadata'), moduleId('schema'), moduleId('OperationHandler')]),
24
+ expect.arrayContaining([moduleId('CreateObject'), moduleId('schema'), moduleId('OperationHandler')]),
25
25
  );
26
26
  });
27
27
  });
@@ -3,47 +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 { Operation } from '@dxos/compute';
11
- import { Annotation } from '@dxos/echo';
12
- import { ClientEvents } from '@dxos/plugin-client/types';
13
- import { MarkdownEvents } from '@dxos/plugin-markdown/types';
14
- import { SpaceOperation } from '@dxos/plugin-space/operations';
15
- import { type CreateObject } from '@dxos/plugin-space/types';
9
+ import { ClientEvents } from '@dxos/plugin-client';
10
+ import { MarkdownEvents } from '@dxos/plugin-markdown';
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
14
  import { translations } from '#translations';
21
- import { WnfsAction, WnfsCapabilities, WnfsFile } from '#types';
15
+ import { WnfsCapabilities, WnfsFile } from '#types';
22
16
 
23
17
  export const WnfsPlugin = Plugin.define(meta).pipe(
24
- AppPlugin.addMetadataModule({
25
- metadata: {
26
- id: WnfsFile.File.typename,
27
- metadata: {
28
- // TODO(wittjosiah): Would be nice if icon could change based on the type of the file.
29
- icon: Annotation.IconAnnotation.get(WnfsFile.File).pipe(Option.getOrThrow).icon,
30
- iconHue: Annotation.IconAnnotation.get(WnfsFile.File).pipe(Option.getOrThrow).hue ?? 'white',
31
- inputSchema: WnfsAction.UploadFileSchema,
32
- createObject: ((props, options) =>
33
- Effect.gen(function* () {
34
- const { object } = yield* Operation.invoke(WnfsOperation.CreateFile, { ...props, db: options.db });
35
- return yield* Operation.invoke(SpaceOperation.AddObject, {
36
- object,
37
- target: options.target,
38
- hidden: true,
39
- targetNodeId: options.targetNodeId,
40
- });
41
- })) satisfies CreateObject,
42
- },
43
- },
44
- }),
18
+ AppPlugin.addCreateObjectModule({ activate: CreateObject }),
45
19
  AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
46
- AppPlugin.addSchemaModule({ schema: [WnfsFile.File] }),
20
+ AppPlugin.addSchemaModule({ schema: [WnfsFile.WnfsFile] }),
47
21
  AppPlugin.addSurfaceModule({ activate: ReactSurface }),
48
22
  AppPlugin.addTranslationsModule({ translations }),
49
23
  Plugin.addModule({
@@ -0,0 +1,18 @@
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 { OperationHandler } from '#capabilities';
9
+ import { meta } from '#meta';
10
+ import { WnfsFile } from '#types';
11
+
12
+ export const WnfsPlugin = Plugin.define(meta).pipe(
13
+ AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
14
+ AppPlugin.addSchemaModule({ schema: [WnfsFile.WnfsFile] }),
15
+ Plugin.make,
16
+ );
17
+
18
+ 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* () {
@@ -6,6 +6,7 @@ import { Capability } from '@dxos/app-framework';
6
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 { type MarkdownExtensionProvider, MarkdownCapabilities } from '@dxos/plugin-markdown/types';
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';
@@ -14,7 +14,7 @@ import { findAnnotation } from '@dxos/effect';
14
14
  import { type FormFieldComponentProps } from '@dxos/react-ui-form';
15
15
 
16
16
  import { FileInput } from '#components';
17
- import { FileContainer } from '#containers';
17
+ import { FileArticle } from '#containers';
18
18
  import { WnfsAction, WnfsFile } from '#types';
19
19
 
20
20
  export default Capability.makeModule(() =>
@@ -24,11 +24,11 @@ export default Capability.makeModule(() =>
24
24
  id: 'article',
25
25
  // TODO(wittjosiah): Split into multiple surfaces if this filter proves too strict for non-article roles.
26
26
  filter: AppSurface.oneOf(
27
- AppSurface.object(AppSurface.Article, WnfsFile.File),
28
- AppSurface.object(AppSurface.Section, WnfsFile.File),
29
- 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),
30
30
  ),
31
- component: ({ data, role }) => <FileContainer role={role} subject={data.subject} />,
31
+ component: ({ data, role }) => <FileArticle role={role} subject={data.subject} />,
32
32
  }),
33
33
  Surface.create({
34
34
  id: 'create-form',
@@ -15,9 +15,9 @@ 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 FileArticleProps = AppSurface.ObjectArticleProps<WnfsFile.WnfsFile>;
19
19
 
20
- export const FileContainer = ({ role, subject: file }: FileContainerProps) => {
20
+ export const FileArticle = ({ role, subject: file }: FileArticleProps) => {
21
21
  const blockstore = useCapability(WnfsCapabilities.Blockstore);
22
22
  const instances = useCapability(WnfsCapabilities.Instances);
23
23
  const [blobUrl, setBlobUrl] = useState<string>();
@@ -54,4 +54,4 @@ export const FileContainer = ({ role, subject: file }: FileContainerProps) => {
54
54
  );
55
55
  };
56
56
 
57
- export default FileContainer;
57
+ export default FileArticle;
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { FileArticle as default } from './FileArticle';
@@ -4,4 +4,4 @@
4
4
 
5
5
  import { type ComponentType, lazy } from 'react';
6
6
 
7
- export const FileContainer: ComponentType<any> = lazy(() => import('./FileContainer'));
7
+ export const FileArticle: ComponentType<any> = lazy(() => import('./FileArticle'));
package/src/index.ts CHANGED
@@ -2,12 +2,6 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
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
-
5
+ export * from './helpers';
11
6
  export * from './meta';
12
-
13
- export { WnfsCapabilities } from './types';
7
+ export * from './types';
@@ -7,13 +7,12 @@ import * as Effect from 'effect/Effect';
7
7
  import { Capability } from '@dxos/app-framework';
8
8
  import { Operation } from '@dxos/compute';
9
9
  import { invariant } from '@dxos/invariant';
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);
@@ -6,10 +6,9 @@ import * as Effect from 'effect/Effect';
6
6
 
7
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 {
@@ -4,8 +4,6 @@
4
4
 
5
5
  import { OperationHandlerSet } from '@dxos/compute';
6
6
 
7
- export * as WnfsOperation from './definitions';
8
-
9
7
  export const WnfsOperationHandlerSet = OperationHandlerSet.lazy(
10
8
  () => import('./create'),
11
9
  () => import('./create-file'),
@@ -7,13 +7,12 @@ import * as Effect from 'effect/Effect';
7
7
  import { Capability } from '@dxos/app-framework';
8
8
  import { Operation } from '@dxos/compute';
9
9
  import { invariant } from '@dxos/invariant';
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`);
@@ -2,12 +2,14 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import * as Schema from 'effect/Schema';
6
8
 
7
9
  import { Annotation, Obj, Type } from '@dxos/echo';
8
10
  import { FormInputAnnotation } from '@dxos/echo/internal';
9
11
 
10
- export const File = Schema.Struct({
12
+ export const WnfsFile = Schema.Struct({
11
13
  name: Schema.String.pipe(Schema.optional),
12
14
  type: Schema.String.pipe(FormInputAnnotation.set(false)),
13
15
  cid: Schema.String.pipe(FormInputAnnotation.set(false)),
@@ -23,6 +25,6 @@ export const File = Schema.Struct({
23
25
  }),
24
26
  );
25
27
 
26
- export type File = Schema.Schema.Type<typeof File>;
28
+ export type WnfsFile = Schema.Schema.Type<typeof WnfsFile>;
27
29
 
28
- export const make = (props: Obj.MakeProps<typeof File>) => Obj.make(File, props);
30
+ export const make = (props: Obj.MakeProps<typeof WnfsFile>) => Obj.make(WnfsFile, props);