@fluidframework/tree 2.33.1 → 2.40.0-336023

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 (315) hide show
  1. package/.vscode/settings.json +2 -0
  2. package/api-report/tree.alpha.api.md +120 -50
  3. package/api-report/tree.beta.api.md +31 -27
  4. package/api-report/tree.legacy.alpha.api.md +24 -23
  5. package/api-report/tree.legacy.public.api.md +24 -23
  6. package/api-report/tree.public.api.md +24 -23
  7. package/dist/alpha.d.ts +16 -1
  8. package/dist/beta.d.ts +2 -0
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/internalTypes.d.ts +0 -1
  13. package/dist/internalTypes.d.ts.map +1 -1
  14. package/dist/internalTypes.js.map +1 -1
  15. package/dist/jsonDomainSchema.d.ts +2 -2
  16. package/dist/jsonDomainSchema.js +2 -2
  17. package/dist/jsonDomainSchema.js.map +1 -1
  18. package/dist/legacy.d.ts +2 -0
  19. package/dist/packageVersion.d.ts +1 -1
  20. package/dist/packageVersion.d.ts.map +1 -1
  21. package/dist/packageVersion.js +1 -1
  22. package/dist/packageVersion.js.map +1 -1
  23. package/dist/public.d.ts +2 -0
  24. package/dist/serializableDomainSchema.d.ts +3 -3
  25. package/dist/serializableDomainSchema.js +2 -2
  26. package/dist/serializableDomainSchema.js.map +1 -1
  27. package/dist/shared-tree/independentView.d.ts +1 -1
  28. package/dist/shared-tree/independentView.js.map +1 -1
  29. package/dist/shared-tree/index.d.ts +3 -2
  30. package/dist/shared-tree/index.d.ts.map +1 -1
  31. package/dist/shared-tree/index.js +4 -4
  32. package/dist/shared-tree/index.js.map +1 -1
  33. package/dist/shared-tree/schematizeTree.d.ts +4 -4
  34. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  35. package/dist/shared-tree/schematizeTree.js +2 -3
  36. package/dist/shared-tree/schematizeTree.js.map +1 -1
  37. package/dist/shared-tree/schematizingTreeView.d.ts +3 -3
  38. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  39. package/dist/shared-tree/schematizingTreeView.js +4 -4
  40. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  41. package/dist/shared-tree/{treeApi.d.ts → tree.d.ts} +34 -34
  42. package/dist/shared-tree/tree.d.ts.map +1 -0
  43. package/dist/shared-tree/{treeApi.js → tree.js} +6 -6
  44. package/dist/shared-tree/tree.js.map +1 -0
  45. package/dist/shared-tree/{treeApiAlpha.d.ts → treeAlpha.d.ts} +22 -14
  46. package/dist/shared-tree/treeAlpha.d.ts.map +1 -0
  47. package/dist/shared-tree/{treeApiAlpha.js → treeAlpha.js} +4 -3
  48. package/dist/shared-tree/treeAlpha.js.map +1 -0
  49. package/dist/simple-tree/api/conciseTree.d.ts +1 -1
  50. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  51. package/dist/simple-tree/api/configuration.d.ts +177 -0
  52. package/dist/simple-tree/api/configuration.d.ts.map +1 -0
  53. package/dist/simple-tree/api/configuration.js +163 -0
  54. package/dist/simple-tree/api/configuration.js.map +1 -0
  55. package/dist/simple-tree/api/getJsonSchema.js +2 -2
  56. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  57. package/dist/simple-tree/api/index.d.ts +7 -4
  58. package/dist/simple-tree/api/index.d.ts.map +1 -1
  59. package/dist/simple-tree/api/index.js +8 -7
  60. package/dist/simple-tree/api/index.js.map +1 -1
  61. package/dist/simple-tree/api/{view.d.ts → schemaCompatibilityTester.d.ts} +8 -10
  62. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -0
  63. package/dist/simple-tree/api/{view.js → schemaCompatibilityTester.js} +9 -9
  64. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -0
  65. package/dist/simple-tree/api/schemaFactory.d.ts +16 -10
  66. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  67. package/dist/simple-tree/api/schemaFactory.js +20 -12
  68. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  69. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +12 -6
  70. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  71. package/dist/simple-tree/api/schemaFactoryAlpha.js +2 -2
  72. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  73. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +67 -4
  74. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  75. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  76. package/dist/simple-tree/api/schemaFromSimple.d.ts +1 -1
  77. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  78. package/dist/simple-tree/api/schemaFromSimple.js +1 -1
  79. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  80. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +1 -1
  81. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  82. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  83. package/dist/simple-tree/api/storedSchema.d.ts +3 -3
  84. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  85. package/dist/simple-tree/api/storedSchema.js +3 -2
  86. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  87. package/dist/simple-tree/api/tree.d.ts +5 -174
  88. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  89. package/dist/simple-tree/api/tree.js +1 -156
  90. package/dist/simple-tree/api/tree.js.map +1 -1
  91. package/{lib/simple-tree/api/treeApiBeta.d.ts → dist/simple-tree/api/treeBeta.d.ts} +13 -5
  92. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -0
  93. package/dist/simple-tree/api/{treeApiBeta.js → treeBeta.js} +5 -4
  94. package/dist/simple-tree/api/treeBeta.js.map +1 -0
  95. package/dist/simple-tree/api/typesUnsafe.d.ts +4 -9
  96. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  97. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  98. package/dist/simple-tree/arrayNode.d.ts +2 -2
  99. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  100. package/dist/simple-tree/arrayNode.js +3 -2
  101. package/dist/simple-tree/arrayNode.js.map +1 -1
  102. package/dist/simple-tree/arrayNodeTypes.d.ts +3 -3
  103. package/dist/simple-tree/arrayNodeTypes.d.ts.map +1 -1
  104. package/dist/simple-tree/arrayNodeTypes.js.map +1 -1
  105. package/dist/simple-tree/index.d.ts +3 -3
  106. package/dist/simple-tree/index.d.ts.map +1 -1
  107. package/dist/simple-tree/index.js +2 -2
  108. package/dist/simple-tree/index.js.map +1 -1
  109. package/dist/simple-tree/mapNode.d.ts +2 -2
  110. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  111. package/dist/simple-tree/mapNode.js +1 -1
  112. package/dist/simple-tree/mapNode.js.map +1 -1
  113. package/dist/simple-tree/mapNodeTypes.d.ts +3 -3
  114. package/dist/simple-tree/mapNodeTypes.d.ts.map +1 -1
  115. package/dist/simple-tree/mapNodeTypes.js.map +1 -1
  116. package/dist/simple-tree/objectNode.d.ts +18 -5
  117. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  118. package/dist/simple-tree/objectNode.js +4 -3
  119. package/dist/simple-tree/objectNode.js.map +1 -1
  120. package/dist/simple-tree/objectNodeTypes.d.ts +4 -4
  121. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
  122. package/dist/simple-tree/objectNodeTypes.js.map +1 -1
  123. package/dist/simple-tree/schemaTypes.d.ts +163 -13
  124. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  125. package/dist/simple-tree/schemaTypes.js +107 -8
  126. package/dist/simple-tree/schemaTypes.js.map +1 -1
  127. package/dist/simple-tree/treeNodeValid.js +2 -2
  128. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  129. package/dist/tableSchema.d.ts +197 -86
  130. package/dist/tableSchema.d.ts.map +1 -1
  131. package/dist/tableSchema.js +100 -45
  132. package/dist/tableSchema.js.map +1 -1
  133. package/dist/util/typeUtils.d.ts +1 -1
  134. package/dist/util/typeUtils.js.map +1 -1
  135. package/lib/alpha.d.ts +16 -1
  136. package/lib/beta.d.ts +2 -0
  137. package/lib/index.d.ts +2 -2
  138. package/lib/index.d.ts.map +1 -1
  139. package/lib/index.js.map +1 -1
  140. package/lib/internalTypes.d.ts +0 -1
  141. package/lib/internalTypes.d.ts.map +1 -1
  142. package/lib/internalTypes.js.map +1 -1
  143. package/lib/jsonDomainSchema.d.ts +2 -2
  144. package/lib/jsonDomainSchema.js +2 -2
  145. package/lib/jsonDomainSchema.js.map +1 -1
  146. package/lib/legacy.d.ts +2 -0
  147. package/lib/packageVersion.d.ts +1 -1
  148. package/lib/packageVersion.d.ts.map +1 -1
  149. package/lib/packageVersion.js +1 -1
  150. package/lib/packageVersion.js.map +1 -1
  151. package/lib/public.d.ts +2 -0
  152. package/lib/serializableDomainSchema.d.ts +3 -3
  153. package/lib/serializableDomainSchema.js +2 -2
  154. package/lib/serializableDomainSchema.js.map +1 -1
  155. package/lib/shared-tree/independentView.d.ts +1 -1
  156. package/lib/shared-tree/independentView.js.map +1 -1
  157. package/lib/shared-tree/index.d.ts +3 -2
  158. package/lib/shared-tree/index.d.ts.map +1 -1
  159. package/lib/shared-tree/index.js +2 -2
  160. package/lib/shared-tree/index.js.map +1 -1
  161. package/lib/shared-tree/schematizeTree.d.ts +4 -4
  162. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  163. package/lib/shared-tree/schematizeTree.js +2 -3
  164. package/lib/shared-tree/schematizeTree.js.map +1 -1
  165. package/lib/shared-tree/schematizingTreeView.d.ts +3 -3
  166. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  167. package/lib/shared-tree/schematizingTreeView.js +5 -5
  168. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  169. package/lib/shared-tree/{treeApi.d.ts → tree.d.ts} +34 -34
  170. package/lib/shared-tree/tree.d.ts.map +1 -0
  171. package/lib/shared-tree/{treeApi.js → tree.js} +5 -5
  172. package/lib/shared-tree/tree.js.map +1 -0
  173. package/lib/shared-tree/{treeApiAlpha.d.ts → treeAlpha.d.ts} +22 -14
  174. package/lib/shared-tree/treeAlpha.d.ts.map +1 -0
  175. package/lib/shared-tree/{treeApiAlpha.js → treeAlpha.js} +4 -3
  176. package/lib/shared-tree/treeAlpha.js.map +1 -0
  177. package/lib/simple-tree/api/conciseTree.d.ts +1 -1
  178. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  179. package/lib/simple-tree/api/configuration.d.ts +177 -0
  180. package/lib/simple-tree/api/configuration.d.ts.map +1 -0
  181. package/lib/simple-tree/api/configuration.js +157 -0
  182. package/lib/simple-tree/api/configuration.js.map +1 -0
  183. package/lib/simple-tree/api/getJsonSchema.js +1 -1
  184. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  185. package/lib/simple-tree/api/index.d.ts +7 -4
  186. package/lib/simple-tree/api/index.d.ts.map +1 -1
  187. package/lib/simple-tree/api/index.js +4 -3
  188. package/lib/simple-tree/api/index.js.map +1 -1
  189. package/lib/simple-tree/api/{view.d.ts → schemaCompatibilityTester.d.ts} +8 -10
  190. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -0
  191. package/lib/simple-tree/api/{view.js → schemaCompatibilityTester.js} +7 -7
  192. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -0
  193. package/lib/simple-tree/api/schemaFactory.d.ts +16 -10
  194. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  195. package/lib/simple-tree/api/schemaFactory.js +20 -12
  196. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  197. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +12 -6
  198. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  199. package/lib/simple-tree/api/schemaFactoryAlpha.js +2 -2
  200. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  201. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +67 -4
  202. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  203. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  204. package/lib/simple-tree/api/schemaFromSimple.d.ts +1 -1
  205. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  206. package/lib/simple-tree/api/schemaFromSimple.js +1 -1
  207. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  208. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +1 -1
  209. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  210. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  211. package/lib/simple-tree/api/storedSchema.d.ts +3 -3
  212. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  213. package/lib/simple-tree/api/storedSchema.js +3 -2
  214. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  215. package/lib/simple-tree/api/tree.d.ts +5 -174
  216. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  217. package/lib/simple-tree/api/tree.js +0 -152
  218. package/lib/simple-tree/api/tree.js.map +1 -1
  219. package/{dist/simple-tree/api/treeApiBeta.d.ts → lib/simple-tree/api/treeBeta.d.ts} +13 -5
  220. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -0
  221. package/lib/simple-tree/api/{treeApiBeta.js → treeBeta.js} +5 -4
  222. package/lib/simple-tree/api/treeBeta.js.map +1 -0
  223. package/lib/simple-tree/api/typesUnsafe.d.ts +4 -9
  224. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  225. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  226. package/lib/simple-tree/arrayNode.d.ts +2 -2
  227. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  228. package/lib/simple-tree/arrayNode.js +4 -3
  229. package/lib/simple-tree/arrayNode.js.map +1 -1
  230. package/lib/simple-tree/arrayNodeTypes.d.ts +3 -3
  231. package/lib/simple-tree/arrayNodeTypes.d.ts.map +1 -1
  232. package/lib/simple-tree/arrayNodeTypes.js.map +1 -1
  233. package/lib/simple-tree/index.d.ts +3 -3
  234. package/lib/simple-tree/index.d.ts.map +1 -1
  235. package/lib/simple-tree/index.js +1 -1
  236. package/lib/simple-tree/index.js.map +1 -1
  237. package/lib/simple-tree/mapNode.d.ts +2 -2
  238. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  239. package/lib/simple-tree/mapNode.js +2 -2
  240. package/lib/simple-tree/mapNode.js.map +1 -1
  241. package/lib/simple-tree/mapNodeTypes.d.ts +3 -3
  242. package/lib/simple-tree/mapNodeTypes.d.ts.map +1 -1
  243. package/lib/simple-tree/mapNodeTypes.js.map +1 -1
  244. package/lib/simple-tree/objectNode.d.ts +18 -5
  245. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  246. package/lib/simple-tree/objectNode.js +5 -4
  247. package/lib/simple-tree/objectNode.js.map +1 -1
  248. package/lib/simple-tree/objectNodeTypes.d.ts +4 -4
  249. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
  250. package/lib/simple-tree/objectNodeTypes.js.map +1 -1
  251. package/lib/simple-tree/schemaTypes.d.ts +163 -13
  252. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  253. package/lib/simple-tree/schemaTypes.js +96 -8
  254. package/lib/simple-tree/schemaTypes.js.map +1 -1
  255. package/lib/simple-tree/treeNodeValid.js +2 -2
  256. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  257. package/lib/tableSchema.d.ts +197 -86
  258. package/lib/tableSchema.d.ts.map +1 -1
  259. package/lib/tableSchema.js +100 -45
  260. package/lib/tableSchema.js.map +1 -1
  261. package/lib/util/typeUtils.d.ts +1 -1
  262. package/lib/util/typeUtils.js.map +1 -1
  263. package/package.json +20 -20
  264. package/src/index.ts +17 -1
  265. package/src/internalTypes.ts +0 -2
  266. package/src/jsonDomainSchema.ts +2 -2
  267. package/src/packageVersion.ts +1 -1
  268. package/src/serializableDomainSchema.ts +3 -3
  269. package/src/shared-tree/independentView.ts +1 -1
  270. package/src/shared-tree/index.ts +3 -6
  271. package/src/shared-tree/schematizeTree.ts +5 -5
  272. package/src/shared-tree/schematizingTreeView.ts +11 -8
  273. package/src/shared-tree/{treeApi.ts → tree.ts} +51 -51
  274. package/src/shared-tree/{treeApiAlpha.ts → treeAlpha.ts} +22 -13
  275. package/src/simple-tree/api/conciseTree.ts +1 -1
  276. package/src/simple-tree/api/configuration.ts +353 -0
  277. package/src/simple-tree/api/getJsonSchema.ts +1 -1
  278. package/src/simple-tree/api/index.ts +21 -15
  279. package/src/simple-tree/api/{view.ts → schemaCompatibilityTester.ts} +8 -15
  280. package/src/simple-tree/api/schemaFactory.ts +130 -19
  281. package/src/simple-tree/api/schemaFactoryAlpha.ts +7 -5
  282. package/src/simple-tree/api/schemaFactoryRecursive.ts +102 -38
  283. package/src/simple-tree/api/schemaFromSimple.ts +2 -2
  284. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +1 -1
  285. package/src/simple-tree/api/storedSchema.ts +8 -4
  286. package/src/simple-tree/api/tree.ts +13 -354
  287. package/src/simple-tree/api/{treeApiBeta.ts → treeBeta.ts} +17 -5
  288. package/src/simple-tree/api/typesUnsafe.ts +15 -11
  289. package/src/simple-tree/arrayNode.ts +10 -5
  290. package/src/simple-tree/arrayNodeTypes.ts +8 -7
  291. package/src/simple-tree/index.ts +17 -1
  292. package/src/simple-tree/mapNode.ts +11 -3
  293. package/src/simple-tree/mapNodeTypes.ts +10 -7
  294. package/src/simple-tree/objectNode.ts +39 -15
  295. package/src/simple-tree/objectNodeTypes.ts +9 -5
  296. package/src/simple-tree/schemaTypes.ts +353 -25
  297. package/src/simple-tree/treeNodeValid.ts +2 -2
  298. package/src/tableSchema.ts +749 -445
  299. package/src/util/typeUtils.ts +1 -1
  300. package/dist/shared-tree/treeApi.d.ts.map +0 -1
  301. package/dist/shared-tree/treeApi.js.map +0 -1
  302. package/dist/shared-tree/treeApiAlpha.d.ts.map +0 -1
  303. package/dist/shared-tree/treeApiAlpha.js.map +0 -1
  304. package/dist/simple-tree/api/treeApiBeta.d.ts.map +0 -1
  305. package/dist/simple-tree/api/treeApiBeta.js.map +0 -1
  306. package/dist/simple-tree/api/view.d.ts.map +0 -1
  307. package/dist/simple-tree/api/view.js.map +0 -1
  308. package/lib/shared-tree/treeApi.d.ts.map +0 -1
  309. package/lib/shared-tree/treeApi.js.map +0 -1
  310. package/lib/shared-tree/treeApiAlpha.d.ts.map +0 -1
  311. package/lib/shared-tree/treeApiAlpha.js.map +0 -1
  312. package/lib/simple-tree/api/treeApiBeta.d.ts.map +0 -1
  313. package/lib/simple-tree/api/treeApiBeta.js.map +0 -1
  314. package/lib/simple-tree/api/view.d.ts.map +0 -1
  315. package/lib/simple-tree/api/view.js.map +0 -1
@@ -4,51 +4,64 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.TableSchema = void 0;
7
+ exports.TableSchema = exports.System_TableSchema = void 0;
8
8
  const internal_1 = require("@fluidframework/core-utils/internal");
9
9
  const index_js_1 = require("./shared-tree/index.js");
10
10
  const index_js_2 = require("./simple-tree/index.js");
11
11
  // Future improvement TODOs (ideally to be done before promoting these APIs to `@alpha`):
12
- // - Custom fields on Table/Row/Column (props pattern from Nick's demo)
13
- // - Overloads to make Column/Row schema optional when constructing Tables
14
12
  // - Record-like type parameters / input parameters?
15
- // - Move `@system` types into separate / sub scope?
13
+ // - Omit `props` properties from Row and Column schemas when not provided?
14
+ const tableSchemaFactorySubScope = "table";
16
15
  /**
17
- * Contains types and factories for creating schema to represent dynamic tabular data.
18
- * @privateRemarks TODO: document in more detail and add `@example`s.
19
- * @internal
16
+ * Not intended for use outside of this package.
17
+ *
18
+ * @privateRemarks
19
+ * This namespace is a collection of internal system types relate to {@link TableSchema}.
20
+ * This namespace should be strictly type-exported by the package.
21
+ * All members should be tagged with `@system`.
22
+ *
23
+ * @system @internal
20
24
  */
21
- var TableSchema;
22
- (function (TableSchema) {
23
- const tableSchemaFactorySubScope = "table";
25
+ var System_TableSchema;
26
+ (function (System_TableSchema) {
24
27
  /**
25
28
  * Factory for creating new table column schema.
26
- * @privateRemarks
27
- * TODO:
28
- * - Add overloads to make propsSchema optional.
29
- * - Take field schema rather than node schema for `propsSchema`, in particular to allow making
30
- * the additional properties optional.
31
- * @internal
29
+ * @system @internal
32
30
  */
33
31
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify
34
- function createColumn(inputSchemaFactory, propsSchema) {
32
+ function createColumnInternal(inputSchemaFactory, propsSchema) {
35
33
  const schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);
34
+ // Note: `columnFields` is broken into two parts to work around a TypeScript bug
35
+ // that results in broken `.d.ts` output.
36
+ // See definition of `ColumnInsertableType` below.
37
+ const columnFieldsBuiltInParts = {
38
+ id: schemaFactory.identifier,
39
+ };
40
+ const columnFieldsPropsPart = {
41
+ props: propsSchema,
42
+ };
36
43
  /**
37
44
  * {@link Column} fields.
38
- * @remarks Extracted for re-use in returned type signature defined later in this function.
45
+ *
46
+ * @remarks
47
+ * Extracted for re-use in returned type signature defined later in this function.
39
48
  * The implicit typing is intentional.
49
+ *
40
50
  * Note: ideally we would add a satisfies clause here to ensure that this satisfies
41
51
  * `Record<string, ImplicitFieldSchema>`, but doing so causes TypeScript to prematurely and incorrectly evaluate the type of `propsSchema`.
42
52
  * Likely related to the following issue: https://github.com/microsoft/TypeScript/issues/52394
43
53
  */
44
54
  const columnFields = {
45
- id: schemaFactory.identifier,
46
- props: schemaFactory.required(propsSchema),
47
- };
55
+ ...columnFieldsBuiltInParts,
56
+ ...columnFieldsPropsPart,
57
+ }; // satisfies Record<string, ImplicitFieldSchema>;
48
58
  /**
49
59
  * A column in a table.
50
60
  */
51
- class Column extends schemaFactory.object("Column", columnFields) {
61
+ class Column extends schemaFactory.objectAlpha("Column", columnFields, {
62
+ // Will make it easier to evolve this schema in the future.
63
+ allowUnknownOptionalFields: true,
64
+ }) {
52
65
  }
53
66
  // Returning SingletonSchema without a type conversion results in TypeScript generating something like `readonly "__#124291@#brand": unknown;`
54
67
  // for the private brand field of TreeNode.
@@ -58,21 +71,29 @@ var TableSchema;
58
71
  const ColumnSchemaType = Column;
59
72
  return ColumnSchemaType;
60
73
  }
61
- TableSchema.createColumn = createColumn;
74
+ System_TableSchema.createColumnInternal = createColumnInternal;
62
75
  /**
63
76
  * Factory for creating new table row schema.
64
77
  *
65
- * @privateRemarks
66
- * TODO:
67
- * - Add overloads to make propsSchema optional.
68
- * - Take field schema rather than node schema for `propsSchema`, in particular to allow making
69
- * the additional properties optional.
70
- *
71
78
  * @sealed @internal
72
79
  */
73
80
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify
74
- function createRow(inputSchemaFactory, cellSchema, propsSchema) {
81
+ function createRowInternal(inputSchemaFactory, cellSchema, propsSchema) {
75
82
  const schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);
83
+ // Note: `rowFields` is broken into two parts to work around a TypeScript bug
84
+ // that results in broken `.d.ts` output.
85
+ // See definition of `RowInsertableType` below.
86
+ const rowFieldsBuiltInParts = {
87
+ id: schemaFactory.identifier,
88
+ cells: schemaFactory.required(schemaFactory.map("Row.cells", cellSchema), {
89
+ metadata: {
90
+ description: "The cells of the table row, keyed by column ID.",
91
+ },
92
+ }),
93
+ };
94
+ const rowFieldsPropsPart = {
95
+ props: propsSchema,
96
+ };
76
97
  /**
77
98
  * {@link Row} fields.
78
99
  * @remarks Extracted for re-use in returned type signature defined later in this function.
@@ -82,14 +103,16 @@ var TableSchema;
82
103
  * Likely related to the following issue: https://github.com/microsoft/TypeScript/issues/52394
83
104
  */
84
105
  const rowFields = {
85
- id: schemaFactory.identifier,
86
- cells: schemaFactory.map("Row.cells", cellSchema),
87
- props: schemaFactory.required(propsSchema),
88
- };
106
+ ...rowFieldsBuiltInParts,
107
+ ...rowFieldsPropsPart,
108
+ }; // satisfies Record<string, ImplicitFieldSchema>;
89
109
  /**
90
110
  * The Row schema - this is a map of Cells where the key is the column id
91
111
  */
92
- class Row extends schemaFactory.object("Row", rowFields) {
112
+ class Row extends schemaFactory.objectAlpha("Row", rowFields, {
113
+ // Will make it easier to evolve this schema in the future.
114
+ allowUnknownOptionalFields: true,
115
+ }) {
93
116
  getCell(columnOrId) {
94
117
  const columnId = typeof columnOrId === "string" ? columnOrId : columnOrId.id;
95
118
  return this.cells.get(columnId);
@@ -114,14 +137,7 @@ var TableSchema;
114
137
  const RowSchemaType = Row;
115
138
  return RowSchemaType;
116
139
  }
117
- TableSchema.createRow = createRow;
118
- /** `createTable` implementation */
119
- function createTable(inputSchemaFactory, _cellSchema, columnSchema, rowSchema) {
120
- const column = columnSchema ?? createColumn(inputSchemaFactory, inputSchemaFactory.null);
121
- return createTableInternal(inputSchemaFactory, _cellSchema, column, rowSchema ??
122
- createRow(inputSchemaFactory, _cellSchema, inputSchemaFactory.null));
123
- }
124
- TableSchema.createTable = createTable;
140
+ System_TableSchema.createRowInternal = createRowInternal;
125
141
  /**
126
142
  * Factory for creating new table schema.
127
143
  * @system @internal
@@ -141,7 +157,10 @@ var TableSchema;
141
157
  /**
142
158
  * The Table schema
143
159
  */
144
- class Table extends schemaFactory.object("Table", tableFields) {
160
+ class Table extends schemaFactory.objectAlpha("Table", tableFields, {
161
+ // Will make it easier to evolve this schema in the future.
162
+ allowUnknownOptionalFields: true,
163
+ }) {
145
164
  getColumn(id) {
146
165
  // TypeScript is unable to narrow the types correctly here, hence the casts.
147
166
  // See: https://github.com/microsoft/TypeScript/issues/52144
@@ -257,7 +276,43 @@ var TableSchema;
257
276
  // Return the table schema
258
277
  return TableSchemaType;
259
278
  }
260
- TableSchema.createTableInternal = createTableInternal;
279
+ System_TableSchema.createTableInternal = createTableInternal;
280
+ // #endregion
281
+ })(System_TableSchema || (exports.System_TableSchema = System_TableSchema = {}));
282
+ /**
283
+ * Contains types and factories for creating schema to represent dynamic tabular data.
284
+ * @privateRemarks TODO: document in more detail and add `@example`s.
285
+ * @internal
286
+ */
287
+ var TableSchema;
288
+ (function (TableSchema) {
289
+ // #region Column
290
+ /**
291
+ * Overload implementation
292
+ */
293
+ function createColumn({ schemaFactory, props = index_js_2.SchemaFactory.optional(index_js_2.SchemaFactory.null), }) {
294
+ return System_TableSchema.createColumnInternal(schemaFactory, props);
295
+ }
296
+ TableSchema.createColumn = createColumn;
297
+ /**
298
+ * Overload implementation
299
+ */
300
+ function createRow({ schemaFactory, cell, props = index_js_2.SchemaFactory.optional(index_js_2.SchemaFactory.null), }) {
301
+ return System_TableSchema.createRowInternal(schemaFactory, cell, props);
302
+ }
303
+ TableSchema.createRow = createRow;
304
+ /**
305
+ * Overload implementation
306
+ */
307
+ function createTable({ schemaFactory, cell, column = createColumn({
308
+ schemaFactory,
309
+ }), row = createRow({
310
+ schemaFactory,
311
+ cell,
312
+ }), }) {
313
+ return System_TableSchema.createTableInternal(schemaFactory, cell, column, row);
314
+ }
315
+ TableSchema.createTable = createTable;
261
316
  // #endregion
262
317
  })(TableSchema || (exports.TableSchema = TableSchema = {}));
263
318
  //# sourceMappingURL=tableSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tableSchema.js","sourceRoot":"","sources":["../src/tableSchema.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { oob } from \"@fluidframework/core-utils/internal\";\n\nimport { Tree } from \"./shared-tree/index.js\";\nimport {\n\ttype ImplicitAllowedTypes,\n\ttype ImplicitFieldSchema,\n\ttype InsertableObjectFromSchemaRecord,\n\ttype InsertableTreeNodeFromImplicitAllowedTypes,\n\ttype NodeKind,\n\ttype SchemaFactoryAlpha,\n\ttype ScopedSchemaName,\n\tTreeArrayNode,\n\ttype TreeNode,\n\ttype TreeNodeFromImplicitAllowedTypes,\n\ttype TreeNodeSchema,\n\ttype TreeNodeSchemaClass,\n\ttype WithType,\n} from \"./simple-tree/index.js\";\n\n// Future improvement TODOs (ideally to be done before promoting these APIs to `@alpha`):\n// - Custom fields on Table/Row/Column (props pattern from Nick's demo)\n// - Overloads to make Column/Row schema optional when constructing Tables\n// - Record-like type parameters / input parameters?\n// - Move `@system` types into separate / sub scope?\n\n/**\n * Contains types and factories for creating schema to represent dynamic tabular data.\n * @privateRemarks TODO: document in more detail and add `@example`s.\n * @internal\n */\nexport namespace TableSchema {\n\tconst tableSchemaFactorySubScope = \"table\";\n\n\t// #region Column\n\n\t/**\n\t * A column in a table.\n\t * @remarks Implemented by the schema class returned from {@link TableSchema.createColumn}.\n\t * @sealed @internal\n\t */\n\texport interface IColumn<TPropsSchema extends ImplicitAllowedTypes = ImplicitAllowedTypes> {\n\t\t/**\n\t\t * The unique identifier of the column.\n\t\t * @remarks Uniquely identifies the node within the entire tree, not just the table.\n\t\t */\n\t\treadonly id: string;\n\n\t\t/**\n\t\t * User-provided column properties.\n\t\t */\n\t\tget props(): TreeNodeFromImplicitAllowedTypes<TPropsSchema>;\n\t\tset props(value: InsertableTreeNodeFromImplicitAllowedTypes<TPropsSchema>);\n\t}\n\n\t/**\n\t * Factory for creating new table column schema.\n\t * @privateRemarks\n\t * TODO:\n\t * - Add overloads to make propsSchema optional.\n\t * - Take field schema rather than node schema for `propsSchema`, in particular to allow making\n\t * the additional properties optional.\n\t * @internal\n\t */\n\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify\n\texport function createColumn<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TPropsSchema extends ImplicitAllowedTypes,\n\t>(inputSchemaFactory: SchemaFactoryAlpha<TInputScope>, propsSchema: TPropsSchema) {\n\t\tconst schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);\n\t\ttype Scope = ScopedSchemaName<TInputScope, typeof tableSchemaFactorySubScope>;\n\n\t\t/**\n\t\t * {@link Column} fields.\n\t\t * @remarks Extracted for re-use in returned type signature defined later in this function.\n\t\t * The implicit typing is intentional.\n\t\t * Note: ideally we would add a satisfies clause here to ensure that this satisfies\n\t\t * `Record<string, ImplicitFieldSchema>`, but doing so causes TypeScript to prematurely and incorrectly evaluate the type of `propsSchema`.\n\t\t * Likely related to the following issue: https://github.com/microsoft/TypeScript/issues/52394\n\t\t */\n\t\tconst columnFields = {\n\t\t\tid: schemaFactory.identifier,\n\t\t\tprops: schemaFactory.required(propsSchema),\n\t\t} as const;\n\n\t\t/**\n\t\t * A column in a table.\n\t\t */\n\t\tclass Column extends schemaFactory.object(\"Column\", columnFields) {}\n\n\t\ttype ColumnValueType = TreeNode &\n\t\t\tIColumn<TPropsSchema> &\n\t\t\tWithType<ScopedSchemaName<Scope, \"Column\">>;\n\n\t\ttype ColumnInsertableType = InsertableObjectFromSchemaRecord<typeof columnFields>;\n\n\t\t// Returning SingletonSchema without a type conversion results in TypeScript generating something like `readonly \"__#124291@#brand\": unknown;`\n\t\t// for the private brand field of TreeNode.\n\t\t// This numeric id doesn't seem to be stable over incremental builds, and thus causes diffs in the API extractor reports.\n\t\t// This is avoided by doing this type conversion.\n\t\t// The conversion is done via assignment instead of `as` to get stronger type safety.\n\t\tconst ColumnSchemaType: TreeNodeSchemaClass<\n\t\t\t/* Name */ ScopedSchemaName<Scope, \"Column\">,\n\t\t\t/* Kind */ NodeKind.Object,\n\t\t\t/* TNode */ ColumnValueType,\n\t\t\t/* TInsertable */ object & ColumnInsertableType,\n\t\t\t/* ImplicitlyConstructable */ true,\n\t\t\t/* Info */ typeof columnFields\n\t\t> = Column;\n\n\t\treturn ColumnSchemaType;\n\t}\n\n\t/**\n\t * Base column schema type.\n\t * @sealed @system @internal\n\t */\n\texport type ColumnSchemaBase<\n\t\tTScope extends string | undefined,\n\t\tTPropsSchema extends ImplicitAllowedTypes,\n\t> = ReturnType<typeof createColumn<TScope, TPropsSchema>>;\n\n\t// #endregion\n\n\t// #region Row\n\n\t/**\n\t * A row in a table.\n\t * @remarks Implemented by the schema class returned from {@link TableSchema.createRow}.\n\t * @sealed @internal\n\t */\n\texport interface IRow<\n\t\tTCellSchema extends ImplicitAllowedTypes,\n\t\tTPropsSchema extends ImplicitAllowedTypes = ImplicitAllowedTypes,\n\t> {\n\t\t/**\n\t\t * The unique identifier of the row.\n\t\t * @remarks Uniquely identifies the node within the entire tree, not just the table.\n\t\t */\n\t\treadonly id: string;\n\n\t\t/**\n\t\t * Gets the cell in the specified column.\n\t\t * @returns The cell if it exists, otherwise undefined.\n\t\t */\n\t\tgetCell(column: IColumn): TreeNodeFromImplicitAllowedTypes<TCellSchema> | undefined;\n\t\t/**\n\t\t * Gets the cell in the specified column, denoted by column ID.\n\t\t * @returns The cell if it exists, otherwise undefined.\n\t\t */\n\t\tgetCell(columnId: string): TreeNodeFromImplicitAllowedTypes<TCellSchema> | undefined;\n\n\t\t/**\n\t\t * Sets the cell in the specified column.\n\t\t * @remarks To remove a cell, call {@link TableSchema.IRow.(removeCell:1)} instead.\n\t\t */\n\t\tsetCell(\n\t\t\tcolumn: IColumn,\n\t\t\tvalue: InsertableTreeNodeFromImplicitAllowedTypes<TCellSchema>,\n\t\t): void;\n\t\t/**\n\t\t * Sets the cell in the specified column, denoted by column ID.\n\t\t * @remarks To remove a cell, call {@link TableSchema.IRow.(removeCell:2)} instead.\n\t\t */\n\t\tsetCell(\n\t\t\tcolumnId: string,\n\t\t\tvalue: InsertableTreeNodeFromImplicitAllowedTypes<TCellSchema>,\n\t\t): void;\n\n\t\t/**\n\t\t * Removes the cell in the specified column.\n\t\t * @privateRemarks TODO: return removed cell\n\t\t */\n\t\tremoveCell(column: IColumn): void;\n\t\t/**\n\t\t * Removes the cell in the specified column, denoted by column ID.\n\t\t * @privateRemarks TODO: return removed cell\n\t\t */\n\t\tremoveCell(columnId: string): void;\n\n\t\t/**\n\t\t * User-provided row properties.\n\t\t */\n\t\tget props(): TreeNodeFromImplicitAllowedTypes<TPropsSchema>;\n\t\tset props(value: InsertableTreeNodeFromImplicitAllowedTypes<TPropsSchema>);\n\t}\n\n\t/**\n\t * Factory for creating new table row schema.\n\t *\n\t * @privateRemarks\n\t * TODO:\n\t * - Add overloads to make propsSchema optional.\n\t * - Take field schema rather than node schema for `propsSchema`, in particular to allow making\n\t * the additional properties optional.\n\t *\n\t * @sealed @internal\n\t */\n\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify\n\texport function createRow<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TCellSchema extends ImplicitAllowedTypes,\n\t\tconst TPropsSchema extends ImplicitAllowedTypes,\n\t>(\n\t\tinputSchemaFactory: SchemaFactoryAlpha<TInputScope>,\n\t\tcellSchema: TCellSchema,\n\t\tpropsSchema: TPropsSchema,\n\t) {\n\t\tconst schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);\n\t\ttype Scope = ScopedSchemaName<TInputScope, typeof tableSchemaFactorySubScope>;\n\n\t\ttype CellValueType = TreeNodeFromImplicitAllowedTypes<TCellSchema>;\n\t\ttype CellInsertableType = InsertableTreeNodeFromImplicitAllowedTypes<TCellSchema>;\n\n\t\t/**\n\t\t * {@link Row} fields.\n\t\t * @remarks Extracted for re-use in returned type signature defined later in this function.\n\t\t * The implicit typing is intentional.\n\t\t * Note: ideally we would add a satisfies clause here to ensure that this satisfies\n\t\t * `Record<string, ImplicitFieldSchema>`, but doing so causes TypeScript to prematurely and incorrectly evaluate the type of `propsSchema`.\n\t\t * Likely related to the following issue: https://github.com/microsoft/TypeScript/issues/52394\n\t\t */\n\t\tconst rowFields = {\n\t\t\tid: schemaFactory.identifier,\n\t\t\tcells: schemaFactory.map(\"Row.cells\", cellSchema),\n\t\t\tprops: schemaFactory.required(propsSchema),\n\t\t} as const;\n\n\t\t/**\n\t\t * The Row schema - this is a map of Cells where the key is the column id\n\t\t */\n\t\tclass Row\n\t\t\textends schemaFactory.object(\"Row\", rowFields)\n\t\t\timplements IRow<TCellSchema, TPropsSchema>\n\t\t{\n\t\t\tpublic getCell(columnOrId: IColumn | string): CellValueType | undefined {\n\t\t\t\tconst columnId = typeof columnOrId === \"string\" ? columnOrId : columnOrId.id;\n\t\t\t\treturn this.cells.get(columnId) as CellValueType | undefined;\n\t\t\t}\n\n\t\t\tpublic setCell(\n\t\t\t\tcolumnOrId: IColumn | string,\n\t\t\t\tvalue: CellInsertableType | undefined,\n\t\t\t): void {\n\t\t\t\tconst columnId = typeof columnOrId === \"string\" ? columnOrId : columnOrId.id;\n\t\t\t\tthis.cells.set(columnId, value);\n\t\t\t}\n\n\t\t\tpublic removeCell(columnOrId: IColumn | string): void {\n\t\t\t\tconst columnId = typeof columnOrId === \"string\" ? columnOrId : columnOrId.id;\n\t\t\t\tif (!this.cells.has(columnId)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.cells.delete(columnId);\n\t\t\t}\n\t\t}\n\n\t\ttype RowValueType = TreeNode &\n\t\t\tIRow<TCellSchema, TPropsSchema> &\n\t\t\tWithType<ScopedSchemaName<Scope, \"Row\">>;\n\t\ttype RowInsertableType = InsertableObjectFromSchemaRecord<typeof rowFields>;\n\n\t\t// Returning SingletonSchema without a type conversion results in TypeScript generating something like `readonly \"__#124291@#brand\": unknown;`\n\t\t// for the private brand field of TreeNode.\n\t\t// This numeric id doesn't seem to be stable over incremental builds, and thus causes diffs in the API extractor reports.\n\t\t// This is avoided by doing this type conversion.\n\t\t// The conversion is done via assignment instead of `as` to get stronger type safety.\n\t\tconst RowSchemaType: TreeNodeSchemaClass<\n\t\t\t/* Name */ ScopedSchemaName<Scope, \"Row\">,\n\t\t\t/* Kind */ NodeKind.Object,\n\t\t\t/* TNode */ RowValueType,\n\t\t\t/* TInsertable */ object & RowInsertableType,\n\t\t\t/* ImplicitlyConstructable */ true,\n\t\t\t/* Info */ typeof rowFields\n\t\t> = Row;\n\n\t\treturn RowSchemaType;\n\t}\n\n\t/**\n\t * Base row schema type.\n\t * @sealed @system @internal\n\t */\n\texport type RowSchemaBase<\n\t\tTScope extends string | undefined,\n\t\tTCellSchema extends ImplicitAllowedTypes,\n\t\tTPropsSchema extends ImplicitAllowedTypes,\n\t> = ReturnType<typeof createRow<TScope, TCellSchema, TPropsSchema>>;\n\n\t// #endregion\n\n\t// #region Table\n\n\t/**\n\t * A key to uniquely identify a cell in a table.\n\t * @sealed @internal\n\t */\n\texport interface CellKey {\n\t\t/**\n\t\t * {@link TableSchema.IColumn.id} of the containing {@link TableSchema.IColumn}.\n\t\t */\n\t\treadonly columnId: string;\n\n\t\t/**\n\t\t * {@link TableSchema.IRow.id} of the containing {@link TableSchema.IRow}.\n\t\t */\n\t\treadonly rowId: string;\n\t}\n\n\t/**\n\t * {@link TableSchema.ITable.insertColumn} parameters.\n\t * @sealed @internal\n\t */\n\texport interface InsertColumnParameters<TInsertableColumn> {\n\t\t/**\n\t\t * The index at which to insert the new column.\n\t\t * @remarks If not provided, the column will be appended to the end of the table.\n\t\t */\n\t\treadonly index?: number | undefined;\n\n\t\t/**\n\t\t * The column to insert.\n\t\t */\n\t\treadonly column: TInsertableColumn;\n\t}\n\n\t/**\n\t * {@link TableSchema.ITable.insertRows} parameters.\n\t * @sealed @internal\n\t */\n\texport interface InsertRowsParameters<TInsertableRow> {\n\t\t/**\n\t\t * The index at which to insert the new rows.\n\t\t * @remarks If not provided, the rows will be appended to the end of the table.\n\t\t */\n\t\treadonly index?: number | undefined;\n\n\t\t/**\n\t\t * The rows to insert.\n\t\t */\n\t\treadonly rows: TInsertableRow[];\n\t}\n\n\t/**\n\t * {@link TableSchema.ITable.setCell} parameters.\n\t * @sealed @internal\n\t */\n\texport interface SetCellParameters<TInsertableCell> {\n\t\t/**\n\t\t * The key to uniquely identify a cell in a table.\n\t\t */\n\t\treadonly key: CellKey;\n\n\t\t/**\n\t\t * The cell to set.\n\t\t */\n\t\treadonly cell: TInsertableCell;\n\t}\n\n\t/**\n\t * A table.\n\t * @sealed @internal\n\t */\n\texport interface ITable<\n\t\tTCellSchema extends ImplicitAllowedTypes,\n\t\tTColumnSchema extends ImplicitAllowedTypes,\n\t\tTRowSchema extends ImplicitAllowedTypes,\n\t> {\n\t\t/**\n\t\t * The table's columns.\n\t\t */\n\t\treadonly columns: TreeArrayNode<TColumnSchema>;\n\n\t\t/**\n\t\t * The table's rows.\n\t\t */\n\t\treadonly rows: TreeArrayNode<TRowSchema>;\n\n\t\t/**\n\t\t * Gets a table column by its {@link TableSchema.IRow.id}.\n\t\t */\n\t\tgetColumn(id: string): TreeNodeFromImplicitAllowedTypes<TColumnSchema> | undefined;\n\n\t\t/**\n\t\t * Gets a table row by its {@link TableSchema.IRow.id}.\n\t\t */\n\t\tgetRow(id: string): TreeNodeFromImplicitAllowedTypes<TRowSchema> | undefined;\n\n\t\t/**\n\t\t * Gets a cell in the table by column and row IDs.\n\t\t * @param key - A key that uniquely distinguishes a cell in the table, represented as a combination of the column ID and row ID.\n\t\t * @privateRemarks TODO: add overload that takes row and column nodes.\n\t\t */\n\t\tgetCell(key: CellKey): TreeNodeFromImplicitAllowedTypes<TCellSchema> | undefined;\n\n\t\t/**\n\t\t * Inserts a column into the table.\n\t\t * @throws Throws an error if the column is already in the tree, or if the specified index is out of range.\n\t\t */\n\t\tinsertColumn(\n\t\t\tparams: InsertColumnParameters<\n\t\t\t\tInsertableTreeNodeFromImplicitAllowedTypes<TColumnSchema>\n\t\t\t>,\n\t\t): TreeNodeFromImplicitAllowedTypes<TColumnSchema>;\n\n\t\t/**\n\t\t * Inserts 0 or more rows into the table.\n\t\t * @throws Throws an error if any of the rows are already in the tree, or if the specified index is out of range.\n\t\t */\n\t\tinsertRows(\n\t\t\tparams: InsertRowsParameters<InsertableTreeNodeFromImplicitAllowedTypes<TRowSchema>>,\n\t\t): TreeNodeFromImplicitAllowedTypes<TRowSchema>[];\n\n\t\t/**\n\t\t * Sets the cell at the specified location in the table.\n\t\t * @remarks To remove a cell, call {@link TableSchema.ITable.removeCell} instead.\n\t\t * @privateRemarks TODO: add overload that takes column/row nodes?\n\t\t */\n\t\tsetCell(\n\t\t\tparams: SetCellParameters<InsertableTreeNodeFromImplicitAllowedTypes<TCellSchema>>,\n\t\t): void;\n\n\t\t/**\n\t\t * Removes the specified column from the table.\n\t\t * @remarks Note: this does not remove any cells from the table's rows.\n\t\t * @privateRemarks\n\t\t * TODO:\n\t\t * - Policy for when the column is not in the table.\n\t\t * - Actually remove corresponding cells from table rows.\n\t\t */\n\t\tremoveColumn: (column: TreeNodeFromImplicitAllowedTypes<TColumnSchema>) => void;\n\n\t\t/**\n\t\t * Removes 0 or more rows from the table.\n\t\t * @privateRemarks TODO: policy for when 1 or more rows are not in the table.\n\t\t */\n\t\tremoveRows: (rows: readonly TreeNodeFromImplicitAllowedTypes<TRowSchema>[]) => void;\n\n\t\t/**\n\t\t * Removes all rows from the table.\n\t\t */\n\t\tremoveAllRows: () => void;\n\n\t\t/**\n\t\t * Removes the cell at the specified location in the table.\n\t\t * @privateRemarks TODO: add overload that takes column/row nodes?\n\t\t */\n\t\tremoveCell: (key: CellKey) => void;\n\t}\n\n\t/**\n\t * Factory for creating new table schema without specifying row or column schema.\n\t * @internal\n\t */\n\texport function createTable<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t>(\n\t\tinputSchemaFactory: SchemaFactoryAlpha<TInputScope>,\n\t\t_cellSchema: TCell,\n\t): ReturnType<typeof createTableInternal<TInputScope, TCell>>;\n\t/**\n\t * Factory for creating new table schema without specifying row schema\n\t * @internal\n\t */\n\texport function createTable<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t\tconst TColumn extends ColumnSchemaBase<TInputScope, ImplicitAllowedTypes>,\n\t>(\n\t\tinputSchemaFactory: SchemaFactoryAlpha<TInputScope>,\n\t\t_cellSchema: TCell,\n\t\tcolumnSchema: TColumn,\n\t): ReturnType<typeof createTableInternal<TInputScope, TCell, TColumn>>;\n\t/**\n\t * Factory for creating new table schema.\n\t * @internal\n\t */\n\texport function createTable<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t\tconst TColumn extends ColumnSchemaBase<TInputScope, ImplicitAllowedTypes>,\n\t\tconst TRow extends RowSchemaBase<TInputScope, TCell, ImplicitAllowedTypes>,\n\t>(\n\t\tinputSchemaFactory: SchemaFactoryAlpha<TInputScope>,\n\t\t_cellSchema: TCell,\n\t\tcolumnSchema: TColumn,\n\t\trowSchema: TRow,\n\t): ReturnType<typeof createTableInternal<TInputScope, TCell, TColumn, TRow>>;\n\t/** `createTable` implementation */\n\texport function createTable<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t\tconst TColumn extends ColumnSchemaBase<TInputScope, ImplicitAllowedTypes>,\n\t\tconst TRow extends RowSchemaBase<TInputScope, TCell, ImplicitAllowedTypes>,\n\t>(\n\t\tinputSchemaFactory: SchemaFactoryAlpha<TInputScope>,\n\t\t_cellSchema: TCell,\n\t\tcolumnSchema?: TColumn,\n\t\trowSchema?: TRow,\n\t): TreeNodeSchema {\n\t\tconst column = columnSchema ?? createColumn(inputSchemaFactory, inputSchemaFactory.null);\n\t\treturn createTableInternal(\n\t\t\tinputSchemaFactory,\n\t\t\t_cellSchema,\n\t\t\tcolumn as TColumn,\n\t\t\trowSchema ??\n\t\t\t\t(createRow(inputSchemaFactory, _cellSchema, inputSchemaFactory.null) as TRow),\n\t\t);\n\t}\n\n\t/**\n\t * Factory for creating new table schema.\n\t * @system @internal\n\t */\n\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify\n\texport function createTableInternal<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t\tconst TColumn extends ColumnSchemaBase<\n\t\t\tTInputScope,\n\t\t\tImplicitAllowedTypes\n\t\t> = ColumnSchemaBase<TInputScope, ImplicitAllowedTypes>,\n\t\tconst TRow extends RowSchemaBase<TInputScope, TCell, ImplicitAllowedTypes> = RowSchemaBase<\n\t\t\tTInputScope,\n\t\t\tTCell,\n\t\t\tImplicitAllowedTypes\n\t\t>,\n\t>(\n\t\tinputSchemaFactory: SchemaFactoryAlpha<TInputScope>,\n\t\t_cellSchema: TCell,\n\t\tcolumnSchema: TColumn,\n\t\trowSchema: TRow,\n\t) {\n\t\tconst schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);\n\t\ttype Scope = ScopedSchemaName<TInputScope, typeof tableSchemaFactorySubScope>;\n\n\t\ttype CellValueType = TreeNodeFromImplicitAllowedTypes<TCell>;\n\t\ttype CellInsertableType = InsertableTreeNodeFromImplicitAllowedTypes<TCell>;\n\n\t\ttype ColumnValueType = TreeNodeFromImplicitAllowedTypes<TColumn>;\n\t\ttype ColumnInsertableType = InsertableTreeNodeFromImplicitAllowedTypes<TColumn>;\n\n\t\ttype RowValueType = TreeNodeFromImplicitAllowedTypes<TRow>;\n\t\ttype RowInsertableType = InsertableTreeNodeFromImplicitAllowedTypes<TRow>;\n\n\t\t/**\n\t\t * {@link Table} fields.\n\t\t * @remarks Extracted for re-use in returned type signature defined later in this function.\n\t\t * The implicit typing is intentional.\n\t\t */\n\t\tconst tableFields = {\n\t\t\trows: schemaFactory.array(\"Table.rows\", rowSchema),\n\t\t\tcolumns: schemaFactory.array(\"Table.columns\", columnSchema),\n\t\t} as const satisfies Record<string, ImplicitFieldSchema>;\n\n\t\t/**\n\t\t * The Table schema\n\t\t */\n\t\tclass Table\n\t\t\textends schemaFactory.object(\"Table\", tableFields)\n\t\t\timplements ITable<TCell, TColumn, TRow>\n\t\t{\n\t\t\tpublic getColumn(id: string): ColumnValueType | undefined {\n\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the casts.\n\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\treturn this.columns.find((column) => (column as ColumnValueType).id === id) as\n\t\t\t\t\t| ColumnValueType\n\t\t\t\t\t| undefined;\n\t\t\t}\n\n\t\t\tpublic getRow(id: string): RowValueType | undefined {\n\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the casts.\n\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\treturn this.rows.find((_row) => (_row as RowValueType).id === id) as\n\t\t\t\t\t| RowValueType\n\t\t\t\t\t| undefined;\n\t\t\t}\n\n\t\t\tpublic getCell(key: CellKey): CellValueType | undefined {\n\t\t\t\tconst { columnId, rowId } = key;\n\t\t\t\tconst row = this.getRow(rowId);\n\t\t\t\tif (row !== undefined) {\n\t\t\t\t\tconst column = this.getColumn(columnId);\n\t\t\t\t\tif (column !== undefined) {\n\t\t\t\t\t\treturn row.getCell(column.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If the cell does not exist return undefined\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tpublic insertColumn({\n\t\t\t\tcolumn,\n\t\t\t\tindex,\n\t\t\t}: InsertColumnParameters<ColumnInsertableType>): ColumnValueType {\n\t\t\t\tif (index === undefined) {\n\t\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the cast.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tthis.columns.insertAtEnd(column as any);\n\t\t\t\t} else {\n\t\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the cast.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tthis.columns.insertAt(index, column as any);\n\t\t\t\t}\n\n\t\t\t\t// Inserting the input node into the tree hydrates it, making it usable as a node.\n\t\t\t\treturn column as ColumnValueType;\n\t\t\t}\n\n\t\t\tpublic insertRows({\n\t\t\t\tindex,\n\t\t\t\trows,\n\t\t\t}: InsertRowsParameters<RowInsertableType>): RowValueType[] {\n\t\t\t\tif (index === undefined) {\n\t\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the cast.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tthis.rows.insertAtEnd(TreeArrayNode.spread(rows) as any);\n\t\t\t\t} else {\n\t\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the cast.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tthis.rows.insertAt(index, TreeArrayNode.spread(rows) as any);\n\t\t\t\t}\n\n\t\t\t\t// Inserting the input nodes into the tree hydrates them, making them usable as nodes.\n\t\t\t\treturn rows as unknown as RowValueType[];\n\t\t\t}\n\n\t\t\tpublic setCell({ key, cell }: SetCellParameters<CellInsertableType>): void {\n\t\t\t\tconst { columnId, rowId } = key;\n\t\t\t\tconst row = this.getRow(rowId);\n\t\t\t\tif (row !== undefined) {\n\t\t\t\t\tconst column = this.getColumn(columnId);\n\t\t\t\t\tif (column !== undefined) {\n\t\t\t\t\t\trow.setCell(column.id, cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic removeColumn(column: ColumnValueType): void {\n\t\t\t\tconst index = this.columns.indexOf(column);\n\t\t\t\t// If the column is not in the table, do nothing\n\t\t\t\tif (index === -1) return;\n\t\t\t\tthis.columns.removeAt(index);\n\t\t\t}\n\n\t\t\tpublic removeRows(rows: readonly RowValueType[]): void {\n\t\t\t\t// If there are no rows to remove, do nothing\n\t\t\t\tif (rows.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If there is only one row to remove, remove it\n\t\t\t\tif (rows.length === 1) {\n\t\t\t\t\tconst index = this.rows.indexOf(rows[0] ?? oob());\n\t\t\t\t\tthis.rows.removeAt(index);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// If there are multiple rows to remove, remove them in a transaction\n\t\t\t\t// This is to avoid the performance issues of deleting multiple rows at once\n\t\t\t\tTree.runTransaction(this, () => {\n\t\t\t\t\t// Iterate over the rows and remove them\n\t\t\t\t\tfor (const row of rows) {\n\t\t\t\t\t\tconst index = this.rows.indexOf(row);\n\t\t\t\t\t\tthis.rows.removeAt(index);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpublic removeAllRows(): void {\n\t\t\t\tthis.rows.removeRange();\n\t\t\t}\n\n\t\t\tpublic removeCell(key: CellKey): void {\n\t\t\t\tconst { columnId, rowId } = key;\n\t\t\t\tconst row = this.getRow(rowId);\n\t\t\t\tif (row !== undefined) {\n\t\t\t\t\tconst column = this.getColumn(columnId);\n\t\t\t\t\tif (column !== undefined) {\n\t\t\t\t\t\trow.removeCell(column.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttype TableValueType = TreeNode &\n\t\t\tITable<TCell, TColumn, TRow> &\n\t\t\tWithType<ScopedSchemaName<Scope, \"Table\">>;\n\t\ttype TableInsertableType = InsertableObjectFromSchemaRecord<typeof tableFields>;\n\n\t\t// Returning SingletonSchema without a type conversion results in TypeScript generating something like `readonly \"__#124291@#brand\": unknown;`\n\t\t// for the private brand field of TreeNode.\n\t\t// This numeric id doesn't seem to be stable over incremental builds, and thus causes diffs in the API extractor reports.\n\t\t// This is avoided by doing this type conversion.\n\t\t// The conversion is done via assignment instead of `as` to get stronger type safety.\n\t\tconst TableSchemaType: TreeNodeSchemaClass<\n\t\t\t/* Name */ ScopedSchemaName<Scope, \"Table\">,\n\t\t\t/* Kind */ NodeKind.Object,\n\t\t\t/* TNode */ TableValueType,\n\t\t\t/* TInsertable */ object & TableInsertableType,\n\t\t\t/* ImplicitlyConstructable */ true,\n\t\t\t/* Info */ typeof tableFields\n\t\t> = Table;\n\n\t\t// Return the table schema\n\t\treturn TableSchemaType;\n\t}\n\n\t/**\n\t * Base row schema type.\n\t * @sealed @system @internal\n\t */\n\texport type TableSchemaBase<\n\t\tTScope extends string | undefined,\n\t\tTCell extends ImplicitAllowedTypes,\n\t\tTColumn extends ColumnSchemaBase<TScope, ImplicitAllowedTypes> = ColumnSchemaBase<\n\t\t\tTScope,\n\t\t\tImplicitAllowedTypes\n\t\t>,\n\t\tTRow extends RowSchemaBase<TScope, TCell, ImplicitAllowedTypes> = RowSchemaBase<\n\t\t\tTScope,\n\t\t\tTCell,\n\t\t\tImplicitAllowedTypes\n\t\t>,\n\t> = ReturnType<typeof createTable<TScope, TCell, TColumn, TRow>>;\n\n\t// #endregion\n}\n"]}
1
+ {"version":3,"file":"tableSchema.js","sourceRoot":"","sources":["../src/tableSchema.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { oob } from \"@fluidframework/core-utils/internal\";\n\nimport { Tree } from \"./shared-tree/index.js\";\nimport {\n\ttype FieldHasDefault,\n\ttype ImplicitAllowedTypes,\n\ttype ImplicitFieldSchema,\n\ttype InsertableObjectFromSchemaRecord,\n\ttype InsertableTreeNodeFromImplicitAllowedTypes,\n\ttype NodeKind,\n\ttype SchemaFactoryAlpha,\n\ttype ScopedSchemaName,\n\tTreeArrayNode,\n\ttype TreeNode,\n\ttype TreeNodeFromImplicitAllowedTypes,\n\ttype TreeNodeSchema,\n\ttype TreeNodeSchemaClass,\n\ttype WithType,\n\ttype TreeFieldFromImplicitField,\n\ttype InsertableTreeFieldFromImplicitField,\n\ttype InternalTreeNode,\n\ttype FieldSchema,\n\ttype FieldKind,\n\tSchemaFactory,\n\ttype ImplicitAnnotatedFieldSchema,\n\ttype UnannotateImplicitFieldSchema,\n} from \"./simple-tree/index.js\";\n\n// Future improvement TODOs (ideally to be done before promoting these APIs to `@alpha`):\n// - Record-like type parameters / input parameters?\n// - Omit `props` properties from Row and Column schemas when not provided?\n\nconst tableSchemaFactorySubScope = \"table\";\n\n/**\n * Not intended for use outside of this package.\n *\n * @privateRemarks\n * This namespace is a collection of internal system types relate to {@link TableSchema}.\n * This namespace should be strictly type-exported by the package.\n * All members should be tagged with `@system`.\n *\n * @system @internal\n */\nexport namespace System_TableSchema {\n\t/**\n\t * A base interface for factory input options which include an schema factory.\n\t * @remarks This interface should not be referenced directly.\n\t * @privateRemarks This interface primarily exists to provide a single home for property documentation.\n\t * @system @internal\n\t */\n\texport interface OptionsWithSchemaFactory<\n\t\tTScope extends string | undefined = string | undefined,\n\t> {\n\t\t/**\n\t\t * Schema factory with which the Column schema will be associated.\n\t\t * @remarks Can be used to associate the resulting schema with an existing {@link SchemaFactory.scope|scope}.\n\t\t */\n\t\treadonly schemaFactory: SchemaFactoryAlpha<TScope>;\n\t}\n\n\t/**\n\t * A base interface for factory input options which include the table cell schema.\n\t * @remarks This interface should not be referenced directly.\n\t * @privateRemarks This interface primarily exists to provide a single home for property documentation.\n\t * @system @internal\n\t */\n\texport interface OptionsWithCellSchema<\n\t\tTCellSchema extends ImplicitAllowedTypes = ImplicitAllowedTypes,\n\t> {\n\t\t/**\n\t\t * Schema for the table's cells.\n\t\t */\n\t\treadonly cell: TCellSchema;\n\t}\n\n\t// #region Column\n\n\t/**\n\t * Base options for creating table cow schema.\n\t * @remarks Includes parameters common to all column factory overloads.\n\t * @system @internal\n\t */\n\texport type CreateColumnOptionsBase<\n\t\tTInputScope extends string | undefined = string | undefined,\n\t> = OptionsWithSchemaFactory<TInputScope>;\n\n\t/**\n\t * Factory for creating new table column schema.\n\t * @system @internal\n\t */\n\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify\n\texport function createColumnInternal<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TPropsSchema extends ImplicitAnnotatedFieldSchema,\n\t>(inputSchemaFactory: SchemaFactoryAlpha<TInputScope>, propsSchema: TPropsSchema) {\n\t\tconst schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);\n\t\ttype Scope = ScopedSchemaName<TInputScope, typeof tableSchemaFactorySubScope>;\n\n\t\t// Note: `columnFields` is broken into two parts to work around a TypeScript bug\n\t\t// that results in broken `.d.ts` output.\n\t\t// See definition of `ColumnInsertableType` below.\n\t\tconst columnFieldsBuiltInParts = {\n\t\t\tid: schemaFactory.identifier,\n\t\t} as const;\n\t\tconst columnFieldsPropsPart = {\n\t\t\tprops: propsSchema,\n\t\t} as const;\n\n\t\t/**\n\t\t * {@link Column} fields.\n\t\t *\n\t\t * @remarks\n\t\t * Extracted for re-use in returned type signature defined later in this function.\n\t\t * The implicit typing is intentional.\n\t\t *\n\t\t * Note: ideally we would add a satisfies clause here to ensure that this satisfies\n\t\t * `Record<string, ImplicitFieldSchema>`, but doing so causes TypeScript to prematurely and incorrectly evaluate the type of `propsSchema`.\n\t\t * Likely related to the following issue: https://github.com/microsoft/TypeScript/issues/52394\n\t\t */\n\t\tconst columnFields = {\n\t\t\t...columnFieldsBuiltInParts,\n\t\t\t...columnFieldsPropsPart,\n\t\t} as const; // satisfies Record<string, ImplicitFieldSchema>;\n\n\t\t/**\n\t\t * A column in a table.\n\t\t */\n\t\tclass Column\n\t\t\textends schemaFactory.objectAlpha(\"Column\", columnFields, {\n\t\t\t\t// Will make it easier to evolve this schema in the future.\n\t\t\t\tallowUnknownOptionalFields: true,\n\t\t\t})\n\t\t\timplements TableSchema.IColumn<TPropsSchema> {}\n\n\t\ttype ColumnValueType = TreeNode &\n\t\t\tTableSchema.IColumn<TPropsSchema> &\n\t\t\tWithType<ScopedSchemaName<Scope, \"Column\">>;\n\n\t\t// Note: ideally this type would just leverage `InsertableObjectFromSchemaRecord<typeof columnFields>`,\n\t\t// but that results in broken `.d.ts` output due to a TypeScript bug.\n\t\t// See: https://github.com/microsoft/TypeScript/issues/58688.\n\t\t// Instead we extract and inline the typing of the \"props\" field here, which seems to sufficiently work around the issue.\n\t\t// type ColumnInsertableType = InsertableObjectFromSchemaRecord<typeof columnFields>;\n\t\ttype ColumnInsertableType = InsertableObjectFromSchemaRecord<\n\t\t\ttypeof columnFieldsBuiltInParts\n\t\t> &\n\t\t\t(FieldHasDefault<UnannotateImplicitFieldSchema<TPropsSchema>> extends true\n\t\t\t\t? // Note: The docs on the below properties are copied from `IRow.props`' docs to ensure that the\n\t\t\t\t\t// documentation appears in the data insertion scenario.\n\t\t\t\t\t// The contents are duplicated instead of using `@inheritdoc`, as intellisense does not correctly\n\t\t\t\t\t// support `@inheritDoc`.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/31267\n\t\t\t\t\t{\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * The column's properties.\n\t\t\t\t\t\t * @remarks This is a user-defined schema that can be used to store additional information about the column.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tprops?: InsertableTreeFieldFromImplicitField<\n\t\t\t\t\t\t\tUnannotateImplicitFieldSchema<TPropsSchema>\n\t\t\t\t\t\t>;\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * The column's properties.\n\t\t\t\t\t\t * @remarks This is a user-defined schema that can be used to store additional information about the column.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tprops: InsertableTreeFieldFromImplicitField<\n\t\t\t\t\t\t\tUnannotateImplicitFieldSchema<TPropsSchema>\n\t\t\t\t\t\t>;\n\t\t\t\t\t});\n\n\t\t// Modified version of `Column` that ensures the constructor (and `createFromInsertable`) are\n\t\t// typed correctly in terms of our insertable type.\n\t\t// This lets us be selective in our type-cast for the value returned from this function,\n\t\t// preserving as much type-safety as we reasonably can.\n\t\ttype ColumnSchemaModifiedType = Omit<\n\t\t\t// Use mapped type to omit the constructor\n\t\t\t{\n\t\t\t\t[Property in keyof typeof Column]: (typeof Column)[Property];\n\t\t\t},\n\t\t\t\"createFromInsertable\"\n\t\t> &\n\t\t\t(new (\n\t\t\t\tparameters: InternalTreeNode | ColumnInsertableType,\n\t\t\t) => Column) & {\n\t\t\t\tcreateFromInsertable(parameters: ColumnInsertableType): Column;\n\t\t\t};\n\n\t\t// Returning SingletonSchema without a type conversion results in TypeScript generating something like `readonly \"__#124291@#brand\": unknown;`\n\t\t// for the private brand field of TreeNode.\n\t\t// This numeric id doesn't seem to be stable over incremental builds, and thus causes diffs in the API extractor reports.\n\t\t// This is avoided by doing this type conversion.\n\t\t// The conversion is done via assignment instead of `as` to get stronger type safety.\n\t\tconst ColumnSchemaType: TreeNodeSchemaClass<\n\t\t\t/* Name */ ScopedSchemaName<Scope, \"Column\">,\n\t\t\t/* Kind */ NodeKind.Object,\n\t\t\t/* TNode */ ColumnValueType,\n\t\t\t/* TInsertable */ object & ColumnInsertableType,\n\t\t\t/* ImplicitlyConstructable */ true,\n\t\t\t/* Info */ typeof columnFields\n\t\t> = Column as ColumnSchemaModifiedType;\n\n\t\treturn ColumnSchemaType;\n\t}\n\n\t/**\n\t * Base column schema type.\n\t * @sealed @system @internal\n\t */\n\texport type ColumnSchemaBase<\n\t\tTScope extends string | undefined = string | undefined,\n\t\tTPropsSchema extends ImplicitFieldSchema = ImplicitFieldSchema,\n\t> = ReturnType<typeof TableSchema.createColumn<TScope, TPropsSchema>>;\n\n\t// #endregion\n\n\t// #region Row\n\n\t/**\n\t * Base options for creating table row schema.\n\t * @remarks Includes parameters common to all row factory overloads.\n\t * @system @internal\n\t */\n\texport type CreateRowOptionsBase<\n\t\tTScope extends string | undefined = string | undefined,\n\t\tTCell extends ImplicitAllowedTypes = ImplicitAllowedTypes,\n\t> = OptionsWithSchemaFactory<TScope> & OptionsWithCellSchema<TCell>;\n\n\t/**\n\t * Factory for creating new table row schema.\n\t *\n\t * @sealed @internal\n\t */\n\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify\n\texport function createRowInternal<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TCellSchema extends ImplicitAllowedTypes,\n\t\tconst TPropsSchema extends ImplicitFieldSchema,\n\t>(\n\t\tinputSchemaFactory: SchemaFactoryAlpha<TInputScope>,\n\t\tcellSchema: TCellSchema,\n\t\tpropsSchema: TPropsSchema,\n\t) {\n\t\tconst schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);\n\t\ttype Scope = ScopedSchemaName<TInputScope, typeof tableSchemaFactorySubScope>;\n\n\t\ttype CellValueType = TreeNodeFromImplicitAllowedTypes<TCellSchema>;\n\t\ttype CellInsertableType = InsertableTreeNodeFromImplicitAllowedTypes<TCellSchema>;\n\n\t\t// Note: `rowFields` is broken into two parts to work around a TypeScript bug\n\t\t// that results in broken `.d.ts` output.\n\t\t// See definition of `RowInsertableType` below.\n\t\tconst rowFieldsBuiltInParts = {\n\t\t\tid: schemaFactory.identifier,\n\t\t\tcells: schemaFactory.required(schemaFactory.map(\"Row.cells\", cellSchema), {\n\t\t\t\tmetadata: {\n\t\t\t\t\tdescription: \"The cells of the table row, keyed by column ID.\",\n\t\t\t\t},\n\t\t\t}),\n\t\t} as const;\n\t\tconst rowFieldsPropsPart = {\n\t\t\tprops: propsSchema,\n\t\t} as const;\n\n\t\t/**\n\t\t * {@link Row} fields.\n\t\t * @remarks Extracted for re-use in returned type signature defined later in this function.\n\t\t * The implicit typing is intentional.\n\t\t * Note: ideally we would add a satisfies clause here to ensure that this satisfies\n\t\t * `Record<string, ImplicitFieldSchema>`, but doing so causes TypeScript to prematurely and incorrectly evaluate the type of `propsSchema`.\n\t\t * Likely related to the following issue: https://github.com/microsoft/TypeScript/issues/52394\n\t\t */\n\t\tconst rowFields = {\n\t\t\t...rowFieldsBuiltInParts,\n\t\t\t...rowFieldsPropsPart,\n\t\t} as const; // satisfies Record<string, ImplicitFieldSchema>;\n\n\t\t/**\n\t\t * The Row schema - this is a map of Cells where the key is the column id\n\t\t */\n\t\tclass Row\n\t\t\textends schemaFactory.objectAlpha(\"Row\", rowFields, {\n\t\t\t\t// Will make it easier to evolve this schema in the future.\n\t\t\t\tallowUnknownOptionalFields: true,\n\t\t\t})\n\t\t\timplements TableSchema.IRow<TCellSchema, TPropsSchema>\n\t\t{\n\t\t\tpublic getCell(columnOrId: TableSchema.IColumn | string): CellValueType | undefined {\n\t\t\t\tconst columnId = typeof columnOrId === \"string\" ? columnOrId : columnOrId.id;\n\t\t\t\treturn this.cells.get(columnId) as CellValueType | undefined;\n\t\t\t}\n\n\t\t\tpublic setCell(\n\t\t\t\tcolumnOrId: TableSchema.IColumn | string,\n\t\t\t\tvalue: CellInsertableType | undefined,\n\t\t\t): void {\n\t\t\t\tconst columnId = typeof columnOrId === \"string\" ? columnOrId : columnOrId.id;\n\t\t\t\tthis.cells.set(columnId, value);\n\t\t\t}\n\n\t\t\tpublic removeCell(columnOrId: TableSchema.IColumn | string): void {\n\t\t\t\tconst columnId = typeof columnOrId === \"string\" ? columnOrId : columnOrId.id;\n\t\t\t\tif (!this.cells.has(columnId)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.cells.delete(columnId);\n\t\t\t}\n\t\t}\n\n\t\ttype RowValueType = TreeNode &\n\t\t\tTableSchema.IRow<TCellSchema, TPropsSchema> &\n\t\t\tWithType<ScopedSchemaName<Scope, \"Row\">>;\n\n\t\t// Note: ideally this type would just leverage `InsertableObjectFromSchemaRecord<typeof rowFields>`,\n\t\t// but that results in broken `.d.ts` output due to a TypeScript bug.\n\t\t// See: https://github.com/microsoft/TypeScript/issues/58688.\n\t\t// Instead we extract and inline the typing of the \"props\" field here, which seems to sufficiently work around\n\t\t// the issue.\n\t\t// type RowInsertableType = InsertableObjectFromSchemaRecord<typeof rowFields>;\n\t\ttype RowInsertableType = InsertableObjectFromSchemaRecord<typeof rowFieldsBuiltInParts> &\n\t\t\t(FieldHasDefault<TPropsSchema> extends true\n\t\t\t\t? // Note: The docs on the below properties are copied from `IRow.props`' docs to ensure that the\n\t\t\t\t\t// documentation appears in the data insertion scenario.\n\t\t\t\t\t// The contents are duplicated instead of using `@inheritdoc`, as intellisense does not correctly\n\t\t\t\t\t// support `@inheritDoc`.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/31267\n\t\t\t\t\t{\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * The row's properties.\n\t\t\t\t\t\t * @remarks This is a user-defined schema that can be used to store additional information\n\t\t\t\t\t\t * about the row.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tprops?: InsertableTreeFieldFromImplicitField<TPropsSchema>;\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * The row's properties.\n\t\t\t\t\t\t * @remarks This is a user-defined schema that can be used to store additional information\n\t\t\t\t\t\t * about the row.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tprops: InsertableTreeFieldFromImplicitField<TPropsSchema>;\n\t\t\t\t\t});\n\n\t\t// Modified version of `Column` that ensures the constructor (and `createFromInsertable`) are\n\t\t// typed correctly in terms of our insertable type.\n\t\t// This lets us be selective in our type-cast for the value returned from this function,\n\t\t// preserving as much type-safety as we reasonably can.\n\t\ttype RowSchemaModifiedType = Omit<\n\t\t\t// Use mapped type to omit the constructor\n\t\t\t{\n\t\t\t\t[Property in keyof typeof Row]: (typeof Row)[Property];\n\t\t\t},\n\t\t\t\"createFromInsertable\"\n\t\t> &\n\t\t\t(new (\n\t\t\t\tparameters: InternalTreeNode | RowInsertableType,\n\t\t\t) => Row) & {\n\t\t\t\tcreateFromInsertable(parameters: RowInsertableType): Row;\n\t\t\t};\n\n\t\t// Returning SingletonSchema without a type conversion results in TypeScript generating something like `readonly \"__#124291@#brand\": unknown;`\n\t\t// for the private brand field of TreeNode.\n\t\t// This numeric id doesn't seem to be stable over incremental builds, and thus causes diffs in the API extractor reports.\n\t\t// This is avoided by doing this type conversion.\n\t\t// The conversion is done via assignment instead of `as` to get stronger type safety.\n\t\tconst RowSchemaType: TreeNodeSchemaClass<\n\t\t\t/* Name */ ScopedSchemaName<Scope, \"Row\">,\n\t\t\t/* Kind */ NodeKind.Object,\n\t\t\t/* TNode */ RowValueType,\n\t\t\t/* TInsertable */ object & RowInsertableType,\n\t\t\t/* ImplicitlyConstructable */ true,\n\t\t\t/* Info */ typeof rowFields\n\t\t> = Row as RowSchemaModifiedType;\n\n\t\treturn RowSchemaType;\n\t}\n\n\t/**\n\t * Base row schema type.\n\t * @sealed @system @internal\n\t */\n\texport type RowSchemaBase<\n\t\tTScope extends string | undefined = string | undefined,\n\t\tTCellSchema extends ImplicitAllowedTypes = ImplicitAllowedTypes,\n\t\tTPropsSchema extends ImplicitFieldSchema = ImplicitFieldSchema,\n\t> = ReturnType<typeof TableSchema.createRow<TScope, TCellSchema, TPropsSchema>>;\n\n\t// #endregion\n\n\t// #region Table\n\n\t/**\n\t * Base options for creating table schema.\n\t * @remarks Includes parameters common to all table factory overloads.\n\t * @system @internal\n\t */\n\texport type TableFactoryOptionsBase<\n\t\tTScope extends string | undefined = string | undefined,\n\t\tTCell extends ImplicitAllowedTypes = ImplicitAllowedTypes,\n\t> = OptionsWithSchemaFactory<TScope> & OptionsWithCellSchema<TCell>;\n\n\t/**\n\t * Factory for creating new table schema.\n\t * @system @internal\n\t */\n\t// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- Return type is too complex to be reasonable to specify\n\texport function createTableInternal<\n\t\tconst TInputScope extends string | undefined,\n\t\tconst TCellSchema extends ImplicitAllowedTypes,\n\t\tconst TColumnSchema extends ColumnSchemaBase<TInputScope> = ColumnSchemaBase<TInputScope>,\n\t\tconst TRowSchema extends RowSchemaBase<TInputScope, TCellSchema> = RowSchemaBase<\n\t\t\tTInputScope,\n\t\t\tTCellSchema\n\t\t>,\n\t>(\n\t\tinputSchemaFactory: SchemaFactoryAlpha<TInputScope>,\n\t\t_cellSchema: TCellSchema,\n\t\tcolumnSchema: TColumnSchema,\n\t\trowSchema: TRowSchema,\n\t) {\n\t\tconst schemaFactory = inputSchemaFactory.scopedFactory(tableSchemaFactorySubScope);\n\t\ttype Scope = ScopedSchemaName<TInputScope, typeof tableSchemaFactorySubScope>;\n\n\t\ttype CellValueType = TreeNodeFromImplicitAllowedTypes<TCellSchema>;\n\t\ttype CellInsertableType = InsertableTreeNodeFromImplicitAllowedTypes<TCellSchema>;\n\n\t\ttype ColumnValueType = TreeNodeFromImplicitAllowedTypes<TColumnSchema>;\n\t\ttype ColumnInsertableType = InsertableTreeNodeFromImplicitAllowedTypes<TColumnSchema>;\n\n\t\ttype RowValueType = TreeNodeFromImplicitAllowedTypes<TRowSchema>;\n\t\ttype RowInsertableType = InsertableTreeNodeFromImplicitAllowedTypes<TRowSchema>;\n\n\t\t/**\n\t\t * {@link Table} fields.\n\t\t * @remarks Extracted for re-use in returned type signature defined later in this function.\n\t\t * The implicit typing is intentional.\n\t\t */\n\t\tconst tableFields = {\n\t\t\trows: schemaFactory.array(\"Table.rows\", rowSchema),\n\t\t\tcolumns: schemaFactory.array(\"Table.columns\", columnSchema),\n\t\t} as const satisfies Record<string, ImplicitFieldSchema>;\n\n\t\t/**\n\t\t * The Table schema\n\t\t */\n\t\tclass Table\n\t\t\textends schemaFactory.objectAlpha(\"Table\", tableFields, {\n\t\t\t\t// Will make it easier to evolve this schema in the future.\n\t\t\t\tallowUnknownOptionalFields: true,\n\t\t\t})\n\t\t\timplements TableSchema.ITable<TCellSchema, TColumnSchema, TRowSchema>\n\t\t{\n\t\t\tpublic getColumn(id: string): ColumnValueType | undefined {\n\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the casts.\n\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\treturn this.columns.find((column) => (column as ColumnValueType).id === id) as\n\t\t\t\t\t| ColumnValueType\n\t\t\t\t\t| undefined;\n\t\t\t}\n\n\t\t\tpublic getRow(id: string): RowValueType | undefined {\n\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the casts.\n\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\treturn this.rows.find((_row) => (_row as RowValueType).id === id) as\n\t\t\t\t\t| RowValueType\n\t\t\t\t\t| undefined;\n\t\t\t}\n\n\t\t\tpublic getCell(key: TableSchema.CellKey): CellValueType | undefined {\n\t\t\t\tconst { columnId, rowId } = key;\n\t\t\t\tconst row = this.getRow(rowId);\n\t\t\t\tif (row !== undefined) {\n\t\t\t\t\tconst column = this.getColumn(columnId);\n\t\t\t\t\tif (column !== undefined) {\n\t\t\t\t\t\treturn row.getCell(column.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If the cell does not exist return undefined\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tpublic insertColumn({\n\t\t\t\tcolumn,\n\t\t\t\tindex,\n\t\t\t}: TableSchema.InsertColumnParameters<ColumnInsertableType>): ColumnValueType {\n\t\t\t\tif (index === undefined) {\n\t\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the cast.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tthis.columns.insertAtEnd(column as any);\n\t\t\t\t} else {\n\t\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the cast.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tthis.columns.insertAt(index, column as any);\n\t\t\t\t}\n\n\t\t\t\t// Inserting the input node into the tree hydrates it, making it usable as a node.\n\t\t\t\treturn column as ColumnValueType;\n\t\t\t}\n\n\t\t\tpublic insertRows({\n\t\t\t\tindex,\n\t\t\t\trows,\n\t\t\t}: TableSchema.InsertRowsParameters<RowInsertableType>): RowValueType[] {\n\t\t\t\tif (index === undefined) {\n\t\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the cast.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tthis.rows.insertAtEnd(TreeArrayNode.spread(rows) as any);\n\t\t\t\t} else {\n\t\t\t\t\t// TypeScript is unable to narrow the types correctly here, hence the cast.\n\t\t\t\t\t// See: https://github.com/microsoft/TypeScript/issues/52144\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\tthis.rows.insertAt(index, TreeArrayNode.spread(rows) as any);\n\t\t\t\t}\n\n\t\t\t\t// Inserting the input nodes into the tree hydrates them, making them usable as nodes.\n\t\t\t\treturn rows as unknown as RowValueType[];\n\t\t\t}\n\n\t\t\tpublic setCell({ key, cell }: TableSchema.SetCellParameters<CellInsertableType>): void {\n\t\t\t\tconst { columnId, rowId } = key;\n\t\t\t\tconst row = this.getRow(rowId);\n\t\t\t\tif (row !== undefined) {\n\t\t\t\t\tconst column = this.getColumn(columnId);\n\t\t\t\t\tif (column !== undefined) {\n\t\t\t\t\t\trow.setCell(column.id, cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpublic removeColumn(column: ColumnValueType): void {\n\t\t\t\tconst index = this.columns.indexOf(column);\n\t\t\t\t// If the column is not in the table, do nothing\n\t\t\t\tif (index === -1) return;\n\t\t\t\tthis.columns.removeAt(index);\n\t\t\t}\n\n\t\t\tpublic removeRows(rows: readonly RowValueType[]): void {\n\t\t\t\t// If there are no rows to remove, do nothing\n\t\t\t\tif (rows.length === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If there is only one row to remove, remove it\n\t\t\t\tif (rows.length === 1) {\n\t\t\t\t\tconst index = this.rows.indexOf(rows[0] ?? oob());\n\t\t\t\t\tthis.rows.removeAt(index);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// If there are multiple rows to remove, remove them in a transaction\n\t\t\t\t// This is to avoid the performance issues of deleting multiple rows at once\n\t\t\t\tTree.runTransaction(this, () => {\n\t\t\t\t\t// Iterate over the rows and remove them\n\t\t\t\t\tfor (const row of rows) {\n\t\t\t\t\t\tconst index = this.rows.indexOf(row);\n\t\t\t\t\t\tthis.rows.removeAt(index);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpublic removeAllRows(): void {\n\t\t\t\tthis.rows.removeRange();\n\t\t\t}\n\n\t\t\tpublic removeCell(key: TableSchema.CellKey): void {\n\t\t\t\tconst { columnId, rowId } = key;\n\t\t\t\tconst row = this.getRow(rowId);\n\t\t\t\tif (row !== undefined) {\n\t\t\t\t\tconst column = this.getColumn(columnId);\n\t\t\t\t\tif (column !== undefined) {\n\t\t\t\t\t\trow.removeCell(column.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttype TableValueType = TreeNode &\n\t\t\tTableSchema.ITable<TCellSchema, TColumnSchema, TRowSchema> &\n\t\t\tWithType<ScopedSchemaName<Scope, \"Table\">>;\n\t\ttype TableInsertableType = InsertableObjectFromSchemaRecord<typeof tableFields>;\n\n\t\t// Returning SingletonSchema without a type conversion results in TypeScript generating something like `readonly \"__#124291@#brand\": unknown;`\n\t\t// for the private brand field of TreeNode.\n\t\t// This numeric id doesn't seem to be stable over incremental builds, and thus causes diffs in the API extractor reports.\n\t\t// This is avoided by doing this type conversion.\n\t\t// The conversion is done via assignment instead of `as` to get stronger type safety.\n\t\tconst TableSchemaType: TreeNodeSchemaClass<\n\t\t\t/* Name */ ScopedSchemaName<Scope, \"Table\">,\n\t\t\t/* Kind */ NodeKind.Object,\n\t\t\t/* TNode */ TableValueType,\n\t\t\t/* TInsertable */ object & TableInsertableType,\n\t\t\t/* ImplicitlyConstructable */ true,\n\t\t\t/* Info */ typeof tableFields\n\t\t> = Table;\n\n\t\t// Return the table schema\n\t\treturn TableSchemaType;\n\t}\n\n\t/**\n\t * Base row schema type.\n\t * @sealed @system @internal\n\t */\n\texport type TableSchemaBase<\n\t\tTScope extends string | undefined,\n\t\tTCell extends ImplicitAllowedTypes,\n\t\tTColumn extends ColumnSchemaBase<TScope> = ColumnSchemaBase<TScope>,\n\t\tTRow extends RowSchemaBase<TScope, TCell, ImplicitAllowedTypes> = RowSchemaBase<\n\t\t\tTScope,\n\t\t\tTCell,\n\t\t\tImplicitAllowedTypes\n\t\t>,\n\t> = ReturnType<typeof TableSchema.createTable<TScope, TCell, TColumn, TRow>>;\n\n\t// #endregion\n}\n\n/**\n * Contains types and factories for creating schema to represent dynamic tabular data.\n * @privateRemarks TODO: document in more detail and add `@example`s.\n * @internal\n */\nexport namespace TableSchema {\n\t// #region Column\n\n\t/**\n\t * A column in a table.\n\t * @remarks Implemented by the schema class returned from {@link TableSchema.(createColumn:2)}.\n\t * @sealed @internal\n\t */\n\texport interface IColumn<\n\t\tTProps extends ImplicitAnnotatedFieldSchema = ImplicitAnnotatedFieldSchema,\n\t> {\n\t\t/**\n\t\t * The unique identifier of the column.\n\t\t * @remarks Uniquely identifies the node within the entire tree, not just the table.\n\t\t */\n\t\treadonly id: string;\n\n\t\t/**\n\t\t * The column's properties.\n\t\t * @remarks This is a user-defined schema that can be used to store additional information about the column.\n\t\t * @privateRemarks\n\t\t * Note: these docs are duplicated on the inline type definitions in {@link createColumn}.\n\t\t * If you update the docs here, please also update the inline type definitions.\n\t\t */\n\t\tget props(): TreeFieldFromImplicitField<UnannotateImplicitFieldSchema<TProps>> | undefined;\n\t\tset props(value: InsertableTreeFieldFromImplicitField<\n\t\t\tUnannotateImplicitFieldSchema<TProps>\n\t\t>);\n\t}\n\n\t/**\n\t * Factory for creating new table column schema.\n\t * @internal\n\t */\n\texport function createColumn<const TScope extends string | undefined>({\n\t\tschemaFactory,\n\t}: System_TableSchema.CreateColumnOptionsBase<TScope>): ReturnType<\n\t\ttypeof System_TableSchema.createColumnInternal<\n\t\t\tTScope,\n\t\t\tFieldSchema<FieldKind.Optional, typeof SchemaFactoryAlpha.null>\n\t\t>\n\t>;\n\t/**\n\t * Factory for creating new table column schema.\n\t * @internal\n\t */\n\texport function createColumn<\n\t\tconst TScope extends string | undefined,\n\t\tconst TProps extends ImplicitFieldSchema,\n\t>({\n\t\tschemaFactory,\n\t\tprops,\n\t}: System_TableSchema.CreateColumnOptionsBase<TScope> & {\n\t\t/**\n\t\t * Optional column properties.\n\t\t */\n\t\treadonly props: TProps;\n\t}): ReturnType<typeof System_TableSchema.createColumnInternal<TScope, TProps>>;\n\t/**\n\t * Overload implementation\n\t */\n\texport function createColumn({\n\t\tschemaFactory,\n\t\tprops = SchemaFactory.optional(SchemaFactory.null),\n\t}: System_TableSchema.CreateColumnOptionsBase & {\n\t\treadonly props?: ImplicitFieldSchema;\n\t}): TreeNodeSchema {\n\t\treturn System_TableSchema.createColumnInternal(schemaFactory, props);\n\t}\n\n\t// #endregion\n\n\t// #region Row\n\n\t/**\n\t * A row in a table.\n\t * @remarks Implemented by the schema class returned from {@link TableSchema.(createRow:2)}.\n\t * @sealed @internal\n\t */\n\texport interface IRow<\n\t\tTCell extends ImplicitAllowedTypes,\n\t\tTProps extends ImplicitAnnotatedFieldSchema = ImplicitAnnotatedFieldSchema,\n\t> {\n\t\t/**\n\t\t * The unique identifier of the row.\n\t\t * @remarks Uniquely identifies the node within the entire tree, not just the table.\n\t\t */\n\t\treadonly id: string;\n\n\t\t/**\n\t\t * Gets the cell in the specified column.\n\t\t * @returns The cell if it exists, otherwise undefined.\n\t\t */\n\t\tgetCell(column: IColumn): TreeNodeFromImplicitAllowedTypes<TCell> | undefined;\n\t\t/**\n\t\t * Gets the cell in the specified column, denoted by column ID.\n\t\t * @returns The cell if it exists, otherwise undefined.\n\t\t */\n\t\tgetCell(columnId: string): TreeNodeFromImplicitAllowedTypes<TCell> | undefined;\n\n\t\t/**\n\t\t * Sets the cell in the specified column.\n\t\t * @remarks To remove a cell, call {@link TableSchema.IRow.(removeCell:1)} instead.\n\t\t */\n\t\tsetCell(column: IColumn, value: InsertableTreeNodeFromImplicitAllowedTypes<TCell>): void;\n\t\t/**\n\t\t * Sets the cell in the specified column, denoted by column ID.\n\t\t * @remarks To remove a cell, call {@link TableSchema.IRow.(removeCell:2)} instead.\n\t\t */\n\t\tsetCell(columnId: string, value: InsertableTreeNodeFromImplicitAllowedTypes<TCell>): void;\n\n\t\t/**\n\t\t * Removes the cell in the specified column.\n\t\t * @privateRemarks TODO: return removed cell\n\t\t */\n\t\tremoveCell(column: IColumn): void;\n\t\t/**\n\t\t * Removes the cell in the specified column, denoted by column ID.\n\t\t * @privateRemarks TODO: return removed cell\n\t\t */\n\t\tremoveCell(columnId: string): void;\n\n\t\t/**\n\t\t * The row's properties.\n\t\t * @remarks This is a user-defined schema that can be used to store additional information about the row.\n\t\t * @privateRemarks\n\t\t * Note: these docs are duplicated on the inline type definitions in {@link createColumn}.\n\t\t * If you update the docs here, please also update the inline type definitions.\n\t\t */\n\t\tget props(): TreeFieldFromImplicitField<UnannotateImplicitFieldSchema<TProps>>;\n\t\tset props(value: InsertableTreeFieldFromImplicitField<\n\t\t\tUnannotateImplicitFieldSchema<TProps>\n\t\t>);\n\t}\n\n\t/**\n\t * Factory for creating new table column schema.\n\t * @internal\n\t */\n\texport function createRow<\n\t\tconst TScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t>({\n\t\tschemaFactory,\n\t\tcell,\n\t}: System_TableSchema.CreateRowOptionsBase<TScope, TCell>): ReturnType<\n\t\ttypeof System_TableSchema.createRowInternal<\n\t\t\tTScope,\n\t\t\tTCell,\n\t\t\tFieldSchema<FieldKind.Optional, typeof SchemaFactoryAlpha.null>\n\t\t>\n\t>;\n\t/**\n\t * Factory for creating new table column schema.\n\t * @internal\n\t */\n\texport function createRow<\n\t\tconst TScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t\tconst TProps extends ImplicitFieldSchema,\n\t>({\n\t\tschemaFactory,\n\t\tcell,\n\t\tprops,\n\t}: System_TableSchema.CreateRowOptionsBase<TScope, TCell> & {\n\t\t/**\n\t\t * Optional row properties.\n\t\t */\n\t\treadonly props: TProps;\n\t}): ReturnType<typeof System_TableSchema.createRowInternal<TScope, TCell, TProps>>;\n\t/**\n\t * Overload implementation\n\t */\n\texport function createRow({\n\t\tschemaFactory,\n\t\tcell,\n\t\tprops = SchemaFactory.optional(SchemaFactory.null),\n\t}: System_TableSchema.CreateRowOptionsBase & {\n\t\treadonly props?: ImplicitFieldSchema;\n\t}): TreeNodeSchema {\n\t\treturn System_TableSchema.createRowInternal(schemaFactory, cell, props);\n\t}\n\n\t// #endregion\n\n\t// #region Table\n\n\t/**\n\t * A key to uniquely identify a cell in a table.\n\t * @internal\n\t */\n\texport interface CellKey {\n\t\t/**\n\t\t * {@link TableSchema.IColumn.id} of the containing {@link TableSchema.IColumn}.\n\t\t */\n\t\treadonly columnId: string;\n\n\t\t/**\n\t\t * {@link TableSchema.IRow.id} of the containing {@link TableSchema.IRow}.\n\t\t */\n\t\treadonly rowId: string;\n\t}\n\n\t/**\n\t * {@link TableSchema.ITable.insertColumn} parameters.\n\t * @internal\n\t */\n\texport interface InsertColumnParameters<TInsertableColumn> {\n\t\t/**\n\t\t * The index at which to insert the new column.\n\t\t * @remarks If not provided, the column will be appended to the end of the table.\n\t\t */\n\t\treadonly index?: number | undefined;\n\n\t\t/**\n\t\t * The column to insert.\n\t\t */\n\t\treadonly column: TInsertableColumn;\n\t}\n\n\t/**\n\t * {@link TableSchema.ITable.insertRows} parameters.\n\t * @internal\n\t */\n\texport interface InsertRowsParameters<TInsertableRow> {\n\t\t/**\n\t\t * The index at which to insert the new rows.\n\t\t * @remarks If not provided, the rows will be appended to the end of the table.\n\t\t */\n\t\treadonly index?: number | undefined;\n\n\t\t/**\n\t\t * The rows to insert.\n\t\t */\n\t\treadonly rows: TInsertableRow[];\n\t}\n\n\t/**\n\t * {@link TableSchema.ITable.setCell} parameters.\n\t * @internal\n\t */\n\texport interface SetCellParameters<TInsertableCell> {\n\t\t/**\n\t\t * The key to uniquely identify a cell in a table.\n\t\t */\n\t\treadonly key: CellKey;\n\n\t\t/**\n\t\t * The cell to set.\n\t\t */\n\t\treadonly cell: TInsertableCell;\n\t}\n\n\t/**\n\t * A table.\n\t * @sealed @internal\n\t */\n\texport interface ITable<\n\t\tTCell extends ImplicitAllowedTypes,\n\t\tTColumn extends ImplicitAllowedTypes,\n\t\tTRow extends ImplicitAllowedTypes,\n\t> {\n\t\t/**\n\t\t * The table's columns.\n\t\t */\n\t\treadonly columns: TreeArrayNode<TColumn>;\n\n\t\t/**\n\t\t * The table's rows.\n\t\t */\n\t\treadonly rows: TreeArrayNode<TRow>;\n\n\t\t/**\n\t\t * Gets a table column by its {@link TableSchema.IRow.id}.\n\t\t */\n\t\tgetColumn(id: string): TreeNodeFromImplicitAllowedTypes<TColumn> | undefined;\n\n\t\t/**\n\t\t * Gets a table row by its {@link TableSchema.IRow.id}.\n\t\t */\n\t\tgetRow(id: string): TreeNodeFromImplicitAllowedTypes<TRow> | undefined;\n\n\t\t/**\n\t\t * Gets a cell in the table by column and row IDs.\n\t\t * @param key - A key that uniquely distinguishes a cell in the table, represented as a combination of the column ID and row ID.\n\t\t * @privateRemarks TODO: add overload that takes row and column nodes.\n\t\t */\n\t\tgetCell(key: CellKey): TreeNodeFromImplicitAllowedTypes<TCell> | undefined;\n\n\t\t/**\n\t\t * Inserts a column into the table.\n\t\t * @throws Throws an error if the column is already in the tree, or if the specified index is out of range.\n\t\t */\n\t\tinsertColumn(\n\t\t\tparams: InsertColumnParameters<InsertableTreeNodeFromImplicitAllowedTypes<TColumn>>,\n\t\t): TreeNodeFromImplicitAllowedTypes<TColumn>;\n\n\t\t/**\n\t\t * Inserts 0 or more rows into the table.\n\t\t * @throws Throws an error if any of the rows are already in the tree, or if the specified index is out of range.\n\t\t */\n\t\tinsertRows(\n\t\t\tparams: InsertRowsParameters<InsertableTreeNodeFromImplicitAllowedTypes<TRow>>,\n\t\t): TreeNodeFromImplicitAllowedTypes<TRow>[];\n\n\t\t/**\n\t\t * Sets the cell at the specified location in the table.\n\t\t * @remarks To remove a cell, call {@link TableSchema.ITable.removeCell} instead.\n\t\t * @privateRemarks TODO: add overload that takes column/row nodes?\n\t\t */\n\t\tsetCell(\n\t\t\tparams: SetCellParameters<InsertableTreeNodeFromImplicitAllowedTypes<TCell>>,\n\t\t): void;\n\n\t\t/**\n\t\t * Removes the specified column from the table.\n\t\t * @remarks Note: this does not remove any cells from the table's rows.\n\t\t * @privateRemarks\n\t\t * TODO:\n\t\t * - Policy for when the column is not in the table.\n\t\t * - Actually remove corresponding cells from table rows.\n\t\t */\n\t\tremoveColumn: (column: TreeNodeFromImplicitAllowedTypes<TColumn>) => void;\n\n\t\t/**\n\t\t * Removes 0 or more rows from the table.\n\t\t * @privateRemarks TODO: policy for when 1 or more rows are not in the table.\n\t\t */\n\t\tremoveRows: (rows: readonly TreeNodeFromImplicitAllowedTypes<TRow>[]) => void;\n\n\t\t/**\n\t\t * Removes all rows from the table.\n\t\t */\n\t\tremoveAllRows: () => void;\n\n\t\t/**\n\t\t * Removes the cell at the specified location in the table.\n\t\t * @privateRemarks TODO: add overload that takes column/row nodes?\n\t\t */\n\t\tremoveCell: (key: CellKey) => void;\n\t}\n\n\t/**\n\t * Factory for creating new table schema without specifying row or column schema.\n\t * @internal\n\t */\n\texport function createTable<\n\t\tconst TScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t>({\n\t\tschemaFactory,\n\t\tcell,\n\t}: System_TableSchema.TableFactoryOptionsBase<TScope, TCell>): ReturnType<\n\t\ttypeof System_TableSchema.createTableInternal<TScope, TCell>\n\t>;\n\t/**\n\t * Factory for creating new table schema without specifying row schema.\n\t * @internal\n\t */\n\texport function createTable<\n\t\tconst TScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t\tconst TColumn extends System_TableSchema.ColumnSchemaBase<TScope>,\n\t>({\n\t\tschemaFactory,\n\t\tcell,\n\t\tcolumn,\n\t}: System_TableSchema.TableFactoryOptionsBase<TScope, TCell> & {\n\t\treadonly column: TColumn;\n\t}): ReturnType<typeof System_TableSchema.createTableInternal<TScope, TCell, TColumn>>;\n\t/**\n\t * Factory for creating new table schema.\n\t * @internal\n\t */\n\texport function createTable<\n\t\tconst TScope extends string | undefined,\n\t\tconst TCell extends ImplicitAllowedTypes,\n\t\tconst TColumn extends System_TableSchema.ColumnSchemaBase<TScope>,\n\t\tconst TRow extends System_TableSchema.RowSchemaBase<TScope, TCell>,\n\t>({\n\t\tschemaFactory,\n\t\tcell,\n\t\tcolumn,\n\t\trow,\n\t}: System_TableSchema.TableFactoryOptionsBase<TScope, TCell> & {\n\t\treadonly column: TColumn;\n\t\treadonly row: TRow;\n\t}): ReturnType<typeof System_TableSchema.createTableInternal<TScope, TCell, TColumn, TRow>>;\n\t/**\n\t * Overload implementation\n\t */\n\texport function createTable({\n\t\tschemaFactory,\n\t\tcell,\n\t\tcolumn = createColumn({\n\t\t\tschemaFactory,\n\t\t}),\n\t\trow = createRow({\n\t\t\tschemaFactory,\n\t\t\tcell,\n\t\t}),\n\t}: System_TableSchema.TableFactoryOptionsBase & {\n\t\treadonly column?: System_TableSchema.ColumnSchemaBase;\n\t\treadonly row?: System_TableSchema.RowSchemaBase;\n\t}): TreeNodeSchema {\n\t\treturn System_TableSchema.createTableInternal(schemaFactory, cell, column, row);\n\t}\n\n\t// #endregion\n}\n"]}
@@ -109,7 +109,7 @@ export type RestrictiveStringRecord<T> = {
109
109
  * Returns `true` if T is a union and false if it is not.
110
110
  * @typeparam T - Type to test if it is a union.
111
111
  * @typeparam T2 - Do not specify: default value used as implementation detail.
112
- * @system @alpha
112
+ * @system @public
113
113
  */
114
114
  export type IsUnion<T, T2 = T> = T extends unknown ? [T2] extends [T] ? false : true : "error";
115
115
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../../src/util/typeUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA8EH,wIAAwI;AACxI,CAAC;IAwBA,qDAAqD;AACtD,CAAC;AA8FD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,kBAAkB,CAAI,KAAU;IAC/C,OAAO,KAAwB,CAAC;AACjC,CAAC;AAFD,gDAEC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Utilities for manipulating types.\n */\n\n/**\n * Return a type thats equivalent to the input, but with different IntelliSense.\n * This tends to convert unions and intersections into objects.\n * @system @public\n */\nexport type FlattenKeys<T> = [{ [Property in keyof T]: T[Property] }][_InlineTrick];\n\n/**\n * Use for trick to \"inline\" generic types.\n *\n * @remarks\n * The TypeScript compiler can be convinced to inline a generic type\n * (so the result of evaluating the generic type show up in IntelliSense and error messages instead of just the invocation of the generic type)\n * by creating an object with a field, and returning the type of that field.\n *\n * For example:\n * ```typescript\n * type MyGeneric<T1, T2> = {x: T1 extends [] ? T1 : T2 };\n * type MyGenericExpanded<T1, T2> = [{x: T1 extends [] ? T1 : T2 }][_InlineTrick]\n *\n * // Type is MyGeneric<5, string>\n * const foo: MyGeneric<5, string> = {x: \"x\"}\n * // Type is {x: \"x\"}\n * const foo2: MyGenericExpanded<5, string> = {x: \"x\"}\n * ```\n *\n * This constant is defined to provide a way to find this documentation from types which use this pattern,\n * and to locate types which use this pattern in case they need updating for compiler changes.\n * @system @public\n */\nexport type _InlineTrick = 0;\n\n/**\n * Use for trick to prevent self reference error `ts(2456)`.\n *\n * Prefix a type expression with `K extends _RecursiveTrick ? _RecursiveTrick : ` for some K to break the cycle.\n *\n * @remarks\n * The TypeScript compiler handles some cases of recursive types, but not others.\n * Sometimes adding an otherwise needless conditional can make a type compile.\n * Use this type in such cases.\n *\n *For example:\n * ```typescript\n * // The TypeScript compiler can't handle this case\n * type Broken<T> = FlattenKeys<\n *\t{\n * \t\t[K in keyof T]: 0;\n * \t} & {\n * \t\t[K in keyof T]: Broken<T[K]>;\n * \t}\n * >;\n *\n * // Adding `K extends _RecursiveTrick ? _RecursiveTrick :` makes it compile, and has no effect on the type produced.\n * type Works<T> = FlattenKeys<\n * \t{\n * \t\t[K in keyof T]: 0;\n * \t} & {\n * \t\t// Trick added here. Since `k` never extends `never`, the second conditional option is always taken,\n * \t\t// making this equivalent to the broken version, except this one compiles.\n * \t\t[K in keyof T]: K extends _RecursiveTrick ? _RecursiveTrick : Works<T[K]>;\n * \t}\n * >;\n * ```\n *\n * This trick appears to start working in TypeScript 4.1 and is confirmed to still work in 5.0.4.\n *\n * This constant is defined to provide a way to find this documentation from types which use this pattern,\n * and to locate types which use this pattern in case they need updating for compiler changes.\n */\nexport type _RecursiveTrick = never;\n\n// This block is kept here to ensure the above example behaves as documented, and can be copied into the example to update it as needed.\n{\n\t/* eslint-disable @typescript-eslint/no-unused-vars */\n\n\t// @ts-expect-error The TypeScript compiler can't handle this case\n\ttype Broken<T> = FlattenKeys<\n\t\t{\n\t\t\t[K in keyof T]: 0;\n\t\t} & {\n\t\t\t// @ts-expect-error Same error as above.\n\t\t\t[K in keyof T]: Broken<T[K]>;\n\t\t}\n\t>;\n\n\t// Adding `K extends _RecursiveTrick ? _RecursiveTrick:` OR `T extends _RecursiveTrick ? _RecursiveTrick :` makes it compile and has no effect on the type produced.\n\ttype Works<T> = FlattenKeys<\n\t\t{\n\t\t\t[K in keyof T]: 0;\n\t\t} & {\n\t\t\t// Trick added here. Since `K` never extends `never`, the second conditional option is always taken,\n\t\t\t// making this equivalent to the broken version, except this one compiles.\n\t\t\t[K in keyof T]: T extends _RecursiveTrick ? _RecursiveTrick : Works<T[K]>;\n\t\t}\n\t>;\n\n\t/* eslint-enable @typescript-eslint/no-unused-vars */\n}\n\n/**\n * Alternative to the built in Record type which does not permit unexpected members,\n * and is readonly.\n *\n * @remarks\n * This does not work correctly when `K` is more specific than `string` or `symbol`.\n * For example `{a: 5}` is not assignable to `RestrictiveReadonlyRecord<\"a\",: number>`\n *\n * @privateRemarks\n * `number` is not allowed as a key here since doing so causes the compiler to reject recursive schema.\n * The cause for this is unclear, but empirically it was the case when this comment was written.\n *\n * @deprecated Use a more robust / specific type instead. This type never worked as intended.\n * @public\n */\nexport type RestrictiveReadonlyRecord<K extends symbol | string, T> = {\n\treadonly [P in symbol | string]: P extends K ? T : never;\n};\n\n/**\n * Alternative to the built-in `Record<string, T>` type which is readonly and does not permit symbols.\n * @remarks\n * It would be nice if `keyof RestrictiveStringRecord<T>` returned string, but it does not: use `keyof RestrictiveStringRecord<T> & string` instead.\n * @system @public\n */\nexport type RestrictiveStringRecord<T> = {\n\treadonly [P in string]: T;\n} & {\n\treadonly [P in symbol]?: never;\n};\n\n/**\n * Returns `true` if T is a union and false if it is not.\n * @typeparam T - Type to test if it is a union.\n * @typeparam T2 - Do not specify: default value used as implementation detail.\n * @system @alpha\n */\nexport type IsUnion<T, T2 = T> = T extends unknown\n\t? [T2] extends [T]\n\t\t? false\n\t\t: true\n\t: \"error\";\n\n/**\n * Convert a union of types to an intersection of those types. Useful for `TransformEvents`.\n * @privateRemarks\n * First an always true extends clause is used (T extends T) to distribute T into to a union of types contravariant over each member of the T union.\n * Then the constraint on the type parameter in this new context is inferred, giving the intersection.\n * @system @public\n */\nexport type UnionToIntersection<T> = (T extends T ? (k: T) => unknown : never) extends (\n\tk: infer U,\n) => unknown\n\t? U\n\t: never;\n\n/**\n * Gets the first item of a union type.\n *\n * @typeparam Union - The union to convert.\n * @typeparam AsOverloadedFunction - Implementation detail: do not specify.\n * @system @alpha\n */\nexport type PopUnion<\n\tUnion,\n\tAsOverloadedFunction = UnionToIntersection<\n\t\tUnion extends unknown ? (f: Union) => void : never\n\t>,\n> = AsOverloadedFunction extends (a: infer First) => void ? First : never;\n\n/**\n * Converts a union type to a tuple type.\n *\n * @typeparam T - The union to convert.\n * @typeparam A - Implementation detail: do not specify.\n * @typeparam First - Implementation detail: do not specify.\n *\n * @privateRemarks\n * `A` is a tuple to prepend members of the union to.\n *\n * https://www.hacklewayne.com/typescript-convert-union-to-tuple-array-yes-but-how and https://catchts.com/union-array both explain the general approach this uses pretty well.\n * This implementation is inspired to those, but slightly different in implementation.\n * @alpha\n */\nexport type UnionToTuple<\n\tUnion,\n\tA extends unknown[] = [],\n\tFirst = PopUnion<Union>,\n> = IsUnion<Union> extends true\n\t? UnionToTuple<Exclude<Union, First>, [First, ...A]>\n\t: [Union, ...A];\n\n/**\n * This is unsafe, meaning that the returned value might not match its type.\n *\n * For the result to match its type, T must be a union of the types of each item in `items` in the order that they occur.\n * For this to be possible, there must be no duplicate or overlapping types.\n * This is fragile and must be used with care.\n *\n * @remarks\n * The main use-case for this is recovering lost information from {@link AllowedTypes} which is necessary to preserve when using them with {@link Input} APIs.\n * Since {@link AllowedTypes} is actually order independent, it is somewhat safer when used to produce `AllowedTypes`.\n *\n * @example\n * ```typescript\n * // Gives imprecise type (typeof A | typeof B)[]\n * const schemaBad = [A, B];\n * // Fixes the type to be [typeof A, typeof B]\n * const schema = unsafeArrayToTuple(schemaBad);\n *\n * const config = new TreeViewConfiguration({ schema });\n * ```\n * @alpha\n */\nexport function unsafeArrayToTuple<T>(items: T[]): UnionToTuple<T> {\n\treturn items as UnionToTuple<T>;\n}\n"]}
1
+ {"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../../src/util/typeUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA8EH,wIAAwI;AACxI,CAAC;IAwBA,qDAAqD;AACtD,CAAC;AA8FD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,kBAAkB,CAAI,KAAU;IAC/C,OAAO,KAAwB,CAAC;AACjC,CAAC;AAFD,gDAEC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Utilities for manipulating types.\n */\n\n/**\n * Return a type thats equivalent to the input, but with different IntelliSense.\n * This tends to convert unions and intersections into objects.\n * @system @public\n */\nexport type FlattenKeys<T> = [{ [Property in keyof T]: T[Property] }][_InlineTrick];\n\n/**\n * Use for trick to \"inline\" generic types.\n *\n * @remarks\n * The TypeScript compiler can be convinced to inline a generic type\n * (so the result of evaluating the generic type show up in IntelliSense and error messages instead of just the invocation of the generic type)\n * by creating an object with a field, and returning the type of that field.\n *\n * For example:\n * ```typescript\n * type MyGeneric<T1, T2> = {x: T1 extends [] ? T1 : T2 };\n * type MyGenericExpanded<T1, T2> = [{x: T1 extends [] ? T1 : T2 }][_InlineTrick]\n *\n * // Type is MyGeneric<5, string>\n * const foo: MyGeneric<5, string> = {x: \"x\"}\n * // Type is {x: \"x\"}\n * const foo2: MyGenericExpanded<5, string> = {x: \"x\"}\n * ```\n *\n * This constant is defined to provide a way to find this documentation from types which use this pattern,\n * and to locate types which use this pattern in case they need updating for compiler changes.\n * @system @public\n */\nexport type _InlineTrick = 0;\n\n/**\n * Use for trick to prevent self reference error `ts(2456)`.\n *\n * Prefix a type expression with `K extends _RecursiveTrick ? _RecursiveTrick : ` for some K to break the cycle.\n *\n * @remarks\n * The TypeScript compiler handles some cases of recursive types, but not others.\n * Sometimes adding an otherwise needless conditional can make a type compile.\n * Use this type in such cases.\n *\n *For example:\n * ```typescript\n * // The TypeScript compiler can't handle this case\n * type Broken<T> = FlattenKeys<\n *\t{\n * \t\t[K in keyof T]: 0;\n * \t} & {\n * \t\t[K in keyof T]: Broken<T[K]>;\n * \t}\n * >;\n *\n * // Adding `K extends _RecursiveTrick ? _RecursiveTrick :` makes it compile, and has no effect on the type produced.\n * type Works<T> = FlattenKeys<\n * \t{\n * \t\t[K in keyof T]: 0;\n * \t} & {\n * \t\t// Trick added here. Since `k` never extends `never`, the second conditional option is always taken,\n * \t\t// making this equivalent to the broken version, except this one compiles.\n * \t\t[K in keyof T]: K extends _RecursiveTrick ? _RecursiveTrick : Works<T[K]>;\n * \t}\n * >;\n * ```\n *\n * This trick appears to start working in TypeScript 4.1 and is confirmed to still work in 5.0.4.\n *\n * This constant is defined to provide a way to find this documentation from types which use this pattern,\n * and to locate types which use this pattern in case they need updating for compiler changes.\n */\nexport type _RecursiveTrick = never;\n\n// This block is kept here to ensure the above example behaves as documented, and can be copied into the example to update it as needed.\n{\n\t/* eslint-disable @typescript-eslint/no-unused-vars */\n\n\t// @ts-expect-error The TypeScript compiler can't handle this case\n\ttype Broken<T> = FlattenKeys<\n\t\t{\n\t\t\t[K in keyof T]: 0;\n\t\t} & {\n\t\t\t// @ts-expect-error Same error as above.\n\t\t\t[K in keyof T]: Broken<T[K]>;\n\t\t}\n\t>;\n\n\t// Adding `K extends _RecursiveTrick ? _RecursiveTrick:` OR `T extends _RecursiveTrick ? _RecursiveTrick :` makes it compile and has no effect on the type produced.\n\ttype Works<T> = FlattenKeys<\n\t\t{\n\t\t\t[K in keyof T]: 0;\n\t\t} & {\n\t\t\t// Trick added here. Since `K` never extends `never`, the second conditional option is always taken,\n\t\t\t// making this equivalent to the broken version, except this one compiles.\n\t\t\t[K in keyof T]: T extends _RecursiveTrick ? _RecursiveTrick : Works<T[K]>;\n\t\t}\n\t>;\n\n\t/* eslint-enable @typescript-eslint/no-unused-vars */\n}\n\n/**\n * Alternative to the built in Record type which does not permit unexpected members,\n * and is readonly.\n *\n * @remarks\n * This does not work correctly when `K` is more specific than `string` or `symbol`.\n * For example `{a: 5}` is not assignable to `RestrictiveReadonlyRecord<\"a\",: number>`\n *\n * @privateRemarks\n * `number` is not allowed as a key here since doing so causes the compiler to reject recursive schema.\n * The cause for this is unclear, but empirically it was the case when this comment was written.\n *\n * @deprecated Use a more robust / specific type instead. This type never worked as intended.\n * @public\n */\nexport type RestrictiveReadonlyRecord<K extends symbol | string, T> = {\n\treadonly [P in symbol | string]: P extends K ? T : never;\n};\n\n/**\n * Alternative to the built-in `Record<string, T>` type which is readonly and does not permit symbols.\n * @remarks\n * It would be nice if `keyof RestrictiveStringRecord<T>` returned string, but it does not: use `keyof RestrictiveStringRecord<T> & string` instead.\n * @system @public\n */\nexport type RestrictiveStringRecord<T> = {\n\treadonly [P in string]: T;\n} & {\n\treadonly [P in symbol]?: never;\n};\n\n/**\n * Returns `true` if T is a union and false if it is not.\n * @typeparam T - Type to test if it is a union.\n * @typeparam T2 - Do not specify: default value used as implementation detail.\n * @system @public\n */\nexport type IsUnion<T, T2 = T> = T extends unknown\n\t? [T2] extends [T]\n\t\t? false\n\t\t: true\n\t: \"error\";\n\n/**\n * Convert a union of types to an intersection of those types. Useful for `TransformEvents`.\n * @privateRemarks\n * First an always true extends clause is used (T extends T) to distribute T into to a union of types contravariant over each member of the T union.\n * Then the constraint on the type parameter in this new context is inferred, giving the intersection.\n * @system @public\n */\nexport type UnionToIntersection<T> = (T extends T ? (k: T) => unknown : never) extends (\n\tk: infer U,\n) => unknown\n\t? U\n\t: never;\n\n/**\n * Gets the first item of a union type.\n *\n * @typeparam Union - The union to convert.\n * @typeparam AsOverloadedFunction - Implementation detail: do not specify.\n * @system @alpha\n */\nexport type PopUnion<\n\tUnion,\n\tAsOverloadedFunction = UnionToIntersection<\n\t\tUnion extends unknown ? (f: Union) => void : never\n\t>,\n> = AsOverloadedFunction extends (a: infer First) => void ? First : never;\n\n/**\n * Converts a union type to a tuple type.\n *\n * @typeparam T - The union to convert.\n * @typeparam A - Implementation detail: do not specify.\n * @typeparam First - Implementation detail: do not specify.\n *\n * @privateRemarks\n * `A` is a tuple to prepend members of the union to.\n *\n * https://www.hacklewayne.com/typescript-convert-union-to-tuple-array-yes-but-how and https://catchts.com/union-array both explain the general approach this uses pretty well.\n * This implementation is inspired to those, but slightly different in implementation.\n * @alpha\n */\nexport type UnionToTuple<\n\tUnion,\n\tA extends unknown[] = [],\n\tFirst = PopUnion<Union>,\n> = IsUnion<Union> extends true\n\t? UnionToTuple<Exclude<Union, First>, [First, ...A]>\n\t: [Union, ...A];\n\n/**\n * This is unsafe, meaning that the returned value might not match its type.\n *\n * For the result to match its type, T must be a union of the types of each item in `items` in the order that they occur.\n * For this to be possible, there must be no duplicate or overlapping types.\n * This is fragile and must be used with care.\n *\n * @remarks\n * The main use-case for this is recovering lost information from {@link AllowedTypes} which is necessary to preserve when using them with {@link Input} APIs.\n * Since {@link AllowedTypes} is actually order independent, it is somewhat safer when used to produce `AllowedTypes`.\n *\n * @example\n * ```typescript\n * // Gives imprecise type (typeof A | typeof B)[]\n * const schemaBad = [A, B];\n * // Fixes the type to be [typeof A, typeof B]\n * const schema = unsafeArrayToTuple(schemaBad);\n *\n * const config = new TreeViewConfiguration({ schema });\n * ```\n * @alpha\n */\nexport function unsafeArrayToTuple<T>(items: T[]): UnionToTuple<T> {\n\treturn items as UnionToTuple<T>;\n}\n"]}
package/lib/alpha.d.ts CHANGED
@@ -32,6 +32,7 @@ export {
32
32
  InsertableTypedNode,
33
33
  InternalTreeNode,
34
34
  IsListener,
35
+ IsUnion,
35
36
  IterableTreeArrayContent,
36
37
  LazyItem,
37
38
  LeafSchema,
@@ -81,6 +82,7 @@ export {
81
82
  Unhydrated,
82
83
  UnionToIntersection,
83
84
  ValidateRecursiveSchema,
85
+ ValidateRecursiveSchemaTemplate,
84
86
  ViewableTree,
85
87
  WithType,
86
88
  rollback,
@@ -92,6 +94,10 @@ export {
92
94
  TreeChangeEventsBeta,
93
95
 
94
96
  // @alpha APIs
97
+ AllowedTypeMetadata,
98
+ AllowedTypesMetadata,
99
+ AnnotatedAllowedType,
100
+ AnnotatedAllowedTypes,
95
101
  ArrayNodeCustomizableSchema,
96
102
  ArrayNodeCustomizableSchemaUnsafe,
97
103
  ArrayNodePojoEmulationSchema,
@@ -113,10 +119,12 @@ export {
113
119
  ICodecOptions,
114
120
  ITreeAlpha,
115
121
  IdentifierIndex,
122
+ ImplicitAnnotatedAllowedTypes,
123
+ ImplicitAnnotatedFieldSchema,
116
124
  Insertable,
117
125
  InsertableContent,
118
126
  InsertableField,
119
- IsUnion,
127
+ InsertableObjectFromAnnotatedSchemaRecord,
120
128
  JsonArrayNodeSchema,
121
129
  JsonAsTree,
122
130
  JsonCompatible,
@@ -178,6 +186,13 @@ export {
178
186
  TreeSchemaEncodingOptions,
179
187
  TreeViewAlpha,
180
188
  TreeViewConfigurationAlpha,
189
+ UnannotateAllowedType,
190
+ UnannotateAllowedTypeOrLazyItem,
191
+ UnannotateAllowedTypes,
192
+ UnannotateAllowedTypesList,
193
+ UnannotateImplicitAllowedTypes,
194
+ UnannotateImplicitFieldSchema,
195
+ UnannotateSchemaRecord,
181
196
  UnionToTuple,
182
197
  UnsafeUnknownSchema,
183
198
  ValueSchema,
package/lib/beta.d.ts CHANGED
@@ -32,6 +32,7 @@ export {
32
32
  InsertableTypedNode,
33
33
  InternalTreeNode,
34
34
  IsListener,
35
+ IsUnion,
35
36
  IterableTreeArrayContent,
36
37
  LazyItem,
37
38
  LeafSchema,
@@ -81,6 +82,7 @@ export {
81
82
  Unhydrated,
82
83
  UnionToIntersection,
83
84
  ValidateRecursiveSchema,
85
+ ValidateRecursiveSchemaTemplate,
84
86
  ViewableTree,
85
87
  WithType,
86
88
  rollback,
package/lib/index.d.ts CHANGED
@@ -30,7 +30,7 @@ export type Listenable<T extends object> = EventListenable<T>;
30
30
  export type Off = EventOff;
31
31
  export { TreeStatus, TreeCompressionStrategy, type TreeIndex, type TreeIndexKey, type TreeIndexNodes, } from "./feature-libraries/index.js";
32
32
  export { type ITreeInternal, type SharedTreeOptions, type ForestType, type SharedTreeFormatOptions, SharedTreeFormatVersion, Tree, type RunTransaction, type ForestOptions, getBranch, type BranchableTree, type TreeBranchFork, independentInitializedView, type ViewContent, TreeAlpha, independentView, ForestTypeOptimized, ForestTypeExpensiveDebug, ForestTypeReference, } from "./shared-tree/index.js";
33
- export { TreeArrayNode, type Unhydrated, IterableTreeArrayContent, TreeNode, type ViewableTree, type ITree, type TreeNodeSchema, TreeViewConfiguration, type ITreeViewConfiguration, type ITreeConfigurationOptions, type TreeView, type TreeViewEvents, SchemaFactory, SchemaFactoryAlpha, type SchemaFactoryObjectOptions, type ImplicitFieldSchema, type TreeFieldFromImplicitField, type TreeChangeEvents, type NodeFromSchema, type TreeMapNode, type InsertableTreeNodeFromImplicitAllowedTypes, type TreeLeafValue, FieldKind, FieldSchema, type FieldSchemaAlpha, type FieldSchemaMetadata, type ImplicitAllowedTypes, type InsertableTreeFieldFromImplicitField, type InsertableTypedNode, NodeKind, type TreeObjectNode, ObjectNodeSchema, type TreeNodeFromImplicitAllowedTypes, type TreeNodeSchemaClass, type SchemaCompatibilityStatus, type FieldProps, type InternalTreeNode, type WithType, type NodeChangedData, type TreeNodeApi, type TreeNodeSchemaCore, type AllowedTypes, type System_Unsafe, type FieldSchemaAlphaUnsafe, type ArrayNodeCustomizableSchemaUnsafe, type MapNodeCustomizableSchemaUnsafe, type typeSchemaSymbol, type TreeNodeSchemaNonClass, type ValidateRecursiveSchema, type FixRecursiveArraySchema, type SimpleTreeIndex, type IdentifierIndex, createSimpleTreeIndex, createIdentifierIndex, adaptEnum, enumFromStrings, singletonSchema, type UnsafeUnknownSchema, type TreeViewAlpha, type InsertableField, type Insertable, type InsertableContent, type FactoryContent, type FactoryContentObject, type ReadableField, type ReadSchema, test_RecursiveObject, test_RecursiveObject_base, test_RecursiveObjectPojoMode, TreeBeta, type TreeChangeEventsBeta, type VerboseTreeNode, type TreeEncodingOptions, type TreeSchemaEncodingOptions, type TreeSchema, TreeViewConfigurationAlpha, type VerboseTree, extractPersistedSchema, comparePersistedSchema, type ConciseTree, type JsonTreeSchema, type JsonSchemaId, type JsonNodeSchema, type JsonNodeSchemaBase, type JsonLeafNodeSchema, type JsonMapNodeSchema, type JsonArrayNodeSchema, type JsonObjectNodeSchema, type JsonFieldSchema, type JsonSchemaRef, type JsonRefPath, type JsonSchemaType, type JsonLeafSchemaType, getJsonSchema, type LazyItem, type Unenforced, type SimpleNodeSchemaBase, type SimpleTreeSchema, type SimpleNodeSchema, type SimpleFieldSchema, type SimpleLeafNodeSchema, type SimpleMapNodeSchema, type SimpleArrayNodeSchema, type SimpleObjectNodeSchema, type SimpleObjectFieldSchema, normalizeAllowedTypes, getSimpleSchema, type ReadonlyArrayNode, type InsertableTreeNodeFromAllowedTypes, type Input, type TreeBranch, type TreeBranchEvents, asTreeViewAlpha, type NodeSchemaOptions, type NodeSchemaMetadata, type SchemaStatics, type ITreeAlpha, type TransactionConstraint, type NodeInDocumentConstraint, type RunTransactionParams, type VoidTransactionCallbackStatus, type TransactionCallbackStatus, type TransactionResult, type TransactionResultExt, type TransactionResultSuccess, type TransactionResultFailed, rollback, generateSchemaFromSimpleSchema, evaluateLazySchema, replaceConciseTreeHandles, replaceHandles, replaceVerboseTreeHandles, type HandleConverter, allowUnused, type LeafSchema, type ArrayNodeCustomizableSchema, type ArrayNodePojoEmulationSchema, ArrayNodeSchema, type MapNodeCustomizableSchema, type MapNodePojoEmulationSchema, MapNodeSchema, type ObjectFromSchemaRecord, } from "./simple-tree/index.js";
33
+ export { TreeArrayNode, type Unhydrated, IterableTreeArrayContent, TreeNode, type ViewableTree, type ITree, type TreeNodeSchema, TreeViewConfiguration, type ITreeViewConfiguration, type ITreeConfigurationOptions, type TreeView, type TreeViewEvents, SchemaFactory, SchemaFactoryAlpha, type SchemaFactoryObjectOptions, type ImplicitFieldSchema, type TreeFieldFromImplicitField, type TreeChangeEvents, type NodeFromSchema, type TreeMapNode, type InsertableTreeNodeFromImplicitAllowedTypes, type TreeLeafValue, FieldKind, FieldSchema, type FieldSchemaAlpha, type FieldSchemaMetadata, type ImplicitAllowedTypes, type InsertableTreeFieldFromImplicitField, type InsertableTypedNode, NodeKind, type TreeObjectNode, ObjectNodeSchema, type TreeNodeFromImplicitAllowedTypes, type TreeNodeSchemaClass, type SchemaCompatibilityStatus, type FieldProps, type InternalTreeNode, type WithType, type NodeChangedData, type TreeNodeApi, type TreeNodeSchemaCore, type AllowedTypes, type System_Unsafe, type FieldSchemaAlphaUnsafe, type ArrayNodeCustomizableSchemaUnsafe, type MapNodeCustomizableSchemaUnsafe, type typeSchemaSymbol, type TreeNodeSchemaNonClass, type ValidateRecursiveSchema, type FixRecursiveArraySchema, type SimpleTreeIndex, type IdentifierIndex, createSimpleTreeIndex, createIdentifierIndex, adaptEnum, enumFromStrings, singletonSchema, type UnsafeUnknownSchema, type TreeViewAlpha, type InsertableField, type Insertable, type InsertableContent, type FactoryContent, type FactoryContentObject, type ReadableField, type ReadSchema, type ImplicitAnnotatedAllowedTypes, type ImplicitAnnotatedFieldSchema, type AnnotatedAllowedType, type AnnotatedAllowedTypes, type AllowedTypeMetadata, type AllowedTypesMetadata, type InsertableObjectFromAnnotatedSchemaRecord, type UnannotateImplicitAllowedTypes, type UnannotateAllowedTypes, type UnannotateAllowedType, type UnannotateAllowedTypesList, type UnannotateAllowedTypeOrLazyItem, type UnannotateImplicitFieldSchema, type UnannotateSchemaRecord, test_RecursiveObject, test_RecursiveObject_base, test_RecursiveObjectPojoMode, TreeBeta, type TreeChangeEventsBeta, type VerboseTreeNode, type TreeEncodingOptions, type TreeSchemaEncodingOptions, type TreeSchema, TreeViewConfigurationAlpha, type VerboseTree, extractPersistedSchema, comparePersistedSchema, type ConciseTree, type JsonTreeSchema, type JsonSchemaId, type JsonNodeSchema, type JsonNodeSchemaBase, type JsonLeafNodeSchema, type JsonMapNodeSchema, type JsonArrayNodeSchema, type JsonObjectNodeSchema, type JsonFieldSchema, type JsonSchemaRef, type JsonRefPath, type JsonSchemaType, type JsonLeafSchemaType, getJsonSchema, type LazyItem, type Unenforced, type SimpleNodeSchemaBase, type SimpleTreeSchema, type SimpleNodeSchema, type SimpleFieldSchema, type SimpleLeafNodeSchema, type SimpleMapNodeSchema, type SimpleArrayNodeSchema, type SimpleObjectNodeSchema, type SimpleObjectFieldSchema, normalizeAllowedTypes, getSimpleSchema, type ReadonlyArrayNode, type InsertableTreeNodeFromAllowedTypes, type Input, type TreeBranch, type TreeBranchEvents, asTreeViewAlpha, type NodeSchemaOptions, type NodeSchemaMetadata, type SchemaStatics, type ITreeAlpha, type TransactionConstraint, type NodeInDocumentConstraint, type RunTransactionParams, type VoidTransactionCallbackStatus, type TransactionCallbackStatus, type TransactionResult, type TransactionResultExt, type TransactionResultSuccess, type TransactionResultFailed, rollback, generateSchemaFromSimpleSchema, evaluateLazySchema, replaceConciseTreeHandles, replaceHandles, replaceVerboseTreeHandles, type HandleConverter, allowUnused, type LeafSchema, type ArrayNodeCustomizableSchema, type ArrayNodePojoEmulationSchema, ArrayNodeSchema, type MapNodeCustomizableSchema, type MapNodePojoEmulationSchema, MapNodeSchema, type ObjectFromSchemaRecord, type ValidateRecursiveSchemaTemplate, type FixRecursiveRecursionLimit, } from "./simple-tree/index.js";
34
34
  export { SharedTree, configuredSharedTree, } from "./treeFactory.js";
35
35
  export { SharedTreeAttributes, SharedTreeFactoryType } from "./sharedTreeAttributes.js";
36
36
  export { type ICodecOptions, type JsonValidator, type SchemaValidationFunction, FluidClientVersion, } from "./codec/index.js";
@@ -48,5 +48,5 @@ InternalTypes, };
48
48
  export type { MapNodeInsertableData } from "./simple-tree/index.js";
49
49
  export { JsonAsTree } from "./jsonDomainSchema.js";
50
50
  export { FluidSerializableAsTree } from "./serializableDomainSchema.js";
51
- export { TableSchema } from "./tableSchema.js";
51
+ export { TableSchema, type System_TableSchema } from "./tableSchema.js";
52
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}