@dxos/plugin-space 0.7.5-main.9cb18ac → 0.7.5-main.9d2a38b

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 (200) hide show
  1. package/dist/lib/browser/app-graph-builder-F6XSETHX.mjs +365 -0
  2. package/dist/lib/browser/app-graph-builder-F6XSETHX.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-serializer-FYJE23GN.mjs +80 -0
  4. package/dist/lib/browser/app-graph-serializer-FYJE23GN.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-IZ7QKQ2E.mjs +523 -0
  6. package/dist/lib/browser/chunk-IZ7QKQ2E.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-SOXNANA6.mjs +12 -0
  8. package/dist/lib/browser/chunk-SOXNANA6.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-54VE4GTA.mjs → chunk-SSJ772GK.mjs} +9 -12
  10. package/dist/lib/browser/chunk-SSJ772GK.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-T36CIHPG.mjs +133 -0
  12. package/dist/lib/browser/chunk-T36CIHPG.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-UH5P4UL3.mjs +21 -0
  14. package/dist/lib/browser/chunk-UH5P4UL3.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-XXD33C4E.mjs +1672 -0
  16. package/dist/lib/browser/chunk-XXD33C4E.mjs.map +7 -0
  17. package/dist/lib/browser/identity-created-4Q4PFIC5.mjs +28 -0
  18. package/dist/lib/browser/identity-created-4Q4PFIC5.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +186 -3481
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/intent-resolver-XRZYCXXX.mjs +459 -0
  22. package/dist/lib/browser/intent-resolver-XRZYCXXX.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/react-root-BDOPFJGJ.mjs +28 -0
  25. package/dist/lib/browser/react-root-BDOPFJGJ.mjs.map +7 -0
  26. package/dist/lib/browser/react-surface-EGOL2JBL.mjs +238 -0
  27. package/dist/lib/browser/react-surface-EGOL2JBL.mjs.map +7 -0
  28. package/dist/lib/browser/settings-WF67QZSD.mjs +24 -0
  29. package/dist/lib/browser/settings-WF67QZSD.mjs.map +7 -0
  30. package/dist/lib/browser/spaces-ready-WVU7US3C.mjs +200 -0
  31. package/dist/lib/browser/spaces-ready-WVU7US3C.mjs.map +7 -0
  32. package/dist/lib/browser/state-MS4KYJWI.mjs +47 -0
  33. package/dist/lib/browser/state-MS4KYJWI.mjs.map +7 -0
  34. package/dist/lib/browser/types/index.mjs +6 -6
  35. package/dist/lib/node/app-graph-builder-GKLVZ4PM.cjs +368 -0
  36. package/dist/lib/node/app-graph-builder-GKLVZ4PM.cjs.map +7 -0
  37. package/dist/lib/node/app-graph-serializer-RMTU5YSC.cjs +88 -0
  38. package/dist/lib/node/app-graph-serializer-RMTU5YSC.cjs.map +7 -0
  39. package/dist/lib/node/chunk-56NGXG2A.cjs +41 -0
  40. package/dist/lib/node/chunk-56NGXG2A.cjs.map +7 -0
  41. package/dist/lib/node/chunk-5D4RWKTV.cjs +551 -0
  42. package/dist/lib/node/chunk-5D4RWKTV.cjs.map +7 -0
  43. package/dist/lib/node/chunk-AJRP7AD6.cjs +1669 -0
  44. package/dist/lib/node/chunk-AJRP7AD6.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-46S3JOES.cjs → chunk-AO4EW2RX.cjs} +7 -11
  46. package/dist/lib/node/chunk-AO4EW2RX.cjs.map +7 -0
  47. package/dist/lib/node/chunk-UENH2YBM.cjs +150 -0
  48. package/dist/lib/node/chunk-UENH2YBM.cjs.map +7 -0
  49. package/dist/lib/node/{chunk-YF2AQ7KP.cjs → chunk-YCBBGTFD.cjs} +16 -19
  50. package/dist/lib/node/chunk-YCBBGTFD.cjs.map +7 -0
  51. package/dist/lib/node/identity-created-QQWX7WX3.cjs +44 -0
  52. package/dist/lib/node/identity-created-QQWX7WX3.cjs.map +7 -0
  53. package/dist/lib/node/index.cjs +171 -3469
  54. package/dist/lib/node/index.cjs.map +4 -4
  55. package/dist/lib/node/intent-resolver-3NI6AUAI.cjs +458 -0
  56. package/dist/lib/node/intent-resolver-3NI6AUAI.cjs.map +7 -0
  57. package/dist/lib/node/meta.json +1 -1
  58. package/dist/lib/node/react-root-ZTR2J2I3.cjs +50 -0
  59. package/dist/lib/node/react-root-ZTR2J2I3.cjs.map +7 -0
  60. package/dist/lib/node/react-surface-75KRPQYT.cjs +233 -0
  61. package/dist/lib/node/react-surface-75KRPQYT.cjs.map +7 -0
  62. package/dist/lib/node/{meta.cjs → settings-KOVSPA3S.cjs} +19 -13
  63. package/dist/lib/node/settings-KOVSPA3S.cjs.map +7 -0
  64. package/dist/lib/node/spaces-ready-ILVGUHJH.cjs +211 -0
  65. package/dist/lib/node/spaces-ready-ILVGUHJH.cjs.map +7 -0
  66. package/dist/lib/node/state-4UIOUKLJ.cjs +61 -0
  67. package/dist/lib/node/state-4UIOUKLJ.cjs.map +7 -0
  68. package/dist/lib/node/types/index.cjs +18 -18
  69. package/dist/lib/node/types/index.cjs.map +1 -1
  70. package/dist/lib/node-esm/app-graph-builder-NEHQ5Z63.mjs +366 -0
  71. package/dist/lib/node-esm/app-graph-builder-NEHQ5Z63.mjs.map +7 -0
  72. package/dist/lib/node-esm/app-graph-serializer-UWWS5OVC.mjs +81 -0
  73. package/dist/lib/node-esm/app-graph-serializer-UWWS5OVC.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-375RB3CZ.mjs +22 -0
  75. package/dist/lib/node-esm/chunk-375RB3CZ.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-5QMAPAZD.mjs +524 -0
  77. package/dist/lib/node-esm/chunk-5QMAPAZD.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-2MNFEB23.mjs → chunk-7FUVU45N.mjs} +3 -6
  79. package/dist/lib/node-esm/chunk-7FUVU45N.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-E5DWIQ3N.mjs +134 -0
  81. package/dist/lib/node-esm/chunk-E5DWIQ3N.mjs.map +7 -0
  82. package/dist/lib/node-esm/chunk-GVOPDPS2.mjs +1673 -0
  83. package/dist/lib/node-esm/chunk-GVOPDPS2.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-CDZETPO7.mjs → chunk-HTBGWQEU.mjs} +9 -12
  85. package/dist/lib/node-esm/chunk-HTBGWQEU.mjs.map +7 -0
  86. package/dist/lib/node-esm/identity-created-HMNY2MPB.mjs +29 -0
  87. package/dist/lib/node-esm/identity-created-HMNY2MPB.mjs.map +7 -0
  88. package/dist/lib/node-esm/index.mjs +186 -3481
  89. package/dist/lib/node-esm/index.mjs.map +4 -4
  90. package/dist/lib/node-esm/intent-resolver-P5EVBOGP.mjs +460 -0
  91. package/dist/lib/node-esm/intent-resolver-P5EVBOGP.mjs.map +7 -0
  92. package/dist/lib/node-esm/meta.json +1 -1
  93. package/dist/lib/node-esm/react-root-OUPJA4RY.mjs +29 -0
  94. package/dist/lib/node-esm/react-root-OUPJA4RY.mjs.map +7 -0
  95. package/dist/lib/node-esm/react-surface-7EVWCKIP.mjs +239 -0
  96. package/dist/lib/node-esm/react-surface-7EVWCKIP.mjs.map +7 -0
  97. package/dist/lib/node-esm/settings-EDK6WI3V.mjs +25 -0
  98. package/dist/lib/node-esm/settings-EDK6WI3V.mjs.map +7 -0
  99. package/dist/lib/node-esm/spaces-ready-CH3W7OGN.mjs +201 -0
  100. package/dist/lib/node-esm/spaces-ready-CH3W7OGN.mjs.map +7 -0
  101. package/dist/lib/node-esm/state-BMISGQ2O.mjs +48 -0
  102. package/dist/lib/node-esm/state-BMISGQ2O.mjs.map +7 -0
  103. package/dist/lib/node-esm/types/index.mjs +6 -6
  104. package/dist/types/src/SpacePlugin.d.ts +1 -24
  105. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  107. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/app-graph-serializer.d.ts +4 -0
  109. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/capabilities.d.ts +15 -0
  111. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/identity-created.d.ts +4 -0
  113. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -0
  114. package/dist/types/src/capabilities/index.d.ts +195 -0
  115. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  116. package/dist/types/src/capabilities/intent-resolver.d.ts +8 -0
  117. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/react-root.d.ts +7 -0
  119. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/react-surface.d.ts +7 -0
  121. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/settings.d.ts +4 -0
  123. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/spaces-ready.d.ts +4 -0
  125. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/state.d.ts +5 -0
  127. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  128. package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts +7 -0
  129. package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts.map +1 -0
  130. package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts +8 -0
  131. package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts.map +1 -0
  132. package/dist/types/src/components/AdvancedObjectSettings/index.d.ts +2 -0
  133. package/dist/types/src/components/AdvancedObjectSettings/index.d.ts.map +1 -0
  134. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  135. package/dist/types/src/components/BaseObjectSettings.d.ts +7 -0
  136. package/dist/types/src/components/BaseObjectSettings.d.ts.map +1 -0
  137. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +1 -2
  138. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  139. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +2 -3
  140. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  141. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  142. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  143. package/dist/types/src/components/index.d.ts +2 -1
  144. package/dist/types/src/components/index.d.ts.map +1 -1
  145. package/dist/types/src/events.d.ts +5 -0
  146. package/dist/types/src/events.d.ts.map +1 -0
  147. package/dist/types/src/index.d.ts +3 -5
  148. package/dist/types/src/index.d.ts.map +1 -1
  149. package/dist/types/src/meta.d.ts +1 -4
  150. package/dist/types/src/meta.d.ts.map +1 -1
  151. package/dist/types/src/translations.d.ts +12 -0
  152. package/dist/types/src/translations.d.ts.map +1 -1
  153. package/dist/types/src/types/types.d.ts +5 -26
  154. package/dist/types/src/types/types.d.ts.map +1 -1
  155. package/dist/types/src/util.d.ts +7 -6
  156. package/dist/types/src/util.d.ts.map +1 -1
  157. package/dist/types/tsconfig.tsbuildinfo +1 -1
  158. package/package.json +37 -46
  159. package/src/SpacePlugin.tsx +115 -1412
  160. package/src/capabilities/app-graph-builder.ts +392 -0
  161. package/src/capabilities/app-graph-serializer.ts +73 -0
  162. package/src/capabilities/capabilities.ts +23 -0
  163. package/src/capabilities/identity-created.ts +26 -0
  164. package/src/capabilities/index.ts +17 -0
  165. package/src/capabilities/intent-resolver.ts +420 -0
  166. package/src/capabilities/react-root.tsx +20 -0
  167. package/src/capabilities/react-surface.tsx +234 -0
  168. package/src/capabilities/settings.ts +17 -0
  169. package/src/capabilities/spaces-ready.ts +231 -0
  170. package/src/capabilities/state.ts +45 -0
  171. package/src/components/AdvancedObjectSettings/AdvancedObjectSettings.tsx +72 -0
  172. package/src/components/AdvancedObjectSettings/ForeignKeys.tsx +51 -0
  173. package/src/components/AdvancedObjectSettings/index.ts +5 -0
  174. package/src/components/AwaitingObject.tsx +4 -10
  175. package/src/components/{DefaultObjectSettings.tsx → BaseObjectSettings.tsx} +2 -2
  176. package/src/components/CreateDialog/CreateObjectDialog.tsx +5 -5
  177. package/src/components/CreateDialog/CreateObjectPanel.tsx +54 -17
  178. package/src/components/SpacePluginSettings.tsx +2 -7
  179. package/src/components/SpacePresence.tsx +6 -5
  180. package/src/components/index.ts +2 -1
  181. package/src/events.ts +12 -0
  182. package/src/index.ts +3 -7
  183. package/src/meta.ts +1 -3
  184. package/src/translations.ts +4 -0
  185. package/src/types/types.ts +11 -49
  186. package/src/util.tsx +31 -25
  187. package/dist/lib/browser/chunk-54VE4GTA.mjs.map +0 -7
  188. package/dist/lib/browser/chunk-73BCBSLP.mjs +0 -15
  189. package/dist/lib/browser/chunk-73BCBSLP.mjs.map +0 -7
  190. package/dist/lib/browser/meta.mjs +0 -11
  191. package/dist/lib/browser/meta.mjs.map +0 -7
  192. package/dist/lib/node/chunk-46S3JOES.cjs.map +0 -7
  193. package/dist/lib/node/chunk-YF2AQ7KP.cjs.map +0 -7
  194. package/dist/lib/node/meta.cjs.map +0 -7
  195. package/dist/lib/node-esm/chunk-2MNFEB23.mjs.map +0 -7
  196. package/dist/lib/node-esm/chunk-CDZETPO7.mjs.map +0 -7
  197. package/dist/lib/node-esm/meta.mjs +0 -12
  198. package/dist/lib/node-esm/meta.mjs.map +0 -7
  199. package/dist/types/src/components/DefaultObjectSettings.d.ts +0 -7
  200. package/dist/types/src/components/DefaultObjectSettings.d.ts.map +0 -1
@@ -0,0 +1,365 @@
1
+ import {
2
+ SpaceCapabilities
3
+ } from "./chunk-UH5P4UL3.mjs";
4
+ import {
5
+ SHARED,
6
+ SPACES,
7
+ constructObjectActions,
8
+ constructSpaceActions,
9
+ constructSpaceNode,
10
+ createObjectNode,
11
+ memoizeQuery
12
+ } from "./chunk-IZ7QKQ2E.mjs";
13
+ import {
14
+ CollectionType,
15
+ SpaceAction
16
+ } from "./chunk-SSJ772GK.mjs";
17
+ import {
18
+ SPACE_PLUGIN
19
+ } from "./chunk-SOXNANA6.mjs";
20
+
21
+ // packages/plugins/plugin-space/src/capabilities/app-graph-builder.ts
22
+ import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
23
+ import { Expando, Filter, FQ_ID_LENGTH, getSpace, isEchoObject, isSpace, OBJECT_ID_LENGTH, parseId, SPACE_ID_LENGTH, SpaceState } from "@dxos/client/echo";
24
+ import { getTypename, isDeleted } from "@dxos/live-object";
25
+ import { log } from "@dxos/log";
26
+ import { ClientCapabilities } from "@dxos/plugin-client";
27
+ import { createExtension, toSignal } from "@dxos/plugin-graph";
28
+ import { nonNullable } from "@dxos/util";
29
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/capabilities/app-graph-builder.ts";
30
+ var app_graph_builder_default = (context) => {
31
+ const resolve = (typename) => context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
32
+ const spacesNode = {
33
+ id: SPACES,
34
+ type: SPACES,
35
+ cacheable: [
36
+ "label",
37
+ "role"
38
+ ],
39
+ properties: {
40
+ label: [
41
+ "spaces label",
42
+ {
43
+ ns: SPACE_PLUGIN
44
+ }
45
+ ],
46
+ testId: "spacePlugin.spaces",
47
+ role: "branch",
48
+ disabled: true,
49
+ childrenPersistenceClass: "echo",
50
+ onRearrangeChildren: async (nextOrder) => {
51
+ const { graph } = context.requestCapability(Capabilities.AppGraph);
52
+ const client = context.requestCapability(ClientCapabilities.Client);
53
+ graph._sortEdges(SPACES, "outbound", nextOrder.map(({ id }) => id));
54
+ const { objects: [spacesOrder] } = await client.spaces.default.db.query(Filter.schema(Expando, {
55
+ key: SHARED
56
+ })).run();
57
+ if (spacesOrder) {
58
+ spacesOrder.order = nextOrder.map(({ id }) => id);
59
+ } else {
60
+ log.warn("spaces order object not found", void 0, {
61
+ F: __dxlog_file,
62
+ L: 72,
63
+ S: void 0,
64
+ C: (f, a) => f(...a)
65
+ });
66
+ }
67
+ }
68
+ }
69
+ };
70
+ return contributes(Capabilities.AppGraphBuilder, [
71
+ // Primary actions.
72
+ createExtension({
73
+ id: `${SPACE_PLUGIN}/primary-actions`,
74
+ disposition: "hoist",
75
+ filter: (node) => node.id === "root",
76
+ actions: () => [
77
+ {
78
+ id: SpaceAction.OpenCreateSpace._tag,
79
+ data: async () => {
80
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
81
+ await dispatch(createIntent(SpaceAction.OpenCreateSpace));
82
+ },
83
+ properties: {
84
+ label: [
85
+ "create space label",
86
+ {
87
+ ns: SPACE_PLUGIN
88
+ }
89
+ ],
90
+ icon: "ph--plus--regular",
91
+ testId: "spacePlugin.createSpace",
92
+ disposition: "item"
93
+ }
94
+ },
95
+ {
96
+ id: SpaceAction.Join._tag,
97
+ data: async () => {
98
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
99
+ await dispatch(createIntent(SpaceAction.Join));
100
+ },
101
+ properties: {
102
+ label: [
103
+ "join space label",
104
+ {
105
+ ns: SPACE_PLUGIN
106
+ }
107
+ ],
108
+ icon: "ph--sign-in--regular",
109
+ testId: "spacePlugin.joinSpace",
110
+ disposition: "item"
111
+ }
112
+ }
113
+ ]
114
+ }),
115
+ // Create spaces group node.
116
+ createExtension({
117
+ id: `${SPACE_PLUGIN}/root`,
118
+ disposition: "hoist",
119
+ filter: (node) => node.id === "root",
120
+ connector: () => [
121
+ spacesNode
122
+ ],
123
+ resolver: ({ id }) => id === SPACES ? spacesNode : void 0
124
+ }),
125
+ // Create space nodes.
126
+ createExtension({
127
+ id: SPACES,
128
+ filter: (node) => node.id === SPACES,
129
+ connector: () => {
130
+ const client = context.requestCapability(ClientCapabilities.Client);
131
+ const spaces = toSignal((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
132
+ const isReady = toSignal((onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe, () => client.spaces.isReady.get());
133
+ if (!spaces || !isReady) {
134
+ return;
135
+ }
136
+ const state = context.requestCapability(SpaceCapabilities.State);
137
+ const settings = context.requestCapabilities(Capabilities.SettingsStore)[0]?.getStore(SPACE_PLUGIN)?.value;
138
+ try {
139
+ const [spacesOrder] = memoizeQuery(client.spaces.default, Filter.schema(Expando, {
140
+ key: SHARED
141
+ }));
142
+ const order = spacesOrder?.order ?? [];
143
+ const orderMap = new Map(order.map((id, index) => [
144
+ id,
145
+ index
146
+ ]));
147
+ return [
148
+ ...spaces.filter((space) => orderMap.has(space.id)).sort((a, b) => orderMap.get(a.id) - orderMap.get(b.id)),
149
+ ...spaces.filter((space) => !orderMap.has(space.id))
150
+ ].filter((space) => settings?.showHidden ? true : space.state.get() !== SpaceState.SPACE_INACTIVE).map((space) => constructSpaceNode({
151
+ space,
152
+ navigable: state.navigableCollections,
153
+ personal: space === client.spaces.default,
154
+ namesCache: state.spaceNames,
155
+ resolve
156
+ }));
157
+ } catch {
158
+ }
159
+ },
160
+ resolver: ({ id }) => {
161
+ if (id.length !== SPACE_ID_LENGTH) {
162
+ return;
163
+ }
164
+ const client = context.requestCapability(ClientCapabilities.Client);
165
+ const spaces = toSignal((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
166
+ const isReady = toSignal((onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe, () => client.spaces.isReady.get());
167
+ if (!spaces || !isReady) {
168
+ return;
169
+ }
170
+ const space = spaces.find((space2) => space2.id === id);
171
+ if (!space) {
172
+ return;
173
+ }
174
+ if (space.state.get() === SpaceState.SPACE_INACTIVE) {
175
+ return false;
176
+ } else {
177
+ const state = context.requestCapability(SpaceCapabilities.State);
178
+ return constructSpaceNode({
179
+ space,
180
+ navigable: state.navigableCollections,
181
+ personal: space === client.spaces.default,
182
+ namesCache: state.spaceNames,
183
+ resolve
184
+ });
185
+ }
186
+ }
187
+ }),
188
+ // Create space actions.
189
+ createExtension({
190
+ id: `${SPACE_PLUGIN}/actions`,
191
+ filter: (node) => isSpace(node.data),
192
+ actions: ({ node }) => {
193
+ const space = node.data;
194
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
195
+ const client = context.requestCapability(ClientCapabilities.Client);
196
+ const state = context.requestCapability(SpaceCapabilities.State);
197
+ return constructSpaceActions({
198
+ space,
199
+ dispatch,
200
+ personal: space === client.spaces.default,
201
+ migrating: state.sdkMigrationRunning[space.id]
202
+ });
203
+ }
204
+ }),
205
+ // Create nodes for objects in the root collection of a space.
206
+ createExtension({
207
+ id: `${SPACE_PLUGIN}/root-collection`,
208
+ filter: (node) => isSpace(node.data),
209
+ connector: ({ node }) => {
210
+ const space = node.data;
211
+ const spaceState = toSignal((onChange) => space.state.subscribe(() => onChange()).unsubscribe, () => space.state.get(), space.id);
212
+ if (spaceState !== SpaceState.SPACE_READY) {
213
+ return;
214
+ }
215
+ const collection = space.properties[CollectionType.typename]?.target;
216
+ if (!collection) {
217
+ return;
218
+ }
219
+ const state = context.requestCapability(SpaceCapabilities.State);
220
+ return collection.objects.map((object) => object.target).filter(nonNullable).map((object) => createObjectNode({
221
+ object,
222
+ space,
223
+ resolve,
224
+ navigable: state.navigableCollections
225
+ })).filter(nonNullable);
226
+ }
227
+ }),
228
+ // Create nodes for objects in a collection or by its fully qualified id.
229
+ createExtension({
230
+ id: `${SPACE_PLUGIN}/objects`,
231
+ filter: (node) => node.data instanceof CollectionType,
232
+ connector: ({ node }) => {
233
+ const collection = node.data;
234
+ const space = getSpace(collection);
235
+ if (!space) {
236
+ return;
237
+ }
238
+ const state = context.requestCapability(SpaceCapabilities.State);
239
+ return collection.objects.map((object) => object.target).filter(nonNullable).map((object) => createObjectNode({
240
+ object,
241
+ space,
242
+ resolve,
243
+ navigable: state.navigableCollections
244
+ })).filter(nonNullable);
245
+ },
246
+ resolver: ({ id }) => {
247
+ if (id.length !== FQ_ID_LENGTH) {
248
+ return;
249
+ }
250
+ const [spaceId, objectId] = id.split(":");
251
+ if (spaceId.length !== SPACE_ID_LENGTH && objectId.length !== OBJECT_ID_LENGTH) {
252
+ return;
253
+ }
254
+ const client = context.requestCapability(ClientCapabilities.Client);
255
+ const space = client.spaces.get().find((space2) => space2.id === spaceId);
256
+ if (!space) {
257
+ return;
258
+ }
259
+ const spaceState = toSignal((onChange) => space.state.subscribe(() => onChange()).unsubscribe, () => space.state.get(), space.id);
260
+ if (spaceState !== SpaceState.SPACE_READY) {
261
+ return;
262
+ }
263
+ const [object] = memoizeQuery(space, {
264
+ id: objectId
265
+ });
266
+ if (!object) {
267
+ return;
268
+ }
269
+ if (isDeleted(object)) {
270
+ return false;
271
+ } else {
272
+ const state = context.requestCapability(SpaceCapabilities.State);
273
+ return createObjectNode({
274
+ object,
275
+ space,
276
+ resolve,
277
+ navigable: state.navigableCollections
278
+ });
279
+ }
280
+ }
281
+ }),
282
+ // Create collection actions and action groups.
283
+ createExtension({
284
+ id: `${SPACE_PLUGIN}/object-actions`,
285
+ filter: (node) => isEchoObject(node.data),
286
+ actions: ({ node }) => {
287
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
288
+ const state = context.requestCapability(SpaceCapabilities.State);
289
+ return constructObjectActions({
290
+ node,
291
+ dispatch,
292
+ navigable: state.navigableCollections
293
+ });
294
+ }
295
+ }),
296
+ // Create nodes for object settings.
297
+ createExtension({
298
+ id: `${SPACE_PLUGIN}/settings-for-subject`,
299
+ resolver: ({ id }) => {
300
+ if (!id.endsWith("~settings")) {
301
+ return;
302
+ }
303
+ const type = "orphan-settings-for-subject";
304
+ const icon = "ph--gear--regular";
305
+ const [subjectId] = id.split("~");
306
+ const { spaceId, objectId } = parseId(subjectId);
307
+ const client = context.requestCapability(ClientCapabilities.Client);
308
+ const spaces = toSignal((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
309
+ const space = spaces?.find((space2) => space2.id === spaceId && space2.state.get() === SpaceState.SPACE_READY);
310
+ if (!objectId) {
311
+ const label2 = space ? space.properties.name || [
312
+ "unnamed space label",
313
+ {
314
+ ns: SPACE_PLUGIN
315
+ }
316
+ ] : [
317
+ "unnamed object settings label",
318
+ {
319
+ ns: SPACE_PLUGIN
320
+ }
321
+ ];
322
+ return {
323
+ id,
324
+ type,
325
+ data: null,
326
+ properties: {
327
+ icon,
328
+ label: label2,
329
+ showResolvedThreads: false,
330
+ object: null,
331
+ space
332
+ }
333
+ };
334
+ }
335
+ const [object] = memoizeQuery(space, {
336
+ id: objectId
337
+ });
338
+ if (!object || !subjectId) {
339
+ return;
340
+ }
341
+ const meta = resolve(getTypename(object) ?? "");
342
+ const label = meta.label?.(object) || object.name || meta.placeholder || [
343
+ "unnamed object settings label",
344
+ {
345
+ ns: SPACE_PLUGIN
346
+ }
347
+ ];
348
+ return {
349
+ id,
350
+ type,
351
+ data: null,
352
+ properties: {
353
+ icon,
354
+ label,
355
+ object
356
+ }
357
+ };
358
+ }
359
+ })
360
+ ]);
361
+ };
362
+ export {
363
+ app_graph_builder_default as default
364
+ };
365
+ //# sourceMappingURL=app-graph-builder-F6XSETHX.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, type PluginsContext } from '@dxos/app-framework';\nimport {\n Expando,\n Filter,\n FQ_ID_LENGTH,\n getSpace,\n isEchoObject,\n isSpace,\n OBJECT_ID_LENGTH,\n parseId,\n type ReactiveEchoObject,\n SPACE_ID_LENGTH,\n SpaceState,\n type Space,\n} from '@dxos/client/echo';\nimport { getTypename, isDeleted } from '@dxos/live-object';\nimport { log } from '@dxos/log';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, toSignal, type Node } from '@dxos/plugin-graph';\nimport { nonNullable } from '@dxos/util';\n\nimport { SpaceCapabilities } from './capabilities';\nimport { SPACE_PLUGIN } from '../meta';\nimport { CollectionType, SpaceAction, type SpaceSettingsProps } from '../types';\nimport {\n constructObjectActions,\n constructSpaceActions,\n constructSpaceNode,\n createObjectNode,\n memoizeQuery,\n SHARED,\n SPACES,\n} from '../util';\n\nexport default (context: PluginsContext) => {\n const resolve = (typename: string) =>\n context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n const spacesNode = {\n id: SPACES,\n type: SPACES,\n cacheable: ['label', 'role'],\n properties: {\n label: ['spaces label', { ns: SPACE_PLUGIN }],\n testId: 'spacePlugin.spaces',\n role: 'branch',\n disabled: true,\n childrenPersistenceClass: 'echo',\n onRearrangeChildren: async (nextOrder: Space[]) => {\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n const client = context.requestCapability(ClientCapabilities.Client);\n\n // NOTE: This is needed to ensure order is updated by next animation frame.\n // TODO(wittjosiah): Is there a better way to do this?\n // If not, graph should be passed as an argument to the extension.\n graph._sortEdges(\n SPACES,\n 'outbound',\n nextOrder.map(({ id }) => id),\n );\n\n const {\n objects: [spacesOrder],\n } = await client.spaces.default.db.query(Filter.schema(Expando, { key: SHARED })).run();\n if (spacesOrder) {\n spacesOrder.order = nextOrder.map(({ id }) => id);\n } else {\n log.warn('spaces order object not found');\n }\n },\n },\n };\n\n return contributes(Capabilities.AppGraphBuilder, [\n // Primary actions.\n createExtension({\n id: `${SPACE_PLUGIN}/primary-actions`,\n disposition: 'hoist',\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: SpaceAction.OpenCreateSpace._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(SpaceAction.OpenCreateSpace));\n },\n properties: {\n label: ['create space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--plus--regular',\n testId: 'spacePlugin.createSpace',\n disposition: 'item',\n },\n },\n {\n id: SpaceAction.Join._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(SpaceAction.Join));\n },\n properties: {\n label: ['join space label', { ns: SPACE_PLUGIN }],\n icon: 'ph--sign-in--regular',\n testId: 'spacePlugin.joinSpace',\n disposition: 'item',\n },\n },\n ],\n }),\n\n // Create spaces group node.\n createExtension({\n id: `${SPACE_PLUGIN}/root`,\n disposition: 'hoist',\n filter: (node): node is Node<null> => node.id === 'root',\n connector: () => [spacesNode],\n resolver: ({ id }) => (id === SPACES ? spacesNode : undefined),\n }),\n\n // Create space nodes.\n createExtension({\n id: SPACES,\n filter: (node): node is Node<null> => node.id === SPACES,\n connector: () => {\n const client = context.requestCapability(ClientCapabilities.Client);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n\n const isReady = toSignal(\n (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.isReady.get(),\n );\n\n if (!spaces || !isReady) {\n return;\n }\n\n const state = context.requestCapability(SpaceCapabilities.State);\n const settings = context\n .requestCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<SpaceSettingsProps>(SPACE_PLUGIN)?.value;\n\n // TODO(wittjosiah): During client reset, accessing default space throws.\n try {\n const [spacesOrder] = memoizeQuery(client.spaces.default, Filter.schema(Expando, { key: SHARED }));\n const order: string[] = spacesOrder?.order ?? [];\n const orderMap = new Map(order.map((id, index) => [id, index]));\n return [\n ...spaces\n .filter((space) => orderMap.has(space.id))\n .sort((a, b) => orderMap.get(a.id)! - orderMap.get(b.id)!),\n ...spaces.filter((space) => !orderMap.has(space.id)),\n ]\n .filter((space) => (settings?.showHidden ? true : space.state.get() !== SpaceState.SPACE_INACTIVE))\n .map((space) =>\n constructSpaceNode({\n space,\n navigable: state.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.spaceNames,\n resolve,\n }),\n );\n } catch {}\n },\n resolver: ({ id }) => {\n if (id.length !== SPACE_ID_LENGTH) {\n return;\n }\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n\n const isReady = toSignal(\n (onChange) => client.spaces.isReady.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.isReady.get(),\n );\n\n if (!spaces || !isReady) {\n return;\n }\n\n const space = spaces.find((space) => space.id === id);\n if (!space) {\n return;\n }\n\n if (space.state.get() === SpaceState.SPACE_INACTIVE) {\n return false;\n } else {\n const state = context.requestCapability(SpaceCapabilities.State);\n return constructSpaceNode({\n space,\n navigable: state.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.spaceNames,\n resolve,\n });\n }\n },\n }),\n\n // Create space actions.\n createExtension({\n id: `${SPACE_PLUGIN}/actions`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n actions: ({ node }) => {\n const space = node.data;\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const client = context.requestCapability(ClientCapabilities.Client);\n const state = context.requestCapability(SpaceCapabilities.State);\n return constructSpaceActions({\n space,\n dispatch,\n personal: space === client.spaces.default,\n migrating: state.sdkMigrationRunning[space.id],\n });\n },\n }),\n\n // Create nodes for objects in the root collection of a space.\n createExtension({\n id: `${SPACE_PLUGIN}/root-collection`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n connector: ({ node }) => {\n const space = node.data;\n const spaceState = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (spaceState !== SpaceState.SPACE_READY) {\n return;\n }\n\n const collection = space.properties[CollectionType.typename]?.target as CollectionType | undefined;\n if (!collection) {\n return;\n }\n\n const state = context.requestCapability(SpaceCapabilities.State);\n\n return collection.objects\n .map((object) => object.target)\n .filter(nonNullable)\n .map((object) => createObjectNode({ object, space, resolve, navigable: state.navigableCollections }))\n .filter(nonNullable);\n },\n }),\n\n // Create nodes for objects in a collection or by its fully qualified id.\n createExtension({\n id: `${SPACE_PLUGIN}/objects`,\n filter: (node): node is Node<CollectionType> => node.data instanceof CollectionType,\n connector: ({ node }) => {\n const collection = node.data;\n const space = getSpace(collection);\n if (!space) {\n return;\n }\n\n const state = context.requestCapability(SpaceCapabilities.State);\n\n return collection.objects\n .map((object) => object.target)\n .filter(nonNullable)\n .map((object) => createObjectNode({ object, space, resolve, navigable: state.navigableCollections }))\n .filter(nonNullable);\n },\n resolver: ({ id }) => {\n if (id.length !== FQ_ID_LENGTH) {\n return;\n }\n\n const [spaceId, objectId] = id.split(':');\n if (spaceId.length !== SPACE_ID_LENGTH && objectId.length !== OBJECT_ID_LENGTH) {\n return;\n }\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const space = client.spaces.get().find((space) => space.id === spaceId);\n if (!space) {\n return;\n }\n\n const spaceState = toSignal(\n (onChange) => space.state.subscribe(() => onChange()).unsubscribe,\n () => space.state.get(),\n space.id,\n );\n if (spaceState !== SpaceState.SPACE_READY) {\n return;\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object) {\n return;\n }\n\n if (isDeleted(object)) {\n return false;\n } else {\n const state = context.requestCapability(SpaceCapabilities.State);\n return createObjectNode({ object, space, resolve, navigable: state.navigableCollections });\n }\n },\n }),\n\n // Create collection actions and action groups.\n createExtension({\n id: `${SPACE_PLUGIN}/object-actions`,\n filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),\n actions: ({ node }) => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const state = context.requestCapability(SpaceCapabilities.State);\n return constructObjectActions({ node, dispatch, navigable: state.navigableCollections });\n },\n }),\n\n // Create nodes for object settings.\n createExtension({\n id: `${SPACE_PLUGIN}/settings-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~settings')) {\n return;\n }\n\n const type = 'orphan-settings-for-subject';\n const icon = 'ph--gear--regular';\n\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const client = context.requestCapability(ClientCapabilities.Client);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n if (!objectId) {\n const label = space\n ? space.properties.name || ['unnamed space label', { ns: SPACE_PLUGIN }]\n : ['unnamed object settings label', { ns: SPACE_PLUGIN }];\n\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolve(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object settings label', { ns: SPACE_PLUGIN }];\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n object,\n },\n };\n },\n }),\n ]);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Capabilities", "contributes", "createIntent", "Expando", "Filter", "FQ_ID_LENGTH", "getSpace", "isEchoObject", "isSpace", "OBJECT_ID_LENGTH", "parseId", "SPACE_ID_LENGTH", "SpaceState", "getTypename", "isDeleted", "log", "ClientCapabilities", "createExtension", "toSignal", "nonNullable", "context", "resolve", "typename", "requestCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "spacesNode", "SPACES", "type", "cacheable", "properties", "label", "ns", "SPACE_PLUGIN", "testId", "role", "disabled", "childrenPersistenceClass", "onRearrangeChildren", "nextOrder", "graph", "requestCapability", "AppGraph", "client", "ClientCapabilities", "Client", "_sortEdges", "map", "objects", "spacesOrder", "spaces", "default", "db", "query", "Filter", "schema", "Expando", "key", "SHARED", "run", "order", "log", "warn", "contributes", "AppGraphBuilder", "createExtension", "disposition", "filter", "node", "actions", "SpaceAction", "OpenCreateSpace", "_tag", "data", "dispatchPromise", "dispatch", "IntentDispatcher", "createIntent", "icon", "Join", "connector", "resolver", "undefined", "toSignal", "onChange", "subscribe", "unsubscribe", "get", "isReady", "state", "SpaceCapabilities", "State", "settings", "SettingsStore", "getStore", "value", "memoizeQuery", "orderMap", "Map", "index", "space", "has", "sort", "a", "b", "showHidden", "SpaceState", "SPACE_INACTIVE", "constructSpaceNode", "navigable", "navigableCollections", "personal", "namesCache", "spaceNames", "length", "SPACE_ID_LENGTH", "isSpace", "constructSpaceActions", "migrating", "sdkMigrationRunning", "spaceState", "SPACE_READY", "collection", "CollectionType", "target", "object", "nonNullable", "createObjectNode", "getSpace", "FQ_ID_LENGTH", "spaceId", "objectId", "split", "OBJECT_ID_LENGTH", "isDeleted", "isEchoObject", "constructObjectActions", "endsWith", "subjectId", "parseId", "name", "showResolvedThreads", "meta", "getTypename", "placeholder"]
7
+ }
@@ -0,0 +1,80 @@
1
+ import {
2
+ translations_default
3
+ } from "./chunk-T36CIHPG.mjs";
4
+ import {
5
+ SPACES,
6
+ SPACE_TYPE
7
+ } from "./chunk-IZ7QKQ2E.mjs";
8
+ import {
9
+ CollectionType,
10
+ SpaceAction
11
+ } from "./chunk-SSJ772GK.mjs";
12
+ import {
13
+ SPACE_PLUGIN
14
+ } from "./chunk-SOXNANA6.mjs";
15
+
16
+ // packages/plugins/plugin-space/src/capabilities/app-graph-serializer.ts
17
+ import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
18
+ import { isSpace } from "@dxos/client/echo";
19
+ import { create } from "@dxos/live-object";
20
+ var DIRECTORY_TYPE = "text/directory";
21
+ var app_graph_serializer_default = (context) => contributes(Capabilities.AppGraphSerializer, [
22
+ {
23
+ inputType: SPACES,
24
+ outputType: DIRECTORY_TYPE,
25
+ serialize: (node) => ({
26
+ name: translations_default[0]["en-US"][SPACE_PLUGIN]["spaces label"],
27
+ data: translations_default[0]["en-US"][SPACE_PLUGIN]["spaces label"],
28
+ type: DIRECTORY_TYPE
29
+ }),
30
+ deserialize: () => {
31
+ }
32
+ },
33
+ {
34
+ inputType: SPACE_TYPE,
35
+ outputType: DIRECTORY_TYPE,
36
+ serialize: (node) => ({
37
+ name: node.data.properties.name ?? translations_default[0]["en-US"][SPACE_PLUGIN]["unnamed space label"],
38
+ data: node.data.properties.name ?? translations_default[0]["en-US"][SPACE_PLUGIN]["unnamed space label"],
39
+ type: DIRECTORY_TYPE
40
+ }),
41
+ deserialize: async (data) => {
42
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
43
+ const result = await dispatch(createIntent(SpaceAction.Create, {
44
+ name: data.name,
45
+ edgeReplication: true
46
+ }));
47
+ return result.data?.space;
48
+ }
49
+ },
50
+ {
51
+ inputType: CollectionType.typename,
52
+ outputType: DIRECTORY_TYPE,
53
+ serialize: (node) => ({
54
+ name: node.data.name ?? translations_default[0]["en-US"][SPACE_PLUGIN]["unnamed collection label"],
55
+ data: node.data.name ?? translations_default[0]["en-US"][SPACE_PLUGIN]["unnamed collection label"],
56
+ type: DIRECTORY_TYPE
57
+ }),
58
+ deserialize: async (data, ancestors) => {
59
+ const space = ancestors.find(isSpace);
60
+ const collection = ancestors.findLast((ancestor) => ancestor instanceof CollectionType) ?? space?.properties[CollectionType.typename]?.target;
61
+ if (!space || !collection) {
62
+ return;
63
+ }
64
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
65
+ const result = await dispatch(createIntent(SpaceAction.AddObject, {
66
+ target: collection,
67
+ object: create(CollectionType, {
68
+ name: data.name,
69
+ objects: [],
70
+ views: {}
71
+ })
72
+ }));
73
+ return result.data?.object;
74
+ }
75
+ }
76
+ ]);
77
+ export {
78
+ app_graph_serializer_default as default
79
+ };
80
+ //# sourceMappingURL=app-graph-serializer-FYJE23GN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-serializer.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, type PluginsContext } from '@dxos/app-framework';\nimport { isSpace } from '@dxos/client/echo';\nimport { create } from '@dxos/live-object';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport translations from '../translations';\nimport { CollectionType, SpaceAction } from '../types';\nimport { SPACES, SPACE_TYPE } from '../util';\n\n// https://stackoverflow.com/a/19016910\nconst DIRECTORY_TYPE = 'text/directory';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.AppGraphSerializer, [\n {\n inputType: SPACES,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'],\n data: translations[0]['en-US'][SPACE_PLUGIN]['spaces label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: () => {\n // No-op.\n },\n },\n {\n inputType: SPACE_TYPE,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: node.data.properties.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed space label'],\n data: node.data.properties.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed space label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: async (data) => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const result = await dispatch(createIntent(SpaceAction.Create, { name: data.name, edgeReplication: true }));\n return result.data?.space;\n },\n },\n {\n inputType: CollectionType.typename,\n outputType: DIRECTORY_TYPE,\n serialize: (node) => ({\n name: node.data.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed collection label'],\n data: node.data.name ?? translations[0]['en-US'][SPACE_PLUGIN]['unnamed collection label'],\n type: DIRECTORY_TYPE,\n }),\n deserialize: async (data, ancestors) => {\n const space = ancestors.find(isSpace);\n const collection =\n ancestors.findLast((ancestor) => ancestor instanceof CollectionType) ??\n space?.properties[CollectionType.typename]?.target;\n if (!space || !collection) {\n return;\n }\n\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const result = await dispatch(\n createIntent(SpaceAction.AddObject, {\n target: collection,\n object: create(CollectionType, { name: data.name, objects: [], views: {} }),\n }),\n );\n\n return result.data?.object;\n },\n },\n ]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAIA,SAASA,cAAcC,aAAaC,oBAAyC;AAC7E,SAASC,eAAe;AACxB,SAASC,cAAc;AAQvB,IAAMC,iBAAiB;AAEvB,IAAA,+BAAe,CAACC,YACdC,YAAYC,aAAaC,oBAAoB;EAC3C;IACEC,WAAWC;IACXC,YAAYP;IACZQ,WAAW,CAACC,UAAU;MACpBC,MAAMC,qBAAa,CAAA,EAAG,OAAA,EAASC,YAAAA,EAAc,cAAA;MAC7CC,MAAMF,qBAAa,CAAA,EAAG,OAAA,EAASC,YAAAA,EAAc,cAAA;MAC7CE,MAAMd;IACR;IACAe,aAAa,MAAA;IAEb;EACF;EACA;IACEV,WAAWW;IACXT,YAAYP;IACZQ,WAAW,CAACC,UAAU;MACpBC,MAAMD,KAAKI,KAAKI,WAAWP,QAAQC,qBAAa,CAAA,EAAG,OAAA,EAASC,YAAAA,EAAc,qBAAA;MAC1EC,MAAMJ,KAAKI,KAAKI,WAAWP,QAAQC,qBAAa,CAAA,EAAG,OAAA,EAASC,YAAAA,EAAc,qBAAA;MAC1EE,MAAMd;IACR;IACAe,aAAa,OAAOF,SAAAA;AAClB,YAAM,EAAEK,iBAAiBC,SAAQ,IAAKlB,QAAQmB,kBAAkBjB,aAAakB,gBAAgB;AAC7F,YAAMC,SAAS,MAAMH,SAASI,aAAaC,YAAYC,QAAQ;QAAEf,MAAMG,KAAKH;QAAMgB,iBAAiB;MAAK,CAAA,CAAA;AACxG,aAAOJ,OAAOT,MAAMc;IACtB;EACF;EACA;IACEtB,WAAWuB,eAAeC;IAC1BtB,YAAYP;IACZQ,WAAW,CAACC,UAAU;MACpBC,MAAMD,KAAKI,KAAKH,QAAQC,qBAAa,CAAA,EAAG,OAAA,EAASC,YAAAA,EAAc,0BAAA;MAC/DC,MAAMJ,KAAKI,KAAKH,QAAQC,qBAAa,CAAA,EAAG,OAAA,EAASC,YAAAA,EAAc,0BAAA;MAC/DE,MAAMd;IACR;IACAe,aAAa,OAAOF,MAAMiB,cAAAA;AACxB,YAAMH,QAAQG,UAAUC,KAAKC,OAAAA;AAC7B,YAAMC,aACJH,UAAUI,SAAS,CAACC,aAAaA,oBAAoBP,cAAAA,KACrDD,OAAOV,WAAWW,eAAeC,QAAQ,GAAGO;AAC9C,UAAI,CAACT,SAAS,CAACM,YAAY;AACzB;MACF;AAEA,YAAM,EAAEf,iBAAiBC,SAAQ,IAAKlB,QAAQmB,kBAAkBjB,aAAakB,gBAAgB;AAC7F,YAAMC,SAAS,MAAMH,SACnBI,aAAaC,YAAYa,WAAW;QAClCD,QAAQH;QACRK,QAAQC,OAAOX,gBAAgB;UAAElB,MAAMG,KAAKH;UAAM8B,SAAS,CAAA;UAAIC,OAAO,CAAC;QAAE,CAAA;MAC3E,CAAA,CAAA;AAGF,aAAOnB,OAAOT,MAAMyB;IACtB;EACF;CACD;",
6
+ "names": ["Capabilities", "contributes", "createIntent", "isSpace", "create", "DIRECTORY_TYPE", "context", "contributes", "Capabilities", "AppGraphSerializer", "inputType", "SPACES", "outputType", "serialize", "node", "name", "translations", "SPACE_PLUGIN", "data", "type", "deserialize", "SPACE_TYPE", "properties", "dispatchPromise", "dispatch", "requestCapability", "IntentDispatcher", "result", "createIntent", "SpaceAction", "Create", "edgeReplication", "space", "CollectionType", "typename", "ancestors", "find", "isSpace", "collection", "findLast", "ancestor", "target", "AddObject", "object", "create", "objects", "views"]
7
+ }