@directus/app 9.14.2 → 9.15.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 (376) hide show
  1. package/dist/assets/@directus_extensions-sdk.a04f8e82.entry.js +1 -0
  2. package/dist/assets/{accounts.d4221901.js → accounts.8fbf8699.js} +1 -1
  3. package/dist/assets/{active-line.fa69c527.js → active-line.37204566.js} +1 -1
  4. package/dist/assets/{activity-log.0479877c.js → activity-log.edaa174f.js} +0 -0
  5. package/dist/assets/{activity.941cbf2b.js → activity.f03e4c50.js} +19 -19
  6. package/dist/assets/{apl.bd1aa660.js → apl.aa72adb8.js} +1 -1
  7. package/dist/assets/{architecture.ddda2484.js → architecture.a1dad632.js} +0 -0
  8. package/dist/assets/{asciiarmor.61a25d0a.js → asciiarmor.67b12091.js} +1 -1
  9. package/dist/assets/{asn.1.f93e21f0.js → asn.1.c5725a55.js} +1 -1
  10. package/dist/assets/{asterisk.c2e02425.js → asterisk.0f667406.js} +1 -1
  11. package/dist/assets/{authentication.d5cd539e.js → authentication.a37290ac.js} +14 -14
  12. package/dist/assets/{autorefresh.1451dfba.js → autorefresh.e9c801fd.js} +1 -1
  13. package/dist/assets/{aws.65b39fe1.js → aws.81dde688.js} +1 -1
  14. package/dist/assets/{backing-directus.2809dd5a.js → backing-directus.877781ff.js} +1 -1
  15. package/dist/assets/bg-BG.8d8c105a.js +1 -0
  16. package/dist/assets/{brainfuck.c3dcf390.js → brainfuck.e73b74b2.js} +1 -1
  17. package/dist/assets/{cli.6ee7cfc0.js → cli.acbc6a21.js} +3 -3
  18. package/dist/assets/{cli.fce4fcbe.js → cli.e9c97474.js} +12 -12
  19. package/dist/assets/{clike.7fa1545d.js → clike.296c3a16.js} +1 -1
  20. package/dist/assets/{clojure.7c6780eb.js → clojure.d9687d7c.js} +1 -1
  21. package/dist/assets/{cloudron.735aeaf5.js → cloudron.ccb9f60b.js} +0 -0
  22. package/dist/assets/{cmake.af88bf9d.js → cmake.c00d972a.js} +1 -1
  23. package/dist/assets/{cobol.6114e2a0.js → cobol.029a8cf3.js} +1 -1
  24. package/dist/assets/{codebase-overview.3de1bbdc.js → codebase-overview.2867468d.js} +1 -1
  25. package/dist/assets/{coffeescript.39626c6c.js → coffeescript.8aefc36c.js} +1 -1
  26. package/dist/assets/{collections.11aae4a8.js → collections.09fe8eef.js} +20 -20
  27. package/dist/assets/collections.d440e2c1.js +2 -0
  28. package/dist/assets/commonlisp.0b15e5a5.js +1 -0
  29. package/dist/assets/{config-options.9b79feaf.js → config-options.592aab17.js} +15 -15
  30. package/dist/assets/content.d6024fae.js +1 -0
  31. package/dist/assets/{creating-extensions.054f4231.js → creating-extensions.028151bd.js} +5 -5
  32. package/dist/assets/{crystal.296a2a42.js → crystal.e19a3a38.js} +1 -1
  33. package/dist/assets/{cs-CZ.5045b098.js → cs-CZ.ba778ad2.js} +1 -1
  34. package/dist/assets/{css.d2d076a2.js → css.2715c204.js} +1 -1
  35. package/dist/assets/{cypher.829617f7.js → cypher.00e9acae.js} +1 -1
  36. package/dist/assets/{d.b589edc9.js → d.5a35cc30.js} +1 -1
  37. package/dist/assets/{da-DK.3c379038.js → da-DK.38409d46.js} +1 -1
  38. package/dist/assets/{dart.291e78bf.js → dart.a107f6c3.js} +1 -1
  39. package/dist/assets/{data-model.eb5f7e27.js → data-model.b806a25a.js} +1 -1
  40. package/dist/assets/de-DE.8d6a71ed.js +1 -0
  41. package/dist/assets/{diff.29062812.js → diff.035b0e41.js} +1 -1
  42. package/dist/assets/{digitalocean-app-platform.62c81303.js → digitalocean-app-platform.542bac85.js} +1 -1
  43. package/dist/assets/{display-templates.2bbee0eb.js → display-templates.af38b75d.js} +1 -1
  44. package/dist/assets/{displays.037994a0.js → displays.027c9ffc.js} +4 -4
  45. package/dist/assets/django.771bf030.js +1 -0
  46. package/dist/assets/{docker.1f4e694b.js → docker.ce60011d.js} +5 -5
  47. package/dist/assets/{dockerfile.d4dec723.js → dockerfile.69a18e53.js} +1 -1
  48. package/dist/assets/{documentation.60e724e3.js → documentation.d5124166.js} +0 -0
  49. package/dist/assets/{dtd.1c436e67.js → dtd.df94c92f.js} +1 -1
  50. package/dist/assets/{dylan.0b60e784.js → dylan.4f1df30d.js} +1 -1
  51. package/dist/assets/{ebnf.8c391bd9.js → ebnf.5b209db0.js} +1 -1
  52. package/dist/assets/{ecl.2b2e1aaf.js → ecl.7e72deb8.js} +1 -1
  53. package/dist/assets/{eiffel.2f0f7a76.js → eiffel.9bf84ee8.js} +1 -1
  54. package/dist/assets/{elm.c663885f.js → elm.46445fd8.js} +1 -1
  55. package/dist/assets/{email-templates.062d08d1.js → email-templates.cf7de2aa.js} +1 -1
  56. package/dist/assets/en-GB.61c87be5.js +1 -0
  57. package/dist/assets/{endpoints.b6214ea4.js → endpoints.0f025685.js} +2 -2
  58. package/dist/assets/{erlang.c430e715.js → erlang.50accc38.js} +1 -1
  59. package/dist/assets/{extensions.0f9a4545.js → extensions.27ee4742.js} +4 -4
  60. package/dist/assets/{factor.5396263e.js → factor.164d6f9d.js} +1 -1
  61. package/dist/assets/{faq.c134fb00.js → faq.633c25f1.js} +2 -2
  62. package/dist/assets/{fcl.bd7fcca2.js → fcl.2c3dc0b9.js} +1 -1
  63. package/dist/assets/{fields.2c2cc037.js → fields.47aabeca.js} +24 -24
  64. package/dist/assets/file-library.82e96a16.js +1 -0
  65. package/dist/assets/{files.1d250203.js → files.97dd14f6.js} +34 -34
  66. package/dist/assets/{filter-rules.6cc70dd4.js → filter-rules.f7296d23.js} +6 -6
  67. package/dist/assets/{filters.0ef5a5ed.js → filters.b1397c95.js} +1 -1
  68. package/dist/assets/{flows.19c6599f.js → flows.0173f6d4.js} +36 -36
  69. package/dist/assets/{flows.03ed1b32.js → flows.7116f535.js} +3 -3
  70. package/dist/assets/{folders.e417fd8b.js → folders.0622ae98.js} +32 -32
  71. package/dist/assets/{forth.f0713a66.js → forth.49d85bf7.js} +1 -1
  72. package/dist/assets/{fortran.7ecc20d7.js → fortran.12803734.js} +1 -1
  73. package/dist/assets/fr-CA.87857f82.js +1 -0
  74. package/dist/assets/fr-FR.43594476.js +1 -0
  75. package/dist/assets/{gas.6eb675a6.js → gas.912b174f.js} +1 -1
  76. package/dist/assets/{gcp.293edb91.js → gcp.8ca78211.js} +2 -2
  77. package/dist/assets/{gfm.5fc5d423.js → gfm.95f7b838.js} +1 -1
  78. package/dist/assets/{gherkin.ee0d5535.js → gherkin.ef890b31.js} +1 -1
  79. package/dist/assets/{github-ci.20236bca.js → github-ci.40c9d16d.js} +1 -1
  80. package/dist/assets/{glossary.26a7ec6d.js → glossary.38068d72.js} +1 -1
  81. package/dist/assets/{glossary.c947165b.js → glossary.ecc8e7cf.js} +1 -1
  82. package/dist/assets/go.ec5a1c94.js +1 -0
  83. package/dist/assets/{groovy.8cf425ea.js → groovy.0da0e846.js} +1 -1
  84. package/dist/assets/{haml.1cc171d6.js → haml.0ccf17af.js} +1 -1
  85. package/dist/assets/{handlebars.4cbb06ff.js → handlebars.c8657b1d.js} +1 -1
  86. package/dist/assets/{haskell-literate.77348a32.js → haskell-literate.8c4cf534.js} +1 -1
  87. package/dist/assets/{haskell.be905e2b.js → haskell.0a0dfa79.js} +1 -1
  88. package/dist/assets/{haxe.bb404a52.js → haxe.72a9d4fd.js} +1 -1
  89. package/dist/assets/he-IL.7b11dc5e.js +1 -0
  90. package/dist/assets/{hooks.619f1e3f.js → hooks.5488f34d.js} +4 -4
  91. package/dist/assets/{htmlembedded.82628379.js → htmlembedded.ea02349b.js} +1 -1
  92. package/dist/assets/{htmlmixed.35e19eba.js → htmlmixed.71c55a95.js} +1 -1
  93. package/dist/assets/http.e373a3b6.js +1 -0
  94. package/dist/assets/hu-HU.3c8e2cdc.js +1 -0
  95. package/dist/assets/{idl.e0b6740c.js → idl.9bc82209.js} +1 -1
  96. package/dist/assets/{iis.28211ce4.js → iis.9e682df0.js} +2 -2
  97. package/dist/assets/{import-export.34657c23.js → import-export.2114c732.js} +2 -2
  98. package/dist/assets/{index.4d6eeb14.js → index.0152af18.js} +1 -1
  99. package/dist/assets/{index.ffd92bd2.js → index.048bfcd4.js} +1 -1
  100. package/dist/assets/{index.12c9997b.js → index.094d7435.js} +1 -1
  101. package/dist/assets/{index.ec029011.js → index.15e3c95b.js} +1 -1
  102. package/dist/assets/{index.b08b6d41.js → index.16102ca4.js} +1 -1
  103. package/dist/assets/{index.0c5f689d.js → index.1c2bca61.js} +1 -1
  104. package/dist/assets/{index.8533e926.js → index.21e15966.js} +1 -1
  105. package/dist/assets/{index.2bdd4a58.js → index.22cbe4df.js} +1 -1
  106. package/dist/assets/{index.df8ed86f.js → index.238d8ccc.js} +1 -1
  107. package/dist/assets/{index.c87077b2.js → index.286f3139.js} +1 -1
  108. package/dist/assets/{index.48185f5e.js → index.2f10fad2.js} +0 -0
  109. package/dist/assets/{index.9433a729.js → index.2fa94ca6.js} +1 -1
  110. package/dist/assets/{index.cbb1e45f.js → index.34e50685.js} +1 -1
  111. package/dist/assets/{index.3980c835.js → index.36361e5b.js} +1 -1
  112. package/dist/assets/{index.08d36aec.js → index.38ca65a8.js} +1 -1
  113. package/dist/assets/{index.e2566961.js → index.3a449212.js} +1 -1
  114. package/dist/assets/{index.acd6a1b3.js → index.3dbbeee8.js} +1 -1
  115. package/dist/assets/{index.ede50f80.js → index.43fc16cf.js} +1 -1
  116. package/dist/assets/{index.3c18e01d.js → index.44dfee18.js} +1 -1
  117. package/dist/assets/{index.a2f93b9e.js → index.4caf473d.js} +1 -1
  118. package/dist/assets/{index.6b2281ed.js → index.4f3e1405.js} +1 -1
  119. package/dist/assets/{index.e0c46d7a.js → index.504c871e.js} +1 -1
  120. package/dist/assets/{index.e4bd37ab.js → index.558dbe9d.js} +1 -1
  121. package/dist/assets/{index.69be7734.js → index.5785bd5b.js} +1 -1
  122. package/dist/assets/{index.387eb2dc.js → index.58ce5d3f.js} +1 -1
  123. package/dist/assets/{index.26114f20.js → index.5bccbb70.js} +1 -1
  124. package/dist/assets/{index.aa4487eb.js → index.5e2156f1.js} +1 -1
  125. package/dist/assets/{index.6b68033b.js → index.5efaa053.js} +1 -1
  126. package/dist/assets/{index.c7c79d76.js → index.63beca13.js} +1 -1
  127. package/dist/assets/{index.7d0d93ea.js → index.65ef9955.js} +1 -1
  128. package/dist/assets/{index.333cd330.js → index.6ac5a367.js} +1 -1
  129. package/dist/assets/{index.35594495.js → index.6b8582b3.js} +1 -1
  130. package/dist/assets/{index.5319e019.js → index.6be1ec19.js} +1 -1
  131. package/dist/assets/{index.e01833a4.js → index.6c3cfd9d.js} +1 -1
  132. package/dist/assets/{index.c2bf7561.js → index.6ff4b32e.js} +0 -0
  133. package/dist/assets/index.719a1bf6.css +1 -0
  134. package/dist/assets/{index.ea000c09.js → index.727f38c4.js} +1 -1
  135. package/dist/assets/{index.42ec5578.js → index.73791b0b.js} +1 -1
  136. package/dist/assets/{index.394d9852.js → index.766f9329.js} +1 -1
  137. package/dist/assets/{index.6d700d45.js → index.7993990d.js} +1 -1
  138. package/dist/assets/{index.ad621c47.js → index.7c229bc2.js} +1 -1
  139. package/dist/assets/{index.2f25c8b2.js → index.7f1515ca.js} +1 -1
  140. package/dist/assets/{index.04dc39b2.js → index.7fe2a6c1.js} +1 -1
  141. package/dist/assets/{index.d3abd983.js → index.8627ddb4.js} +0 -0
  142. package/dist/assets/{index.da01b78c.js → index.86900d0e.js} +1 -1
  143. package/dist/assets/{index.c6325474.js → index.87997092.js} +1 -1
  144. package/dist/assets/{index.30caab70.js → index.8b6e1cf5.js} +1 -1
  145. package/dist/assets/{index.04367430.js → index.8b727b3d.js} +1 -1
  146. package/dist/assets/{index.52f281e8.js → index.8b83352c.js} +1 -1
  147. package/dist/assets/{index.1cb735f8.js → index.8d64a2cc.js} +1 -1
  148. package/dist/assets/{index.deebe6ae.js → index.8e6a2df6.js} +1 -1
  149. package/dist/assets/{index.91518e0b.js → index.909efb92.js} +1 -1
  150. package/dist/assets/{index.83a348b7.js → index.937b45e4.js} +1 -1
  151. package/dist/assets/{index.194e7d3a.js → index.938b9c64.js} +1 -1
  152. package/dist/assets/{index.afa57f01.js → index.970729f9.js} +1 -1
  153. package/dist/assets/{index.10342721.js → index.9a2ded43.js} +1 -1
  154. package/dist/assets/{index.7fbf62c1.js → index.a14f652a.js} +1 -1
  155. package/dist/assets/{index.afc521b9.js → index.a157d24b.js} +1 -1
  156. package/dist/assets/{index.ef0a3f30.js → index.ab135b59.js} +1 -1
  157. package/dist/assets/{index.58118d29.js → index.ac660d97.js} +1 -1
  158. package/dist/assets/{index.9ad498c7.js → index.aeca2d25.js} +1 -1
  159. package/dist/assets/{index.ea5cafa4.js → index.b3227ed5.js} +1 -1
  160. package/dist/assets/{index.635da0ce.js → index.b4512435.js} +1 -1
  161. package/dist/assets/{index.6caacd5c.js → index.b73eaa87.js} +1 -1
  162. package/dist/assets/{index.e811b103.js → index.b91f7cb9.js} +1 -1
  163. package/dist/assets/{index.c33d8828.js → index.b990ffa7.js} +1 -1
  164. package/dist/assets/index.b9f1c213.css +1 -0
  165. package/dist/assets/{index.abaf9f38.js → index.bb39eac1.js} +1 -1
  166. package/dist/assets/{index.3d6e1b82.js → index.c0a6d945.js} +1 -1
  167. package/dist/assets/{index.2590162c.js → index.ca46607e.js} +1 -1
  168. package/dist/assets/{index.21ae1ab1.js → index.ce459a32.js} +1 -1
  169. package/dist/assets/{index.2d140ddc.js → index.d3e27d97.js} +1 -1
  170. package/dist/assets/{index.d6ab24fc.js → index.d78b4dd1.js} +1 -1
  171. package/dist/assets/{index.a8104962.js → index.d9e06c0f.js} +1 -1
  172. package/dist/assets/{index.74342718.js → index.dae019ea.js} +1 -1
  173. package/dist/assets/{index.ee70e4bb.js → index.dccdb81c.js} +1 -1
  174. package/dist/assets/{index.fcdc2b58.js → index.dd5b5aec.js} +1 -1
  175. package/dist/assets/{index.767cba0b.js → index.e000ab7f.js} +0 -0
  176. package/dist/assets/{index.e2330f33.entry.js → index.e00d2c6d.entry.js} +642 -642
  177. package/dist/assets/{index.caf59a5f.js → index.e24720c2.js} +1 -1
  178. package/dist/assets/{index.dd9b2ae1.js → index.e7e3b4f1.js} +1 -1
  179. package/dist/assets/{index.2313e86e.js → index.ebace2a1.js} +1 -1
  180. package/dist/assets/{index.ef5e93b4.js → index.ebc5fd3e.js} +1 -1
  181. package/dist/assets/index.ec7b5840.js +26 -0
  182. package/dist/assets/{index.95cd1641.js → index.ee33b489.js} +1 -1
  183. package/dist/assets/{index.8f7e9b41.js → index.efb2f918.js} +1 -1
  184. package/dist/assets/{index.73d43dbd.js → index.f45296e2.js} +1 -1
  185. package/dist/assets/{index.253ffe45.js → index.fc01b28f.js} +1 -1
  186. package/dist/assets/{index.83b25f0c.js → index.fd19f059.js} +1 -1
  187. package/dist/assets/{index.4e9c64c5.js → index.fee1fadb.js} +1 -1
  188. package/dist/assets/{index.1f7015c4.js → index.ffa2a1cd.js} +1 -1
  189. package/dist/assets/{input-rich-text-html.40c3be93.js → input-rich-text-html.0b6df824.js} +2 -2
  190. package/dist/assets/{input-rich-text-html.0cdbc326.css → input-rich-text-html.49906812.css} +1 -1
  191. package/dist/assets/{insights.9f2c43c6.js → insights.7988716a.js} +1 -1
  192. package/dist/assets/{installation.76fec85e.js → installation.5215ce07.js} +1 -1
  193. package/dist/assets/{interfaces.a65a79df.js → interfaces.38099de0.js} +3 -3
  194. package/dist/assets/introduction.807bce52.js +1 -0
  195. package/dist/assets/{introduction.eda1c2c4.js → introduction.a173e7ad.js} +7 -7
  196. package/dist/assets/{introduction.e73b1c6c.js → introduction.a6b2c1f0.js} +1 -1
  197. package/dist/assets/{introduction.32669a19.js → introduction.e6dc6284.js} +3 -3
  198. package/dist/assets/it-IT.39e71c5e.js +1 -0
  199. package/dist/assets/items.02ad4f11.js +1 -0
  200. package/dist/assets/{items.f5cdbca8.js → items.ba1efbf4.js} +33 -33
  201. package/dist/assets/ja-JP.bfb2f81a.js +1 -0
  202. package/dist/assets/{javascript-hint.ac25161a.js → javascript-hint.bd8ca2b7.js} +1 -1
  203. package/dist/assets/{javascript.4a425e67.js → javascript.498e8ddb.js} +1 -1
  204. package/dist/assets/{jinja2.3501ea01.js → jinja2.54efd8a5.js} +1 -1
  205. package/dist/assets/{jsx.0b768eda.js → jsx.efc77b84.js} +1 -1
  206. package/dist/assets/{julia.05487698.js → julia.90341379.js} +1 -1
  207. package/dist/assets/ku-TR.ad6b2677.js +1 -0
  208. package/dist/assets/{layouts.fc5fee9f.js → layouts.dded37a5.js} +1 -1
  209. package/dist/assets/{layouts.e590b93d.js → layouts.f9cfede4.js} +3 -3
  210. package/dist/assets/{livescript.d80267df.js → livescript.cb85e981.js} +1 -1
  211. package/dist/assets/localization.f384f316.js +1 -0
  212. package/dist/assets/{lua.cb506140.js → lua.cc15c79a.js} +1 -1
  213. package/dist/assets/{manual.363297f0.js → manual.cc05cff9.js} +4 -4
  214. package/dist/assets/{mark-selection.5fc9b3c0.js → mark-selection.cfa3fcec.js} +1 -1
  215. package/dist/assets/{match-highlighter.a2cc9da6.js → match-highlighter.bd16b014.js} +1 -1
  216. package/dist/assets/{mathematica.a00b79ed.js → mathematica.17c84e9b.js} +1 -1
  217. package/dist/assets/{mbox.c0779dbf.js → mbox.c07261a5.js} +1 -1
  218. package/dist/assets/{migrations.5af99cef.js → migrations.fa20b23d.js} +3 -3
  219. package/dist/assets/{mirc.85bf44d0.js → mirc.6c81e0d9.js} +1 -1
  220. package/dist/assets/{mllike.d68491d9.js → mllike.647fee7d.js} +1 -1
  221. package/dist/assets/{modelica.e3e6bf94.js → modelica.7f095a0c.js} +1 -1
  222. package/dist/assets/{modules.2403c678.js → modules.aed8795b.js} +4 -4
  223. package/dist/assets/{mscgen.9bdcf1c0.js → mscgen.e7ec6db0.js} +1 -1
  224. package/dist/assets/{multiplex.febfca78.js → multiplex.b20d59d9.js} +2 -2
  225. package/dist/assets/{mumps.dfb1f9e8.js → mumps.e1926e1a.js} +1 -1
  226. package/dist/assets/{nginx.871f7d94.js → nginx.3e60b1d8.js} +1 -1
  227. package/dist/assets/nl-NL.e613d40a.js +1 -0
  228. package/dist/assets/{notifications.152d86b7.js → notifications.5186ee54.js} +32 -32
  229. package/dist/assets/{nsis.2b26c017.js → nsis.b4d2f79d.js} +1 -1
  230. package/dist/assets/{ntriples.ccbcd275.js → ntriples.23fe57b5.js} +1 -1
  231. package/dist/assets/{octave.4f220d3d.js → octave.bc18fbba.js} +1 -1
  232. package/dist/assets/{operations.f00b8c11.js → operations.51c06345.js} +1 -1
  233. package/dist/assets/operations.a263ba49.js +30 -0
  234. package/dist/assets/{operations.9b3b2514.js → operations.eaacfa1d.js} +34 -34
  235. package/dist/assets/{overlay.e2046aae.js → overlay.914efac4.js} +1 -1
  236. package/dist/assets/{overview.c3e64ee1.js → overview.0fe284a4.js} +1 -1
  237. package/dist/assets/{overview.d2dd9f17.js → overview.21a42c2e.js} +1 -1
  238. package/dist/assets/{overview.288d5f54.js → overview.a1598534.js} +1 -1
  239. package/dist/assets/{oz.ef269d7e.js → oz.467f2daf.js} +1 -1
  240. package/dist/assets/{panels.f1f6334b.js → panels.d307c197.js} +3 -3
  241. package/dist/assets/{pascal.67fc5051.js → pascal.3b07fc1d.js} +1 -1
  242. package/dist/assets/{pegjs.f8b94ba6.js → pegjs.d8aa363f.js} +1 -1
  243. package/dist/assets/{perl.d078ddf8.js → perl.5b744b42.js} +1 -1
  244. package/dist/assets/{permissions.de41ff3d.js → permissions.355cb88d.js} +32 -32
  245. package/dist/assets/{php.d5a5503e.js → php.139f8b23.js} +1 -1
  246. package/dist/assets/{pig.31796bf8.js → pig.df6cedd4.js} +1 -1
  247. package/dist/assets/{pl-PL.6e87b518.js → pl-PL.91a0c1e6.js} +1 -1
  248. package/dist/assets/{plesk.0ef5ab4c.js → plesk.c1379970.js} +6 -6
  249. package/dist/assets/{powershell.3fced302.js → powershell.b3b5efd9.js} +1 -1
  250. package/dist/assets/{presets-bookmarks.5ef79225.js → presets-bookmarks.668779cf.js} +1 -1
  251. package/dist/assets/{presets.db317f9f.js → presets.0d5dc9c6.js} +32 -32
  252. package/dist/assets/{project-settings.e940a11b.js → project-settings.2a64f071.js} +1 -1
  253. package/dist/assets/{projects.5cc2ad0c.js → projects.f82931e8.js} +1 -1
  254. package/dist/assets/{properties.e7afe8e8.js → properties.7b21f6e1.js} +1 -1
  255. package/dist/assets/{protobuf.9c42c0f6.js → protobuf.a9cd2a14.js} +1 -1
  256. package/dist/assets/pt-BR.ce1fdc59.js +1 -0
  257. package/dist/assets/{pug.2f69e794.js → pug.1187ae8d.js} +1 -1
  258. package/dist/assets/{puppet.3ed57a22.js → puppet.19c616b8.js} +1 -1
  259. package/dist/assets/{python.a38fec56.js → python.ccb55c13.js} +1 -1
  260. package/dist/assets/{q.712e23f4.js → q.24958204.js} +1 -1
  261. package/dist/assets/{query.f187b00c.js → query.8fb6cf04.js} +27 -27
  262. package/dist/assets/{quickstart.8d5c02c2.js → quickstart.c0e4b8bd.js} +2 -2
  263. package/dist/assets/{quickstart.62cbd1cd.js → quickstart.f2432960.js} +1 -1
  264. package/dist/assets/{r.e9fe5346.js → r.acb07d5a.js} +1 -1
  265. package/dist/assets/{relations.a37c187d.js → relations.2dfa7993.js} +24 -24
  266. package/dist/assets/{relationships.5cda18e3.js → relationships.eb7e340c.js} +5 -5
  267. package/dist/assets/{resources.540de098.js → resources.b4808e35.js} +1 -1
  268. package/dist/assets/{revisions.e044726e.js → revisions.cf799486.js} +8 -8
  269. package/dist/assets/{roles.83da9d9c.js → roles.b0107422.js} +32 -32
  270. package/dist/assets/{rpm.f8b0779d.js → rpm.f085c147.js} +1 -1
  271. package/dist/assets/{rst.a8aa2b98.js → rst.d419af03.js} +1 -1
  272. package/dist/assets/ru-RU.74ac881b.js +1 -0
  273. package/dist/assets/{ruby.3a80b63e.js → ruby.43be0a34.js} +1 -1
  274. package/dist/assets/{running-locally.31538f1b.js → running-locally.a3ec7567.js} +8 -8
  275. package/dist/assets/{rust.fb8a8f54.js → rust.cce3b400.js} +1 -1
  276. package/dist/assets/{sas.305b1134.js → sas.16484722.js} +1 -1
  277. package/dist/assets/{sass.628b9322.js → sass.7051c1f1.js} +1 -1
  278. package/dist/assets/scheme.ca9d730a.js +1 -0
  279. package/dist/assets/{sdk.297840b0.js → sdk.ea5b0946.js} +54 -54
  280. package/dist/assets/security.b7fcc1c2.js +1 -0
  281. package/dist/assets/{server.d8bb0f4c.js → server.22f6f2c1.js} +17 -17
  282. package/dist/assets/{settings.6c879748.js → settings.509b7560.js} +0 -0
  283. package/dist/assets/{settings.65d8a9b5.js → settings.c4a634ae.js} +8 -8
  284. package/dist/assets/shares.4d7659d8.js +1 -0
  285. package/dist/assets/{shell.a1c6a98e.js → shell.459f40ee.js} +1 -1
  286. package/dist/assets/{show-hint.4e7cc694.js → show-hint.e01428dd.js} +1 -1
  287. package/dist/assets/{sieve.c3bdd506.js → sieve.0bc80c89.js} +1 -1
  288. package/dist/assets/{simple.671a83a0.js → simple.1606e663.js} +0 -0
  289. package/dist/assets/{slim.5bbc59c4.js → slim.2d290285.js} +1 -1
  290. package/dist/assets/smalltalk.41636747.js +1 -0
  291. package/dist/assets/{smarty.0f865b35.js → smarty.d1631985.js} +1 -1
  292. package/dist/assets/solr.b1df9d52.js +1 -0
  293. package/dist/assets/{soy.e365e851.js → soy.99e75aa8.js} +1 -1
  294. package/dist/assets/{sparql.688ebcb1.js → sparql.d5b1eee4.js} +1 -1
  295. package/dist/assets/{spreadsheet.197a1dda.js → spreadsheet.29a03e30.js} +1 -1
  296. package/dist/assets/{sql.5b110124.js → sql.3413d6f9.js} +1 -1
  297. package/dist/assets/{sso-examples.a785e77c.js → sso-examples.ad647c9c.js} +11 -11
  298. package/dist/assets/{sso.36061e28.js → sso.cf805e38.js} +2 -2
  299. package/dist/assets/{stex.cd97f0ca.js → stex.7276068b.js} +1 -1
  300. package/dist/assets/{stylus.2208c6ae.js → stylus.ed00f8db.js} +1 -1
  301. package/dist/assets/{support.a149b5a4.js → support.6594facf.js} +1 -1
  302. package/dist/assets/{swift.3a00161d.js → swift.26ec0a65.js} +1 -1
  303. package/dist/assets/{tcl.9a04881b.js → tcl.ebb4437a.js} +1 -1
  304. package/dist/assets/{teams.86e324d5.js → teams.f575332d.js} +1 -1
  305. package/dist/assets/{textile.d25b7475.js → textile.7ff1ea5c.js} +1 -1
  306. package/dist/assets/{themes.3d8b2b78.js → themes.3d802c3b.js} +1 -1
  307. package/dist/assets/{tiddlywiki.fd2d8138.js → tiddlywiki.36daf39b.js} +1 -1
  308. package/dist/assets/{tiki.2ed0ba56.js → tiki.c1a7e00c.js} +1 -1
  309. package/dist/assets/{toml.4b14c94c.js → toml.16e84917.js} +1 -1
  310. package/dist/assets/{tornado.3b85564f.js → tornado.9b8dbfb8.js} +1 -1
  311. package/dist/assets/{translation-strings.2d32b80f.js → translation-strings.fe88793b.js} +1 -1
  312. package/dist/assets/{translations.9a0e8cc4.js → translations.4be9ec77.js} +1 -1
  313. package/dist/assets/{triggers.49fa8cca.js → triggers.c34177a3.js} +1 -1
  314. package/dist/assets/{troff.f32690ea.js → troff.a86a07b9.js} +1 -1
  315. package/dist/assets/{ttcn-cfg.b6e34846.js → ttcn-cfg.df680d6a.js} +1 -1
  316. package/dist/assets/{ttcn.07218ce0.js → ttcn.33574dcc.js} +1 -1
  317. package/dist/assets/{turtle.f5b50f39.js → turtle.93ac23eb.js} +1 -1
  318. package/dist/assets/{twig.555b3129.js → twig.04df7bbf.js} +1 -1
  319. package/dist/assets/{ubuntu.bd27c73d.js → ubuntu.cc908491.js} +0 -0
  320. package/dist/assets/{upgrades-migrations.e91a553b.js → upgrades-migrations.a57ef987.js} +1 -1
  321. package/dist/assets/{use-sync.dc6ed73f.js → use-sync.1dee2657.js} +14 -14
  322. package/dist/assets/{user-directory.8d94737c.js → user-directory.7b875602.js} +1 -1
  323. package/dist/assets/{users-roles-permissions.d63af527.js → users-roles-permissions.00ffdc25.js} +1 -1
  324. package/dist/assets/{users.9e656e05.js → users.0638ab5f.js} +58 -58
  325. package/dist/assets/{utilities.4a346b3b.js → utilities.b2f15bfd.js} +17 -17
  326. package/dist/assets/{vb.82528105.js → vb.44c875a2.js} +1 -1
  327. package/dist/assets/{vbscript.f3012ea2.js → vbscript.87bdeb77.js} +1 -1
  328. package/dist/assets/{velocity.87d27c70.js → velocity.cc1dfc19.js} +1 -1
  329. package/dist/assets/{verilog.b421b7be.js → verilog.0f07ab6c.js} +1 -1
  330. package/dist/assets/{vhdl.8a45e1a3.js → vhdl.41fb7cf9.js} +1 -1
  331. package/dist/assets/{vue.53eaa62a.js → vue.5d653ac7.js} +1 -1
  332. package/dist/assets/{wast.e82a4b6b.js → wast.0d4923e5.js} +1 -1
  333. package/dist/assets/{webhooks.256ac76b.js → webhooks.1f89f80a.js} +31 -31
  334. package/dist/assets/{webhooks.235f76fb.js → webhooks.3d6334e9.js} +1 -1
  335. package/dist/assets/{webidl.3daa881b.js → webidl.e399c0a3.js} +1 -1
  336. package/dist/assets/{xquery.493692d6.js → xquery.45a960e6.js} +1 -1
  337. package/dist/assets/{yacas.19e6c7b7.js → yacas.842e0a74.js} +1 -1
  338. package/dist/assets/{yaml-frontmatter.325a0403.js → yaml-frontmatter.93f99653.js} +1 -1
  339. package/dist/assets/{yaml.77f2da41.js → yaml.da4da1d2.js} +1 -1
  340. package/dist/assets/{z80.0091ce2a.js → z80.e8d0aed2.js} +1 -1
  341. package/dist/assets/zh-TW.2ac2bb07.js +1 -0
  342. package/dist/index.html +3 -3
  343. package/package.json +11 -9
  344. package/dist/assets/@directus_extensions-sdk.d2501ce1.entry.js +0 -1
  345. package/dist/assets/bg-BG.9288ea83.js +0 -1
  346. package/dist/assets/collections.e06a8b1f.js +0 -2
  347. package/dist/assets/commonlisp.117ff8ed.js +0 -1
  348. package/dist/assets/content.07b42fc5.js +0 -1
  349. package/dist/assets/data-sharing.8b80b0f4.js +0 -1
  350. package/dist/assets/de-DE.5535b278.js +0 -1
  351. package/dist/assets/django.e6170171.js +0 -1
  352. package/dist/assets/en-GB.c55341c7.js +0 -1
  353. package/dist/assets/file-library.92f387e2.js +0 -1
  354. package/dist/assets/fr-CA.6b485ca2.js +0 -1
  355. package/dist/assets/fr-FR.77a5277c.js +0 -1
  356. package/dist/assets/go.1ec8c07d.js +0 -1
  357. package/dist/assets/he-IL.62301c5a.js +0 -1
  358. package/dist/assets/http.69751e33.js +0 -1
  359. package/dist/assets/hu-HU.47ab36e8.js +0 -1
  360. package/dist/assets/index.3d147166.css +0 -1
  361. package/dist/assets/index.92b1a294.js +0 -26
  362. package/dist/assets/index.dbec7bd8.css +0 -1
  363. package/dist/assets/introduction.e626ca8d.js +0 -1
  364. package/dist/assets/it-IT.c08c5546.js +0 -1
  365. package/dist/assets/items.ee26fa45.js +0 -1
  366. package/dist/assets/ja-JP.84597497.js +0 -1
  367. package/dist/assets/ku-TR.3a07a57e.js +0 -1
  368. package/dist/assets/localization.998790e9.js +0 -1
  369. package/dist/assets/nl-NL.2f00af44.js +0 -1
  370. package/dist/assets/pt-BR.02851ce6.js +0 -1
  371. package/dist/assets/ru-RU.1807a64c.js +0 -1
  372. package/dist/assets/scheme.41e287c8.js +0 -1
  373. package/dist/assets/security.c18b2f34.js +0 -1
  374. package/dist/assets/smalltalk.8235f72d.js +0 -1
  375. package/dist/assets/solr.2bb7daf5.js +0 -1
  376. package/dist/assets/zh-TW.cac20c88.js +0 -1
@@ -1,4 +1,4 @@
1
- import{a as o,o as r,b as u,w as n,g as t,e as a,B as s}from"./runtime-core.esm-bundler.e3d5f5b7.js";const h={class:"markdown-body"},d=t("blockquote",null,[t("p",null,"Directus offers both a RESTful and GraphQL API to manage the data in the database. The API has predictable resource-oriented URLs, relies on standard HTTP status codes, and uses JSON for input and output.")],-1),p=t("p",null,[t("div",{class:"table-of-contents"},[t("ul",null,[t("li",null,[t("a",{href:"#dynamic-api"},"Dynamic API ")]),t("li",null,[t("a",{href:"#rest-vs.-graphql"},"REST vs. GraphQL ")]),t("li",null,[t("a",{href:"#authentication"},"Authentication ")]),t("li",null,[t("a",{href:"#relational-data"},"Relational Data ")]),t("li",null,[t("a",{href:"#search-http-method"},"SEARCH HTTP Method ")]),t("li",null,[t("a",{href:"#system-data-in-graphql"},"System data in GraphQL ")]),t("li",null,[t("a",{href:"#error-codes"},"Error Codes ")])])])],-1),_=t("h2",{id:"dynamic-api",tabindex:"-1"},[s("Dynamic API "),t("a",{class:"header-anchor",href:"#dynamic-api"},"#")],-1),f=s("The platform\u2019s API uses "),m=s("Database Mirroring"),y=s(" to dynamically generate REST endpoints and a GraphQL schema based on the connected database\u2019s architecture. Since these endpoints return data based on your specific schema and configured permissions, the input/output of the API differs greatly for individual installations."),j=t("h2",{id:"rest-vs.-graphql",tabindex:"-1"},[s("REST vs. GraphQL "),t("a",{class:"header-anchor",href:"#rest-vs.-graphql"},"#")],-1),g=t("p",null,[t("strong",null,"There is no difference in the functionality available between the REST and GraphQL endpoints."),s(" The functionality available in both is mapped to the same set of core services, meaning that you don\u2019t lose any performance or capabilities by choosing one or the other.")],-1),b=t("p",null,"Which one you choose is ultimately up to you.",-1),w=t("h2",{id:"authentication",tabindex:"-1"},[s("Authentication "),t("a",{class:"header-anchor",href:"#authentication"},"#")],-1),T=s("By default, all data in the system is off-limits for unauthenticated users. To gain access to protected data, you must "),v=s("include an access token with every request"),E=s(", or "),A=s("configure permissions for the public role"),k=s("."),I=t("p",null,"Useful references:",-1),P=s("Authenticating into the API"),x=s("Login endpoint reference"),D=t("h2",{id:"relational-data",tabindex:"-1"},[s("Relational Data "),t("a",{class:"header-anchor",href:"#relational-data"},"#")],-1),S=s("Directus only retrieves the fields in your items that explicitly have been requested. Relational data can be retrieved nested by using "),R=s("the "),q=t("code",null,"fields",-1),L=s(" parameter"),N=s(" in REST, or regular nested queries in GraphQL. This allows you to retrieve the author of your article included in the articles data, or fetch related log entry points for your app\u2019s analytics data for example."),O=t("h3",{id:"creating-%2F-updating-%2F-deleting",tabindex:"-1"},[s("Creating / Updating / Deleting "),t("a",{class:"header-anchor",href:"#creating-%2F-updating-%2F-deleting"},"#")],-1),C=t("p",null,"Similarly to fetching, relational content can be modified deeply as well.",-1),H=t("h4",{id:"many-to-one",tabindex:"-1"},[s("Many-to-One "),t("a",{class:"header-anchor",href:"#many-to-one"},"#")],-1),M=t("p",null,"Many-to-One relationships are fairly straightforward to manage relationally. You can simply submit the changes you want as an object under the relational key in your collection. For example, if you wanted to create a new featured article on your page, you could submit:",-1),U=t("pre",null,[t("code",{class:"language-json"},[t("span",{class:"hljs-punctuation"},"{"),s(`
1
+ import{a as o,o as r,b as u,w as n,g as t,e as a,B as s}from"./runtime-core.esm-bundler.e3d5f5b7.js";const h={class:"markdown-body"},d=t("blockquote",null,[t("p",null,"Directus offers both a RESTful and GraphQL API to manage the data in the database. The API has predictable resource-oriented URLs, relies on standard HTTP status codes, and uses JSON for input and output.")],-1),p=t("p",null,[t("div",{class:"table-of-contents"},[t("ul",null,[t("li",null,[t("a",{href:"#dynamic-api"}," Dynamic API")]),t("li",null,[t("a",{href:"#rest-vs.-graphql"}," REST vs. GraphQL")]),t("li",null,[t("a",{href:"#authentication"}," Authentication")]),t("li",null,[t("a",{href:"#relational-data"}," Relational Data")]),t("li",null,[t("a",{href:"#search-http-method"}," SEARCH HTTP Method")]),t("li",null,[t("a",{href:"#system-data-in-graphql"}," System data in GraphQL")]),t("li",null,[t("a",{href:"#error-codes"}," Error Codes")])])])],-1),_=t("h2",{id:"dynamic-api",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#dynamic-api"},"#"),s(" Dynamic API")],-1),f=s("The platform\u2019s API uses "),m=s("Database Mirroring"),y=s(" to dynamically generate REST endpoints and a GraphQL schema based on the connected database\u2019s architecture. Since these endpoints return data based on your specific schema and configured permissions, the input/output of the API differs greatly for individual installations."),j=t("h2",{id:"rest-vs.-graphql",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#rest-vs.-graphql"},"#"),s(" REST vs. GraphQL")],-1),g=t("p",null,[t("strong",null,"There is no difference in the functionality available between the REST and GraphQL endpoints."),s(" The functionality available in both is mapped to the same set of core services, meaning that you don\u2019t lose any performance or capabilities by choosing one or the other.")],-1),b=t("p",null,"Which one you choose is ultimately up to you.",-1),w=t("h2",{id:"authentication",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#authentication"},"#"),s(" Authentication")],-1),T=s("By default, all data in the system is off-limits for unauthenticated users. To gain access to protected data, you must "),v=s("include an access token with every request"),E=s(", or "),A=s("configure permissions for the public role"),k=s("."),I=t("p",null,"Useful references:",-1),P=s("Authenticating into the API"),x=s("Login endpoint reference"),D=t("h2",{id:"relational-data",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#relational-data"},"#"),s(" Relational Data")],-1),S=s("Directus only retrieves the fields in your items that explicitly have been requested. Relational data can be retrieved nested by using "),R=s("the "),q=t("code",null,"fields",-1),L=s(" parameter"),N=s(" in REST, or regular nested queries in GraphQL. This allows you to retrieve the author of your article included in the articles data, or fetch related log entry points for your app\u2019s analytics data for example."),O=t("h3",{id:"creating-%2F-updating-%2F-deleting",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#creating-%2F-updating-%2F-deleting"},"#"),s(" Creating / Updating / Deleting")],-1),C=t("p",null,"Similarly to fetching, relational content can be modified deeply as well.",-1),H=t("h4",{id:"many-to-one",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#many-to-one"},"#"),s(" Many-to-One")],-1),M=t("p",null,"Many-to-One relationships are fairly straightforward to manage relationally. You can simply submit the changes you want as an object under the relational key in your collection. For example, if you wanted to create a new featured article on your page, you could submit:",-1),U=t("pre",null,[t("code",{class:"language-json"},[t("span",{class:"hljs-punctuation"},"{"),s(`
2
2
  `),t("span",{class:"hljs-attr"},'"featured_article"'),t("span",{class:"hljs-punctuation"},":"),s(),t("span",{class:"hljs-punctuation"},"{"),s(`
3
3
  `),t("span",{class:"hljs-attr"},'"title"'),t("span",{class:"hljs-punctuation"},":"),s(),t("span",{class:"hljs-string"},'"This is my new article!"'),s(`
4
4
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
@@ -12,7 +12,7 @@ import{a as o,o as r,b as u,w as n,g as t,e as a,B as s}from"./runtime-core.esm-
12
12
  `)])],-1),B=t("p",null,"Seeing that the Many-to-One relationship stores the foreign key on the field itself, removing the item can be done by nullifying the field:",-1),F=t("pre",null,[t("code",{class:"language-json"},[t("span",{class:"hljs-punctuation"},"{"),s(`
13
13
  `),t("span",{class:"hljs-attr"},'"featured_article"'),t("span",{class:"hljs-punctuation"},":"),s(),t("span",{class:"hljs-literal"},[t("span",{class:"hljs-keyword"},"null")]),s(`
14
14
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
15
- `)])],-1),Q=t("h4",{id:"one-to-many-(%2F-many-to-many)",tabindex:"-1"},[s("One-to-Many (/ Many-to-Many) "),t("a",{class:"header-anchor",href:"#one-to-many-(%2F-many-to-many)"},"#")],-1),Y=t("p",null,"One-to-Many, and therefore Many-to-Many and Many-to-Any, relationships can be updated in one of two ways:",-1),W=t("p",null,[t("strong",null,"Basic")],-1),K=t("p",null,[s("The API will return one-to-many fields as an array of nested keys or items (based on the "),t("code",null,"fields"),s(" parameter). You can use this same structure to select what the related items are:")],-1),X=t("pre",null,[t("code",{class:"language-json"},[t("span",{class:"hljs-punctuation"},"{"),s(`
15
+ `)])],-1),Q=t("h4",{id:"one-to-many-(%2F-many-to-many)",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#one-to-many-(%2F-many-to-many)"},"#"),s(" One-to-Many (/ Many-to-Many)")],-1),Y=t("p",null,"One-to-Many, and therefore Many-to-Many and Many-to-Any, relationships can be updated in one of two ways:",-1),W=t("p",null,[t("strong",null,"Basic")],-1),K=t("p",null,[s("The API will return one-to-many fields as an array of nested keys or items (based on the "),t("code",null,"fields"),s(" parameter). You can use this same structure to select what the related items are:")],-1),X=t("pre",null,[t("code",{class:"language-json"},[t("span",{class:"hljs-punctuation"},"{"),s(`
16
16
  `),t("span",{class:"hljs-attr"},'"children"'),t("span",{class:"hljs-punctuation"},":"),s(),t("span",{class:"hljs-punctuation"},"["),t("span",{class:"hljs-number"},"2"),t("span",{class:"hljs-punctuation"},","),s(),t("span",{class:"hljs-number"},"7"),t("span",{class:"hljs-punctuation"},","),s(),t("span",{class:"hljs-number"},"149"),t("span",{class:"hljs-punctuation"},"]"),s(`
17
17
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
18
18
  `)])],-1),z=t("p",null,"You can also provide an object instead of a primary key in order to create new items nested on the fly, or an object with a primary key included to update an existing item:",-1),J=t("pre",null,[t("code",{class:"language-json"},[t("span",{class:"hljs-punctuation"},"{"),s(`
@@ -37,7 +37,7 @@ import{a as o,o as r,b as u,w as n,g as t,e as a,B as s}from"./runtime-core.esm-
37
37
  `),t("span",{class:"hljs-attr"},'"delete"'),t("span",{class:"hljs-punctuation"},":"),s(),t("span",{class:"hljs-punctuation"},"["),t("span",{class:"hljs-number"},"7"),t("span",{class:"hljs-punctuation"},"]"),s(`
38
38
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
39
39
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
40
- `)])],-1),at=t("p",null,"This is useful if you need to have more tightly control on staged changes, or when you\u2019re working with a big relational dataset.",-1),lt=t("h4",{id:"many-to-any-(union-types)",tabindex:"-1"},[s("Many-to-Any (Union Types) "),t("a",{class:"header-anchor",href:"#many-to-any-(union-types)"},"#")],-1),ot=t("p",null,"Many-to-Any fields work very similar to a \u201Cregular\u201D many-to-many, with the exception that the related field can pull in the fields from any of the related collections, for example:",-1),it=t("pre",null,[t("code",{class:"language-json"},[t("span",{class:"hljs-punctuation"},"{"),s(`
40
+ `)])],-1),at=t("p",null,"This is useful if you need to have more tightly control on staged changes, or when you\u2019re working with a big relational dataset.",-1),lt=t("h4",{id:"many-to-any-(union-types)",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#many-to-any-(union-types)"},"#"),s(" Many-to-Any (Union Types)")],-1),ot=t("p",null,"Many-to-Any fields work very similar to a \u201Cregular\u201D many-to-many, with the exception that the related field can pull in the fields from any of the related collections, for example:",-1),it=t("pre",null,[t("code",{class:"language-json"},[t("span",{class:"hljs-punctuation"},"{"),s(`
41
41
  `),t("span",{class:"hljs-attr"},'"sections"'),t("span",{class:"hljs-punctuation"},":"),s(),t("span",{class:"hljs-punctuation"},"["),s(`
42
42
  `),t("span",{class:"hljs-punctuation"},"{"),s(`
43
43
  `),t("span",{class:"hljs-attr"},'"collection"'),t("span",{class:"hljs-punctuation"},":"),s(),t("span",{class:"hljs-string"},'"headings"'),t("span",{class:"hljs-punctuation"},","),s(`
@@ -53,12 +53,12 @@ import{a as o,o as r,b as u,w as n,g as t,e as a,B as s}from"./runtime-core.esm-
53
53
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
54
54
  `),t("span",{class:"hljs-punctuation"},"]"),s(`
55
55
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
56
- `)])],-1),ct=t("h5",{id:"rest-api",tabindex:"-1"},[s("REST API "),t("a",{class:"header-anchor",href:"#rest-api"},"#")],-1),rt=t("p",null,[s("To scope the fields that are returned per collection type, you can use the "),t("code",null,"<field>:<scope>"),s(" syntax in the fields parameter as follows:")],-1),ut=t("pre",null,[t("code",null,`GET /items/pages
56
+ `)])],-1),ct=t("h5",{id:"rest-api",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#rest-api"},"#"),s(" REST API")],-1),rt=t("p",null,[s("To scope the fields that are returned per collection type, you can use the "),t("code",null,"<field>:<scope>"),s(" syntax in the fields parameter as follows:")],-1),ut=t("pre",null,[t("code",null,`GET /items/pages
57
57
  ?fields[]=sections.item:headings.id
58
58
  &fields[]=sections.item:headings.title
59
59
  &fields[]=sections.item:paragraphs.body
60
60
  &fields[]=sections.item:paragraphs.background_color
61
- `)],-1),ht=t("h5",{id:"graphql",tabindex:"-1"},[s("GraphQL "),t("a",{class:"header-anchor",href:"#graphql"},"#")],-1),dt=t("p",null,"In GraphQL, you can use nested fragments on the Union Type to select the fields:",-1),pt=t("pre",null,[t("code",{class:"language-graphql"},[t("span",{class:"hljs-keyword"},"query"),s(` {
61
+ `)],-1),ht=t("h5",{id:"graphql",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#graphql"},"#"),s(" GraphQL")],-1),dt=t("p",null,"In GraphQL, you can use nested fragments on the Union Type to select the fields:",-1),pt=t("pre",null,[t("code",{class:"language-graphql"},[t("span",{class:"hljs-keyword"},"query"),s(` {
62
62
  pages {
63
63
  sections {
64
64
  item {
@@ -75,7 +75,7 @@ import{a as o,o as r,b as u,w as n,g as t,e as a,B as s}from"./runtime-core.esm-
75
75
  }
76
76
  }
77
77
  }
78
- `)])],-1),_t=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Updating"),t("p",null,"Updating records in a many-to-any is identical to the other relationship types.")],-1),ft=t("h2",{id:"search-http-method",tabindex:"-1"},[s("SEARCH HTTP Method "),t("a",{class:"header-anchor",href:"#search-http-method"},"#")],-1),mt=t("p",null,"When using the REST API to read multiple items by (very) advanced filters, you might run into the issue where the URL simply can\u2019t hold enough data to include the full query structure. In those cases, you can use the SEARCH http method as a drop-in replacement for GET, where you\u2019re allowed to put the query into the request body as follows:",-1),yt=t("p",null,[t("strong",null,"Before:")],-1),jt=t("pre",null,[t("code",null,`GET /items/articles?filter[title][_eq]=Hello World
78
+ `)])],-1),_t=t("div",{class:"tip hint"},[t("div",{class:"hint-title"},"Updating"),t("p",null,"Updating records in a many-to-any is identical to the other relationship types.")],-1),ft=t("h2",{id:"search-http-method",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#search-http-method"},"#"),s(" SEARCH HTTP Method")],-1),mt=t("p",null,"When using the REST API to read multiple items by (very) advanced filters, you might run into the issue where the URL simply can\u2019t hold enough data to include the full query structure. In those cases, you can use the SEARCH http method as a drop-in replacement for GET, where you\u2019re allowed to put the query into the request body as follows:",-1),yt=t("p",null,[t("strong",null,"Before:")],-1),jt=t("pre",null,[t("code",null,`GET /items/articles?filter[title][_eq]=Hello World
79
79
  `)],-1),gt=t("p",null,[t("strong",null,"After:")],-1),bt=t("pre",null,[t("code",{class:"language-json"},[s(`SEARCH /items/articles
80
80
 
81
81
  `),t("span",{class:"hljs-punctuation"},"{"),s(`
@@ -87,4 +87,4 @@ import{a as o,o as r,b as u,w as n,g as t,e as a,B as s}from"./runtime-core.esm-
87
87
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
88
88
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
89
89
  `),t("span",{class:"hljs-punctuation"},"}"),s(`
90
- `)])],-1),wt=t("p",null,[s("There\u2019s a lot of discussion around whether or not to put a body in a GET request, to use POSTs to create search queries, or to rely on a different method altogether. As of right now, we\u2019ve chosen "),t("a",{href:"https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/",target:"_blank",rel:"noopener noreferrer"},[s("to align with IETF\u2019s "),t("em",null,"HTTP SEARCH Method"),s(" specification")]),s(". While we recognize this is still a draft spec, the SEARCH method has been used extensively before in the WebDAV world ("),t("a",{href:"https://tools.ietf.org/html/rfc5323",target:"_blank",rel:"noopener noreferrer"},"spec"),s("), and compared to the other available options, it feels like the \u201Ccleanest\u201D and most correct to handle this moving forward. As with everything else, if you have any ideas, opinions, or concerns, "),t("a",{href:"https://github.com/directus/directus/discussions/new",target:"_blank",rel:"noopener noreferrer"},"we\u2019d love to hear your thoughts"),s(".")],-1),Tt=t("p",null,"Useful reading:",-1),vt=t("ul",null,[t("li",null,[t("a",{href:"https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"HTTP SEARCH Method"),s(" (IETF, 2021)")])]),t("li",null,[t("a",{href:"https://httptoolkit.tech/blog/http-search-method/",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"Defining a new HTTP method: HTTP SEARCH"),s(" (Tim Perry, 2021)")])]),t("li",null,[t("a",{href:"https://stackoverflow.com/questions/978061/http-get-with-request-body",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"HTTP GET with request body"),s(" (StackOverflow, 2009 and ongoing)")])]),t("li",null,[t("a",{href:"https://www.elastic.co/guide/en/elasticsearch/guide/current/_empty_search.html",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"Elastic Search GET body usage"),s(" (elastic, n.d.)")])]),t("li",null,[t("a",{href:"https://evertpot.com/dropbox-post-api/",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"Dropbox starts using POST, and why this is poor API design."),s(" (Evert Pot, 2015)")])])],-1),Et=t("h2",{id:"system-data-in-graphql",tabindex:"-1"},[s("System data in GraphQL "),t("a",{class:"header-anchor",href:"#system-data-in-graphql"},"#")],-1),At=t("p",null,[s("Due to restrictions in GraphQL itself, it\u2019s impossible to properly scope/namespace system functionality from regular data access. In order to prevent any naming conflicts between user-created and system data, we\u2019ve scoped the access of the two into separate endpoints for user and system data respectively: "),t("code",null,"/graphql"),s(" and "),t("code",null,"/graphql/system"),s(". Both endpoints share the same underlying schema, so "),t("strong",null,"nested relations will work as expected"),s(" regardless if they \u201Ccross over\u201D between user and system data. The only difference in the two endpoints are the root query and mutation fields available.")],-1),kt=t("h2",{id:"error-codes",tabindex:"-1"},[s("Error Codes "),t("a",{class:"header-anchor",href:"#error-codes"},"#")],-1),It=t("p",null,"Below are the global error codes used within Directus, and what they mean.",-1),Pt=t("table",null,[t("thead",null,[t("tr",null,[t("th",null,"Error Code"),t("th",null,"HTTP Status"),t("th",null,"Description")])]),t("tbody",null,[t("tr",null,[t("td",null,[t("code",null,"FAILED_VALIDATION")]),t("td",null,"400"),t("td",null,"Validation for this particular item failed")]),t("tr",null,[t("td",null,[t("code",null,"FORBIDDEN")]),t("td",null,"403"),t("td",null,"You are not allowed to do the current action")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_TOKEN")]),t("td",null,"403"),t("td",null,"Provided token is invalid")]),t("tr",null,[t("td",null,[t("code",null,"TOKEN_EXPIRED")]),t("td",null,"401"),t("td",null,"Provided token is valid but has expired")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_CREDENTIALS")]),t("td",null,"401"),t("td",null,"Username / password or access token is wrong")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_IP")]),t("td",null,"401"),t("td",null,"Your IP address isn\u2019t allow-listed to be used with this user")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_OTP")]),t("td",null,"401"),t("td",null,"Wrong OTP was provided")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_PAYLOAD")]),t("td",null,"400"),t("td",null,"Provided payload is invalid")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_QUERY")]),t("td",null,"400"),t("td",null,"The requested query parameters can not be used")]),t("tr",null,[t("td",null,[t("code",null,"UNSUPPORTED_MEDIA_TYPE")]),t("td",null,"415"),t("td",null,[s("Provided payload format or "),t("code",null,"Content-Type"),s(" header is unsupported")])]),t("tr",null,[t("td",null,[t("code",null,"REQUESTS_EXCEEDED")]),t("td",null,"429"),t("td",null,"Hit the rate limit")]),t("tr",null,[t("td",null,[t("code",null,"ROUTE_NOT_FOUND")]),t("td",null,"404"),t("td",null,"Endpoint does not exist")]),t("tr",null,[t("td",null,[t("code",null,"SERVICE_UNAVAILABLE")]),t("td",null,"503"),t("td",null,"Could not use external service")]),t("tr",null,[t("td",null,[t("code",null,"UNPROCESSABLE_ENTITY")]),t("td",null,"422"),t("td",null,"You tried doing something illegal")])])],-1),xt=t("div",{class:"warning hint"},[t("div",{class:"hint-title"},"Security"),t("p",null,[s("To prevent leaking which items exist, all actions for non-existing items will return a "),t("code",null,"FORBIDDEN"),s(" error.")])],-1),Lt="API Reference",Nt=!1,Ot={name:"introduction",setup(Dt,{expose:i}){const l={title:"API Reference",modularExtension:!1};return i({frontmatter:l}),(St,Rt)=>{const e=o("router-link"),c=o("docs-wrapper");return r(),u(c,{frontmatter:l},{default:n(()=>[t("div",h,[d,p,_,t("p",null,[f,a(e,{to:"/docs/getting-started/introduction/#database-mirroring"},{default:n(()=>[m]),_:1}),y]),j,g,b,w,t("p",null,[T,a(e,{to:"/docs/reference/authentication/#access-tokens"},{default:n(()=>[v]),_:1}),E,a(e,{to:"/docs/getting-started/quickstart/#_6-set-role-public-permissions"},{default:n(()=>[A]),_:1}),k]),I,t("ul",null,[t("li",null,[a(e,{to:"/docs/reference/authentication/"},{default:n(()=>[P]),_:1})]),t("li",null,[a(e,{to:"/docs/reference/authentication/#login"},{default:n(()=>[x]),_:1})])]),D,t("p",null,[S,a(e,{to:"/docs/reference/query/#fields"},{default:n(()=>[R,q,L]),_:1}),N]),O,C,H,M,U,G,V,B,F,Q,Y,W,K,X,z,J,Z,$,tt,st,nt,et,at,lt,ot,it,ct,rt,ut,ht,dt,pt,_t,ft,mt,yt,jt,gt,bt,wt,Tt,vt,Et,At,kt,It,Pt,xt])]),_:1})}}};export{Ot as default,Nt as modularExtension,Lt as title};
90
+ `)])],-1),wt=t("p",null,[s("There\u2019s a lot of discussion around whether or not to put a body in a GET request, to use POSTs to create search queries, or to rely on a different method altogether. As of right now, we\u2019ve chosen "),t("a",{href:"https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/",target:"_blank",rel:"noopener noreferrer"},[s("to align with IETF\u2019s "),t("em",null,"HTTP SEARCH Method"),s(" specification")]),s(". While we recognize this is still a draft spec, the SEARCH method has been used extensively before in the WebDAV world ("),t("a",{href:"https://tools.ietf.org/html/rfc5323",target:"_blank",rel:"noopener noreferrer"},"spec"),s("), and compared to the other available options, it feels like the \u201Ccleanest\u201D and most correct to handle this moving forward. As with everything else, if you have any ideas, opinions, or concerns, "),t("a",{href:"https://github.com/directus/directus/discussions/new",target:"_blank",rel:"noopener noreferrer"},"we\u2019d love to hear your thoughts"),s(".")],-1),Tt=t("p",null,"Useful reading:",-1),vt=t("ul",null,[t("li",null,[t("a",{href:"https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"HTTP SEARCH Method"),s(" (IETF, 2021)")])]),t("li",null,[t("a",{href:"https://httptoolkit.tech/blog/http-search-method/",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"Defining a new HTTP method: HTTP SEARCH"),s(" (Tim Perry, 2021)")])]),t("li",null,[t("a",{href:"https://stackoverflow.com/questions/978061/http-get-with-request-body",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"HTTP GET with request body"),s(" (StackOverflow, 2009 and ongoing)")])]),t("li",null,[t("a",{href:"https://www.elastic.co/guide/en/elasticsearch/guide/current/_empty_search.html",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"Elastic Search GET body usage"),s(" (elastic, n.d.)")])]),t("li",null,[t("a",{href:"https://evertpot.com/dropbox-post-api/",target:"_blank",rel:"noopener noreferrer"},[t("em",null,"Dropbox starts using POST, and why this is poor API design."),s(" (Evert Pot, 2015)")])])],-1),Et=t("h2",{id:"system-data-in-graphql",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#system-data-in-graphql"},"#"),s(" System data in GraphQL")],-1),At=t("p",null,[s("Due to restrictions in GraphQL itself, it\u2019s impossible to properly scope/namespace system functionality from regular data access. In order to prevent any naming conflicts between user-created and system data, we\u2019ve scoped the access of the two into separate endpoints for user and system data respectively: "),t("code",null,"/graphql"),s(" and "),t("code",null,"/graphql/system"),s(". Both endpoints share the same underlying schema, so "),t("strong",null,"nested relations will work as expected"),s(" regardless if they \u201Ccross over\u201D between user and system data. The only difference in the two endpoints are the root query and mutation fields available.")],-1),kt=t("h2",{id:"error-codes",tabindex:"-1"},[t("a",{class:"header-anchor",href:"#error-codes"},"#"),s(" Error Codes")],-1),It=t("p",null,"Below are the global error codes used within Directus, and what they mean.",-1),Pt=t("table",null,[t("thead",null,[t("tr",null,[t("th",null,"Error Code"),t("th",null,"HTTP Status"),t("th",null,"Description")])]),t("tbody",null,[t("tr",null,[t("td",null,[t("code",null,"FAILED_VALIDATION")]),t("td",null,"400"),t("td",null,"Validation for this particular item failed")]),t("tr",null,[t("td",null,[t("code",null,"FORBIDDEN")]),t("td",null,"403"),t("td",null,"You are not allowed to do the current action")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_TOKEN")]),t("td",null,"403"),t("td",null,"Provided token is invalid")]),t("tr",null,[t("td",null,[t("code",null,"TOKEN_EXPIRED")]),t("td",null,"401"),t("td",null,"Provided token is valid but has expired")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_CREDENTIALS")]),t("td",null,"401"),t("td",null,"Username / password or access token is wrong")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_IP")]),t("td",null,"401"),t("td",null,"Your IP address isn\u2019t allow-listed to be used with this user")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_OTP")]),t("td",null,"401"),t("td",null,"Wrong OTP was provided")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_PAYLOAD")]),t("td",null,"400"),t("td",null,"Provided payload is invalid")]),t("tr",null,[t("td",null,[t("code",null,"INVALID_QUERY")]),t("td",null,"400"),t("td",null,"The requested query parameters can not be used")]),t("tr",null,[t("td",null,[t("code",null,"UNSUPPORTED_MEDIA_TYPE")]),t("td",null,"415"),t("td",null,[s("Provided payload format or "),t("code",null,"Content-Type"),s(" header is unsupported")])]),t("tr",null,[t("td",null,[t("code",null,"REQUESTS_EXCEEDED")]),t("td",null,"429"),t("td",null,"Hit the rate limit")]),t("tr",null,[t("td",null,[t("code",null,"ROUTE_NOT_FOUND")]),t("td",null,"404"),t("td",null,"Endpoint does not exist")]),t("tr",null,[t("td",null,[t("code",null,"SERVICE_UNAVAILABLE")]),t("td",null,"503"),t("td",null,"Could not use external service")]),t("tr",null,[t("td",null,[t("code",null,"UNPROCESSABLE_ENTITY")]),t("td",null,"422"),t("td",null,"You tried doing something illegal")])])],-1),xt=t("div",{class:"warning hint"},[t("div",{class:"hint-title"},"Security"),t("p",null,[s("To prevent leaking which items exist, all actions for non-existing items will return a "),t("code",null,"FORBIDDEN"),s(" error.")])],-1),Lt="API Reference",Nt=!1,Ot={name:"introduction",setup(Dt,{expose:i}){const l={title:"API Reference",modularExtension:!1};return i({frontmatter:l}),(St,Rt)=>{const e=o("router-link"),c=o("docs-wrapper");return r(),u(c,{frontmatter:l},{default:n(()=>[t("div",h,[d,p,_,t("p",null,[f,a(e,{to:"/docs/getting-started/introduction/#database-mirroring"},{default:n(()=>[m]),_:1}),y]),j,g,b,w,t("p",null,[T,a(e,{to:"/docs/reference/authentication/#access-tokens"},{default:n(()=>[v]),_:1}),E,a(e,{to:"/docs/getting-started/quickstart/#_6-set-role-public-permissions"},{default:n(()=>[A]),_:1}),k]),I,t("ul",null,[t("li",null,[a(e,{to:"/docs/reference/authentication/"},{default:n(()=>[P]),_:1})]),t("li",null,[a(e,{to:"/docs/reference/authentication/#login"},{default:n(()=>[x]),_:1})])]),D,t("p",null,[S,a(e,{to:"/docs/reference/query/#fields"},{default:n(()=>[R,q,L]),_:1}),N]),O,C,H,M,U,G,V,B,F,Q,Y,W,K,X,z,J,Z,$,tt,st,nt,et,at,lt,ot,it,ct,rt,ut,ht,dt,pt,_t,ft,mt,yt,jt,gt,bt,wt,Tt,vt,Et,At,kt,It,Pt,xt])]),_:1})}}};export{Ot as default,Nt as modularExtension,Lt as title};
@@ -1 +1 @@
1
- import{a as i,o as d,b as c,w as o,g as e,e as a,B as t}from"./runtime-core.esm-bundler.e3d5f5b7.js";const u={class:"markdown-body"},h=e("blockquote",null,[e("p",null,"These Docs will help you get Directus up-and-running quickly, guide you through advanced features, and explain the core concepts that make Directus so unique.")],-1),p=e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#what-is-directus%3F"},"What is Directus? ")]),e("li",null,[e("a",{href:"#how-it-works"},"How It Works ")]),e("li",null,[e("a",{href:"#who%E2%80%99s-it-for%3F"},"Who\u2019s It For? ")]),e("li",null,[e("a",{href:"#when-to-use-it"},"When to Use It ")]),e("li",null,[e("a",{href:"#why-use-it%3F"},"Why Use It? ")]),e("li",null,[e("a",{href:"#directus-cloud"},"Directus Cloud ")])])])],-1),m=e("h2",{id:"what-is-directus%3F",tabindex:"-1"},[t("What is Directus? "),e("a",{class:"header-anchor",href:"#what-is-directus%3F"},"#")],-1),_=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Directus"),e("p",null,[t("Directus ("),e("a",{href:"http://audio.pronouncekiwi.com/Salli/Directus",target:"_blank",rel:"noopener noreferrer"},"duh REKT iss"),t(") is Latin for: "),e("em",null,"laid straight, arranged in lines"),t("."),e("br"),t(" The broadest goal of our platform is to present data in a simple, orderly, and intuitive way.")])],-1),g=e("p",null,[e("strong",null,"Directus is an Open Data Platform built to democratize the database."),e("br"),t(" This platform provides everyone on your team, "),e("em",null,"regardless of technical skill"),t(", equal access to data and digital file asset management, for any data model or project. First, link Directus to your desired SQL database and file storage adapter. After that, Directus enables you to perform CRUD operations, create users, assign roles with fully configurable permissions, build complex and granular queries, configure event-driven webhooks and task automation\u2026 "),e("em",null,"the list goes on!")],-1),f=e("p",null,[e("strong",null,"Database Introspection & Abstraction"),e("br"),t(" SQL flavors all come with slightly different data types and idiosyncrasies. Directus uses "),e("a",{href:"#how-it-works"},"Database Introspection"),t(" to read your database structure and create an abstraction layer to handle all the nitty-gritty details behind the scenes. This technique works seamlessly with any major SQL database. It also lets you link Directus to your new or pre-existing database or remove it anytime, with no impact on your existing data model. That means you\u2019ll never encounter vendor lock-in.")],-1),y=e("p",null,[e("strong",null,"The App and APIs"),e("br"),t(" Once your database is introspected and abstracted, Directus dynamically generates REST and GraphQL API endpoints to manage your data with granular control. You also get CLI tools for file management and a complete Javascript SDK.")],-1),b=e("p",null,[t("The API and CLI power the no-code App. In other words, the App is just a GUI that provides no-code access to the API. This architecture is how Directus democratizes the database and provides control to "),e("a",{href:"#who-s-it-for"},"the whole team"),t(".")],-1),w=e("p",null,[e("strong",null,"Open-Source, Modular, Extensible, Scalable"),e("br"),t(" At the highest level, Directus organizes its features and functionality into Modules. Each Module allows you to interact with data in some specific way, such as data and content management, digital file asset management, drag and drop analytics dashboard creation, or whatever. If you find Directus is missing something that your project needs, no problem!")],-1),v=e("p",null,[t("Built entirely in Typescript, primarily on "),e("a",{href:"https://nodejs.dev",target:"_blank",rel:"noopener noreferrer"},"Node.js"),t(" and "),e("a",{href:"https://vuejs.org",target:"_blank",rel:"noopener noreferrer"},"Vue.js"),t(", Directus is 100% open-source, modular and extensible, ensuring your project never hits a hard feature ceiling. The platform scales without issue, "),e("em",null,"and some Projects have hundreds of millions of users.")],-1),D=e("p",null,[t("You can use it with any "),e("em",null,"(or many)"),t(" stacks or frontend frameworks.")],-1),k=e("p",null,[e("strong",null,"Custom Configuration Options"),e("br"),t(" Extensive configuration options are also available as global variables in the codebase. Developers can custom configure SSO authentication method, caching details, default file storage location (local, S3, google, etc.) for digital assets, emails, "),e("em",null,"and much more.")],-1),I={class:"tip hint"},x=e("div",{class:"hint-title"},"Ready to dive in?",-1),T=t("Get a free project running in minutes. Learn Directus hands-on in the "),C=t("Quickstart Guide"),S=t("."),j=e("h2",{id:"how-it-works",tabindex:"-1"},[t("How It Works "),e("a",{class:"header-anchor",href:"#how-it-works"},"#")],-1),A=e("p",null,[e("strong",null,[t("Directus is installed as a "),e("em",null,"layer"),t(" on top of your new or existing SQL database.")])],-1),P=e("p",null,[t("The App and API dynamically "),e("em",null,"\u201Cmirror\u201D"),t(" your actual schema and content in real-time. This is similar to how technical database clients (like "),e("em",null,"phpMyAdmin"),t(") work. However, Database Introspection has many unique advantages:")],-1),E=e("ul",null,[e("li",null,"Absolute control over your pure SQL database schema."),e("li",null,"Complete transparency, portability, and security for your data."),e("li",null,"Allows importing existing databases, unaltered and without migrations."),e("li",null,"Direct database access and the full power of raw, complex SQL queries."),e("li",null,"Significant performance improvements through optimizations and indexing.")],-1),L=e("p",null,[t("In contrast, other platforms typically use a predefined or proprietary "),e("em",null,"one-size-fits-all"),t(" data model to store content . That is not the case with Directus. Directus gives you direct access to your pure and unaltered data. That means you have the option to bypass the Directus middleware (API, SDK, App) and connect to your data with proper SQL queries. This effectively removes all bottlenecks, latency overhead, and proprietary access limitations.")],-1),q=e("h2",{id:"who%E2%80%99s-it-for%3F",tabindex:"-1"},[t("Who\u2019s It For? "),e("a",{class:"header-anchor",href:"#who%E2%80%99s-it-for%3F"},"#")],-1),F=e("p",null,[e("strong",null,"Directus lets the whole team work together and access data in one place.")],-1),Q=e("p",null,[e("strong",null,"Developers"),e("br"),t(" Developers get a complete data connection toolkit with REST and GraphQL APIs, a JavaScript SDK, access to global variables to customize configuration options, and direct command-line access to digital assets.")],-1),W=e("p",null,[e("strong",null,"Power Users"),e("br"),t(" Data analysts and data scientists have in-app tools to query data, build out in-app analytics dashboards, and extract or upload data in file format. Additionally, these users are still free to link other services and run raw SQL queries directly on the database.")],-1),B=e("p",null,[e("strong",null,"Business Users"),e("br"),t(" The no-code app is safe and intuitive enough to make data accessible to everyone, even the most non-technical users. Administrators can create fully granular permissions for roles as well as individual users.")],-1),z={class:"tip hint"},U=e("div",{class:"hint-title"},"Directus Vocabulary",-1),M=t("In order keep things simpler, "),N=e("em",null,"especially for the no-code users",-1),R=t(", Directus uses friendlier names for many database terms and technical concepts, including "),G=t("Project"),O=t(" (database), "),H=t("Collection"),K=t(" (table), "),V=t("Field"),Y=t(" (column), "),J=t("Item"),X=t(" (record), and "),Z=t("Type"),$=t(" (datatype)."),ee=e("h2",{id:"when-to-use-it",tabindex:"-1"},[t("When to Use It "),e("a",{class:"header-anchor",href:"#when-to-use-it"},"#")],-1),te=e("p",null,[e("strong",null,"Directus can power any data-driven project and can be linked or removed at any time.")],-1),oe=e("p",null,[t("Build, monitor or manage any data model or app you desire: IoT fleets, e-commerce, SaaS, business data analytics, multi-channel content, "),e("em",null,"or anything else!"),t(" If it involves SQL and digital files, you can link up Directus. With this in mind, four broad use cases do emerge:")],-1),se=e("p",null,[e("strong",null,"Backend as a Service"),e("br"),t(" An end-to-end data solution. Efficiently connects data, auto-generates exhaustive APIs for projects that scale, and provides webhooks and task automation. Completely detached from the database, you\u2019re free to link and remove Directus anytime or use any other service in tandem.")],-1),ae=e("p",null,[e("strong",null,"Headless CMS"),e("br"),t(" Remember, "),e("em",null,"content"),t(" is just data from a database! Manage any omnichannel digital experience. Deliver file assets and data across websites, apps, kiosks, digital signage\u2026 "),e("em",null,"the sky\u2019s the limit!")],-1),ne=e("p",null,[e("strong",null,"Internal Tool Builder"),e("br"),t(" The whole team can build custom apps! Ditch the spreadsheet and quickly build back-office apps and admin panels for customers, inventory, projects, marketing, "),e("em",null,"or anything else.")],-1),ie=e("p",null,[e("strong",null,"Data Management and Analytics"),e("br"),t(" Establish "),e("em",null,"a single source of truth"),t(" for all data. Build no-code analytics dashboards to gain insights into company KPIs and other metrics. Coalesce previously siloed department data.")],-1),re=e("h2",{id:"why-use-it%3F",tabindex:"-1"},[t("Why Use It? "),e("a",{class:"header-anchor",href:"#why-use-it%3F"},"#")],-1),le=e("p",null,[e("strong",null,"Directus is a simple, data-first solution to complex problems with no downsides.")],-1),de=e("p",null,[t("Directus was created in 2004 and has been slowly, iteratively improved on for a long time. The core team has carefully thought through the app, beginning to end, and strives to make this platform is an all-benefit and no downside experience. It is also plug-and-play, so you\u2019re free to link or remove it anytime, with zero impact on your data. You have no vendor lock-in whatsoever, "),e("em",null,"your data is yours"),t(". There are no artificial data limits "),e("em",null,"(e.g. limits on users or roles)"),t(".")],-1),ce=e("p",null,[t("Consider competing platforms in the four general use cases "),e("a",{href:"#when-to-use-it"},"mentioned above"),t(". Due diligence to select a viable solution from one of these categories can easily take six months to ensure the feature list, pricing, scalability, migration options, etc\u2026 all match the project in question. However, with Directus, that\u2019s not the case! You can test it immediately on an existing database or build a new data model from scratch, "),e("em",null,"with no impact on your data and no long-term commitments.")],-1),ue=e("p",null,"The following core principles guide this platform:",-1),he=e("li",null,[e("strong",null,"Pure"),t(" \u2014 No predefined or proprietary schema, with all system metadata stored separately.")],-1),pe=e("li",null,[e("strong",null,"Open"),t(" \u2014 Directus Core is public and open source, with no obfuscated or cloud-only code.")],-1),me=e("li",null,[e("strong",null,"Portable"),t(" \u2014 The database can be exported or migrated anytime, so there\u2019s no vendor lock-in.")],-1),_e=e("strong",null,"Limitless",-1),ge=t(" \u2014 No artificial limits or paywalls on users, roles, languages, "),fe=t("Collections"),ye=t(", or "),be=t("Items"),we=t("."),ve=e("li",null,[e("strong",null,"Extensible"),t(" \u2014 Every aspect of this platform is modular to avoid any hard feature ceiling.")],-1),De=e("li",null,[e("strong",null,"Unopinionated"),t(" \u2014 Choose the stack, database, and architecture as you wish.")],-1),ke=e("h2",{id:"directus-cloud",tabindex:"-1"},[t("Directus Cloud "),e("a",{class:"header-anchor",href:"#directus-cloud"},"#")],-1),Ie=e("p",null,[e("strong",null,"Directus Cloud is the fastest and easiest way to get your Directus Projects going.")],-1),xe=t("Cloud architecture can be complicated and resource-intensive. Directus Cloud provides scalable, optimized storage and infrastructure, and automatic updates so developers can focus on the app\u2019s core business logic. Directus Cloud also offers "),Te=t("Cloud Exclusive Extensions"),Ce=t(", enhancing Directus Core with even more features."),Se=e("p",null,"With free Dirctus Cloud account, you can set up Teams to organize Projects, Project billing, and other Team Members however you need. You\u2019ll be able to get a Project running in about 90 seconds. Then as Project growth changes over time, scale service up or down as needed at the click of a button. The cloud dashboard also provides simple, straightforward analytics to help understand traffic and inform scaling decisions.",-1),je={class:"tip hint"},Ae=e("div",{class:"hint-title"},"Ready to try Directus Cloud?",-1),Pe=t("Setup your free Cloud account and learn Directus hands-on in the "),Ee=t("Quickstart Guide"),Le=t("."),qe=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Enterprise Cloud"),e("p",null,[t("Need advanced configuration, unlimited scalability, and dedicated support? "),e("a",{href:"https://directus.io/contact/",target:"_blank",rel:"noopener noreferrer"},"Contact us")])],-1),ze="Introduction",Ue=!1,Me={name:"introduction",setup(Fe,{expose:r}){const n={title:"Introduction",modularExtension:!1};return r({frontmatter:n}),(Qe,We)=>{const s=i("router-link"),l=i("docs-wrapper");return d(),c(l,{frontmatter:n},{default:o(()=>[e("div",u,[h,p,m,_,g,f,y,b,w,v,D,k,e("div",I,[x,e("p",null,[T,a(s,{to:"/docs/getting-started/quickstart/"},{default:o(()=>[C]),_:1}),S])]),j,A,P,E,L,q,F,Q,W,B,e("div",z,[U,e("p",null,[M,N,R,a(s,{to:"/docs/getting-started/glossary/#projects"},{default:o(()=>[G]),_:1}),O,a(s,{to:"/docs/getting-started/glossary/#collections"},{default:o(()=>[H]),_:1}),K,a(s,{to:"/docs/getting-started/glossary/#fields"},{default:o(()=>[V]),_:1}),Y,a(s,{to:"/docs/getting-started/glossary/#items"},{default:o(()=>[J]),_:1}),X,a(s,{to:"/docs/getting-started/glossary/#types"},{default:o(()=>[Z]),_:1}),$])]),ee,te,oe,se,ae,ne,ie,re,le,de,ce,ue,e("ul",null,[he,pe,me,e("li",null,[_e,ge,a(s,{to:"/docs/getting-started/glossary/#collections"},{default:o(()=>[fe]),_:1}),ye,a(s,{to:"/docs/getting-started/glossary/#items"},{default:o(()=>[be]),_:1}),we]),ve,De]),ke,Ie,e("p",null,[xe,a(s,{to:"/docs/cloud/glossary/#cloud-exclusives"},{default:o(()=>[Te]),_:1}),Ce]),Se,e("div",je,[Ae,e("p",null,[Pe,a(s,{to:"/docs/getting-started/quickstart/"},{default:o(()=>[Ee]),_:1}),Le])]),qe])]),_:1})}}};export{Me as default,Ue as modularExtension,ze as title};
1
+ import{a as i,o as d,b as c,w as o,g as e,e as a,B as t}from"./runtime-core.esm-bundler.e3d5f5b7.js";const u={class:"markdown-body"},h=e("blockquote",null,[e("p",null,"These Docs will help you get Directus up-and-running quickly, guide you through advanced features, and explain the core concepts that make Directus so unique.")],-1),p=e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#what-is-directus%3F"}," What is Directus?")]),e("li",null,[e("a",{href:"#how-it-works"}," How It Works")]),e("li",null,[e("a",{href:"#who%E2%80%99s-it-for%3F"}," Who\u2019s It For?")]),e("li",null,[e("a",{href:"#when-to-use-it"}," When to Use It")]),e("li",null,[e("a",{href:"#why-use-it%3F"}," Why Use It?")]),e("li",null,[e("a",{href:"#directus-cloud"}," Directus Cloud")])])])],-1),m=e("h2",{id:"what-is-directus%3F",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#what-is-directus%3F"},"#"),t(" What is Directus?")],-1),_=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Directus"),e("p",null,[t("Directus ("),e("a",{href:"http://audio.pronouncekiwi.com/Salli/Directus",target:"_blank",rel:"noopener noreferrer"},"duh REKT iss"),t(") is Latin for: "),e("em",null,"laid straight, arranged in lines"),t("."),e("br"),t(" The broadest goal of our platform is to present data in a simple, orderly, and intuitive way.")])],-1),g=e("p",null,[e("strong",null,"Directus is an Open Data Platform built to democratize the database."),e("br"),t(" This platform provides everyone on your team, "),e("em",null,"regardless of technical skill"),t(", equal access to data and digital file asset management, for any data model or project. First, link Directus to your desired SQL database and file storage adapter. After that, Directus enables you to perform CRUD operations, create users, assign roles with fully configurable permissions, build complex and granular queries, configure event-driven webhooks and task automation\u2026 "),e("em",null,"the list goes on!")],-1),f=e("p",null,[e("strong",null,"Database Introspection & Abstraction"),e("br"),t(" SQL flavors all come with slightly different data types and idiosyncrasies. Directus uses "),e("a",{href:"#how-it-works"},"Database Introspection"),t(" to read your database structure and create an abstraction layer to handle all the nitty-gritty details behind the scenes. This technique works seamlessly with any major SQL database. It also lets you link Directus to your new or pre-existing database or remove it anytime, with no impact on your existing data model. That means you\u2019ll never encounter vendor lock-in.")],-1),y=e("p",null,[e("strong",null,"The App and APIs"),e("br"),t(" Once your database is introspected and abstracted, Directus dynamically generates REST and GraphQL API endpoints to manage your data with granular control. You also get CLI tools for file management and a complete Javascript SDK.")],-1),b=e("p",null,[t("The API and CLI power the no-code App. In other words, the App is just a GUI that provides no-code access to the API. This architecture is how Directus democratizes the database and provides control to "),e("a",{href:"#who-s-it-for"},"the whole team"),t(".")],-1),w=e("p",null,[e("strong",null,"Open-Source, Modular, Extensible, Scalable"),e("br"),t(" At the highest level, Directus organizes its features and functionality into Modules. Each Module allows you to interact with data in some specific way, such as data and content management, digital file asset management, drag and drop analytics dashboard creation, or whatever. If you find Directus is missing something that your project needs, no problem!")],-1),v=e("p",null,[t("Built entirely in Typescript, primarily on "),e("a",{href:"https://nodejs.dev",target:"_blank",rel:"noopener noreferrer"},"Node.js"),t(" and "),e("a",{href:"https://vuejs.org",target:"_blank",rel:"noopener noreferrer"},"Vue.js"),t(", Directus is 100% open-source, modular and extensible, ensuring your project never hits a hard feature ceiling. The platform scales without issue, "),e("em",null,"and some Projects have hundreds of millions of users.")],-1),D=e("p",null,[t("You can use it with any "),e("em",null,"(or many)"),t(" stacks or frontend frameworks.")],-1),k=e("p",null,[e("strong",null,"Custom Configuration Options"),e("br"),t(" Extensive configuration options are also available as global variables in the codebase. Developers can custom configure SSO authentication method, caching details, default file storage location (local, S3, google, etc.) for digital assets, emails, "),e("em",null,"and much more.")],-1),I={class:"tip hint"},x=e("div",{class:"hint-title"},"Ready to dive in?",-1),T=t("Get a free project running in minutes. Learn Directus hands-on in the "),C=t("Quickstart Guide"),S=t("."),j=e("h2",{id:"how-it-works",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-it-works"},"#"),t(" How It Works")],-1),A=e("p",null,[e("strong",null,[t("Directus is installed as a "),e("em",null,"layer"),t(" on top of your new or existing SQL database.")])],-1),P=e("p",null,[t("The App and API dynamically "),e("em",null,"\u201Cmirror\u201D"),t(" your actual schema and content in real-time. This is similar to how technical database clients (like "),e("em",null,"phpMyAdmin"),t(") work. However, Database Introspection has many unique advantages:")],-1),E=e("ul",null,[e("li",null,"Absolute control over your pure SQL database schema."),e("li",null,"Complete transparency, portability, and security for your data."),e("li",null,"Allows importing existing databases, unaltered and without migrations."),e("li",null,"Direct database access and the full power of raw, complex SQL queries."),e("li",null,"Significant performance improvements through optimizations and indexing.")],-1),L=e("p",null,[t("In contrast, other platforms typically use a predefined or proprietary "),e("em",null,"one-size-fits-all"),t(" data model to store content . That is not the case with Directus. Directus gives you direct access to your pure and unaltered data. That means you have the option to bypass the Directus middleware (API, SDK, App) and connect to your data with proper SQL queries. This effectively removes all bottlenecks, latency overhead, and proprietary access limitations.")],-1),q=e("h2",{id:"who%E2%80%99s-it-for%3F",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#who%E2%80%99s-it-for%3F"},"#"),t(" Who\u2019s It For?")],-1),F=e("p",null,[e("strong",null,"Directus lets the whole team work together and access data in one place.")],-1),Q=e("p",null,[e("strong",null,"Developers"),e("br"),t(" Developers get a complete data connection toolkit with REST and GraphQL APIs, a JavaScript SDK, access to global variables to customize configuration options, and direct command-line access to digital assets.")],-1),W=e("p",null,[e("strong",null,"Power Users"),e("br"),t(" Data analysts and data scientists have in-app tools to query data, build out in-app analytics dashboards, and extract or upload data in file format. Additionally, these users are still free to link other services and run raw SQL queries directly on the database.")],-1),B=e("p",null,[e("strong",null,"Business Users"),e("br"),t(" The no-code app is safe and intuitive enough to make data accessible to everyone, even the most non-technical users. Administrators can create fully granular permissions for roles as well as individual users.")],-1),z={class:"tip hint"},U=e("div",{class:"hint-title"},"Directus Vocabulary",-1),M=t("In order keep things simpler, "),N=e("em",null,"especially for the no-code users",-1),R=t(", Directus uses friendlier names for many database terms and technical concepts, including "),G=t("Project"),O=t(" (database), "),H=t("Collection"),K=t(" (table), "),V=t("Field"),Y=t(" (column), "),J=t("Item"),X=t(" (record), and "),Z=t("Type"),$=t(" (datatype)."),ee=e("h2",{id:"when-to-use-it",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#when-to-use-it"},"#"),t(" When to Use It")],-1),te=e("p",null,[e("strong",null,"Directus can power any data-driven project and can be linked or removed at any time.")],-1),oe=e("p",null,[t("Build, monitor or manage any data model or app you desire: IoT fleets, e-commerce, SaaS, business data analytics, multi-channel content, "),e("em",null,"or anything else!"),t(" If it involves SQL and digital files, you can link up Directus. With this in mind, four broad use cases do emerge:")],-1),se=e("p",null,[e("strong",null,"Backend as a Service"),e("br"),t(" An end-to-end data solution. Efficiently connects data, auto-generates exhaustive APIs for projects that scale, and provides webhooks and task automation. Completely detached from the database, you\u2019re free to link and remove Directus anytime or use any other service in tandem.")],-1),ae=e("p",null,[e("strong",null,"Headless CMS"),e("br"),t(" Remember, "),e("em",null,"content"),t(" is just data from a database! Manage any omnichannel digital experience. Deliver file assets and data across websites, apps, kiosks, digital signage\u2026 "),e("em",null,"the sky\u2019s the limit!")],-1),ne=e("p",null,[e("strong",null,"Internal Tool Builder"),e("br"),t(" The whole team can build custom apps! Ditch the spreadsheet and quickly build back-office apps and admin panels for customers, inventory, projects, marketing, "),e("em",null,"or anything else.")],-1),ie=e("p",null,[e("strong",null,"Data Management and Analytics"),e("br"),t(" Establish "),e("em",null,"a single source of truth"),t(" for all data. Build no-code analytics dashboards to gain insights into company KPIs and other metrics. Coalesce previously siloed department data.")],-1),re=e("h2",{id:"why-use-it%3F",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-use-it%3F"},"#"),t(" Why Use It?")],-1),le=e("p",null,[e("strong",null,"Directus is a simple, data-first solution to complex problems with no downsides.")],-1),de=e("p",null,[t("Directus was created in 2004 and has been slowly, iteratively improved on for a long time. The core team has carefully thought through the app, beginning to end, and strives to make this platform is an all-benefit and no downside experience. It is also plug-and-play, so you\u2019re free to link or remove it anytime, with zero impact on your data. You have no vendor lock-in whatsoever, "),e("em",null,"your data is yours"),t(". There are no artificial data limits "),e("em",null,"(e.g. limits on users or roles)"),t(".")],-1),ce=e("p",null,[t("Consider competing platforms in the four general use cases "),e("a",{href:"#when-to-use-it"},"mentioned above"),t(". Due diligence to select a viable solution from one of these categories can easily take six months to ensure the feature list, pricing, scalability, migration options, etc\u2026 all match the project in question. However, with Directus, that\u2019s not the case! You can test it immediately on an existing database or build a new data model from scratch, "),e("em",null,"with no impact on your data and no long-term commitments.")],-1),ue=e("p",null,"The following core principles guide this platform:",-1),he=e("li",null,[e("strong",null,"Pure"),t(" \u2014 No predefined or proprietary schema, with all system metadata stored separately.")],-1),pe=e("li",null,[e("strong",null,"Open"),t(" \u2014 Directus Core is public and open source, with no obfuscated or cloud-only code.")],-1),me=e("li",null,[e("strong",null,"Portable"),t(" \u2014 The database can be exported or migrated anytime, so there\u2019s no vendor lock-in.")],-1),_e=e("strong",null,"Limitless",-1),ge=t(" \u2014 No artificial limits or paywalls on users, roles, languages, "),fe=t("Collections"),ye=t(", or "),be=t("Items"),we=t("."),ve=e("li",null,[e("strong",null,"Extensible"),t(" \u2014 Every aspect of this platform is modular to avoid any hard feature ceiling.")],-1),De=e("li",null,[e("strong",null,"Unopinionated"),t(" \u2014 Choose the stack, database, and architecture as you wish.")],-1),ke=e("h2",{id:"directus-cloud",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#directus-cloud"},"#"),t(" Directus Cloud")],-1),Ie=e("p",null,[e("strong",null,"Directus Cloud is the fastest and easiest way to get your Directus Projects going.")],-1),xe=t("Cloud architecture can be complicated and resource-intensive. Directus Cloud provides scalable, optimized storage and infrastructure, and automatic updates so developers can focus on the app\u2019s core business logic. Directus Cloud also offers "),Te=t("Cloud Exclusive Extensions"),Ce=t(", enhancing Directus Core with even more features."),Se=e("p",null,"With free Dirctus Cloud account, you can set up Teams to organize Projects, Project billing, and other Team Members however you need. You\u2019ll be able to get a Project running in about 90 seconds. Then as Project growth changes over time, scale service up or down as needed at the click of a button. The cloud dashboard also provides simple, straightforward analytics to help understand traffic and inform scaling decisions.",-1),je={class:"tip hint"},Ae=e("div",{class:"hint-title"},"Ready to try Directus Cloud?",-1),Pe=t("Setup your free Cloud account and learn Directus hands-on in the "),Ee=t("Quickstart Guide"),Le=t("."),qe=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Enterprise Cloud"),e("p",null,[t("Need advanced configuration, unlimited scalability, and dedicated support? "),e("a",{href:"https://directus.io/contact/",target:"_blank",rel:"noopener noreferrer"},"Contact us")])],-1),ze="Introduction",Ue=!1,Me={name:"introduction",setup(Fe,{expose:r}){const n={title:"Introduction",modularExtension:!1};return r({frontmatter:n}),(Qe,We)=>{const s=i("router-link"),l=i("docs-wrapper");return d(),c(l,{frontmatter:n},{default:o(()=>[e("div",u,[h,p,m,_,g,f,y,b,w,v,D,k,e("div",I,[x,e("p",null,[T,a(s,{to:"/docs/getting-started/quickstart/"},{default:o(()=>[C]),_:1}),S])]),j,A,P,E,L,q,F,Q,W,B,e("div",z,[U,e("p",null,[M,N,R,a(s,{to:"/docs/getting-started/glossary/#projects"},{default:o(()=>[G]),_:1}),O,a(s,{to:"/docs/getting-started/glossary/#collections"},{default:o(()=>[H]),_:1}),K,a(s,{to:"/docs/getting-started/glossary/#fields"},{default:o(()=>[V]),_:1}),Y,a(s,{to:"/docs/getting-started/glossary/#items"},{default:o(()=>[J]),_:1}),X,a(s,{to:"/docs/getting-started/glossary/#types"},{default:o(()=>[Z]),_:1}),$])]),ee,te,oe,se,ae,ne,ie,re,le,de,ce,ue,e("ul",null,[he,pe,me,e("li",null,[_e,ge,a(s,{to:"/docs/getting-started/glossary/#collections"},{default:o(()=>[fe]),_:1}),ye,a(s,{to:"/docs/getting-started/glossary/#items"},{default:o(()=>[be]),_:1}),we]),ve,De]),ke,Ie,e("p",null,[xe,a(s,{to:"/docs/cloud/glossary/#cloud-exclusives"},{default:o(()=>[Te]),_:1}),Ce]),Se,e("div",je,[Ae,e("p",null,[Pe,a(s,{to:"/docs/getting-started/quickstart/"},{default:o(()=>[Ee]),_:1}),Le])]),qe])]),_:1})}}};export{Me as default,Ue as modularExtension,ze as title};
@@ -1,4 +1,4 @@
1
- import{a as n,o as l,b as c,w as o,g as e,e as i,B as t}from"./runtime-core.esm-bundler.e3d5f5b7.js";const d={class:"markdown-body"},h=e("blockquote",null,[e("p",null,[t("Our team truly appreciates every single contributor, community member, GitHub star, pull-request, bug report, and feature request. Keeping Directus completely free and open-source is our way of saying: "),e("strong",null,"Thank you!")])],-1),p=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"We're here to help!"),e("p",null,[t("If you have "),e("em",null,"any"),t(" questions along your contributor journey, please feel free to come chat with us on our "),e("a",{href:"https://directus.chat",target:"_blank",rel:"noopener noreferrer"},"Discord Community"),t(".")])],-1),f=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Technical Contributor Docs"),e("p",null,[t("Technical documentation for contributing to the core codebase is located on the main "),e("code",null,"directus/directus"),e("a",{href:"https://github.com/directus/directus/wiki",target:"_blank",rel:"noopener noreferrer"},"GitHub repository\u2019s Wiki"),t(".")])],-1),_=e("h2",{id:"code-of-conduct",tabindex:"-1"},[t("Code of Conduct "),e("a",{class:"header-anchor",href:"#code-of-conduct"},"#")],-1),g=e("p",null,[e("strong",null,[t("The Directus "),e("a",{href:"https://github.com/directus/directus/blob/main/code_of_conduct.md",target:"_blank",rel:"noopener noreferrer"},"Code of Conduct"),t(" is one of the ways we put our values into practice. We expect all of our staff, contractors and contributors to know and follow this code.")])],-1),b=e("p",null,[e("strong",null,"Our contributors and maintainers work extremely hard to build Directus as premium open-source software. Please be respectful of those efforts throughout our ecosystem. Trolling, harassing, insulting, or other unacceptable behavior by participants will not be tolerated.")],-1),m=e("p",null,"In the interest of fostering an open and welcoming environment, we as pledge to make participation in our project and community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.",-1),y=e("p",null,"Examples of behavior that contributes to creating a positive environment include:",-1),w=e("ul",null,[e("li",null,"Using welcoming and inclusive language"),e("li",null,"Being respectful of differing viewpoints and experiences"),e("li",null,"Gracefully accepting constructive criticism"),e("li",null,"Focusing on what is best for the community"),e("li",null,"Showing empathy towards other community members")],-1),v=e("p",null,[e("strong",null,[t("Before continuing, please take a moment to read our full "),e("a",{href:"https://github.com/directus/directus/blob/main/contributing.md",target:"_blank",rel:"noopener noreferrer"},"Code of Conduct"),t(".")])],-1),k=e("h2",{id:"wait-%E2%80%94-before-you-begin",tabindex:"-1"},[t("Wait \u2014 Before you Begin "),e("a",{class:"header-anchor",href:"#wait-%E2%80%94-before-you-begin"},"#")],-1),x=t("When contributing to this repository, it is important to first discuss the change you wish to make with the owners of this repository. This can be done via "),q=e("a",{href:"https://github.com/directus/directus/issues",target:"_blank",rel:"noopener noreferrer"},"GitHub Issue",-1),C=t(", "),D=e("a",{href:"https://github.com/directus/directus/discussions",target:"_blank",rel:"noopener noreferrer"},"GitHub Discussions",-1),R=t(", "),F=e("a",{href:"https://directus.chat",target:"_blank",rel:"noopener noreferrer"},"Discord",-1),B=t(", "),T=t("email"),Y=t(", or any other method."),G=e("p",null,"Following this rule will help avoid wasted time caused by multiple people working on the same issue or writing code that will not be merged.",-1),H=e("h2",{id:"feature-requests",tabindex:"-1"},[t("Feature Requests "),e("a",{class:"header-anchor",href:"#feature-requests"},"#")],-1),S=e("p",null,[t("Feature requests are a great way to let our team know what should be prioritized next. You can "),e("a",{href:"https://github.com/directus/directus/discussions/new",target:"_blank",rel:"noopener noreferrer"},"submit a new feature request"),t(" or "),e("a",{href:"https://github.com/directus/directus/discussions",target:"_blank",rel:"noopener noreferrer"},"vote on existing submissions"),t(" via GitHub Discussions.")],-1),W=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"The 80/20 Rule"),e("p",null,"To keep the Directus codebase as clean and simple as possible, we will only consider approving features that we feel at least 80% of our user-base will find valuable. If your feature request falls within the 20% range, it is considered an edge-case and should be implemented as an extension.")],-1),A=e("h2",{id:"rfcs",tabindex:"-1"},[t("RFCs "),e("a",{class:"header-anchor",href:"#rfcs"},"#")],-1),I=e("p",null,[t("Some Directus features/fixes may require additional design, strategy, and/or discussion before beginning work. For these notable pull-requests, you should first submit an RFC (Request For Comments) to our core team via "),e("a",{href:"https://directus.chat",target:"_blank",rel:"noopener noreferrer"},"Discord"),t(". This process is relatively informal, but ensures proper alignment, and helps avoid squandered development time by contributors.")],-1),E=e("h2",{id:"bug-reporting",tabindex:"-1"},[t("Bug Reporting "),e("a",{class:"header-anchor",href:"#bug-reporting"},"#")],-1),N=e("p",null,[t("Reporting any bugs you come across is an invaluable part of helping keep Directus stable. After confirming a similar issue doesn\u2019t already exist, you can "),e("a",{href:"https://github.com/directus/directus/issues/new",target:"_blank",rel:"noopener noreferrer"},"submit a bug report"),t(" via GitHub Issues. Please ensure the following for all submissions:")],-1),O=e("li",null,"You are experiencing an actual bug, not a configuration issue",-1),P=e("li",null,"You are using the official (pre-built) version of directus and not a fork",-1),V=e("li",null,"You are not asking a question or requesting a new feature",-1),U=e("li",null,"You have checked that no similar issue (or discussion) already exists",-1),j=e("li",null,"You have entered a clear and concise title",-1),z=e("li",null,"You have followed the issue template, with stack details and steps to reproduce",-1),K=t("You have already completed all "),L=t("troubleshooting steps"),M=e("h2",{id:"reporting-security-vulnerabilities",tabindex:"-1"},[t("Reporting Security Vulnerabilities "),e("a",{class:"header-anchor",href:"#reporting-security-vulnerabilities"},"#")],-1),J=t("If you believe you have discovered a security issue within a Directus product or service, please reach out to us directly over email: "),Q=t("security@directus.io"),X=t(". We will then open a "),Z=e("a",{href:"https://github.com/directus/directus/security/advisories",target:"_blank",rel:"noopener noreferrer"},"GitHub Security Advisory",-1),$=t(" for tracking the fix."),ee=e("p",null,"We value the members of the independent security research community who find security vulnerabilities and work with our team so that proper fixes can be issued to users. Our policy is to credit all researchers in the fix\u2019s release notes. In order to receive credit, security researchers must follow responsible disclosure practices, including:",-1),te=e("ul",null,[e("li",null,"They do not publish the vulnerability prior to the Directus team releasing a fix for it"),e("li",null,"They do not divulge exact details of the issue, eg: through exploits or proof-of-concepts")],-1),oe=e("h2",{id:"submitting-a-pull-request",tabindex:"-1"},[t("Submitting a Pull-Request "),e("a",{class:"header-anchor",href:"#submitting-a-pull-request"},"#")],-1),se=e("h3",{id:"1.-submit-an-rfc-(if-needed)",tabindex:"-1"},[t("1. Submit an RFC (if needed) "),e("a",{class:"header-anchor",href:"#1.-submit-an-rfc-(if-needed)"},"#")],-1),ie=e("p",null,[t("Please read our docs on the "),e("a",{href:"#rfcs"},"RFC process"),t(".")],-1),re=e("h3",{id:"2.-update-relevant-docs",tabindex:"-1"},[t("2. Update relevant docs "),e("a",{class:"header-anchor",href:"#2.-update-relevant-docs"},"#")],-1),ne=e("p",null,"Before submitting any pull-requests, ensure that any relevant documentation (included in this same repo) is updated.",-1),ae=e("h3",{id:"3.-push-your-changes",tabindex:"-1"},[t("3. Push your changes "),e("a",{class:"header-anchor",href:"#3.-push-your-changes"},"#")],-1),ue=e("pre",null,[e("code",{class:"language-bash"},`git push -u origin YOUR-BRANCH-NAME
2
- `)],-1),le=e("h3",{id:"submit-a-pull-request",tabindex:"-1"},[t("Submit a pull-request "),e("a",{class:"header-anchor",href:"#submit-a-pull-request"},"#")],-1),ce=e("p",null,"Once you push the changes to your repo, the \u201CCompare & pull request\u201D button will appear in GitHub. Click it and you\u2019ll be taken to a screen where you can fill in the appropriate details. Finally, open the pull request by clicking the \u201CCreate pull request\u201D button.",-1),de=e("p",null,"Now our core staff will review your contribution and either merge it, or request that you to make changes.",-1),he=e("h2",{id:"syncing-your-fork-with-directus",tabindex:"-1"},[t("Syncing Your Fork with Directus "),e("a",{class:"header-anchor",href:"#syncing-your-fork-with-directus"},"#")],-1),pe=e("p",null,"After you have submitted your pull requests, you would need to sync your fork with Directus to pull all the latest commits before you continue to contribute.",-1),fe=e("h3",{id:"1.-add-directus-as-a-remote",tabindex:"-1"},[t("1. Add Directus as a Remote "),e("a",{class:"header-anchor",href:"#1.-add-directus-as-a-remote"},"#")],-1),_e=e("p",null,"While your fork is your main remote or origin, you will add Directus as the upstream, which generally refers to the original repo that you have forked.",-1),ge=e("pre",null,[e("code",{class:"language-bash"},`git remote add upstream git@github.com:directus/directus.git
3
- `)],-1),be=e("h3",{id:"2.-fetch-the-latest-changes",tabindex:"-1"},[t("2. Fetch the Latest Changes "),e("a",{class:"header-anchor",href:"#2.-fetch-the-latest-changes"},"#")],-1),me=e("p",null,[t("Depending on your setup, you will need to get the latest commits from the "),e("code",null,"main"),t(" branch of Directus by doing a pull, reset, rebase or fetch.")],-1),ye=e("pre",null,[e("code",{class:"language-bash"},`git pull upstream main
1
+ import{a as n,o as l,b as c,w as o,g as e,e as i,B as t}from"./runtime-core.esm-bundler.e3d5f5b7.js";const d={class:"markdown-body"},h=e("blockquote",null,[e("p",null,[t("Our team truly appreciates every single contributor, community member, GitHub star, pull-request, bug report, and feature request. Keeping Directus completely free and open-source is our way of saying: "),e("strong",null,"Thank you!")])],-1),p=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"We're here to help!"),e("p",null,[t("If you have "),e("em",null,"any"),t(" questions along your contributor journey, please feel free to come chat with us on our "),e("a",{href:"https://directus.chat",target:"_blank",rel:"noopener noreferrer"},"Discord Community"),t(".")])],-1),f=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Technical Contributor Docs"),e("p",null,[t("Technical documentation for contributing to the core codebase is located on the main "),e("code",null,"directus/directus"),e("a",{href:"https://github.com/directus/directus/wiki",target:"_blank",rel:"noopener noreferrer"},"GitHub repository\u2019s Wiki"),t(".")])],-1),_=e("h2",{id:"code-of-conduct",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#code-of-conduct"},"#"),t(" Code of Conduct")],-1),g=e("p",null,[e("strong",null,[t("The Directus "),e("a",{href:"https://github.com/directus/directus/blob/main/code_of_conduct.md",target:"_blank",rel:"noopener noreferrer"},"Code of Conduct"),t(" is one of the ways we put our values into practice. We expect all of our staff, contractors and contributors to know and follow this code.")])],-1),b=e("p",null,[e("strong",null,"Our contributors and maintainers work extremely hard to build Directus as premium open-source software. Please be respectful of those efforts throughout our ecosystem. Trolling, harassing, insulting, or other unacceptable behavior by participants will not be tolerated.")],-1),m=e("p",null,"In the interest of fostering an open and welcoming environment, we as pledge to make participation in our project and community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.",-1),y=e("p",null,"Examples of behavior that contributes to creating a positive environment include:",-1),w=e("ul",null,[e("li",null,"Using welcoming and inclusive language"),e("li",null,"Being respectful of differing viewpoints and experiences"),e("li",null,"Gracefully accepting constructive criticism"),e("li",null,"Focusing on what is best for the community"),e("li",null,"Showing empathy towards other community members")],-1),v=e("p",null,[e("strong",null,[t("Before continuing, please take a moment to read our full "),e("a",{href:"https://github.com/directus/directus/blob/main/contributing.md",target:"_blank",rel:"noopener noreferrer"},"Code of Conduct"),t(".")])],-1),k=e("h2",{id:"wait-%E2%80%94-before-you-begin",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#wait-%E2%80%94-before-you-begin"},"#"),t(" Wait \u2014 Before you Begin")],-1),x=t("When contributing to this repository, it is important to first discuss the change you wish to make with the owners of this repository. This can be done via "),q=e("a",{href:"https://github.com/directus/directus/issues",target:"_blank",rel:"noopener noreferrer"},"GitHub Issue",-1),C=t(", "),D=e("a",{href:"https://github.com/directus/directus/discussions",target:"_blank",rel:"noopener noreferrer"},"GitHub Discussions",-1),R=t(", "),F=e("a",{href:"https://directus.chat",target:"_blank",rel:"noopener noreferrer"},"Discord",-1),B=t(", "),T=t("email"),Y=t(", or any other method."),G=e("p",null,"Following this rule will help avoid wasted time caused by multiple people working on the same issue or writing code that will not be merged.",-1),H=e("h2",{id:"feature-requests",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#feature-requests"},"#"),t(" Feature Requests")],-1),S=e("p",null,[t("Feature requests are a great way to let our team know what should be prioritized next. You can "),e("a",{href:"https://github.com/directus/directus/discussions/new",target:"_blank",rel:"noopener noreferrer"},"submit a new feature request"),t(" or "),e("a",{href:"https://github.com/directus/directus/discussions",target:"_blank",rel:"noopener noreferrer"},"vote on existing submissions"),t(" via GitHub Discussions.")],-1),W=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"The 80/20 Rule"),e("p",null,"To keep the Directus codebase as clean and simple as possible, we will only consider approving features that we feel at least 80% of our user-base will find valuable. If your feature request falls within the 20% range, it is considered an edge-case and should be implemented as an extension.")],-1),A=e("h2",{id:"rfcs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#rfcs"},"#"),t(" RFCs")],-1),I=e("p",null,[t("Some Directus features/fixes may require additional design, strategy, and/or discussion before beginning work. For these notable pull-requests, you should first submit an RFC (Request For Comments) to our core team via "),e("a",{href:"https://directus.chat",target:"_blank",rel:"noopener noreferrer"},"Discord"),t(". This process is relatively informal, but ensures proper alignment, and helps avoid squandered development time by contributors.")],-1),E=e("h2",{id:"bug-reporting",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#bug-reporting"},"#"),t(" Bug Reporting")],-1),N=e("p",null,[t("Reporting any bugs you come across is an invaluable part of helping keep Directus stable. After confirming a similar issue doesn\u2019t already exist, you can "),e("a",{href:"https://github.com/directus/directus/issues/new",target:"_blank",rel:"noopener noreferrer"},"submit a bug report"),t(" via GitHub Issues. Please ensure the following for all submissions:")],-1),O=e("li",null,"You are experiencing an actual bug, not a configuration issue",-1),P=e("li",null,"You are using the official (pre-built) version of directus and not a fork",-1),V=e("li",null,"You are not asking a question or requesting a new feature",-1),U=e("li",null,"You have checked that no similar issue (or discussion) already exists",-1),j=e("li",null,"You have entered a clear and concise title",-1),z=e("li",null,"You have followed the issue template, with stack details and steps to reproduce",-1),K=t("You have already completed all "),L=t("troubleshooting steps"),M=e("h2",{id:"reporting-security-vulnerabilities",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#reporting-security-vulnerabilities"},"#"),t(" Reporting Security Vulnerabilities")],-1),J=t("If you believe you have discovered a security issue within a Directus product or service, please reach out to us directly over email: "),Q=t("security@directus.io"),X=t(". We will then open a "),Z=e("a",{href:"https://github.com/directus/directus/security/advisories",target:"_blank",rel:"noopener noreferrer"},"GitHub Security Advisory",-1),$=t(" for tracking the fix."),ee=e("p",null,"We value the members of the independent security research community who find security vulnerabilities and work with our team so that proper fixes can be issued to users. Our policy is to credit all researchers in the fix\u2019s release notes. In order to receive credit, security researchers must follow responsible disclosure practices, including:",-1),te=e("ul",null,[e("li",null,"They do not publish the vulnerability prior to the Directus team releasing a fix for it"),e("li",null,"They do not divulge exact details of the issue, eg: through exploits or proof-of-concepts")],-1),oe=e("h2",{id:"submitting-a-pull-request",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#submitting-a-pull-request"},"#"),t(" Submitting a Pull-Request")],-1),se=e("h3",{id:"1.-submit-an-rfc-(if-needed)",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#1.-submit-an-rfc-(if-needed)"},"#"),t(" 1. Submit an RFC (if needed)")],-1),ie=e("p",null,[t("Please read our docs on the "),e("a",{href:"#rfcs"},"RFC process"),t(".")],-1),re=e("h3",{id:"2.-update-relevant-docs",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#2.-update-relevant-docs"},"#"),t(" 2. Update relevant docs")],-1),ne=e("p",null,"Before submitting any pull-requests, ensure that any relevant documentation (included in this same repo) is updated.",-1),ae=e("h3",{id:"3.-push-your-changes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#3.-push-your-changes"},"#"),t(" 3. Push your changes")],-1),ue=e("pre",null,[e("code",{class:"language-bash"},`git push -u origin YOUR-BRANCH-NAME
2
+ `)],-1),le=e("h3",{id:"submit-a-pull-request",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#submit-a-pull-request"},"#"),t(" Submit a pull-request")],-1),ce=e("p",null,"Once you push the changes to your repo, the \u201CCompare & pull request\u201D button will appear in GitHub. Click it and you\u2019ll be taken to a screen where you can fill in the appropriate details. Finally, open the pull request by clicking the \u201CCreate pull request\u201D button.",-1),de=e("p",null,"Now our core staff will review your contribution and either merge it, or request that you to make changes.",-1),he=e("h2",{id:"syncing-your-fork-with-directus",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#syncing-your-fork-with-directus"},"#"),t(" Syncing Your Fork with Directus")],-1),pe=e("p",null,"After you have submitted your pull requests, you would need to sync your fork with Directus to pull all the latest commits before you continue to contribute.",-1),fe=e("h3",{id:"1.-add-directus-as-a-remote",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#1.-add-directus-as-a-remote"},"#"),t(" 1. Add Directus as a Remote")],-1),_e=e("p",null,"While your fork is your main remote or origin, you will add Directus as the upstream, which generally refers to the original repo that you have forked.",-1),ge=e("pre",null,[e("code",{class:"language-bash"},`git remote add upstream git@github.com:directus/directus.git
3
+ `)],-1),be=e("h3",{id:"2.-fetch-the-latest-changes",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#2.-fetch-the-latest-changes"},"#"),t(" 2. Fetch the Latest Changes")],-1),me=e("p",null,[t("Depending on your setup, you will need to get the latest commits from the "),e("code",null,"main"),t(" branch of Directus by doing a pull, reset, rebase or fetch.")],-1),ye=e("pre",null,[e("code",{class:"language-bash"},`git pull upstream main
4
4
  `)],-1),we=e("p",null,"At this point you are ready to continue working on Directus, with the latest commits included!",-1),ve=e("div",{class:"tip hint"},[e("p",null,"Before you begin or resume development, be sure to always sync, if you are going to submit a pull request with your changes!")],-1),De="Contributing",Re=!1,Fe={name:"introduction",setup(ke,{expose:a}){const r={title:"Contributing",modularExtension:!1};return a({frontmatter:r}),(xe,qe)=>{const s=n("router-link"),u=n("docs-wrapper");return l(),c(u,{frontmatter:r},{default:o(()=>[e("div",d,[h,p,f,_,g,b,m,y,w,v,k,e("p",null,[x,q,C,D,R,F,B,i(s,{to:"/docsmailto:info@directus.io"},{default:o(()=>[T]),_:1}),Y]),G,H,S,W,A,I,E,N,e("ul",null,[O,P,V,U,j,z,e("li",null,[K,i(s,{to:"/docs/getting-started/support#troubleshooting-steps"},{default:o(()=>[L]),_:1})])]),M,e("p",null,[J,i(s,{to:"/docsmailto:security@directus.io"},{default:o(()=>[Q]),_:1}),X,Z,$]),ee,te,oe,se,ie,re,ne,ae,ue,le,ce,de,he,pe,fe,_e,ge,be,me,ye,we,ve])]),_:1})}}};export{Fe as default,Re as modularExtension,De as title};