@directus/app 9.12.1 → 9.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/dist/assets/{@directus_extensions-sdk.9a1812c6.entry.js → @directus_extensions-sdk.016f1070.entry.js} +1 -1
  2. package/dist/assets/accounts.40ab36c1.js +1 -0
  3. package/dist/assets/{active-line.b42e95d2.js → active-line.71775521.js} +1 -1
  4. package/dist/assets/activity-log.9449feec.js +1 -0
  5. package/dist/assets/activity.fbd319d5.js +80 -0
  6. package/dist/assets/{apl.a10fee96.js → apl.fabbb08e.js} +1 -1
  7. package/dist/assets/ar-SA.215069dc.js +1 -0
  8. package/dist/assets/architecture.9e90b6f3.js +1 -0
  9. package/dist/assets/{asciiarmor.3440160d.js → asciiarmor.f87dc63a.js} +1 -1
  10. package/dist/assets/{asn.1.bdf78f70.js → asn.1.5dd57608.js} +1 -1
  11. package/dist/assets/{asterisk.88ae33f0.js → asterisk.395cf0ad.js} +1 -1
  12. package/dist/assets/authentication.bc20bce5.js +73 -0
  13. package/dist/assets/{autorefresh.fa8b7b34.js → autorefresh.2c9c0320.js} +1 -1
  14. package/dist/assets/aws.6652a1fd.js +1 -0
  15. package/dist/assets/backing-directus.02c28d29.js +1 -0
  16. package/dist/assets/bg-BG.9288ea83.js +1 -0
  17. package/dist/assets/bn-IN.4127b7a4.js +1 -0
  18. package/dist/assets/{br-FR.1ad76918.js → br-FR.d3564938.js} +1 -1
  19. package/dist/assets/{brainfuck.af40cbfc.js → brainfuck.60536f63.js} +1 -1
  20. package/dist/assets/{ca-ES.365a1fc4.js → ca-ES.f3dfdef6.js} +1 -1
  21. package/dist/assets/cli.6e61515e.js +19 -0
  22. package/dist/assets/cli.863ef0d2.js +4 -0
  23. package/dist/assets/{clike.75f55953.js → clike.74e0448b.js} +1 -1
  24. package/dist/assets/{clojure.f44f8182.js → clojure.8f96f0f7.js} +1 -1
  25. package/dist/assets/cloudron.a348537b.js +1 -0
  26. package/dist/assets/{cmake.dc51a5f4.js → cmake.723ea5dd.js} +1 -1
  27. package/dist/assets/{cobol.bd572fbc.js → cobol.a990507c.js} +1 -1
  28. package/dist/assets/codebase-overview.b46635f9.js +1 -0
  29. package/dist/assets/{coffeescript.903da3d2.js → coffeescript.c826a1f4.js} +1 -1
  30. package/dist/assets/collections.60e4b448.js +2 -0
  31. package/dist/assets/collections.80e4a52c.js +106 -0
  32. package/dist/assets/{commonlisp.0c024da5.js → commonlisp.0f5d3fae.js} +1 -1
  33. package/dist/assets/config-options.8e2d8e17.js +138 -0
  34. package/dist/assets/content.003d7d7c.js +1 -0
  35. package/dist/assets/creating-extensions.9a98925a.js +11 -0
  36. package/dist/assets/{crystal.80f7e1ba.js → crystal.8517c407.js} +1 -1
  37. package/dist/assets/cs-CZ.a3c83b73.js +1 -0
  38. package/dist/assets/{css.eb89b9da.js → css.f2b45d65.js} +1 -1
  39. package/dist/assets/{cypher.f649c40f.js → cypher.0f67a8c4.js} +1 -1
  40. package/dist/assets/{d.3e286089.js → d.d8c5a86d.js} +1 -1
  41. package/dist/assets/{da-DK.88f53a7d.js → da-DK.3c379038.js} +1 -1
  42. package/dist/assets/{dart.5b9bb9bb.js → dart.ff540412.js} +1 -1
  43. package/dist/assets/data-model.086edd1e.js +1 -0
  44. package/dist/assets/data-sharing.27afa5ee.js +1 -0
  45. package/dist/assets/de-DE.350023db.js +1 -0
  46. package/dist/assets/{diff.c63eafa7.js → diff.1b6cf85e.js} +1 -1
  47. package/dist/assets/digitalocean-app-platform.aff2a50b.js +3 -0
  48. package/dist/assets/display-templates.d8e93a19.js +1 -0
  49. package/dist/assets/displays.e528abde.js +49 -0
  50. package/dist/assets/{django.3a6905fc.js → django.b05a00dd.js} +1 -1
  51. package/dist/assets/{docker.e1bb4205.js → docker.6f265c46.js} +7 -7
  52. package/dist/assets/{dockerfile.a9f614c8.js → dockerfile.50e7896f.js} +1 -1
  53. package/dist/assets/documentation.ad1fdaf2.js +1 -0
  54. package/dist/assets/{dtd.5b2d40ab.js → dtd.4f30128b.js} +1 -1
  55. package/dist/assets/{dylan.744cd79f.js → dylan.295f582b.js} +1 -1
  56. package/dist/assets/{ebnf.6637a8f6.js → ebnf.48a4d2a4.js} +1 -1
  57. package/dist/assets/{ecl.cdabfae6.js → ecl.686a8714.js} +1 -1
  58. package/dist/assets/{eiffel.60b61e7f.js → eiffel.ee4a91b5.js} +1 -1
  59. package/dist/assets/{el-GR.98199dde.js → el-GR.103ebf8d.js} +1 -1
  60. package/dist/assets/{elm.74b68fc8.js → elm.3575efea.js} +1 -1
  61. package/dist/assets/email-templates.2bdb87a6.js +2 -0
  62. package/dist/assets/{en-CA.58d818b8.js → en-CA.9ad3a3ab.js} +1 -1
  63. package/dist/assets/{en-GB.74320d21.js → en-GB.c55341c7.js} +1 -1
  64. package/dist/assets/endpoints.2c9172db.js +27 -0
  65. package/dist/assets/{erlang.d6cd5265.js → erlang.2f06eab4.js} +1 -1
  66. package/dist/assets/es-419.10094709.js +1 -0
  67. package/dist/assets/es-CL.7f44ec7c.js +1 -0
  68. package/dist/assets/es-ES.3ff9088e.js +1 -0
  69. package/dist/assets/es-MX.17370b17.js +1 -0
  70. package/dist/assets/{et-EE.9e35920e.js → et-EE.fb46a361.js} +1 -1
  71. package/dist/assets/extensions.8d3df212.js +12 -0
  72. package/dist/assets/{fa-IR.f3dc75f9.js → fa-IR.b864f77c.js} +1 -1
  73. package/dist/assets/{factor.965cfdad.js → factor.59c6a149.js} +1 -1
  74. package/dist/assets/faq.63c79c18.js +2 -0
  75. package/dist/assets/{fcl.e515f605.js → fcl.a6a387b9.js} +1 -1
  76. package/dist/assets/{fi-FI.42afdce0.js → fi-FI.14f31cb4.js} +1 -1
  77. package/dist/assets/fields.715d4591.js +135 -0
  78. package/dist/assets/file-library.a4de4015.js +1 -0
  79. package/dist/assets/files.7c2ccfe2.js +189 -0
  80. package/dist/assets/filter-rules.056b97be.js +76 -0
  81. package/dist/assets/filters.2cb82fd9.js +1 -0
  82. package/dist/assets/flows.38f60cc8.js +172 -0
  83. package/dist/assets/flows.f378a262.js +15 -0
  84. package/dist/assets/{fo-FO.ffe478b0.js → fo-FO.cc444b75.js} +1 -1
  85. package/dist/assets/folders.fa66a5ce.js +132 -0
  86. package/dist/assets/{forth.c62ab807.js → forth.eec0a81d.js} +1 -1
  87. package/dist/assets/{fortran.c0e428c5.js → fortran.b9df31da.js} +1 -1
  88. package/dist/assets/fr-CA.0e824ae4.js +1 -0
  89. package/dist/assets/fr-FR.77a5277c.js +1 -0
  90. package/dist/assets/{gas.fd59e425.js → gas.1bf79f8f.js} +1 -1
  91. package/dist/assets/gcp.6c61b39e.js +60 -0
  92. package/dist/assets/{gfm.8125a8e6.js → gfm.04d0828d.js} +1 -1
  93. package/dist/assets/{gherkin.c9a9f9d2.js → gherkin.f334d646.js} +1 -1
  94. package/dist/assets/github-ci.04483301.js +2 -0
  95. package/dist/assets/glossary.485603d9.js +1 -0
  96. package/dist/assets/glossary.6efd77ad.js +1 -0
  97. package/dist/assets/{go.31390264.js → go.81bbba54.js} +1 -1
  98. package/dist/assets/{groovy.c940d48b.js → groovy.3fb79de5.js} +1 -1
  99. package/dist/assets/{haml.1a456af6.js → haml.9645befc.js} +1 -1
  100. package/dist/assets/{handlebars.d3c0e9e6.js → handlebars.c78fa1ca.js} +1 -1
  101. package/dist/assets/{haskell-literate.06d0d330.js → haskell-literate.ee77a8c9.js} +1 -1
  102. package/dist/assets/{haskell.f83a5b48.js → haskell.0f131af0.js} +1 -1
  103. package/dist/assets/{haxe.cf38bc86.js → haxe.5ecd20ea.js} +1 -1
  104. package/dist/assets/{hi-IN.36e79faa.js → hi-IN.c0703db5.js} +1 -1
  105. package/dist/assets/hooks.f7efe9af.js +60 -0
  106. package/dist/assets/{hr-HR.b1e41c07.js → hr-HR.467388ee.js} +1 -1
  107. package/dist/assets/{htmlembedded.4765ab1f.js → htmlembedded.b9d52c93.js} +1 -1
  108. package/dist/assets/{htmlmixed.a4506ee0.js → htmlmixed.b02b6e2e.js} +1 -1
  109. package/dist/assets/{http.cf2042b8.js → http.705b0cd9.js} +1 -1
  110. package/dist/assets/{hu-HU.9c7ec38f.js → hu-HU.47ab36e8.js} +1 -1
  111. package/dist/assets/id-ID.8089647c.js +1 -0
  112. package/dist/assets/{idl.2b562d7a.js → idl.ee86fe0e.js} +1 -1
  113. package/dist/assets/iis.e068f41a.js +24 -0
  114. package/dist/assets/import-export.d334c127.js +2 -0
  115. package/dist/assets/{index.44b36a96.js → index.0295bc4b.js} +1 -1
  116. package/dist/assets/{index.f6d90b7c.js → index.07257d01.js} +1 -1
  117. package/dist/assets/{index.515f0cb5.js → index.0e101049.js} +1 -1
  118. package/dist/assets/{index.bc3296ff.js → index.10f90411.js} +1 -1
  119. package/dist/assets/{index.17ad666d.js → index.14c720ba.js} +1 -1
  120. package/dist/assets/{index.6687eb7d.js → index.16acfb90.js} +1 -1
  121. package/dist/assets/{index.e9099679.js → index.175a81f8.js} +1 -1
  122. package/dist/assets/index.192147d5.css +1 -0
  123. package/dist/assets/{index.734cf408.js → index.1a65b37a.js} +1 -1
  124. package/dist/assets/{index.76212e14.js → index.1b44d300.js} +1 -1
  125. package/dist/assets/{index.35fb04b2.js → index.20b34242.js} +1 -1
  126. package/dist/assets/{index.b871b7a5.js → index.2598f40b.js} +1 -1
  127. package/dist/assets/{index.5490bf54.js → index.28aa754b.js} +1 -1
  128. package/dist/assets/{index.b955a1be.js → index.2926879f.js} +1 -1
  129. package/dist/assets/{index.ff5502c6.js → index.2ec06d14.js} +1 -1
  130. package/dist/assets/{index.05e20b6f.js → index.399c0d62.js} +1 -1
  131. package/dist/assets/{index.788544c8.js → index.3d4cd218.js} +1 -1
  132. package/dist/assets/{index.bbf0131f.js → index.3eda79ec.js} +1 -1
  133. package/dist/assets/{index.f334ad18.js → index.402d83c0.js} +1 -1
  134. package/dist/assets/{index.48fd0edb.js → index.4100d6f0.js} +1 -1
  135. package/dist/assets/{index.5312378b.js → index.43fa9898.js} +1 -1
  136. package/dist/assets/{index.90aad19e.js → index.456ff0bd.js} +1 -1
  137. package/dist/assets/{index.2ff40292.js → index.4e2109fe.js} +1 -1
  138. package/dist/assets/{index.4de2df6a.js → index.4ef25ded.js} +1 -1
  139. package/dist/assets/{index.c91867d3.js → index.4fbaebb7.js} +1 -1
  140. package/dist/assets/{index.5d10078c.js → index.55a12dfb.js} +1 -1
  141. package/dist/assets/{index.1d927fd3.js → index.56188e3b.js} +1 -1
  142. package/dist/assets/{index.ea326829.js → index.5c54c17f.js} +1 -1
  143. package/dist/assets/{index.f715fb2c.js → index.5f5bf5b9.js} +1 -1
  144. package/dist/assets/{index.064c96df.js → index.60d33aa1.js} +1 -1
  145. package/dist/assets/{index.491a4003.js → index.627523d7.js} +1 -1
  146. package/dist/assets/{index.921bf39b.js → index.63d1f569.js} +1 -1
  147. package/dist/assets/{index.27da0362.js → index.663b73a9.js} +1 -1
  148. package/dist/assets/{index.8c9bb9d2.js → index.6bebaca7.js} +1 -1
  149. package/dist/assets/{index.c219c9fd.js → index.6f0b7179.js} +1 -1
  150. package/dist/assets/{index.895a297f.css → index.6f497914.css} +1 -1
  151. package/dist/assets/{index.f5a62bca.js → index.7249f524.js} +1 -1
  152. package/dist/assets/{index.6752521e.js → index.77260d1d.js} +1 -1
  153. package/dist/assets/{index.5e2cb31c.js → index.7f906cfe.js} +1 -1
  154. package/dist/assets/{index.1a186179.js → index.7fd5e2a0.js} +1 -1
  155. package/dist/assets/{index.e9faa1b7.js → index.7fe984e4.js} +1 -1
  156. package/dist/assets/{index.0a4e8fad.js → index.8493b2e7.js} +1 -1
  157. package/dist/assets/{index.db01bb54.js → index.85b9f847.js} +1 -1
  158. package/dist/assets/{index.629b6c38.js → index.8a9f2874.js} +1 -1
  159. package/dist/assets/{index.859a78cb.js → index.93059741.js} +1 -1
  160. package/dist/assets/{index.f6a5906f.js → index.94cf6fb4.js} +1 -1
  161. package/dist/assets/{index.55f6227c.js → index.98713a56.js} +1 -1
  162. package/dist/assets/{index.009353d9.js → index.98ee194a.js} +1 -1
  163. package/dist/assets/{index.9fbcba2f.js → index.9b60cfa4.js} +1 -1
  164. package/dist/assets/{index.bc32829f.js → index.a3e085ea.js} +1 -1
  165. package/dist/assets/{index.1e0212f9.js → index.a40592f5.js} +1 -1
  166. package/dist/assets/{index.fc7b1181.js → index.a5d15d7f.js} +1 -1
  167. package/dist/assets/{index.71e28483.js → index.a71fa74c.js} +1 -1
  168. package/dist/assets/{index.e39c7e76.js → index.a8aa4628.js} +1 -1
  169. package/dist/assets/{index.9b23cd7f.js → index.a9b73f2c.js} +1 -1
  170. package/dist/assets/{index.fd2a5a74.js → index.a9faa4e8.js} +1 -1
  171. package/dist/assets/{index.ddbad0a0.js → index.af021d8a.js} +1 -1
  172. package/dist/assets/{index.8f901e72.js → index.b43832c6.js} +1 -1
  173. package/dist/assets/{index.44c7ed90.js → index.b5ed5076.js} +1 -1
  174. package/dist/assets/{index.540a1c0d.js → index.b67f8116.js} +1 -1
  175. package/dist/assets/{index.b635a926.js → index.b702042e.js} +1 -1
  176. package/dist/assets/{index.3c7e729b.js → index.bce5f50d.js} +1 -1
  177. package/dist/assets/{index.691d9c7a.js → index.bfd23a9c.js} +1 -1
  178. package/dist/assets/{index.70f6f88a.entry.js → index.c2e31551.entry.js} +226 -230
  179. package/dist/assets/{index.a40a776b.js → index.c2e6211e.js} +1 -1
  180. package/dist/assets/{index.f80921e7.js → index.c35b11e6.js} +1 -1
  181. package/dist/assets/{index.131b4ee8.js → index.c5266851.js} +1 -1
  182. package/dist/assets/{index.b09321f5.js → index.c6e501ec.js} +1 -1
  183. package/dist/assets/{index.ae9b035a.js → index.c9fb33ab.js} +1 -1
  184. package/dist/assets/{index.4ff10039.js → index.cc6496a8.js} +1 -1
  185. package/dist/assets/{index.d911a640.js → index.cda6c2d6.js} +1 -1
  186. package/dist/assets/{index.54a49224.js → index.cef58c9b.js} +1 -1
  187. package/dist/assets/{index.a9473e05.js → index.d060d5f6.js} +1 -1
  188. package/dist/assets/{index.b8baec6c.js → index.d0fe3776.js} +1 -1
  189. package/dist/assets/{index.e7e17448.js → index.d653bbf2.js} +1 -1
  190. package/dist/assets/{index.4533ce42.js → index.d8fe2ade.js} +1 -1
  191. package/dist/assets/{index.ff5a189a.js → index.d9285c22.js} +1 -1
  192. package/dist/assets/{index.bb82940a.js → index.e3dcc63c.js} +1 -1
  193. package/dist/assets/{index.c6ea1824.js → index.e6715953.js} +1 -1
  194. package/dist/assets/{index.08e6475d.js → index.ebb444cf.js} +1 -1
  195. package/dist/assets/{index.a0bc3d71.js → index.ee22568a.js} +1 -1
  196. package/dist/assets/{index.c54243ff.js → index.ef3faba8.js} +1 -1
  197. package/dist/assets/index.f0d32a46.js +26 -0
  198. package/dist/assets/{index.3acd783e.js → index.fa57ca3f.js} +1 -1
  199. package/dist/assets/{input-rich-text-html.2d85a8a3.css → input-rich-text-html.172a38cb.css} +1 -1
  200. package/dist/assets/input-rich-text-html.c72d474e.js +239 -0
  201. package/dist/assets/insights.b3ba896c.js +2 -0
  202. package/dist/assets/installation.2025f88b.js +1 -0
  203. package/dist/assets/interfaces.606c790c.js +46 -0
  204. package/dist/assets/introduction.41a72fb0.js +1 -0
  205. package/dist/assets/introduction.527c3465.js +4 -0
  206. package/dist/assets/introduction.5566b96e.js +90 -0
  207. package/dist/assets/introduction.ecd17b88.js +1 -0
  208. package/dist/assets/it-IT.58422a56.js +1 -0
  209. package/dist/assets/items.d1f658a9.js +1 -0
  210. package/dist/assets/items.d9c6a0b4.js +136 -0
  211. package/dist/assets/ja-JP.84597497.js +1 -0
  212. package/dist/assets/{javascript-hint.29e9b67f.js → javascript-hint.af96cc6a.js} +1 -1
  213. package/dist/assets/{javascript.d2db845f.js → javascript.ed7a2c00.js} +1 -1
  214. package/dist/assets/{jinja2.f97723a0.js → jinja2.541c30d3.js} +1 -1
  215. package/dist/assets/{jsx.3f2b01c1.js → jsx.211ba53b.js} +1 -1
  216. package/dist/assets/{julia.fa920089.js → julia.66e518ec.js} +1 -1
  217. package/dist/assets/ko-KR.9056bd31.js +1 -0
  218. package/dist/assets/{ku-TR.9eee23ff.js → ku-TR.3a07a57e.js} +1 -1
  219. package/dist/assets/layouts.0aa8d645.js +54 -0
  220. package/dist/assets/layouts.14b157dc.js +1 -0
  221. package/dist/assets/{livescript.2ec2e5ab.js → livescript.06428372.js} +1 -1
  222. package/dist/assets/localization.c89061c7.js +1 -0
  223. package/dist/assets/{lt-LT.772aac6e.js → lt-LT.f2d719ff.js} +1 -1
  224. package/dist/assets/{lua.5e0c8497.js → lua.4f86b0e3.js} +1 -1
  225. package/dist/assets/manual.20d730b3.js +12 -0
  226. package/dist/assets/{mark-selection.54726b3f.js → mark-selection.c376d4be.js} +1 -1
  227. package/dist/assets/{match-highlighter.218123e7.js → match-highlighter.75cb1404.js} +1 -1
  228. package/dist/assets/{mathematica.df44764c.js → mathematica.1e1f53c5.js} +1 -1
  229. package/dist/assets/{mbox.491dfb6c.js → mbox.4a5729c3.js} +1 -1
  230. package/dist/assets/migrations.f13ec64d.js +19 -0
  231. package/dist/assets/{mirc.a9dca563.js → mirc.9b793041.js} +1 -1
  232. package/dist/assets/{mllike.0a469a43.js → mllike.4e43f07d.js} +1 -1
  233. package/dist/assets/{mn-MN.ae109212.js → mn-MN.c504a096.js} +1 -1
  234. package/dist/assets/{modelica.306697a8.js → modelica.deb73769.js} +1 -1
  235. package/dist/assets/modules.9b5ee510.js +69 -0
  236. package/dist/assets/{ms-MY.e50ff23a.js → ms-MY.e6553dad.js} +1 -1
  237. package/dist/assets/{mscgen.a45d586b.js → mscgen.48ffdfc0.js} +1 -1
  238. package/dist/assets/{multiplex.26e09ed5.js → multiplex.a2d83d7f.js} +1 -1
  239. package/dist/assets/{mumps.ae29c70e.js → mumps.210b8bdf.js} +1 -1
  240. package/dist/assets/{nginx.52e6bfcd.js → nginx.dbe68b8c.js} +1 -1
  241. package/dist/assets/{nl-NL.b57de112.js → nl-NL.2f00af44.js} +1 -1
  242. package/dist/assets/{no-NO.79458b78.js → no-NO.59f9d425.js} +1 -1
  243. package/dist/assets/notifications.674ee6f9.js +153 -0
  244. package/dist/assets/{nsis.5869c4bd.js → nsis.5576ebf1.js} +1 -1
  245. package/dist/assets/{ntriples.c7dd54df.js → ntriples.07c64718.js} +1 -1
  246. package/dist/assets/{octave.ef49cef7.js → octave.9cb94caa.js} +1 -1
  247. package/dist/assets/operations.46679bea.js +1 -0
  248. package/dist/assets/operations.9995851b.js +169 -0
  249. package/dist/assets/{overlay.9a3d0cba.js → overlay.b1fd0f5a.js} +1 -1
  250. package/dist/assets/overview.3616b560.js +1 -0
  251. package/dist/assets/overview.3c9f8f3d.js +1 -0
  252. package/dist/assets/overview.6438dc44.js +1 -0
  253. package/dist/assets/{oz.6a13c27c.js → oz.4bedbc84.js} +1 -1
  254. package/dist/assets/panels.570ee526.js +65 -0
  255. package/dist/assets/{pascal.77947c82.js → pascal.9f3e47db.js} +1 -1
  256. package/dist/assets/{pegjs.fb3674fc.js → pegjs.38dabda4.js} +1 -1
  257. package/dist/assets/{perl.bd20c5e2.js → perl.d07c357e.js} +1 -1
  258. package/dist/assets/permissions.768d1878.js +178 -0
  259. package/dist/assets/{php.f7000a8d.js → php.a2fb29e5.js} +1 -1
  260. package/dist/assets/{pig.7044156f.js → pig.cc357f9e.js} +1 -1
  261. package/dist/assets/pl-PL.80cfbed6.js +1 -0
  262. package/dist/assets/plesk.b0ee9a9a.js +27 -0
  263. package/dist/assets/{powershell.d6251d29.js → powershell.283f357b.js} +1 -1
  264. package/dist/assets/presets-bookmarks.522baf53.js +1 -0
  265. package/dist/assets/presets.d902ebfa.js +164 -0
  266. package/dist/assets/project-settings.1f95b799.js +1 -0
  267. package/dist/assets/projects.1ea6a392.js +1 -0
  268. package/dist/assets/{properties.21d46a91.js → properties.57480d0c.js} +1 -1
  269. package/dist/assets/{protobuf.0595884b.js → protobuf.c1758733.js} +1 -1
  270. package/dist/assets/pt-BR.40750500.js +1 -0
  271. package/dist/assets/pt-PT.fae0fcc3.js +1 -0
  272. package/dist/assets/{pug.02047604.js → pug.bdcaf1c5.js} +1 -1
  273. package/dist/assets/{puppet.7c07ba75.js → puppet.8b6ff9f4.js} +1 -1
  274. package/dist/assets/{python.fe6c7a24.js → python.987c2ae7.js} +1 -1
  275. package/dist/assets/{q.bfdf1988.js → q.85f4c589.js} +1 -1
  276. package/dist/assets/query.8abea6de.js +152 -0
  277. package/dist/assets/quickstart.75164dd7.js +9 -0
  278. package/dist/assets/quickstart.9985cb15.js +20 -0
  279. package/dist/assets/{r.d6b5ac21.js → r.25d10fd4.js} +1 -1
  280. package/dist/assets/relations.9011b2b5.js +115 -0
  281. package/dist/assets/relationships.cbc9b1c5.js +55 -0
  282. package/dist/assets/resources.25cb1e34.js +1 -0
  283. package/dist/assets/revisions.c90ecb76.js +40 -0
  284. package/dist/assets/{ro-RO.5161835a.js → ro-RO.a1adfb6a.js} +1 -1
  285. package/dist/assets/roles.22f7aa37.js +171 -0
  286. package/dist/assets/{rpm.92483469.js → rpm.8909ead0.js} +1 -1
  287. package/dist/assets/{rst.b2603799.js → rst.4d43ef54.js} +1 -1
  288. package/dist/assets/ru-RU.35703ea4.js +1 -0
  289. package/dist/assets/{ruby.0246dbd5.js → ruby.b7e26986.js} +1 -1
  290. package/dist/assets/running-locally.ce0a8200.js +26 -0
  291. package/dist/assets/{rust.dd8abd8d.js → rust.6984b11a.js} +1 -1
  292. package/dist/assets/{sas.d26b2302.js → sas.91990a72.js} +1 -1
  293. package/dist/assets/{sass.a791aa27.js → sass.898f89c7.js} +1 -1
  294. package/dist/assets/{scheme.ef2b1440.js → scheme.f661c5b8.js} +1 -1
  295. package/dist/assets/sdk.916109ed.js +393 -0
  296. package/dist/assets/security.1963da73.js +1 -0
  297. package/dist/assets/server.afec52fc.js +114 -0
  298. package/dist/assets/settings.835be62f.js +51 -0
  299. package/dist/assets/settings.a02abd85.js +1 -0
  300. package/dist/assets/{shell.2f3bc735.js → shell.af2902da.js} +1 -1
  301. package/dist/assets/{show-hint.6fa4d537.js → show-hint.2d43524d.js} +1 -1
  302. package/dist/assets/{sieve.99fca314.js → sieve.327a81f8.js} +1 -1
  303. package/dist/assets/{simple.0e90a38e.js → simple.4fb4f28d.js} +1 -1
  304. package/dist/assets/{sl-SI.719d987e.js → sl-SI.632899f8.js} +1 -1
  305. package/dist/assets/{slim.92d997b6.js → slim.e97ce531.js} +1 -1
  306. package/dist/assets/{smalltalk.a9b3ffec.js → smalltalk.b9556415.js} +1 -1
  307. package/dist/assets/{smarty.c54a652c.js → smarty.d91926e3.js} +1 -1
  308. package/dist/assets/{solr.1356a877.js → solr.20381d3e.js} +1 -1
  309. package/dist/assets/{soy.e1b19eef.js → soy.a0154260.js} +1 -1
  310. package/dist/assets/{sparql.1335f7a5.js → sparql.36de4d3f.js} +1 -1
  311. package/dist/assets/{spreadsheet.e9096343.js → spreadsheet.00a4877b.js} +1 -1
  312. package/dist/assets/{sql.ac45a460.js → sql.1f7dd82a.js} +1 -1
  313. package/dist/assets/{sr-CS.c513578f.js → sr-CS.2e5b18be.js} +1 -1
  314. package/dist/assets/{sso-examples.b52061be.js → sso-examples.048b39c5.js} +12 -12
  315. package/dist/assets/sso.70be105f.js +22 -0
  316. package/dist/assets/{stex.fb7fd990.js → stex.2b7cb363.js} +1 -1
  317. package/dist/assets/{stylus.d0281b2a.js → stylus.123ca166.js} +1 -1
  318. package/dist/assets/support.fce2dba5.js +1 -0
  319. package/dist/assets/{sv-SE.a70fd097.js → sv-SE.d485ddd3.js} +1 -1
  320. package/dist/assets/{swift.a9fd2d64.js → swift.9ca91d28.js} +1 -1
  321. package/dist/assets/{tcl.8f7bdfb5.js → tcl.1b7f83bd.js} +1 -1
  322. package/dist/assets/teams.44eb670e.js +1 -0
  323. package/dist/assets/{textile.ae199003.js → textile.ee402504.js} +1 -1
  324. package/dist/assets/{th-TH.bdbc4a8c.js → th-TH.1e9ab13f.js} +1 -1
  325. package/dist/assets/themes.e4a7762f.js +5 -0
  326. package/dist/assets/{tiddlywiki.52caa0ed.js → tiddlywiki.67540872.js} +1 -1
  327. package/dist/assets/{tiki.831b9315.js → tiki.fb6dd4a0.js} +1 -1
  328. package/dist/assets/{toml.6f660b6b.js → toml.9c5fe3d8.js} +1 -1
  329. package/dist/assets/{tornado.01563722.js → tornado.c681a8fd.js} +1 -1
  330. package/dist/assets/tr-TR.feb24957.js +1 -0
  331. package/dist/assets/translation-strings.4ed25965.js +1 -0
  332. package/dist/assets/translations.cf2353ca.js +1 -0
  333. package/dist/assets/triggers.05092cdf.js +1 -0
  334. package/dist/assets/{troff.f5f797f2.js → troff.a6f4e798.js} +1 -1
  335. package/dist/assets/{ttcn-cfg.a6927435.js → ttcn-cfg.a0214838.js} +1 -1
  336. package/dist/assets/{ttcn.24c6b925.js → ttcn.4c22a431.js} +1 -1
  337. package/dist/assets/{turtle.d0e831a8.js → turtle.d40e9c31.js} +1 -1
  338. package/dist/assets/{twig.d5e90842.js → twig.d78613df.js} +1 -1
  339. package/dist/assets/ubuntu.35dc97df.js +11 -0
  340. package/dist/assets/uk-UA.0e92f9a4.js +1 -0
  341. package/dist/assets/upgrades-migrations.9218bbe9.js +1 -0
  342. package/dist/assets/use-sync.c0f4dfab.js +28 -0
  343. package/dist/assets/user-directory.3daaa818.js +1 -0
  344. package/dist/assets/users-roles-permissions.6e18f7ca.js +1 -0
  345. package/dist/assets/users.4f11a7c5.js +252 -0
  346. package/dist/assets/utilities.0e0d0ace.js +74 -0
  347. package/dist/assets/{vb.bb33c7a5.js → vb.5adeb8ea.js} +1 -1
  348. package/dist/assets/{vbscript.d8f8d95e.js → vbscript.27937162.js} +1 -1
  349. package/dist/assets/{velocity.26721ec5.js → velocity.581c25aa.js} +1 -1
  350. package/dist/assets/{verilog.24512a86.js → verilog.9f72c282.js} +1 -1
  351. package/dist/assets/{vhdl.6e64552d.js → vhdl.4d290e0b.js} +1 -1
  352. package/dist/assets/{vi-VN.7478a743.js → vi-VN.3e9c985f.js} +1 -1
  353. package/dist/assets/{vue.4450af40.js → vue.cf5a232a.js} +1 -1
  354. package/dist/assets/{wast.79f64b4c.js → wast.16f886c5.js} +1 -1
  355. package/dist/assets/webhooks.00ee297b.js +147 -0
  356. package/dist/assets/webhooks.01ddb390.js +1 -0
  357. package/dist/assets/{webidl.860cea4e.js → webidl.1185b166.js} +1 -1
  358. package/dist/assets/{xquery.23f4fa34.js → xquery.34864271.js} +1 -1
  359. package/dist/assets/{yacas.0d60e6b0.js → yacas.880a270b.js} +1 -1
  360. package/dist/assets/{yaml-frontmatter.70ea956b.js → yaml-frontmatter.4cec6c13.js} +1 -1
  361. package/dist/assets/{yaml.9d5c3ac9.js → yaml.15292258.js} +1 -1
  362. package/dist/assets/{z80.527b7cb8.js → z80.727a7271.js} +1 -1
  363. package/dist/assets/zh-CN.432cf71e.js +1 -0
  364. package/dist/assets/zh-TW.cac20c88.js +1 -0
  365. package/dist/index.html +3 -3
  366. package/package.json +10 -7
  367. package/dist/assets/accounts.08433099.js +0 -1
  368. package/dist/assets/activity-log.fd558c9b.js +0 -1
  369. package/dist/assets/activity.0def80ca.js +0 -80
  370. package/dist/assets/ar-SA.1a6c2c65.js +0 -1
  371. package/dist/assets/authentication.a6f04750.js +0 -73
  372. package/dist/assets/aws.3b1c64af.js +0 -1
  373. package/dist/assets/backing-directus.1ed89e33.js +0 -1
  374. package/dist/assets/bg-BG.0eca7613.js +0 -2
  375. package/dist/assets/bn-IN.1385676c.js +0 -1
  376. package/dist/assets/cli.5153aa86.js +0 -4
  377. package/dist/assets/cli.e8e2526b.js +0 -19
  378. package/dist/assets/cloudron.53c430b8.js +0 -1
  379. package/dist/assets/codebase-overview.e9df94fc.js +0 -1
  380. package/dist/assets/collections.1c745e99.css +0 -1
  381. package/dist/assets/collections.2453db3a.js +0 -106
  382. package/dist/assets/collections.aa896b3f.js +0 -2
  383. package/dist/assets/config-options.b1233b4b.js +0 -138
  384. package/dist/assets/content.1b1e95cf.js +0 -1
  385. package/dist/assets/creating-extensions.bfd7c57c.js +0 -11
  386. package/dist/assets/cs-CZ.6910228b.js +0 -1
  387. package/dist/assets/data-model.0e360572.js +0 -1
  388. package/dist/assets/data-sharing.da96e52e.js +0 -1
  389. package/dist/assets/de-DE.d1197f4c.js +0 -1
  390. package/dist/assets/digitalocean-app-platform.3412cb40.js +0 -3
  391. package/dist/assets/display-templates.915c0c5b.js +0 -1
  392. package/dist/assets/displays.99989c6d.js +0 -49
  393. package/dist/assets/documentation.788d4998.js +0 -1
  394. package/dist/assets/email-templates.1f5ac335.js +0 -2
  395. package/dist/assets/endpoints.aaac7c81.js +0 -27
  396. package/dist/assets/es-419.aa0bf259.js +0 -1
  397. package/dist/assets/es-CL.e42c6c3c.js +0 -1
  398. package/dist/assets/es-ES.5c7e9438.js +0 -1
  399. package/dist/assets/es-MX.956444f4.js +0 -1
  400. package/dist/assets/extensions.34c12005.js +0 -12
  401. package/dist/assets/faq.89e68608.js +0 -2
  402. package/dist/assets/fields.54985585.js +0 -135
  403. package/dist/assets/file-library.3e651030.js +0 -1
  404. package/dist/assets/files.064d5a35.js +0 -187
  405. package/dist/assets/filter-rules.e442e006.js +0 -76
  406. package/dist/assets/filters.3db1b044.js +0 -1
  407. package/dist/assets/folders.0024d3d3.js +0 -132
  408. package/dist/assets/fr-CA.6d6d8d1f.js +0 -1
  409. package/dist/assets/fr-FR.7fa01b32.js +0 -1
  410. package/dist/assets/gcp.627205b5.js +0 -60
  411. package/dist/assets/github-ci.abd39dcc.js +0 -2
  412. package/dist/assets/glossary.75ca2027.js +0 -1
  413. package/dist/assets/glossary.bf083fb1.js +0 -1
  414. package/dist/assets/hooks.eda18b02.js +0 -60
  415. package/dist/assets/id-ID.a0052c00.js +0 -1
  416. package/dist/assets/iis.109e5a8a.js +0 -24
  417. package/dist/assets/import-export.3da878a4.js +0 -2
  418. package/dist/assets/index.40c42250.css +0 -1
  419. package/dist/assets/index.9b42e31d.js +0 -26
  420. package/dist/assets/input-rich-text-html.1550fe06.js +0 -240
  421. package/dist/assets/insights.c8ed7c1c.js +0 -1
  422. package/dist/assets/installation.78c6d9f6.js +0 -1
  423. package/dist/assets/interfaces.9e145c45.js +0 -46
  424. package/dist/assets/introduction.2e6f5c1d.js +0 -90
  425. package/dist/assets/introduction.78a2a844.js +0 -4
  426. package/dist/assets/introduction.7c5efc8a.js +0 -1
  427. package/dist/assets/introduction.d5621d79.js +0 -1
  428. package/dist/assets/it-IT.34d52fbd.js +0 -1
  429. package/dist/assets/items.4205dfa0.js +0 -136
  430. package/dist/assets/items.64ed9295.js +0 -1
  431. package/dist/assets/ja-JP.819a38cf.js +0 -1
  432. package/dist/assets/ko-KR.30f60079.js +0 -1
  433. package/dist/assets/layouts.3c14b583.js +0 -54
  434. package/dist/assets/layouts.ca8afd39.js +0 -1
  435. package/dist/assets/localization.374b7427.js +0 -1
  436. package/dist/assets/manual.ab601c95.js +0 -10
  437. package/dist/assets/migrations.8989fedc.js +0 -19
  438. package/dist/assets/modules.17c944d1.js +0 -69
  439. package/dist/assets/notifications.33c688c9.js +0 -153
  440. package/dist/assets/overview.3436365c.js +0 -1
  441. package/dist/assets/overview.623fafba.js +0 -1
  442. package/dist/assets/overview.dbebe94a.js +0 -1
  443. package/dist/assets/panels.385b173a.js +0 -65
  444. package/dist/assets/permissions.f84f8d42.js +0 -178
  445. package/dist/assets/pl-PL.22d5965f.js +0 -1
  446. package/dist/assets/plesk.f7e3d5ef.js +0 -27
  447. package/dist/assets/presets-bookmarks.1b8ec70c.js +0 -1
  448. package/dist/assets/presets.b1e8b6c1.js +0 -164
  449. package/dist/assets/project-settings.d32669a9.js +0 -1
  450. package/dist/assets/projects.b0451bed.js +0 -1
  451. package/dist/assets/pt-BR.2d6fa7cc.js +0 -1
  452. package/dist/assets/pt-PT.c28534a0.js +0 -1
  453. package/dist/assets/query.dbe0b56d.js +0 -152
  454. package/dist/assets/quickstart.01824cc9.js +0 -9
  455. package/dist/assets/quickstart.4d7c7736.js +0 -20
  456. package/dist/assets/relations.d29aa86d.js +0 -115
  457. package/dist/assets/relationships.c9c5db8a.js +0 -55
  458. package/dist/assets/revisions.2898106e.js +0 -40
  459. package/dist/assets/roles.9fec37da.js +0 -171
  460. package/dist/assets/ru-RU.39540ee0.js +0 -1
  461. package/dist/assets/running-locally.811d0dcc.js +0 -26
  462. package/dist/assets/sdk.12cd7974.js +0 -393
  463. package/dist/assets/security.8e2a8a41.js +0 -1
  464. package/dist/assets/server.9f12ae3e.js +0 -114
  465. package/dist/assets/settings.149d1dff.js +0 -1
  466. package/dist/assets/settings.28abc1f0.js +0 -51
  467. package/dist/assets/sso.64b2717b.js +0 -22
  468. package/dist/assets/support.94e3734b.js +0 -1
  469. package/dist/assets/teams.9ff14f8f.js +0 -1
  470. package/dist/assets/themes.df7ec485.js +0 -5
  471. package/dist/assets/tr-TR.d7a7361f.js +0 -1
  472. package/dist/assets/translations.5191ab7c.js +0 -1
  473. package/dist/assets/ubuntu.f4c21886.js +0 -11
  474. package/dist/assets/uk-UA.473dd1c9.js +0 -1
  475. package/dist/assets/upgrades-migrations.15498a47.js +0 -1
  476. package/dist/assets/use-sync.ded22f96.js +0 -28
  477. package/dist/assets/user-directory.47c8beb2.js +0 -1
  478. package/dist/assets/users-roles-permissions.005388fa.js +0 -1
  479. package/dist/assets/users.84251ab9.js +0 -252
  480. package/dist/assets/utilities.26e6a9e8.js +0 -74
  481. package/dist/assets/webhooks.4eeecb7d.js +0 -147
  482. package/dist/assets/webhooks.61b11e7d.js +0 -1
  483. package/dist/assets/zh-CN.c51e7308.js +0 -1
  484. package/dist/assets/zh-TW.8ef6cec8.js +0 -1
  485. package/dist/robots.txt +0 -2
@@ -1,152 +0,0 @@
1
- import{a as s,o,b as c,w as t,g as e,e as d,B as l}from"./runtime-core.esm-bundler.b1f35d24.js";var a={};const h={class:"markdown-body"},u=e("div",{class:"two-up"},[e("div",{class:"left"},[e("blockquote",null,[e("p",null,"Most Directus API Endpoint operations can be manipulated with the following parameters. It is important to understand them to get the most out of the platform.")])]),e("div",{class:"right"},[e("p"),e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#fields"},"Fields")]),e("li",null,[e("a",{href:"#filter"},"Filter")]),e("li",null,[e("a",{href:"#search"},"Search")]),e("li",null,[e("a",{href:"#sort"},"Sort")]),e("li",null,[e("a",{href:"#limit"},"Limit")]),e("li",null,[e("a",{href:"#offset"},"Offset"),l(" / "),e("a",{href:"#page"},"Page")]),e("li",null,[e("a",{href:"#aggregation-grouping"},"Aggregation & Grouping")]),e("li",null,[e("a",{href:"#deep"},"Deep")]),e("li",null,[e("a",{href:"#aliases"},"Aliases")]),e("li",null,[e("a",{href:"#export"},"Export")])]),e("p"),l(" - [Functions](#functions) "),e("p"),l(" - [Metadata](#metadata) - [Total Count](#total-count) - [Filter Count](#filter-count) ")])])],-1),p=e("hr",null,null,-1),f=e("h2",{id:"fields"},[l("Fields "),e("a",{class:"header-anchor",href:"#fields"},"#")],-1),g=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,"Choose the fields that are returned in the current dataset. This parameter supports dot notation to request nested relational fields. You can also use a wildcard (*) to include all fields at a specific depth.")])],-1),m=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"examples"},[l("Examples "),e("a",{class:"header-anchor",href:"#examples"},"#")]),e("p",null,[l("Get all top-level fields"),e("br"),e("code",{class:""},"*")]),e("p",null,[l("Get all top-level fields and all second-level relational fields"),e("br"),e("code",{class:""},"*.*")]),e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Performance & Size"),e("p",null,[l("While the fields wildcard is very useful for debugging purposes, we recommend only requesting "),e("em",null,"specific"),l(" fields for production use. By only requesting the fields you really need, you can speed up the request, and reduce the overall output size.")])]),e("p",null,[l("Get all top-level fields and second-level relational fields within images"),e("br"),e("code",{class:""},"*,images.*")]),e("p",null,[l("Get only the first_name and last_name fields"),e("br"),e("code",{class:""},"first_name,last_name")]),e("p",null,[l("Get all top-level and second-level relational fields, and third-level fields within images.thumbnails"),e("br"),e("code",{class:""},"*.*,images.thumbnails.*")]),e("h3",{id:"many-to-any-(union-types)"},[l("Many-To-Any (Union Types) "),e("a",{class:"header-anchor",href:"#many-to-any-(union-types)"},"#")]),e("p",null,[l("Seeing that Many-to-Any (m2a) fields have nested data from multiple collections, it\u2019s not always safe / wanted to fetch the same field from every related collection. In m2a fields, you can use the following syntax to specify what fields to fetch from which related nested collection type:"),e("br"),e("code",{class:""},"?fields=<m2a-field>:<collection-scope>.<field>"),l(".")]),e("p",null,[l("Lets say we have a collection "),e("code",{class:""},"pages"),l(" with a many-to-any field called "),e("code",{class:""},"sections"),l(" that points to "),e("code",{class:""},"headings"),l(", "),e("code",{class:""},"paragraphs"),l(", and "),e("code",{class:""},"videos"),l(". We only want to fetch "),e("code",{class:""},"title"),l(" and "),e("code",{class:""},"level"),l(" from "),e("code",{class:""},"headings"),l(", "),e("code",{class:""},"body"),l(" from "),e("code",{class:""},"paragraphs"),l(" and "),e("code",{class:""},"source"),l(" from "),e("code",{class:""},"videos"),l(". We can achieve that by using:")]),e("pre",null,[e("code",{class:""},`sections.item:headings.title
2
- sections.item:headings.level
3
- sections.item:paragraphs.body
4
- sections.item:videos.source
5
- `)]),e("p",null,"In GraphQL, this can be achieved using Union Types.")]),e("div",{class:"right"},[e("h3",{id:"rest-api"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api"},"#")]),e("pre",null,[e("code",{class:""},`?fields=title,body,featured_image.*
6
-
7
- // or
8
-
9
- ?fields[]=title
10
- &fields[]=body
11
- &fields[]=featured_image.*
12
- `)]),e("h3",{id:"graphql"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql"},"#")]),e("p",null,[e("em",null,"Natively supported in GraphQL")])])],-1),_=e("hr",null,null,-1),v=e("h2",{id:"filter"},[l("Filter "),e("a",{class:"header-anchor",href:"#filter"},"#")],-1),y={class:"two-up"},w={class:"left"},b=l("Used to search items in a collection that matches the filter\u2019s conditions. The filter param follows "),q=l("the Filter Rules spec"),j=l(", which includes additional information on logical operators (AND/OR), nested relational filtering, and dynamic variables."),x=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"examples-2"},[l("Examples "),e("a",{class:"header-anchor",href:"#examples-2"},"#")]),e("p",null,[l("Retrieve all items where "),e("code",{class:""},"first_name"),l(" equals \u201CRijk\u201D")]),e("pre",null,[e("code",{class:"language-json"},[l(`{
13
- `),e("span",{class:"hljs-attr"},'"first_name"'),l(`: {
14
- `),e("span",{class:"hljs-attr"},'"_eq"'),l(": "),e("span",{class:"hljs-string"},'"Rijk"'),l(`
15
- }
16
- }
17
- `)])]),e("p",null,"Retrieve all items in one of the following categories: \u201Cvegetables\u201D, \u201Cfruit\u201D"),e("pre",null,[e("code",{class:"language-json"},[l(`{
18
- `),e("span",{class:"hljs-attr"},'"categories"'),l(`: {
19
- `),e("span",{class:"hljs-attr"},'"_in"'),l(": ["),e("span",{class:"hljs-string"},'"vegetables"'),l(", "),e("span",{class:"hljs-string"},'"fruit"'),l(`]
20
- }
21
- }
22
- `)])]),e("p",null,"Retrieve all items that are published between two dates"),e("pre",null,[e("code",{class:"language-json"},[l(`{
23
- `),e("span",{class:"hljs-attr"},'"date_published"'),l(`: {
24
- `),e("span",{class:"hljs-attr"},'"_between"'),l(": ["),e("span",{class:"hljs-string"},'"2021-01-24"'),l(", "),e("span",{class:"hljs-string"},'"2021-02-23"'),l(`]
25
- }
26
- }
27
- `)])]),e("p",null,"Retrieve all items where the author\u2019s \u201Cvip\u201D flag is true"),e("pre",null,[e("code",{class:"language-json"},[l(`{
28
- `),e("span",{class:"hljs-attr"},'"author"'),l(`: {
29
- `),e("span",{class:"hljs-attr"},'"vip"'),l(`: {
30
- `),e("span",{class:"hljs-attr"},'"_eq"'),l(": "),e("span",{class:"hljs-literal"},"true"),l(`
31
- }
32
- }
33
- }
34
- `)])]),e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Nested Filters"),e("p",null,[l("The above example will filter the "),e("em",null,"top level"),l(" items based on a condition "),e("em",null,"in"),l(" the related item. If you\u2019re looking to filter the related items themselves, take a look at "),e("a",{href:"#deep"},[l("the "),e("code",{class:""},"deep"),l(" parameter")]),l("!")])])]),e("div",{class:"right"},[e("h3",{id:"rest-api-2"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-2"},"#")]),e("pre",null,[e("code",{class:""},`?filter[first_name][_eq]=Rijk
35
-
36
- // or
37
-
38
- ?filter={ "first_name": { "_eq": "Rijk" }}
39
- `)]),e("h3",{id:"graphql-2"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-2"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
40
- users(filter: { first_name: { _eq: `),e("span",{class:"hljs-string"},'"Rijk"'),l(` } }) {
41
- id
42
- }
43
- }
44
- `)])])])],-1),k=e("hr",null,null,-1),G=e("h2",{id:"search"},[l("Search "),e("a",{class:"header-anchor",href:"#search"},"#")],-1),E=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,"The search parameter allows you to perform a search on all string and text type fields within a collection. It\u2019s an easy way to search for an item without creating complex field filters \u2013 though it is far less optimized. It only searches the root item\u2019s fields, related item fields are not included.")])],-1),A=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"example"},[l("Example "),e("a",{class:"header-anchor",href:"#example"},"#")]),e("p",null,[l("Find all items that mention Directus"),e("br"),e("code",{class:""},"Directus")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-3"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-3"},"#")]),e("pre",null,[e("code",{class:""},`?search=Directus
45
- `)]),e("h3",{id:"graphql-3"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-3"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
46
- articles(search: `),e("span",{class:"hljs-string"},'"Directus"'),l(`) {
47
- id
48
- }
49
- }
50
- `)])])])],-1),S=e("hr",null,null,-1),T=e("h2",{id:"sort"},[l("Sort "),e("a",{class:"header-anchor",href:"#sort"},"#")],-1),R=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,[l("What field(s) to sort by. Sorting defaults to ascending, but a minus sign ("),e("code",{class:""},"-"),l(") can be used to reverse this to descending order. Fields are prioritized by the order in the parameter.")])])],-1),L=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"examples-3"},[l("Examples "),e("a",{class:"header-anchor",href:"#examples-3"},"#")]),e("p",null,[l("Sort by creation date descending"),e("br"),e("code",{class:""},"-date_created")]),e("p",null,[l("Sort by a \u201Csort\u201D field, followed by publish date descending"),e("br"),e("code",{class:""},"sort, -publish_date")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-4"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-4"},"#")]),e("pre",null,[e("code",{class:""},`?sort=sort,-date_created
51
-
52
- // or
53
-
54
- ?sort[]=sort
55
- &sort[]=-date_created
56
- `)]),e("h3",{id:"graphql-4"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-4"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
57
- articles(sort: [`),e("span",{class:"hljs-string"},'"sort"'),l(", "),e("span",{class:"hljs-string"},'"-date_created"'),l(`]) {
58
- id
59
- }
60
- }
61
- `)])])])],-1),I=e("hr",null,null,-1),P=e("h2",{id:"limit"},[l("Limit "),e("a",{class:"header-anchor",href:"#limit"},"#")],-1),Q=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,[l("Set the maximum number of items that will be returned. The default limit is set to "),e("code",{class:""},"100"),l(".")])])],-1),F=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"examples-4"},[l("Examples "),e("a",{class:"header-anchor",href:"#examples-4"},"#")]),e("p",null,[l("Get the first 200 items"),e("br"),e("code",{class:""},"200")]),e("p",null,[l("Get all items"),e("br"),e("code",{class:""},"-1")]),e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"All Items"),e("p",null,"Depending on the size of your collection, fetching unlimited data may result in degraded performance or timeouts, use with caution.")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-5"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-5"},"#")]),e("pre",null,[e("code",{class:""},`?limit=200
62
- `)]),e("h3",{id:"graphql-5"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-5"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
63
- articles(limit: `),e("span",{class:"hljs-number"},"200"),l(`) {
64
- id
65
- }
66
- }
67
- `)])])])],-1),D=e("hr",null,null,-1),N=e("h2",{id:"offset"},[l("Offset "),e("a",{class:"header-anchor",href:"#offset"},"#")],-1),C=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,[l("Skip the first "),e("code",{class:""},"n"),l(" items in the response. Can be used for pagination.")])])],-1),B=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"examples-5"},[l("Examples "),e("a",{class:"header-anchor",href:"#examples-5"},"#")]),e("p",null,[l("Get items 101\u2014200"),e("br"),e("code",{class:""},"100")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-6"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-6"},"#")]),e("pre",null,[e("code",{class:""},`?offset=100
68
- `)]),e("h3",{id:"graphql-6"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-6"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
69
- articles(offset: `),e("span",{class:"hljs-number"},"100"),l(`) {
70
- id
71
- }
72
- }
73
- `)])])])],-1),M=e("hr",null,null,-1),z=e("h2",{id:"page"},[l("Page "),e("a",{class:"header-anchor",href:"#page"},"#")],-1),O=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,[l("An alternative to "),e("code",{class:""},"offset"),l(". Page is a way to set "),e("code",{class:""},"offset"),l(" under the hood by calculating "),e("code",{class:""},"limit * page"),l(". Page is 1-indexed.")])])],-1),U=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"examples-6"},[l("Examples "),e("a",{class:"header-anchor",href:"#examples-6"},"#")]),e("p",null,[l("Get items 1-100"),e("br"),e("code",{class:""},"1")]),e("p",null,[l("Get items 101-200"),e("br"),e("code",{class:""},"2")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-7"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-7"},"#")]),e("pre",null,[e("code",{class:""},`?page=2
74
- `)]),e("h3",{id:"graphql-7"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-7"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
75
- articles(page: `),e("span",{class:"hljs-number"},"2"),l(`) {
76
- id
77
- }
78
- }
79
- `)])])])],-1),W=e("hr",null,null,-1),V=e("h2",{id:"aggregation-%26-grouping"},[l("Aggregation & Grouping "),e("a",{class:"header-anchor",href:"#aggregation-%26-grouping"},"#")],-1),J=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,"Aggregate functions allow you to perform calculations on a set of values, returning a single result.")])],-1),Y=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,"The following aggregation functions are available in Directus:"),e("table",null,[e("thead",null,[e("tr",null,[e("th",null,"Name"),e("th",null,"Description")])]),e("tbody",null,[e("tr",null,[e("td",null,[e("code",{class:""},"count")]),e("td",null,"Counts how many items there are")]),e("tr",null,[e("td",null,[e("code",{class:""},"countDistinct")]),e("td",null,"Counts how many unique items there are")]),e("tr",null,[e("td",null,[e("code",{class:""},"sum")]),e("td",null,"Adds together the values in the given field")]),e("tr",null,[e("td",null,[e("code",{class:""},"sumDistinct")]),e("td",null,"Adds together the unique values in the given field")]),e("tr",null,[e("td",null,[e("code",{class:""},"avg")]),e("td",null,"Get the average value of the given field")]),e("tr",null,[e("td",null,[e("code",{class:""},"avgDistinct")]),e("td",null,"Get the average value of the unique values in the given field")]),e("tr",null,[e("td",null,[e("code",{class:""},"min")]),e("td",null,"Return the lowest value in the field")]),e("tr",null,[e("td",null,[e("code",{class:""},"max")]),e("td",null,"Return the highest value in the field")]),e("tr",null,[e("td",null,[e("code",{class:""},"countAll")]),e("td",null,[l("Equivalent to "),e("code",{class:""},"?aggregate[count]=*"),l(" (GraphQL only)")])])])]),e("h3",{id:"grouping"},[l("Grouping "),e("a",{class:"header-anchor",href:"#grouping"},"#")]),e("p",null,[l("By default, the above aggregation functions run on the whole dataset. To allow for more flexible reporting, you can combine the above aggregation with grouping. Grouping allows for running the aggregation functions based on a shared value. This allows for things like "),e("em",null,"\u201CAverage rating per month\u201D"),l(" or "),e("em",null,"\u201CTotal sales of items in the jeans category\u201D"),l(".")]),e("p",null,[l("The "),e("code",{class:""},"groupBy"),l(" query allows for grouping on multiple fields simultaneously. Combined with the "),e("a",{href:"#functions"},"Functions"),l(", this allows for aggregate reporting per year-month-date.")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-8"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-8"},"#")]),e("pre",null,[e("code",{class:""},`?aggregate[avg]=cost
80
- &groupBy[]=author
81
- &groupBy[]=year(publish_date)
82
- `)]),e("h3",{id:"graphql-8"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-8"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
83
- articles_aggregated(groupBy: [`),e("span",{class:"hljs-string"},'"author"'),l(", "),e("span",{class:"hljs-string"},'"year(publish_date)"'),l(`]) {
84
- group
85
- sum {
86
- revenue
87
- }
88
- }
89
- }
90
- `)])])])],-1),H=e("hr",null,null,-1),K=e("h2",{id:"deep"},[l("Deep "),e("a",{class:"header-anchor",href:"#deep"},"#")],-1),X=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,"Deep allows you to set any of the other query parameters on a nested relational dataset.")])],-1),Z=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"examples-7"},[l("Examples "),e("a",{class:"header-anchor",href:"#examples-7"},"#")]),e("p",null,"Limit the nested related articles to 3"),e("pre",null,[e("code",{class:"language-json"},[l(`{
91
- `),e("span",{class:"hljs-attr"},'"related_articles"'),l(`: {
92
- `),e("span",{class:"hljs-attr"},'"_limit"'),l(": "),e("span",{class:"hljs-number"},"3"),l(`
93
- }
94
- }
95
- `)])]),e("p",null,"Only get 3 related articles, with only the top rated comment nested"),e("pre",null,[e("code",{class:"language-json"},[l(`{
96
- `),e("span",{class:"hljs-attr"},'"related_articles"'),l(`: {
97
- `),e("span",{class:"hljs-attr"},'"_limit"'),l(": "),e("span",{class:"hljs-number"},"3"),l(`,
98
- `),e("span",{class:"hljs-attr"},'"comments"'),l(`: {
99
- `),e("span",{class:"hljs-attr"},'"_sort"'),l(": "),e("span",{class:"hljs-string"},'"rating"'),l(`,
100
- `),e("span",{class:"hljs-attr"},'"_limit"'),l(": "),e("span",{class:"hljs-number"},"1"),l(`
101
- }
102
- }
103
- }
104
- `)])])]),e("div",{class:"right"},[e("h3",{id:"rest-api-9"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-9"},"#")]),e("pre",null,[e("code",{class:""},`?deep[translations][_filter][languages_code][_eq]=en-US
105
-
106
- // or
107
-
108
- ?deep={ "translations": { "_filter": { "languages_code": { "_eq": "en-US" }}}}
109
- `)]),e("h3",{id:"graphql-9"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-9"},"#")]),e("p",null,[e("em",null,"Natively supported in GraphQL:")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
110
- members {
111
- favorite_games(filter: { name: { _eq: `),e("span",{class:"hljs-string"},'"Mariokart 8"'),l(` } }) {
112
- id
113
- featured_image {
114
- filename_disk
115
- }
116
- }
117
- }
118
- }
119
- `)])])])],-1),$=e("hr",null,null,-1),ee=e("h2",{id:"aliases"},[l("Aliases "),e("a",{class:"header-anchor",href:"#aliases"},"#")],-1),le=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,"Aliases allow you rename fields on the fly, and request the same nested data set multiple times using different filters.")])],-1),se=e("div",{class:"two-up"},[e("div",{class:"left"},[e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Nested fields"),e("p",null,[l("It is only possible to alias same level fields."),e("br"),l(" Alias for nested fields, f.e. "),e("code",{class:""},"field.nested"),l(", will not work.")])])]),e("div",{class:"right"},[e("h3",{id:"rest-api-10"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-10"},"#")]),e("pre",null,[e("code",{class:""},`?alias[all_translations]=translations
120
- &alias[dutch_translations]=translations
121
- &deep[dutch_translations][_filter][code][_eq]=nl-NL
122
- `)]),e("h3",{id:"graphql-10"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-10"},"#")]),e("p",null,[e("em",null,"Natively supported in GraphQL:")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
123
- articles {
124
- dutch_translations: translations(filter: { code: { _eq: `),e("span",{class:"hljs-string"},'"nl-NL"'),l(` } }) {
125
- id
126
- }
127
-
128
- all_translations: translations {
129
- id
130
- }
131
- }
132
- }
133
- `)])])])],-1),te=e("hr",null,null,-1),ae=e("h2",{id:"export"},[l("Export "),e("a",{class:"header-anchor",href:"#export"},"#")],-1),ne=e("p",null,"Save the current API response to a file.",-1),re=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,[l("Saves the API response to a file. Accepts one of "),e("code",{class:""},"json"),l(", "),e("code",{class:""},"csv"),l(", "),e("code",{class:""},"xml"),l(".")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-11"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-11"},"#")]),e("pre",null,[e("code",{class:""},`?export=json
134
- ?export=csv
135
- ?export=xml
136
- `)]),e("h3",{id:"graphql-11"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-11"},"#")]),e("p",null,"n/a")])],-1),ie=e("hr",null,null,-1),oe=e("h2",{id:"functions"},[l("Functions "),e("a",{class:"header-anchor",href:"#functions"},"#")],-1),ce=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,"Functions allow for \u201Clive\u201D modification of values stored in a field. Functions can be used in any query parameter you\u2019d normally supply a field key, including fields, aggregation, and filter.")])],-1),de=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,"Functions can be used by wrapping the field key in a JavaScript like syntax, for example:"),e("p",null,[e("code",{class:""},"timestamp"),l(" -> "),e("code",{class:""},"year(timestamp)")]),e("h3",{id:"datetime-functions"},[l("DateTime Functions "),e("a",{class:"header-anchor",href:"#datetime-functions"},"#")]),e("table",null,[e("thead",null,[e("tr",null,[e("th",null,"Filter"),e("th",null,"Description")])]),e("tbody",null,[e("tr",null,[e("td",null,[e("code",{class:""},"year")]),e("td",null,"Extract the year from a datetime/date/timestamp field")]),e("tr",null,[e("td",null,[e("code",{class:""},"month")]),e("td",null,"Extract the month from a datetime/date/timestamp field")]),e("tr",null,[e("td",null,[e("code",{class:""},"week")]),e("td",null,"Extract the week from a datetime/date/timestamp field")]),e("tr",null,[e("td",null,[e("code",{class:""},"day")]),e("td",null,"Extract the day from a datetime/date/timestamp field")]),e("tr",null,[e("td",null,[e("code",{class:""},"weekday")]),e("td",null,"Extract the weekday from a datetime/date/timestamp field")]),e("tr",null,[e("td",null,[e("code",{class:""},"hour")]),e("td",null,"Extract the hour from a datetime/date/timestamp field")]),e("tr",null,[e("td",null,[e("code",{class:""},"minute")]),e("td",null,"Extract the minute from a datetime/date/timestamp field")]),e("tr",null,[e("td",null,[e("code",{class:""},"second")]),e("td",null,"Extract the second from a datetime/date/timestamp field")])])]),e("h3",{id:"array-functions"},[l("Array Functions "),e("a",{class:"header-anchor",href:"#array-functions"},"#")]),e("table",null,[e("thead",null,[e("tr",null,[e("th",null,"Filter"),e("th",null,"Description")])]),e("tbody",null,[e("tr",null,[e("td",null,[e("code",{class:""},"count")]),e("td",null,"Extract the number of items from a JSON array or relational field")])])]),e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"GraphQL"),e("p",null,[l("Names aren\u2019t allowed to include any special characters in GraphQL, preventing the "),e("code",{class:""},"()"),l(" syntax from being used.")]),e("p",null,[l("As an alternative, the above functions can be used by appending "),e("code",{class:""},"_func"),l(" at the end of the field name, and using the function name as the nested field (see the example that follows).")])])]),e("div",{class:"right"},[e("h3",{id:"rest-api-12"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-12"},"#")]),e("pre",null,[e("code",{class:""},`?fields=id,title,weekday(date_published)
137
- &filter[year(date_published)][_eq]=2021
138
- `)]),e("h3",{id:"graphql-12"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-12"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),l(` {
139
- articles(filter: { date_published_func: { year: { _eq: `),e("span",{class:"hljs-number"},"2021"),l(` } } }) {
140
- id
141
- title
142
- date_published_func {
143
- weekday
144
- }
145
- }
146
- }
147
- `)])])])],-1),he=e("hr",null,null,-1),ue=e("h2",{id:"metadata"},[l("Metadata "),e("a",{class:"header-anchor",href:"#metadata"},"#")],-1),pe=e("div",{class:"two-up"},[e("div",{class:"left"},[e("p",null,[l("Metadata allows you to retrieve some additional information about the items in the collection you\u2019re fetching. "),e("code",{class:""},"*"),l(" can be used as a wildcard to retrieve all metadata.")])])],-1),fe=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"total-count"},[l("Total Count "),e("a",{class:"header-anchor",href:"#total-count"},"#")]),e("p",null,"Returns the total item count of the collection you\u2019re querying."),e("h3",{id:"filter-count"},[l("Filter Count "),e("a",{class:"header-anchor",href:"#filter-count"},"#")]),e("p",null,"Returns the item count of the collection you\u2019re querying, taking the current filter/search parameters into account.")]),e("div",{class:"right"},[e("h3",{id:"rest-api-13"},[l("REST API "),e("a",{class:"header-anchor",href:"#rest-api-13"},"#")]),e("pre",null,[e("code",{class:""},`?meta=total_count
148
-
149
- ?meta=filter_count
150
-
151
- ?meta=*
152
- `)]),e("h3",{id:"graphql-13"},[l("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-13"},"#")]),e("p",null,"n/a")])],-1),ge={title:"Global Query Parameters",modularExtension:!1,pageClass:"page-reference"},me={name:"query",setup(_e,{expose:n}){return n({frontmatter:{title:"Global Query Parameters",modularExtension:!1,pageClass:"page-reference"}}),(ve,ye)=>{const r=s("router-link"),i=s("docswrapper");return o(),c(i,{frontmatter:ge},{default:t(()=>[e("div",h,[u,p,f,g,m,_,v,e("div",y,[e("div",w,[e("p",null,[b,d(r,{to:"/docs/configuration/filter-rules"},{default:t(()=>[q]),_:1}),j])])]),x,k,G,E,A,S,T,R,L,I,P,Q,F,D,N,C,B,M,z,O,U,W,V,J,Y,H,K,X,Z,$,ee,le,se,te,ae,ne,re,ie,oe,ce,de,he,ue,pe,fe])]),_:1})}}};typeof a=="function"&&a(me);export{me as default,ge as frontmatter};
@@ -1,9 +0,0 @@
1
- import{a as l,o as r,b as d,w as o,g as t,e as n,B as e}from"./runtime-core.esm-bundler.b1f35d24.js";var i={};const u={class:"markdown-body"},h=t("blockquote",null,[t("p",null,[e("This quickstart guide is designed to get you up and running with a Directus Cloud Project in a snap. Along the way, you will better understand what Directus is, setup your free Directus Cloud Account, get a "),t("em",null,"hands-on introduction"),e(" to the App and API, and find more resources to deep-dive into.")])],-1),_=t("h2",{id:"1.-create-cloud-account-and-login"},[e("1. Create Cloud Account and Login "),t("a",{class:"header-anchor",href:"#1.-create-cloud-account-and-login"},"#")],-1),p=t("video",{autoplay:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220427A/create-account-and-login-20220427.mp4",type:"video/mp4"})],-1),m=e("First, you\u2019ll need to "),f=e("create an Account and log in"),g=e(" on "),y=t("a",{href:"https://directus.cloud/login",target:"_blank",rel:"noopener noreferrer"},"Directus Cloud",-1),b=t("p",null,"Your Directus Cloud Account allows you to create and manage any number of Community and Standard Projects. We\u2019ve made life easier by giving you the option to create and log in to your free Cloud Account automatically with GitHub. If you don\u2019t have a GitHub account or prefer not to use this login method, email-and-password login is available as well.",-1),v=t("p",null,"The very first time you log in to your cloud account, you will be prompted to create a Team. Teams are totally free to create. Each Directus Cloud Project exists within the scope of one Team. They allow you to organize Team Members, Projects and Project Billing as desired.",-1),w=t("p",null,"Once your Team is created, it\u2019s time to create your free Community Cloud Project!",-1),C={class:"tip hint"},k=t("div",{class:"hint-title"},"Learn More About Cloud",-1),A=e("Overview"),P=e("Cloud Accounts"),j=e("Cloud Teams"),I=t("h2",{id:"2.-create-and-access-project"},[e("2. Create and Access Project "),t("a",{class:"header-anchor",href:"#2.-create-and-access-project"},"#")],-1),T=t("video",{autoplay:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220427A/create-and-access-project-20220427A.mp4",type:"video/mp4"})],-1),S=t("p",null,"To create a Community Project, follow the steps below:",-1),D=e("Open the Team Menu in the Dashboard Header and select or "),F=e("create"),M=e(" the desired Team."),q=t("li",null,[e("Navigate to "),t("strong",null,"\u201CProjects\u201D"),e(" and click "),t("strong",null,"\u201CCreate Project\u201D"),e(".")],-1),N=t("li",null,"Set the Project Name.",-1),R=t("li",null,"Select the Community tier.",-1),x=t("li",null,[e("Scroll to the bottom of the screen and choose the "),t("strong",null,"\u201CEmpty Project\u201D"),e(" Starting Template."),t("br"),e(" Note: The "),t("strong",null,"\u201CDemo Project\u201D"),e(" adds in dummy data for in-depth feature demonstrations.")],-1),L=t("li",null,[e("Click "),t("strong",null,"\u201CCreate Project\u201D"),e(".")],-1),O=t("p",null,[t("em",null,"It should take around 90 seconds for the Cloud Project to build out. During this time, a link will be sent to the email associated with your Cloud Account. The email will contain your Project URL as well as an email and password to login. If you used GitHub to create your account, this will be your GitHub email. Once the build is complete, it\u2019s time log in!")],-1),B={start:"7"},G=e("You can "),E=e("access a Project"),H=e(" from within the Cloud Dashboard or type the URL into your browser."),U=t("li",null,"Log in with your username and password from the email.",-1),Q=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Check All Inbox Folders"),t("p",null,"Due to the algorithms used by some email providers, it is possible the email containing your Project login information will end up in another folder like \u201CSocial\u201D or \u201CPromotions\u201D.")],-1),V={class:"tip hint"},W=t("div",{class:"hint-title"},"Learn More About Cloud Projects",-1),Y=e("Overview"),z=e("Cloud Projects"),K=t("h2",{id:"3.-create-a-collection"},[e("3. Create a Collection "),t("a",{class:"header-anchor",href:"#3.-create-a-collection"},"#")],-1),J=t("video",{autoplay:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220427A/create-a-collection-20220427A.mp4",type:"video/mp4"})],-1),X=e("Once logged in, you\u2019re greeted with the option to create your first "),Z=e("Collection"),$=e("."),tt=t("ol",null,[t("li",null,"Navigate into the Content Module."),t("li",null,[e("Click "),t("strong",null,"\u201CCreate Collection\u201D"),e(" and a side menu will appear.")]),t("li",null,[e("Fill in a "),t("strong",null,"Name"),e("."),t("br"),e(" For the sake of this demo, we\u2019ll call ours "),t("code",{class:""},"articles"),e(", but feel free to make it your own!")]),t("li",null,[e("Leave the other options at default. Click "),t("span",{mi:"",btn:""},"arrow_forward"),e(" and the "),t("strong",null,"\u201COptional System Fields\u201D"),e(" menu will open."),t("br"),e(" Keep the values in this menu at the default, toggled off, for now. You can adjust them later.")]),t("li",null,[e("Click "),t("span",{mi:"",btn:""},"check"),e(" in the menu header.")])],-1),et={class:"tip hint"},ot=t("div",{class:"hint-title"},"Learn More About Collections",-1),st=e("The Content Module"),nt=e("Create and Manage a Collection"),lt=e("Build Relationships Between Collections"),it=e(' @TODO configuration > data-model Change the link to the "Create a Collection" format '),at=t("h2",{id:"4.-create-a-field"},[e("4. Create a Field "),t("a",{class:"header-anchor",href:"#4.-create-a-field"},"#")],-1),ct=t("video",{autoplay:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220427A/create-a-field-20220427A.mp4",type:"video/mp4"})],-1),rt=e("With your first Collection created, it\u2019s time to start adding some "),dt=e("Fields"),ut=e("."),ht=t("ol",null,[t("li",null,[e("Navigate to "),t("strong",null,[e("Settings Module > Data Model > "),t("code",{class:""},"Collection-Name")]),e(".")]),t("li",null,[e("Click the "),t("strong",null,"\u201CCreate Field\u201D"),e(" button and select the "),t("strong",null,"\u201CInput\u201D"),e(" Field type.")]),t("li",null,[e("Fill in a Field name under "),t("strong",null,"Key"),e(". We\u2019ll be calling our Field "),t("code",{class:""},"title"),e("."),t("br"),e(" Directus offers powerful Field customization options, but let\u2019s stick to the defaults for now.")]),t("li",null,[e("Select "),t("strong",null,"\u201CSave\u201D"),e(".")])],-1),_t={class:"tip hint"},pt=t("div",{class:"hint-title"},"Learn More About Fields",-1),mt=e("Create and Manage Fields in the App"),ft=t("h2",{id:"5.-create-an-item"},[e("5. Create an Item "),t("a",{class:"header-anchor",href:"#5.-create-an-item"},"#")],-1),gt=t("video",{autoplay:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220427A/create-an-item-20220427B.mp4",type:"video/mp4"})],-1),yt=e("Now that we have a Collection with a Field configured, it\u2019s time to add an "),bt=e("Item"),vt=e("."),wt=t("ol",null,[t("li",null,"Navigate to the Content Module."),t("li",null,[e("Click "),t("span",{mi:"",btn:""},"add"),e(" in the page header to open the Item Page.")]),t("li",null,"Fill in the Field Value(s) as desired."),t("li",null,[e("Click "),t("span",{mi:"",btn:""},"check"),e(" in the top-right to save your Item.")])],-1),Ct={class:"tip hint"},kt=t("div",{class:"hint-title"},"Learn More About Items",-1),At=e("The Content Module"),Pt=e("The Item Page"),jt=t("h2",{id:"6.-set-roles-%26-permissions"},[e("6. Set Roles & Permissions "),t("a",{class:"header-anchor",href:"#6.-set-roles-%26-permissions"},"#")],-1),It=t("video",{autoplay:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220427A/set-read-permissions-20220427A.mp4",type:"video/mp4"})],-1),Tt=t("p",null,"Directus comes with two built-in roles: Public and Admin. The Public Role determines what data is returned to non-authenticated users. Public comes with all permissions turned off and can be reconfigured with fully granular control to expose exactly what you want unauthenticated Users to see. The Admin role has full permissions and this cannot be changed. Aside from these built-in Roles, any number of new Roles can be created, all with fully customized, granular permissions.",-1),St=t("p",null,[e("By Default, content entered into Directus will be considered private. So permissions always start off set to the default of "),t("span",{mi:"",icon:"",dngr:""},"block"),e(),t("strong",null,"No Access"),e(", with full ability to reconfigure as desired. So, in order to have the API return our Items, let\u2019s add some read permissions. For simplicity\u2019s sake, we\u2019ll do this on the Public Role, instead of creating a new Role.")],-1),Dt=t("ol",null,[t("li",null,[e("Navigate to "),t("strong",null,"Settings Module > Roles & Permissions > Public"),e(".")]),t("li",null,[e("Click "),t("span",{mi:"",icon:"",dngr:""},"block"),e(" under the "),t("span",{mi:"",icon:""},"visibility"),e(" icon on the desired Collection."),t("br"),e(" In our case, the Collection name is "),t("code",{class:""},"article"),e(".")]),t("li",null,[e("Click "),t("strong",null,"\u201CAll Access\u201D"),e(" to give the Public Role full read permissions to the Items in this Collection.")])],-1),Ft={class:"tip hint"},Mt=t("div",{class:"hint-title"},"Learn More About Roles & Permissions",-1),qt=e("Users, Roles and Permissions"),Nt=e("."),Rt=t("h2",{id:"7.-connect-to-the-api"},[e("7. Connect to the API "),t("a",{class:"header-anchor",href:"#7.-connect-to-the-api"},"#")],-1),xt=e("Now that your Project has some content in it which is exposed to the Public, it\u2019s time to start using this content externally! Data can be accessed in a number of ways, including the REST and GraphQL API Enpoints. In this case, we\u2019ll use the "),Lt=t("code",{class:""},"/items/",-1),Ot=e(),Bt=e("REST API endpoint"),Gt=e(" to retrieve the Item we just created."),Et=t("ol",null,[t("li",null,[e("Open "),t("code",{class:""},"http://your-project-url.directus.app/items/articles"),e("."),t("br"),e(" You can use the browser or an API tool like "),t("a",{href:"http://postman.com",target:"_blank",rel:"noopener noreferrer"},"Postman"),e(" or "),t("a",{href:"https://paw.cloud",target:"_blank",rel:"noopener noreferrer"},"Paw")])],-1),Ht=t("p",null,[t("em",null,"And there it is! The Article Item you just created is being served in beautiful JSON, ready to be used anywhere and everywhere!")],-1),Ut=t("pre",null,[t("code",{class:"language-json"},[e(`{
2
- `),t("span",{class:"hljs-attr"},'"data"'),e(`: [
3
- {
4
- `),t("span",{class:"hljs-attr"},'"id"'),e(": "),t("span",{class:"hljs-number"},"1"),e(`,
5
- `),t("span",{class:"hljs-attr"},'"title"'),e(": "),t("span",{class:"hljs-string"},'"Hello World!"'),e(`
6
- }
7
- ]
8
- }
9
- `)])],-1),Qt=t("p",null,[t("em",null,"In this example, we made a super-simple read request with the API, but there\u2019s more! The REST and GraphQL APIs provide exhaustive endpoints for the data model and every single action that you can do in the App can be done via the API. In fact, the App is just a GUI powered by the API.")],-1),Vt={class:"tip hint"},Wt=t("div",{class:"hint-title"},"Learn More About The API",-1),Yt=e("Intro to the API"),zt=e("JS SDK"),Kt={title:"Quickstart Guide",modularExtension:!1},Jt={name:"quickstart",setup(Xt,{expose:a}){return a({frontmatter:{title:"Quickstart Guide",modularExtension:!1}}),(Zt,$t)=>{const s=l("router-link"),c=l("docswrapper");return r(),d(c,{frontmatter:Kt},{default:o(()=>[t("div",u,[h,_,p,t("p",null,[m,n(s,{to:"/docs/cloud/accounts/#create-account-and-login"},{default:o(()=>[f]),_:1}),g,y]),b,v,w,t("div",C,[k,t("ul",null,[t("li",null,[n(s,{to:"/docs/cloud/overview/"},{default:o(()=>[A]),_:1})]),t("li",null,[n(s,{to:"/docs/cloud/accounts/"},{default:o(()=>[P]),_:1})]),t("li",null,[n(s,{to:"/docs/cloud/teams/"},{default:o(()=>[j]),_:1})])])]),I,T,S,t("ol",null,[t("li",null,[D,n(s,{to:"/docs/cloud/teams/#create-a-team"},{default:o(()=>[F]),_:1}),M]),q,N,R,x,L]),O,t("ol",B,[t("li",null,[G,n(s,{to:"/docs/cloud/projects/#access-a-project"},{default:o(()=>[E]),_:1}),H]),U]),Q,t("div",V,[W,t("ul",null,[t("li",null,[n(s,{to:"/docs/cloud/overview/"},{default:o(()=>[Y]),_:1})]),t("li",null,[n(s,{to:"/docs/cloud/projects/"},{default:o(()=>[z]),_:1})])])]),K,J,t("p",null,[X,n(s,{to:"/docs/getting-started/glossary/#collections"},{default:o(()=>[Z]),_:1}),$]),tt,t("div",et,[ot,t("ul",null,[t("li",null,[n(s,{to:"/docs/app/content"},{default:o(()=>[st]),_:1})]),t("li",null,[n(s,{to:"/docs/configuration/data-model/"},{default:o(()=>[nt]),_:1})]),t("li",null,[n(s,{to:"/docs/configuration/relationships/"},{default:o(()=>[lt]),_:1})])])]),it,at,ct,t("p",null,[rt,n(s,{to:"/docs/getting-started/glossary/#fields"},{default:o(()=>[dt]),_:1}),ut]),ht,t("div",_t,[pt,t("ul",null,[t("li",null,[n(s,{to:"/docs/configuration/data-model/"},{default:o(()=>[mt]),_:1})])])]),ft,gt,t("p",null,[yt,n(s,{to:"/docs/getting-started/glossary/#"},{default:o(()=>[bt]),_:1}),vt]),wt,t("div",Ct,[kt,t("ul",null,[t("li",null,[n(s,{to:"/docs/app/content/"},{default:o(()=>[At]),_:1})]),t("li",null,[n(s,{to:"/docs/app/content/items"},{default:o(()=>[Pt]),_:1})])])]),jt,It,Tt,St,Dt,t("div",Ft,[Mt,t("ul",null,[t("li",null,[n(s,{to:"/docs/configuration/users-roles-permissions/"},{default:o(()=>[qt]),_:1}),Nt])])]),Rt,t("p",null,[xt,Lt,Ot,n(s,{to:"/docs/reference/items"},{default:o(()=>[Bt]),_:1}),Gt]),Et,Ht,Ut,Qt,t("div",Vt,[Wt,t("ul",null,[t("li",null,[n(s,{to:"/docs/reference/introduction/"},{default:o(()=>[Yt]),_:1})]),t("li",null,[n(s,{to:"/docs/reference/sdk/"},{default:o(()=>[zt]),_:1})])])])])]),_:1})}}};typeof i=="function"&&i(Jt);export{Jt as default,Kt as frontmatter};
@@ -1,20 +0,0 @@
1
- import{a,o as c,b as d,w as o,g as t,e as n,B as e}from"./runtime-core.esm-bundler.b1f35d24.js";var i={};const h={class:"markdown-body"},u=t("blockquote",null,[t("p",null,"If you\u2019re looking for the fastest way to get up-and-running with Directus, this guide will walk you through getting things installed, configured, and modeled.")],-1),p=t("h2",{id:"1.-installation"},[e("1. Installation "),t("a",{class:"header-anchor",href:"#1.-installation"},"#")],-1),_=t("p",null,[e("Make sure you have the latest LTS version or newer of "),t("a",{href:"https://nodejs.dev",target:"_blank",rel:"noopener noreferrer"},"Node.js"),e(" installed, and have a running database ready to connect to.")],-1),m=t("p",null,"Run the following command in your terminal and follow the prompts.",-1),g=t("pre",null,[t("code",{class:"language-bash"},`npm init directus-project example-project
2
- `)],-1),f=t("p",null,"Choose SQLite from the list. Use up/down arrow keys to select the SQL type.",-1),b=t("pre",null,[t("code",{class:"language-bash"},`? Choose your database client SQLite
3
- `)],-1),y=t("p",null,[e("After that a file path for "),t("code",{class:""},"data.db"),e(", your database, will be suggested. Hit the enter key to stick with the default path.")],-1),w=t("pre",null,[t("code",{class:"language-bash"},`? Database File Path: <file-path>/example-project/data.db
4
- `)],-1),v=t("p",null,"Next you\u2019ll set your username/email and password.",-1),k=t("pre",null,[t("code",{class:"language-bash"},`Create your first admin user:
5
- ? Email: admin@example.com
6
- ? Password: ********
7
- `)],-1),I=t("p",null,"After that, you\u2019re all set!",-1),P=t("pre",null,[t("code",{class:""},`Your project has been created at <file-path>/example-project.
8
-
9
- The configuration can be found in <file-path>/example-project/.env
10
- `)],-1),C=t("p",null,[e("Once the installation is complete, you can start Directus by navigating to your project folder "),t("em",null,[e("(in this case "),t("code",{class:""},"example-project"),e(")")]),e(" and running:")],-1),j=t("pre",null,[t("code",{class:"language-bash"},`npx directus start
11
- `)],-1),x=t("p",null,"After that, you will see this message:",-1),A=t("pre",null,[t("code",{class:"language-bash"},`\u2728 Server started at http://localhost:8055
12
- `)],-1),D=t("h4",{id:"other-options"},[e("Other Options "),t("a",{class:"header-anchor",href:"#other-options"},"#")],-1),S=t("p",null,"When you link other types of SQL to Directus, you may have additional prompts:",-1),F=t("ul",null,[t("li",null,[t("strong",null,"Database Host"),e(" \u2013 IP address for your database.")]),t("li",null,[t("strong",null,"Port"),e(" \u2013 Port number your database is running on.")]),t("li",null,[t("strong",null,"Database Name"),e(" \u2013 Name of your existing database.")]),t("li",null,[t("strong",null,"Database User"),e(" \u2013 Name of existing user in database.")]),t("li",null,[t("strong",null,"Database Password"),e(" \u2013 Password to enter database.")]),t("li",null,[t("strong",null,"Enable SSL"),e(" \u2013 Select "),t("code",{class:""},"Y"),e(" for yes or "),t("code",{class:""},"N"),e(" for no.")]),t("li",null,[t("strong",null,"Root"),e(" \u2013 Provide the root name.")])],-1),N=t("p",null,"Simply configure these according to your project\u2019s needs.",-1),q=t("div",{class:"warning hint"},[t("div",{class:"hint-title"},"Directus seeds your database"),t("p",null,"Directus installs a few dozen tables into the database it is linked to; so if you\u2019re adding it to a database with existing data. However, installation of Directus will not alter the existing data tables.")],-1),T=t("h2",{id:"2.-login-to-app"},[e("2. Login to App "),t("a",{class:"header-anchor",href:"#2.-login-to-app"},"#")],-1),R=t("p",null,"With the server running, you\u2019re now able to login to your new Directus project and start using it.",-1),L=t("p",null,[e("Our start command stated that the server started at port "),t("code",{class:""},"8055"),e(", which means we can navigate to "),t("a",{href:"http://localhost:8055",target:"_blank",rel:"noopener noreferrer"},"http://localhost:8055"),e(" to open Directus in the browser.")],-1),E=t("p",null,"Login using the admin credentials you configured during the installation in Step 1.",-1),M=t("h2",{id:"3.-create-a-collection"},[e("3. Create a Collection "),t("a",{class:"header-anchor",href:"#3.-create-a-collection"},"#")],-1),O=t("p",null,"Once logged in, you\u2019re greeted with the option to create your first Collection:",-1),Q=t("p",null,[t("img",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220217A/empty-state-20220217A.webp",alt:"Directus Empty State"})],-1),W=t("p",null,[e("Follow the prompts and create a Collection. For the sake of this demo, we\u2019ll be calling ours "),t("code",{class:""},"articles"),e(", but feel free to make it your own!")],-1),B={class:"tip hint"},H=t("div",{class:"hint-title"},"More Info on Collections",-1),G=e("For a more in-depth guide to setting up Collections, see "),U=e("Collections"),V=e("."),z=t("h2",{id:"4.-create-a-field"},[e("4. Create a Field "),t("a",{class:"header-anchor",href:"#4.-create-a-field"},"#")],-1),Y=t("p",null,[e("With the Collection created, it\u2019s time to start adding some Fields. Click the "),t("strong",null,"\u201CCreate Field\u201D"),e(" button, and select "),t("strong",null,"\u201CInput\u201D"),e(":")],-1),J=t("video",{autoplay:"",muted:"",loop:"",controls:""},[t("source",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220217A/add-field-20220217A.mp4",type:"video/mp4"})],-1),K=t("p",null,[e("We\u2019ll be calling our Field "),t("code",{class:""},"title"),e(". While Directus offers a range of powerful field customization options, we\u2019ll be sticking to the defaults for now. These defaults use the \u201CString\u201D datatype.")],-1),X={class:"tip hint"},Z=t("div",{class:"hint-title"},"More Info on Fields",-1),$=e("To learn more about the different types of Fields, and all available options, see "),tt=e("Fields"),et=e("."),ot=t("h2",{id:"5.-create-an-item"},[e("5. Create an Item "),t("a",{class:"header-anchor",href:"#5.-create-an-item"},"#")],-1),st=t("p",null,[e("Now that we have a Collection with a Field configured, it\u2019s time to start adding some content. Navigate to the Content Module (top left), and click "),t("span",{mi:"",btn:""},"add"),e(" in the top-right to get started. This will take you to the Create/Edit Item page:")],-1),nt=t("p",null,[t("img",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220217A/create-item-20220217A.webp",alt:"Directus Create Item"})],-1),at=t("p",null,[e("Once you\u2019re happy with your creation, click "),t("span",{mi:"",btn:""},"check"),e(" in the top-right to save your Item to the database.")],-1),it={class:"tip hint"},lt=t("div",{class:"hint-title"},"More Info on Items",-1),rt=e("To learn more about the different types of Items, and all available options, see "),ct=e("Items"),dt=e("."),ht=t("h2",{id:"6.-set-role%2Fpublic-permissions"},[e("6. Set Role/Public Permissions "),t("a",{class:"header-anchor",href:"#6.-set-role%2Fpublic-permissions"},"#")],-1),ut=t("p",null,[e("By default, all content entered into Directus is considered private. This means that no data will be returned by the API, unless requested by an authenticated user that has the correct permissions. In order to have the API return our items, we\u2019ll have to setup some permissions. Navigate to "),t("strong",null,[e("Settings Module "),t("span",{mi:"",icon:"",dark:""},"chevron_right"),e(" Roles & Permissions")]),e(".")],-1),pt=t("p",null,[e("Directus ships with a special "),t("strong",null,"\u201CPublic\u201D"),e(" role that controls what data is returned to non-authenticated users. Select the Public Role, find your Collection, and click the icon under the "),t("span",{mi:"",icon:""},"visibility"),e(" icon (read/view permission) to allow the Public Role to read the Items in your Collection.")],-1),_t=t("p",null,[t("img",{src:"https://cdn.directus.io/docs/v9/getting-started/quickstart/quickstart-20220217A/permissions-20220217A.webp",alt:"Directus Permissions"})],-1),mt={class:"tip hint"},gt=t("div",{class:"hint-title"},"More Info on Roles & Permissions",-1),ft=e("Roles & Permissions are extremely powerful and can get pretty in-depth. To learn all about the nuances in setting these up, see "),bt=e("Roles"),yt=e(" & "),wt=e("Permissions"),vt=e("."),kt=t("h2",{id:"7.-connect-to-the-api"},[e("7. Connect to the API "),t("a",{class:"header-anchor",href:"#7.-connect-to-the-api"},"#")],-1),It=e("Now that your project has some content in it, it\u2019s time to start using this content externally. Data can be accessed in a number of ways, including the REST API, GraphQL, the CLI, or even straight from the database. In this case, we\u2019ll use "),Pt=e("the "),Ct=t("code",{class:""},"/items/",-1),jt=e(" REST API endpoint"),xt=e(" to retrieve the item we just created."),At=t("p",null,[e("Using your browser, or an API tool like "),t("a",{href:"http://postman.com",target:"_blank",rel:"noopener noreferrer"},"Postman"),e(" or "),t("a",{href:"https://paw.cloud",target:"_blank",rel:"noopener noreferrer"},"Paw"),e(", open "),t("a",{href:"http://localhost:8055/items/articles",target:"_blank",rel:"noopener noreferrer"},"http://localhost:8055/items/articles"),e(".")],-1),Dt=t("p",null,"And there it is! The Article Item you just created is being served in beautiful JSON, ready to be used anywhere and everywhere!",-1),St=t("pre",null,[t("code",{class:"language-json"},[e(`{
13
- `),t("span",{class:"hljs-attr"},'"data"'),e(`: [
14
- {
15
- `),t("span",{class:"hljs-attr"},'"id"'),e(": "),t("span",{class:"hljs-number"},"1"),e(`,
16
- `),t("span",{class:"hljs-attr"},'"title"'),e(": "),t("span",{class:"hljs-string"},'"Hello World!"'),e(`
17
- }
18
- ]
19
- }
20
- `)])],-1),Ft={title:"Quickstart Guide",modularExtension:!1},Nt={name:"quickstart",setup(qt,{expose:l}){return l({frontmatter:{title:"Quickstart Guide",modularExtension:!1}}),(Tt,Rt)=>{const s=a("router-link"),r=a("docswrapper");return c(),d(r,{frontmatter:Ft},{default:o(()=>[t("div",h,[u,p,_,m,g,f,b,y,w,v,k,I,P,C,j,x,A,D,S,F,N,q,T,R,L,E,M,O,Q,W,t("div",B,[H,t("p",null,[G,n(s,{to:"/docs/app/content-collections"},{default:o(()=>[U]),_:1}),V])]),z,Y,J,K,t("div",X,[Z,t("p",null,[$,n(s,{to:"/docs/getting-started/glossary/#fields"},{default:o(()=>[tt]),_:1}),et])]),ot,st,nt,at,t("div",it,[lt,t("p",null,[rt,n(s,{to:"/docs/app/content-items/"},{default:o(()=>[ct]),_:1}),dt])]),ht,ut,pt,_t,t("div",mt,[gt,t("p",null,[ft,n(s,{to:"/docs/reference/system/roles"},{default:o(()=>[bt]),_:1}),yt,n(s,{to:"/docs/reference/system/permissions"},{default:o(()=>[wt]),_:1}),vt])]),kt,t("p",null,[It,n(s,{to:"/docs/reference/items"},{default:o(()=>[Pt,Ct,jt]),_:1}),xt]),At,Dt,St])]),_:1})}}};typeof i=="function"&&i(Nt);export{Nt as default,Ft as frontmatter};
@@ -1,115 +0,0 @@
1
- import{a,o as i,b as c,w as l,g as e,e as h,B as s}from"./runtime-core.esm-bundler.b1f35d24.js";var t={};const d={class:"markdown-body"},p={class:"two-up"},u={class:"left"},_=s("What data is linked to what other data. Allows you to assign authors to articles, products to sales, and whatever other structures you can think of. "),g=s("Learn more about Relationships"),f=s("."),m=e("div",{class:"right"},[e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#the-relation-object"},"The Relation Object")]),e("li",null,[e("a",{href:"#list-relations"},"List relations")]),e("li",null,[e("a",{href:"#list-relations-in-collection"},"List relations in collection")]),e("li",null,[e("a",{href:"#retrieve-a-relation"},"Retrieve a relation")]),e("li",null,[e("a",{href:"#create-a-relation"},"Create a Relation")]),e("li",null,[e("a",{href:"#update-a-relation"},"Update a Relation")]),e("li",null,[e("a",{href:"#delete-a-relation"},"Delete a Relation")])])])])],-1),y=e("hr",null,null,-1),j=e("h2",{id:"the-relation-object"},[s("The Relation Object "),e("a",{class:"header-anchor",href:"#the-relation-object"},"#")],-1),b=e("div",{class:"two-up"},[e("div",{class:"left"},[e("div",{class:"definitions"},[e("p",null,[e("code",{class:""},"collection"),s(),e("strong",null,"string"),e("br"),s(" Name of the collection. This matches the table name in the database.")]),e("p",null,[e("code",{class:""},"field"),s(),e("strong",null,"string"),e("br"),s(" Name of the field that holds the related primary key. This matches the column name in the database.")]),e("p",null,[e("code",{class:""},"related_collection"),s(),e("strong",null,"string"),e("br"),s(" Name of the related collection. This matches the table name in the database.")])]),e("h4",{id:"meta"},[s("Meta "),e("a",{class:"header-anchor",href:"#meta"},"#")]),e("p",null,"Directus metadata. Used to enable non-database relationship types"),e("div",{class:"definitions"},[e("p",null,[e("code",{class:""},"id"),s(),e("strong",null,"integer"),e("br"),s(" Primary key of the metadata row in "),e("code",{class:""},"directus_relations"),s(".")]),e("p",null,[e("code",{class:""},"many_collection"),s(),e("strong",null,"string"),e("br"),s(" Name of the collection. Matches the top level "),e("code",{class:""},"collection"),s(" field.")]),e("p",null,[e("code",{class:""},"many_field"),s(),e("strong",null,"string"),e("br"),s(" Name of the field. Matches the top level "),e("code",{class:""},"field"),s(" field.")]),e("p",null,[e("code",{class:""},"one_collection"),s(),e("strong",null,"string"),e("br"),s(" Name of the related collection. Matches the top level "),e("code",{class:""},"related_collection"),s(" field.")]),e("p",null,[e("code",{class:""},"one_field"),s(),e("strong",null,"string"),e("br"),s(" Name of the one to many field on the other side of the relation.")]),e("p",null,[e("code",{class:""},"one_allowed_collections"),s(),e("strong",null,"string"),e("br"),s(" What collections are allowed to be used in a many-to-any context.")]),e("p",null,[e("code",{class:""},"one_collection_field"),s(),e("strong",null,"string"),e("br"),s(" Field that holds the collection name in a many-to-any context.")]),e("p",null,[e("code",{class:""},"one_deselect_action"),s(),e("strong",null,"nullify | delete"),e("br"),s(" Whether to nullify or delete related one-to-many records.")]),e("p",null,[e("code",{class:""},"sort_field"),s(),e("strong",null,"string"),e("br"),s(" What field is used to hold the sort field.")]),e("p",null,[e("code",{class:""},"junction_field"),s(),e("strong",null,"string"),e("br"),s(" What field connects two relations in a many-to-many (o2m-m2o) context.")])]),e("h4",{id:"schema"},[s("Schema "),e("a",{class:"header-anchor",href:"#schema"},"#")]),e("p",null,"\u201CRaw\u201D database information. Based on the database vendor used, different information might be returned. The following are available for all drivers."),e("div",{class:"definitions"},[e("p",null,[e("code",{class:""},"table"),s(),e("strong",null,"string"),e("br"),s(" The table name.")]),e("p",null,[e("code",{class:""},"column"),s(),e("strong",null,"string"),e("br"),s(" The column name.")]),e("p",null,[e("code",{class:""},"foreign_key_table"),s(),e("strong",null,"string"),e("br"),s(" Related table name.")]),e("p",null,[e("code",{class:""},"foreign_key_column"),s(),e("strong",null,"string"),e("br"),s(" Related column name.")]),e("p",null,[e("code",{class:""},"constraint_name"),s(),e("strong",null,"string"),e("br"),s(" Name for the foreign key constraint.")]),e("p",null,[e("code",{class:""},"on_update"),s(),e("strong",null,"string"),e("br"),s(" Update trigger for the foreign key constraint.")]),e("p",null,[e("code",{class:""},"on_delete"),s(),e("strong",null,"string"),e("br"),s(" Delete trigger for the foreign key constraint.")])])]),e("div",{class:"right"},[e("pre",null,[e("code",{class:"language-json"},[s(`{
2
- `),e("span",{class:"hljs-attr"},'"collection"'),s(": "),e("span",{class:"hljs-string"},'"about_us"'),s(`,
3
- `),e("span",{class:"hljs-attr"},'"field"'),s(": "),e("span",{class:"hljs-string"},'"logo"'),s(`,
4
- `),e("span",{class:"hljs-attr"},'"related_collection"'),s(": "),e("span",{class:"hljs-string"},'"directus_files"'),s(`,
5
- `),e("span",{class:"hljs-attr"},'"schema"'),s(`: {
6
- `),e("span",{class:"hljs-attr"},'"table"'),s(": "),e("span",{class:"hljs-string"},'"about_us"'),s(`,
7
- `),e("span",{class:"hljs-attr"},'"column"'),s(": "),e("span",{class:"hljs-string"},'"logo"'),s(`,
8
- `),e("span",{class:"hljs-attr"},'"foreign_key_table"'),s(": "),e("span",{class:"hljs-string"},'"directus_files"'),s(`,
9
- `),e("span",{class:"hljs-attr"},'"foreign_key_column"'),s(": "),e("span",{class:"hljs-string"},'"id"'),s(`,
10
- `),e("span",{class:"hljs-attr"},'"constraint_name"'),s(": "),e("span",{class:"hljs-string"},'"about_us_logo_foreign"'),s(`,
11
- `),e("span",{class:"hljs-attr"},'"on_update"'),s(": "),e("span",{class:"hljs-string"},'"NO ACTION"'),s(`,
12
- `),e("span",{class:"hljs-attr"},'"on_delete"'),s(": "),e("span",{class:"hljs-string"},'"SET NULL"'),s(`
13
- },
14
- `),e("span",{class:"hljs-attr"},'"meta"'),s(`: {
15
- `),e("span",{class:"hljs-attr"},'"id"'),s(": "),e("span",{class:"hljs-number"},"1"),s(`,
16
- `),e("span",{class:"hljs-attr"},'"junction_field"'),s(": "),e("span",{class:"hljs-literal"},"null"),s(`,
17
- `),e("span",{class:"hljs-attr"},'"many_collection"'),s(": "),e("span",{class:"hljs-string"},'"about_us"'),s(`,
18
- `),e("span",{class:"hljs-attr"},'"many_field"'),s(": "),e("span",{class:"hljs-string"},'"logo"'),s(`,
19
- `),e("span",{class:"hljs-attr"},'"one_allowed_collections"'),s(": "),e("span",{class:"hljs-literal"},"null"),s(`,
20
- `),e("span",{class:"hljs-attr"},'"one_collection"'),s(": "),e("span",{class:"hljs-string"},'"directus_files"'),s(`,
21
- `),e("span",{class:"hljs-attr"},'"one_collection_field"'),s(": "),e("span",{class:"hljs-literal"},"null"),s(`,
22
- `),e("span",{class:"hljs-attr"},'"one_deselect_action"'),s(": "),e("span",{class:"hljs-string"},'"nullify"'),s(`,
23
- `),e("span",{class:"hljs-attr"},'"one_field"'),s(": "),e("span",{class:"hljs-literal"},"null"),s(`,
24
- `),e("span",{class:"hljs-attr"},'"sort_field"'),s(": "),e("span",{class:"hljs-literal"},"null"),s(`
25
- }
26
- }
27
- `)])])])],-1),q=e("hr",null,null,-1),v=e("h2",{id:"list-relations"},[s("List relations "),e("a",{class:"header-anchor",href:"#list-relations"},"#")],-1),x=e("p",null,"List all relations that exist in Directus.",-1),w=e("div",{class:"two-up"},[e("div",{class:"left"},[e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Permissions"),e("p",null,"The data returned in this endpoint will be filtered based on the user\u2019s permissions. For example, relations that apply to a collection that the current user doesn\u2019t have access to are stripped out.")]),e("h3",{id:"query-parameters"},[s("Query Parameters "),e("a",{class:"header-anchor",href:"#query-parameters"},"#")]),e("p",null,"Doesn\u2019t support any query parameters."),e("h3",{id:"returns"},[s("Returns "),e("a",{class:"header-anchor",href:"#returns"},"#")]),e("p",null,[s("Array of "),e("a",{href:"#the-relation-object"},"relation objects"),s(". If no items are available, data will be an empty array.")])]),e("div",{class:"right"},[e("h3",{id:"rest-api"},[s("REST API "),e("a",{class:"header-anchor",href:"#rest-api"},"#")]),e("pre",null,[e("code",{class:""},`GET /relations
28
- `)]),e("h3",{id:"graphql"},[s("GraphQL "),e("a",{class:"header-anchor",href:"#graphql"},"#")]),e("pre",null,[e("code",{class:""},`POST /graphql/system
29
- `)]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"type"),e("span",{class:"hljs-type"}," Query"),s(` {
30
- relations: [directus_relations]
31
- }
32
- `)])]),e("h5",{id:"example"},[s("Example "),e("a",{class:"header-anchor",href:"#example"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),s(` {
33
- relations {
34
- collection
35
- field
36
- }
37
- }
38
- `)])])])],-1),T=e("hr",null,null,-1),R=e("h2",{id:"list-relations-in-collection"},[s("List relations in collection "),e("a",{class:"header-anchor",href:"#list-relations-in-collection"},"#")],-1),E=e("p",null,"List all relations that exist in a given collection.",-1),k=e("div",{class:"two-up"},[e("div",{class:"left"},[e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Permissions"),e("p",null,"The data returned in this endpoint will be filtered based on the user\u2019s permissions. For example, relations that apply to a collection that the current user doesn\u2019t have access to are stripped out.")]),e("h3",{id:"query-parameters-2"},[s("Query Parameters "),e("a",{class:"header-anchor",href:"#query-parameters-2"},"#")]),e("p",null,"Doesn\u2019t support any query parameters."),e("h3",{id:"returns-2"},[s("Returns "),e("a",{class:"header-anchor",href:"#returns-2"},"#")]),e("p",null,[s("Array of "),e("a",{href:"#the-relation-object"},"relation objects"),s(". If no items are available, data will be an empty array.")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-2"},[s("REST API "),e("a",{class:"header-anchor",href:"#rest-api-2"},"#")]),e("pre",null,[e("code",{class:""},`GET /relations/:collection
39
- `)]),e("h5",{id:"example-2"},[s("Example "),e("a",{class:"header-anchor",href:"#example-2"},"#")]),e("pre",null,[e("code",{class:""},`GET /relations/articles
40
- `)]),e("h3",{id:"graphql-2"},[s("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-2"},"#")]),e("pre",null,[e("code",{class:""},`POST /graphql/system
41
- `)]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"type"),e("span",{class:"hljs-type"}," Query"),s(` {
42
- relations_in_collection(collection:`),e("span",{class:"hljs-type"}," String"),s(`!): [directus_relations]
43
- }
44
- `)])]),e("h5",{id:"example-3"},[s("Example "),e("a",{class:"header-anchor",href:"#example-3"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),s(` {
45
- relations_in_collection(collection: `),e("span",{class:"hljs-string"},'"articles"'),s(`) {
46
- collection
47
- field
48
- }
49
- }
50
- `)])])])],-1),P=e("hr",null,null,-1),S=e("h2",{id:"retrieve-a-relation"},[s("Retrieve a relation "),e("a",{class:"header-anchor",href:"#retrieve-a-relation"},"#")],-1),L=e("p",null,"List an existing relation by collection/field name.",-1),A=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"query-parameters-3"},[s("Query Parameters "),e("a",{class:"header-anchor",href:"#query-parameters-3"},"#")]),e("p",null,"Doesn\u2019t support any query parameters."),e("h3",{id:"returns-3"},[s("Returns "),e("a",{class:"header-anchor",href:"#returns-3"},"#")]),e("p",null,[s("Returns the requested "),e("a",{href:"#the-relation-object"},"relation object"),s(".")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-3"},[s("REST API "),e("a",{class:"header-anchor",href:"#rest-api-3"},"#")]),e("pre",null,[e("code",{class:""},`GET /relations/:collection/:field
51
- `)]),e("h5",{id:"example-4"},[s("Example "),e("a",{class:"header-anchor",href:"#example-4"},"#")]),e("pre",null,[e("code",{class:""},`GET /relations/articles/featured_image
52
- `)]),e("h3",{id:"graphql-3"},[s("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-3"},"#")]),e("pre",null,[e("code",{class:""},`POST /graphql/system
53
- `)]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"type"),e("span",{class:"hljs-type"}," Query"),s(` {
54
- relations_by_name(collection:`),e("span",{class:"hljs-type"}," String"),s("!, field:"),e("span",{class:"hljs-type"}," String"),s(`!): directus_relations
55
- }
56
- `)])]),e("h5",{id:"example-5"},[s("Example "),e("a",{class:"header-anchor",href:"#example-5"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"query"),s(` {
57
- relations_by_name(collection: `),e("span",{class:"hljs-string"},'"articles"'),s(", field: "),e("span",{class:"hljs-string"},'"featured_image"'),s(`) {
58
- collection
59
- field
60
- related_collection
61
- }
62
- }
63
- `)])])])],-1),N=e("hr",null,null,-1),Q=e("h2",{id:"create-a-relation"},[s("Create a Relation "),e("a",{class:"header-anchor",href:"#create-a-relation"},"#")],-1),D=e("p",null,"Create a new relation.",-1),O=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"query-parameters-4"},[s("Query Parameters "),e("a",{class:"header-anchor",href:"#query-parameters-4"},"#")]),e("p",null,"Doesn\u2019t support any query parameters."),e("h3",{id:"request-body"},[s("Request Body "),e("a",{class:"header-anchor",href:"#request-body"},"#")]),e("p",null,[s("A partial "),e("a",{href:"#the-relation-object"},"relation object"),s(".")]),e("h3",{id:"returns-4"},[s("Returns "),e("a",{class:"header-anchor",href:"#returns-4"},"#")]),e("p",null,[s("Returns the "),e("a",{href:"#the-relation-object"},"relation object"),s(" for the created relation.")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-4"},[s("REST API "),e("a",{class:"header-anchor",href:"#rest-api-4"},"#")]),e("pre",null,[e("code",{class:""},`POST /relations
64
- `)]),e("h5",{id:"example-6"},[s("Example "),e("a",{class:"header-anchor",href:"#example-6"},"#")]),e("pre",null,[e("code",{class:"language-json"},[e("span",{class:"hljs-comment"},"// POST /relations"),s(`
65
-
66
- {
67
- `),e("span",{class:"hljs-attr"},'"collection"'),s(": "),e("span",{class:"hljs-string"},'"articles"'),s(`,
68
- `),e("span",{class:"hljs-attr"},'"field"'),s(": "),e("span",{class:"hljs-string"},'"featured_image"'),s(`,
69
- `),e("span",{class:"hljs-attr"},'"related_collection"'),s(": "),e("span",{class:"hljs-string"},'"directus_files"'),s(`
70
- }
71
- `)])]),e("h3",{id:"graphql-4"},[s("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-4"},"#")]),e("pre",null,[e("code",{class:""},`POST /graphql/system
72
- `)]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"type"),e("span",{class:"hljs-type"}," Mutation"),s(` {
73
- create_relations_item(data: create_directus_relations_input!): directus_relations
74
- }
75
- `)])]),e("h5",{id:"example-7"},[s("Example "),e("a",{class:"header-anchor",href:"#example-7"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"mutation"),s(` {
76
- create_relations_item(
77
- data: { collection: `),e("span",{class:"hljs-string"},'"articles"'),s(", field: "),e("span",{class:"hljs-string"},'"featured_image"'),s(", related_collection: "),e("span",{class:"hljs-string"},'"directus_files"'),s(` }
78
- ) {
79
- collection
80
- field
81
- related_collection
82
- }
83
- }
84
- `)])])])],-1),G=e("hr",null,null,-1),C=e("h2",{id:"update-a-relation"},[s("Update a Relation "),e("a",{class:"header-anchor",href:"#update-a-relation"},"#")],-1),I=e("p",null,"Update an existing relation.",-1),B=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"query-parameters-5"},[s("Query Parameters "),e("a",{class:"header-anchor",href:"#query-parameters-5"},"#")]),e("p",null,"Doesn\u2019t support any query parameters."),e("h3",{id:"request-body-2"},[s("Request Body "),e("a",{class:"header-anchor",href:"#request-body-2"},"#")]),e("p",null,[s("A partial "),e("a",{href:"#the-relation-object"},"relation object"),s(".")]),e("h3",{id:"returns-5"},[s("Returns "),e("a",{class:"header-anchor",href:"#returns-5"},"#")]),e("p",null,[s("Returns the "),e("a",{href:"#the-relation-object"},"relation object"),s(" for the created relation.")])]),e("div",{class:"right"},[e("h3",{id:"rest-api-5"},[s("REST API "),e("a",{class:"header-anchor",href:"#rest-api-5"},"#")]),e("pre",null,[e("code",{class:""},`PATCH /relations/:collection/:field
85
- `)]),e("h5",{id:"example-8"},[s("Example "),e("a",{class:"header-anchor",href:"#example-8"},"#")]),e("pre",null,[e("code",{class:"language-json"},[e("span",{class:"hljs-comment"},"// PATCH /relations/articles/author"),s(`
86
-
87
- {
88
- `),e("span",{class:"hljs-attr"},'"meta"'),s(`: {
89
- `),e("span",{class:"hljs-attr"},'"one_field"'),s(": "),e("span",{class:"hljs-string"},'"articles"'),s(`
90
- }
91
- }
92
- `)])]),e("h3",{id:"graphql-5"},[s("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-5"},"#")]),e("pre",null,[e("code",{class:""},`POST /graphql/system
93
- `)]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"type"),e("span",{class:"hljs-type"}," Mutation"),s(` {
94
- update_relations_item(collection:`),e("span",{class:"hljs-type"}," String"),s("!, field:"),e("span",{class:"hljs-type"}," String"),s(`!, data: update_directus_relations_input!): directus_relations
95
- }
96
- `)])]),e("h5",{id:"example-9"},[s("Example "),e("a",{class:"header-anchor",href:"#example-9"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"mutation"),s(` {
97
- update_relations_item(collection: `),e("span",{class:"hljs-string"},'"articles"'),s(", field: "),e("span",{class:"hljs-string"},'"author"'),s(", data: { meta: { one_field: "),e("span",{class:"hljs-string"},'"articles"'),s(` } }) {
98
- collection
99
- field
100
- related_collection
101
- }
102
- }
103
- `)])])])],-1),M=e("hr",null,null,-1),U=e("h2",{id:"delete-a-relation"},[s("Delete a Relation "),e("a",{class:"header-anchor",href:"#delete-a-relation"},"#")],-1),W=e("p",null,"Delete an existing relation.",-1),F=e("div",{class:"two-up"},[e("div",{class:"left"},[e("h3",{id:"returns-6"},[s("Returns "),e("a",{class:"header-anchor",href:"#returns-6"},"#")]),e("p",null,"Empty body.")]),e("div",{class:"right"},[e("h3",{id:"rest-api-6"},[s("REST API "),e("a",{class:"header-anchor",href:"#rest-api-6"},"#")]),e("pre",null,[e("code",{class:""},`DELETE /relations/:collection/:field
104
- `)]),e("h5",{id:"example-10"},[s("Example "),e("a",{class:"header-anchor",href:"#example-10"},"#")]),e("pre",null,[e("code",{class:""},`DELETE /relations/articles/author
105
- `)]),e("h3",{id:"graphql-6"},[s("GraphQL "),e("a",{class:"header-anchor",href:"#graphql-6"},"#")]),e("pre",null,[e("code",{class:""},`POST /graphql/system
106
- `)]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"type"),e("span",{class:"hljs-type"}," Mutation"),s(` {
107
- delete_relations_item(collection:`),e("span",{class:"hljs-type"}," String"),s("!, field:"),e("span",{class:"hljs-type"}," String"),s(`!): delete_one
108
- }
109
- `)])]),e("h5",{id:"example-11"},[s("Example "),e("a",{class:"header-anchor",href:"#example-11"},"#")]),e("pre",null,[e("code",{class:"language-graphql"},[e("span",{class:"hljs-keyword"},"mutation"),s(` {
110
- delete_relations_item(collection: `),e("span",{class:"hljs-string"},'"articles"'),s(", field: "),e("span",{class:"hljs-string"},'"author"'),s(`) {
111
- collection
112
- field
113
- }
114
- }
115
- `)])])])],-1),V={title:"Relations",modularExtension:!1,pageClass:"page-reference"},H={name:"relations",setup(z,{expose:n}){return n({frontmatter:{title:"Relations",modularExtension:!1,pageClass:"page-reference"}}),(J,K)=>{const r=a("router-link"),o=a("docswrapper");return i(),c(o,{frontmatter:V},{default:l(()=>[e("div",d,[e("div",p,[e("div",u,[e("blockquote",null,[e("p",null,[_,h(r,{to:"/docs/getting-started/glossary/#relationships"},{default:l(()=>[g]),_:1}),f])])]),m]),y,j,b,q,v,x,w,T,R,E,k,P,S,L,A,N,Q,D,O,G,C,I,B,M,U,W,F])]),_:1})}}};typeof t=="function"&&t(H);export{H as default,V as frontmatter};
@@ -1,55 +0,0 @@
1
- import{a as i,o as c,b as d,w as n,g as e,e as l,B as t}from"./runtime-core.esm-bundler.b1f35d24.js";var s={};const h={class:"markdown-body"},u=e("blockquote",null,[e("p",null,[t("As you might have guessed, relationships are a crucial part of any relational database. Directus supports all standard relationship types, as well as a few more "),e("em",null,"compound"),t(" types that offer greater flexibility.")])],-1),f=e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#many-to-one-(m2o)"},"Many-to-One (M2O)")]),e("li",null,[e("a",{href:"#one-to-many-(o2m)"},"One-to-Many (O2M)")]),e("li",null,[e("a",{href:"#translations-(o2m)"},"Translations (O2M)")]),e("li",null,[e("a",{href:"#many-to-many-(m2m)"},"Many-to-Many (M2M)")]),e("li",null,[e("a",{href:"#many-to-any-(m2a)"},"Many-to-Any (M2A)")]),e("li",null,[e("a",{href:"#one-to-one-(o2o)"},"One-to-One (O2O)")])])])],-1),p=e("h3",{id:"introduction"},[t("Introduction "),e("a",{class:"header-anchor",href:"#introduction"},"#")],-1),m=e("p",null,"While it may seem complex at first, relational data is actually quite straightforward once you understand what\u2019s happening behind the sometimes confusing terminology. Before diving into the details of each type, let\u2019s first cover a few basics that will help you better visualize them in your mind\u2019s eye.",-1),_=e("h3",{id:"primary-and-foreign-keys"},[t("Primary and Foreign Keys "),e("a",{class:"header-anchor",href:"#primary-and-foreign-keys"},"#")],-1),y=t("Every "),g=t("Item"),w=t(" in a relational database has a unique "),M=t("Primary Key"),b=t(" (or \u201CPK\u201D) that identifies it within its "),v=t("Collection"),O=t(". Because it\u2019s required, the key is the first "),k=t("field"),T=t(" created within a collection, typically storing an \u201Cauto-increment\u201D number, an automatically generated unique hash, or a manually entered value. They are often abbreviated to \u201CPK\u201D (Primary Key), \u201CID\u201D (Identifier), \u201CUID\u201D (Unique Identifier), or \u201CUUID\u201D (Universally Unique Identifier), depending on the type of value they store. After it\u2019s created, the value of an item\u2019s PK should "),x=e("em",null,"never",-1),C=t(" change."),A=e("p",null,[t("To link items together relationally, you simply save a reference to an item\u2019s PK in a different field. That "),e("em",null,"reference"),t(" is called a Foreign Key (FK). If the primary key is a "),e("em",null,"person"),t(", the foreign key is like their "),e("em",null,"business card"),t(". It references the actual person, providing just enough information to find them.")],-1),j=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Composite & Compound Keys"),e("p",null,[t("In the above explanation we\u2019ve ignored "),e("em",null,"composite"),t(" and "),e("em",null,"compound"),t(" keys, which are essentially unique keys created by combining "),e("em",null,"multiple"),t(" field/column values.")])],-1),I=e("h3",{id:"perspective-matters"},[t("Perspective Matters "),e("a",{class:"header-anchor",href:"#perspective-matters"},"#")],-1),P=e("p",null,"Just like primary and foreign keys, relationships are always described relative to their \u201Cparent\u201D collection. Looking at the same relationship/key from the perspective of the opposite collection would reverse it. This means that a many-to-one relationship can also be seen as a one-to-many relationship, it just depends on which collection is considered the parent.",-1),D=e("h2",{id:"many-to-one-(m2o)"},[t("Many-to-One (M2O) "),e("a",{class:"header-anchor",href:"#many-to-one-(m2o)"},"#")],-1),S=e("p",null,[t("The Many-to-One is the only relationship type with an actual field on the parent Collection. This field saves the foreign key to a single related item. For example, a "),e("em",null,"city"),t(" can only be in one "),e("em",null,"country"),t(", but a "),e("em",null,"country"),t(" can have many "),e("em",null,"cities"),t(".")],-1),R=e("p",null,"Below is an example of a M2O relationship:",-1),F=e("pre",null,[e("code",{class:""},`cities (the "Many" Collection)
2
- - id (Primary Key)
3
- - name
4
- - country (the M2O field that stores the country key)
5
-
6
- countries (the "One" Collection)
7
- - id (Primary Key)
8
- - name
9
- `)],-1),K=e("h3",{id:"setup"},[t("Setup "),e("a",{class:"header-anchor",href:"#setup"},"#")],-1),N=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/relationships/M2O-20220216A.webp",alt:"M2O"})],-1),q=e("p",null,"The parent collection and field are already known (it\u2019s the field you\u2019re currently creating), so configuring those are disabled. All you need to configure is the related collection and its primary key field.",-1),B=e("p",null,[t("If you select or enter an "),e("strong",null,"existing"),t(" Related Collection (highlights green) then the primary key field is known and automatically selected. If you enter the name of a "),e("strong",null,"new"),t(" Related Collection (doesn\u2019t already exist), you will also be prompted to enter the name of its primary key field, which will default to an auto-increment integer type.")],-1),J=e("p",null,[t("You also have the option to create a "),e("strong",null,"Corresponding Field"),t(" during this process. This allows you to more easily create the O2M alias (see below) that pairs with this M2O.")],-1),W=e("p",null,[e("strong",null,"Relational Triggers"),t(" allow for control over what happens when a relationship is broken. There is one option:")],-1),Y=e("ul",null,[e("li",null,[e("strong",null,"On Delete of [Related Collection]"),t(" \u2014 When the related item (O2M) is deleted\u2026 "),e("ul",null,[e("li",null,"Nullify the parent M2O field (default)"),e("li",null,"Set the parent M2O field to its default value"),e("li",null,"Delete the parent collection\u2019s item (cascade)"),e("li",null,"Prevent the deletion")])])],-1),U=e("h2",{id:"one-to-many-(o2m)"},[t("One-to-Many (O2M) "),e("a",{class:"header-anchor",href:"#one-to-many-(o2m)"},"#")],-1),L=t("The One-to-Many relationship is the "),E=e("strong",null,"exact same relationship",-1),z=t(" as a Many-to-One (above), just seen from the opposite collection\u2019s perspective. The O2M is stored as an "),H=t("Alias"),V=t(" field on its parent Collection that dynamically lists all items connected via the opposite Many-to-One. So, while the M2O will show a single country for the parent city, the O2M shows all cities for the parent country."),G=e("p",null,"Below is an example of a O2M relationship:",-1),Q=e("pre",null,[e("code",{class:""},`countries (the "One" Collection)
10
- - id (Primary Key)
11
- - name
12
- - *cities* (the O2M alias field that lists references from "cities.country")
13
-
14
- cities (the "Many" Collection)
15
- - id (Primary Key)
16
- - name
17
- - country (the M2O field that stores the country key)
18
- `)],-1),X=e("h3",{id:"setup-2"},[t("Setup "),e("a",{class:"header-anchor",href:"#setup-2"},"#")],-1),Z=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/relationships/O2M-20220216A.webp",alt:"O2M"})],-1),$=e("p",null,"The parent collection and field are already known (it\u2019s the field you\u2019re currently creating), so configuring those are disabled. All you need to configure is the related collection and its M2O field.",-1),ee=e("p",null,[t("You can select or enter an "),e("strong",null,"existing"),t(" Related Collection (highlights green) or create a "),e("strong",null,"new"),t(" one by entering a unique collection name. Next, you can select an existing field (highlights green) or create a new one by entering a field name unique to its collection.")],-1),te=e("p",null,"The related field will store the value of this collection\u2019s primary key field, so both must have the same type. For this reason, when selecting existing fields, options will be disabled if they don\u2019t have a matching type.",-1),ne=e("p",null,[t("You also have the option to create a "),e("strong",null,"Corresponding Field"),t(" during this process. This allows you to more easily create the M2O field (see above) that pairs with this O2M.")],-1),oe=e("p",null,[t("The optional "),e("strong",null,"Sort Field"),t(" can be used to enable manual reordering of items within this O2M field. This is configured by selecting an existing numeric type field (highlights green) from the Related Collection, or entering the name of a new field to be created.")],-1),le=e("p",null,[e("strong",null,"Relational Triggers"),t(" allow for control over what happens when a relationship is broken. There are two options:")],-1),ie=e("ul",null,[e("li",null,[e("strong",null,"On Deselect of [Related Collection]"),t(" \u2014 When the value of the M2O is deselected\u2026 "),e("ul",null,[e("li",null,"Nullify the M2O field value (default)"),e("li",null,"Delete the M2O item (cascade)")])]),e("li",null,[e("strong",null,"On Delete of [Parent Collection Item]"),t(" \u2014 When this O2M item is deleted\u2026 "),e("ul",null,[e("li",null,"Nullify the related M2O field (default)"),e("li",null,"Set the related M2O field to its default value"),e("li",null,"Delete the related collection\u2019s item (cascade)"),e("li",null,"Prevent the deletion")])])],-1),se=e("h2",{id:"translations-(o2m)"},[t("Translations (O2M) "),e("a",{class:"header-anchor",href:"#translations-(o2m)"},"#")],-1),ae=t("The Translations relationship is just a special version of the standard O2M. Just like the O2M, it creates an "),re=t("Alias"),ce=t(" field that is used to list all related items (the translations). Translations themselves are stored in a separate collection, which is then further related to a "),de=e("em",null,"third",-1),he=t(" collection that stores all languages."),ue=e("h3",{id:"setup-3"},[t("Setup "),e("a",{class:"header-anchor",href:"#setup-3"},"#")],-1),fe=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/relationships/translations-wizard-20220216A.webp",alt:"Translations"})],-1),pe=e("p",null,"The easiest way to add translations is to use the wizard, which only asks for the Translation field name. All required fields and relationships will then be automatically created and configured.",-1),me=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/relationships/translations-relations-20220216A.webp",alt:"Translations"})],-1),_e=e("p",null,[t("If you choose to switch to "),e("strong",null,"manual setup"),t(", you will be presented with a similar relationship setup to O2M or M2M. The parent collection and primary key are known, so those fields are disabled.")],-1),ye=e("p",null,"Next, we configure the Translation Collection. Set to \u201CAuto Fill\u201D by default, this will enter intelligent naming based on related names, and disables all fields. Disabling Auto Fill will enable all fields, allowing you to name the collection that holds the translations, as well as the two fields (each a M2O) that store foreign keys to the parent item and language.",-1),ge=e("p",null,[t("Lastly, you would select/create the Languages collection, which stores the languages available for this translations field. It is common practice to reuse a single languages collection throughout your project, unless translation fields need to support different language sets. For the language "),e("code",{class:""},"code"),t(" we recommend using the IETF language tag (eg: "),e("code",{class:""},"en-US"),t(") which combines the ISO 639-1 and ISO 3166\u20111 standards, but anything can be used (eg: "),e("code",{class:""},"english"),t(").")],-1),we=e("h2",{id:"many-to-many-(m2m)"},[t("Many-to-Many (M2M) "),e("a",{class:"header-anchor",href:"#many-to-many-(m2m)"},"#")],-1),Me=t("The Many-to-Many relationship is actually just "),be=e("strong",null,"two relationships combined",-1),ve=t(" (O2M+M2O) that join together three different collections. The M2M is stored as an "),Oe=t("Alias"),ke=t(" field on its parent Collection that dynamically lists all items connected via a "),Te=t("junction collection"),xe=t(". For example, a "),Ce=e("em",null,"recipe",-1),Ae=t(" can have many "),je=e("em",null,"ingredients",-1),Ie=t(", and "),Pe=e("em",null,"ingredients",-1),De=t(" can be in many "),Se=e("em",null,"recipes",-1),Re=t("."),Fe=e("p",null,"Below is an example of a M2M relationship:",-1),Ke=e("pre",null,[e("code",{class:""},`recipes (Collection)
19
- - id (Primary Key)
20
- - name
21
- - *ingredients* (M2M/O2M alias field that lists references from "recipe_ingredients")
22
-
23
- ingredients (Collection)
24
- - id (Primary Key)
25
- - name
26
- - *recipes* (M2M/O2M alias field that lists references from "recipe_ingredients")
27
-
28
- recipe_ingredients (Junction Collection)
29
- - id (Primary Key)
30
- - recipe (stores the recipe key)
31
- - ingredient (stores ingredient key)
32
- - quantity (other optional data on the connection)
33
- `)],-1),Ne=e("p",null,[t("Notice that the example above also has a "),e("code",{class:""},"quantity"),t(" field on the Junction Collection, which tracks how much of each ingredient is needed for the recipe. You can add any other "),e("em",null,"contextual"),t(" fields to the junction, and they will also be included at the top of the App\u2019s relational Item Page form.")],-1),qe=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Self-Referencing"),e("p",null,[t("You can also have a M2M relationship that connects items within the "),e("em",null,"same"),t(" collection. An example of this is \u201CRelated Articles\u201D, where an article might relate to many other articles.")])],-1),Be=e("h3",{id:"setup-4"},[t("Setup "),e("a",{class:"header-anchor",href:"#setup-4"},"#")],-1),Je=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/relationships/M2M-20220216A.webp",alt:"M2M"})],-1),We=e("p",null,"The parent collection and field are already known (it\u2019s the field you\u2019re currently creating), so configuring those are disabled.",-1),Ye=e("p",null,[t("Next you should configure the Related Collection. If you select or enter an "),e("strong",null,"existing"),t(" Related Collection (highlights green) then the primary key field is known and automatically selected. If you enter the name of a "),e("strong",null,"new"),t(" Related Collection (doesn\u2019t already exist), you will also be prompted to enter the name of its primary key field, which will default to an auto-increment integer type.")],-1),Ue=t("Lastly, we configure the "),Le=t("Junction Collection"),Ee=t(", which sits between the two related collections, storing all links between the two. You can leave this set to \u201CAuto-Fill\u201D, which sets intelligent naming defaults, or disable it to select existing options or enter custom names."),ze=e("p",null,[t("You also have the option to create a "),e("strong",null,"Corresponding Field"),t(" during this process. This allows you to more easily create the reverse M2M field on the "),e("em",null,"related"),t(" collection.")],-1),He=e("p",null,[t("The optional "),e("strong",null,"Sort Field"),t(" can be used to enable manual reordering of items within this O2M field. This is configured by selecting an existing numeric type field (highlights green) from the Junction Collection, or entering the name of a new field to be created.")],-1),Ve=e("p",null,[e("strong",null,"Relational Triggers"),t(" allow for control over what happens when a relationship is broken. There are three options:")],-1),Ge=e("ul",null,[e("li",null,[e("strong",null,"On Deselect of [Junction Collection]"),t(" \u2014 When the value of this M2M is deselected\u2026 "),e("ul",null,[e("li",null,"Nullify the junction field (default)"),e("li",null,"Delete the junction item (cascade)")])]),e("li",null,[e("strong",null,"On Delete of [Parent Collection Item]"),t(" \u2014 When this M2M item is deleted\u2026 "),e("ul",null,[e("li",null,"Nullify the junction field (default)"),e("li",null,"Set the junction field to its default value"),e("li",null,"Delete the related junction item (cascade)"),e("li",null,"Prevent the deletion")])]),e("li",null,[e("strong",null,"On Delete of [Related Collection Item]"),t(" \u2014 When the related M2M item is deleted\u2026 "),e("ul",null,[e("li",null,"Nullify the junction field (default)"),e("li",null,"Set the junction field to its default value"),e("li",null,"Delete the related junction item (cascade)"),e("li",null,"Prevent the deletion")])])],-1),Qe=e("h2",{id:"many-to-any-(m2a)"},[t("Many-to-Any (M2A) "),e("a",{class:"header-anchor",href:"#many-to-any-(m2a)"},"#")],-1),Xe=t("Sometimes called a \u201Cmatrix field\u201D or \u201Creplicator\u201D. Like the M2M, the M2A is stored as an "),Ze=t("Alias"),$e=t(" field on its parent Collection that dynamically lists all items connected via a "),et=t("junction collection"),tt=t(". However, there is one key difference: one side of the junction also stores a "),nt=e("strong",null,"collection key",-1),ot=t(". This combination of collection name and primary key means that you can effectively store a reference to "),lt=e("em",null,"any",-1),it=t(" item in the database. You can then artificially limit which collections are valid through a related collections \u201Callow list\u201D."),st=e("p",null,[t("A common example of a M2A is a \u201CPage Builder\u201D, which has a "),e("em",null,"Pages"),t(" collection that includes any number of different \u201Csection\u201D Collections, such as: \u201CHeading\u201D, \u201CText\u201D, and \u201CImage\u201D. In this example the junction table will link different sections (from different collections) with a page, creating relational layouts.")],-1),at=e("p",null,"Below is an example of a M2A relationship:",-1),rt=e("pre",null,[e("code",{class:""},`pages (Collection)
34
- - id
35
- - name
36
- - *sections* (O2M/M2A alias field that lists references from "page_sections")
37
-
38
- page_sections (Junction Collection)
39
- - id
40
- - pages_id (stores the primary key of the parent page)
41
- - collection (stores name of the related collection, for example "headings", "text", or "images")
42
- - item (stores the primary key of the related item)
43
-
44
- headings (Collection)
45
- - id
46
- - title
47
-
48
- text (Collection)
49
- - id
50
- - text
51
-
52
- images (Collection)
53
- - id
54
- - file
55
- `)],-1),ct=e("h3",{id:"setup-5"},[t("Setup "),e("a",{class:"header-anchor",href:"#setup-5"},"#")],-1),dt=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/relationships/M2A-20220216A.webp",alt:"M2A"})],-1),ht=e("p",null,"The parent collection and field are already known (it\u2019s the field you\u2019re currently creating), so configuring those are disabled.",-1),ut=t("Next, we configure the "),ft=t("Junction Collection"),pt=t(", which sits between the related collections, storing all links between them. You can leave this set to \u201CAuto-Fill\u201D, which sets intelligent naming defaults, or disable it to select existing options or enter custom names."),mt=e("p",null,[t("Lastly, you should select any desired Related Collections. Unlike other relationships, you can\u2019t "),e("em",null,"create"),t(" these related collections here, so ensure all related collections you need are created beforehand.")],-1),_t=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Auto-generating"),e("p",null,"If you enter a collection/field name that doesn\u2019t exist yet, Directus will auto-generate these collections/fields once you save the changes on the new M2A field.")],-1),yt=e("p",null,[t("The optional "),e("strong",null,"Sort Field"),t(" can be used to enable manual reordering of items within this M2A field. This is configured by selecting an existing numeric type field (highlights green) from the Junction Collection, or entering the name of a new field to be created.")],-1),gt=e("p",null,[e("strong",null,"Relational Triggers"),t(" allow for control over what happens when a relationship is broken. There are three options:")],-1),wt=e("ul",null,[e("li",null,[e("strong",null,"On Delete of [Parent Collection Item]"),t(" \u2014 When a M2A item is deleted\u2026 "),e("ul",null,[e("li",null,"Nullify the junction field (default)"),e("li",null,"Set the junction field to its default value"),e("li",null,"Delete the related junction item (cascade)"),e("li",null,"Prevent the deletion")])]),e("li",null,[e("strong",null,"On Deselect of [Junction Collection]"),t(" \u2014 When the value of this M2A is deselected\u2026 "),e("ul",null,[e("li",null,"Nullify the junction field (default)"),e("li",null,"Delete the junction item (cascade)")])])],-1),Mt=e("h2",{id:"one-to-one-(o2o)"},[t("One-to-One (O2O) "),e("a",{class:"header-anchor",href:"#one-to-one-(o2o)"},"#")],-1),bt=t("Directus does not include a dedicated One-to-One (O2O) relationship type or interface. However, O2O is essentially the same as a M2O (storing a foreign key). The only difference is that a O2O enforces the cardinality. In other words, selecting a relational item in a O2O means that item can not be selected elsewhere (it can only be used once). This functionality can be added by checking and constraining uniqueness via a "),vt=t("custom event hook"),Ot=t(" or "),kt=t("custom interface"),Tt=t("."),xt=e("p",null,[t("An example of this is a "),e("em",null,"person"),t(" only has one unique set of "),e("em",null,"fingerprints"),t(", and those "),e("em",null,"fingerprints"),t(" only belong to one "),e("em",null,"person"),t(".")],-1),Ct={title:"Relationships",modularExtension:!1},At={name:"relationships",setup(jt,{expose:a}){return a({frontmatter:{title:"Relationships",modularExtension:!1}}),(It,Pt)=>{const o=i("router-link"),r=i("docswrapper");return c(),d(r,{frontmatter:Ct},{default:n(()=>[e("div",h,[u,f,p,m,_,e("p",null,[y,l(o,{to:"/docs/getting-started/glossary/#items"},{default:n(()=>[g]),_:1}),w,l(o,{to:"/docs/getting-started/glossary/#primary-key-pk"},{default:n(()=>[M]),_:1}),b,l(o,{to:"/docs/getting-started/glossary/#collections"},{default:n(()=>[v]),_:1}),O,l(o,{to:"/docs/getting-started/glossary/#fields"},{default:n(()=>[k]),_:1}),T,x,C]),A,j,I,P,D,S,R,F,K,N,q,B,J,W,Y,U,e("p",null,[L,E,z,l(o,{to:"/docs/getting-started/glossary/#alias"},{default:n(()=>[H]),_:1}),V]),G,Q,X,Z,$,ee,te,ne,oe,le,ie,se,e("p",null,[ae,l(o,{to:"/docs/getting-started/glossary/#alias"},{default:n(()=>[re]),_:1}),ce,de,he]),ue,fe,pe,me,_e,ye,ge,we,e("p",null,[Me,be,ve,l(o,{to:"/docs/getting-started/glossary/#alias"},{default:n(()=>[Oe]),_:1}),ke,l(o,{to:"/docs/getting-started/glossary/#junction-collections"},{default:n(()=>[Te]),_:1}),xe,Ce,Ae,je,Ie,Pe,De,Se,Re]),Fe,Ke,Ne,qe,Be,Je,We,Ye,e("p",null,[Ue,l(o,{to:"/docs/getting-started/glossary/#junction-collections"},{default:n(()=>[Le]),_:1}),Ee]),ze,He,Ve,Ge,Qe,e("p",null,[Xe,l(o,{to:"/docs/getting-started/glossary/#alias"},{default:n(()=>[Ze]),_:1}),$e,l(o,{to:"/docs/getting-started/glossary/#junction-collections"},{default:n(()=>[et]),_:1}),tt,nt,ot,lt,it]),st,at,rt,ct,dt,ht,e("p",null,[ut,l(o,{to:"/docs/getting-started/glossary/#junction-collections"},{default:n(()=>[ft]),_:1}),pt]),mt,_t,yt,gt,wt,Mt,e("p",null,[bt,l(o,{to:"/docs/extensions/hooks/"},{default:n(()=>[vt]),_:1}),Ot,l(o,{to:"/docs/extensions/interfaces/"},{default:n(()=>[kt]),_:1}),Tt]),xt])]),_:1})}}};typeof s=="function"&&s(At);export{At as default,Ct as frontmatter};