@directus/app 9.20.4 → 9.21.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.
- package/dist/assets/@directus_extensions-sdk.7480601b.entry.js +1 -0
- package/dist/assets/{accounts.8d02a534.js → accounts.6f69dc83.js} +1 -1
- package/dist/assets/active-line.f3bab3a5.js +1 -0
- package/dist/assets/{activity-log.957853bb.js → activity-log.2e944bfa.js} +1 -1
- package/dist/assets/{activity.58bbe1c2.js → activity.dda3417f.js} +1 -1
- package/dist/assets/apl.1805b26f.js +1 -0
- package/dist/assets/{architecture.0ded5b28.js → architecture.e66cc597.js} +1 -1
- package/dist/assets/asciiarmor.ffaf0f62.js +1 -0
- package/dist/assets/asn.1.cd62dee4.js +1 -0
- package/dist/assets/asterisk.07d1e4af.js +1 -0
- package/dist/assets/{authentication.5b7d5fa7.js → authentication.8a718856.js} +5 -5
- package/dist/assets/autorefresh.e63fec5a.js +1 -0
- package/dist/assets/{aws.890dfda5.js → aws.99d49c74.js} +1 -1
- package/dist/assets/{backing-directus.7f54a4af.js → backing-directus.23aeddff.js} +1 -1
- package/dist/assets/brainfuck.587235ad.js +1 -0
- package/dist/assets/{cli.4e995657.js → cli.8e7d9b17.js} +4 -4
- package/dist/assets/{cli.bf0b2442.js → cli.ce3a6393.js} +2 -2
- package/dist/assets/clike.8df07672.js +1 -0
- package/dist/assets/clojure.7ed940f7.js +1 -0
- package/dist/assets/{cloudron.0a16f34b.js → cloudron.0cf18005.js} +1 -1
- package/dist/assets/cmake.8058664d.js +1 -0
- package/dist/assets/cobol.7925af76.js +1 -0
- package/dist/assets/{codebase-overview.2ba91a80.js → codebase-overview.4707b17a.js} +1 -1
- package/dist/assets/coffeescript.36666708.js +1 -0
- package/dist/assets/{collections.7fa07fe7.js → collections.30500b8b.js} +2 -2
- package/dist/assets/{collections.2a61805a.js → collections.88058903.js} +2 -2
- package/dist/assets/{collections.ea858bf6.js → collections.b74ab838.js} +3 -3
- package/dist/assets/commonlisp.ce672eb5.js +1 -0
- package/dist/assets/{conditions.32339903.js → conditions.db9bebfc.js} +1 -1
- package/dist/assets/{config-options.53449c2c.js → config-options.48260929.js} +12 -12
- package/dist/assets/{content.18716bf7.js → content.647b054c.js} +1 -1
- package/dist/assets/{creating-extensions.0a6d6d3b.js → creating-extensions.e032c2f0.js} +3 -3
- package/dist/assets/crystal.3c7c09cc.js +1 -0
- package/dist/assets/css.b68c041b.js +1 -0
- package/dist/assets/cypher.3b38874c.js +4 -0
- package/dist/assets/d.0460be39.js +1 -0
- package/dist/assets/dart.680bdb1d.js +1 -0
- package/dist/assets/{data-model.b5eb7565.js → data-model.63af932c.js} +3 -3
- package/dist/assets/de-DE.590d3c70.js +1 -0
- package/dist/assets/diff.11dadb16.js +1 -0
- package/dist/assets/{digitalocean-app-platform.4063d6cc.js → digitalocean-app-platform.adb9fc63.js} +2 -2
- package/dist/assets/{display-templates.65a9b519.js → display-templates.7c1dae6d.js} +1 -1
- package/dist/assets/display.87df21d6.js +1 -0
- package/dist/assets/{displays.b72d546c.js → displays.c0024804.js} +5 -5
- package/dist/assets/django.c5c2bb33.js +1 -0
- package/dist/assets/{docker.ae6227ab.js → docker.a790e063.js} +1 -1
- package/dist/assets/dockerfile.cb57c90a.js +1 -0
- package/dist/assets/{documentation.6628aaac.js → documentation.1783cd53.js} +1 -1
- package/dist/assets/dtd.4bdd906a.js +1 -0
- package/dist/assets/dylan.af09e3f8.js +1 -0
- package/dist/assets/ebnf.0ec983c0.js +1 -0
- package/dist/assets/ecl.eeba0610.js +1 -0
- package/dist/assets/eiffel.d9fec659.js +1 -0
- package/dist/assets/elm.c3ce2b54.js +1 -0
- package/dist/assets/{email-templates.5e1b5472.js → email-templates.ed708d89.js} +1 -1
- package/dist/assets/{endpoints.44874916.js → endpoints.10a1484a.js} +1 -1
- package/dist/assets/erlang.d00fab30.js +1 -0
- package/dist/assets/{extensions.9790f6ff.js → extensions.d542042f.js} +1 -1
- package/dist/assets/factor.a6dddf2c.js +1 -0
- package/dist/assets/{faq.0fd5ca6e.js → faq.8904941c.js} +2 -2
- package/dist/assets/fcl.0c78a020.js +1 -0
- package/dist/assets/{field-types.e5bd5900.js → field-types.e3e041fc.js} +1 -1
- package/dist/assets/{field.b9b55fc2.js → field.64c29e0b.js} +1 -1
- package/dist/assets/{fields.fc8af154.js → fields.1597bfad.js} +1 -1
- package/dist/assets/{fields.7df6f624.js → fields.c76c2d8b.js} +1 -1
- package/dist/assets/{file-library.7a11d866.js → file-library.8fb3da43.js} +1 -1
- package/dist/assets/{files.84b41f2f.js → files.d8e3acf4.js} +2 -2
- package/dist/assets/{filter-rules.099e9689.js → filter-rules.edb18765.js} +4 -4
- package/dist/assets/{filters.98d31bd5.js → filters.26e88a50.js} +1 -1
- package/dist/assets/{flows.b6ebb4b6.js → flows.8c6f69bb.js} +6 -6
- package/dist/assets/{flows.2646c3ae.js → flows.f014b9cc.js} +2 -2
- package/dist/assets/{folders.35cfde90.js → folders.8aec87f5.js} +5 -5
- package/dist/assets/forth.fbb63d06.js +1 -0
- package/dist/assets/fortran.cbc14824.js +1 -0
- package/dist/assets/fr-FR.d8dbf5de.js +1 -0
- package/dist/assets/gas.3e3eaaa0.js +1 -0
- package/dist/assets/{gcp.ce76381f.js → gcp.97542e88.js} +5 -5
- package/dist/assets/gfm.a5597fec.js +1 -0
- package/dist/assets/gherkin.9cfc1ed7.js +1 -0
- package/dist/assets/{github-ci.b4dde47f.js → github-ci.e7d15770.js} +2 -2
- package/dist/assets/{glossary.3b14c64d.js → glossary.beaf358c.js} +1 -1
- package/dist/assets/{glossary.930fe38e.js → glossary.c972e836.js} +1 -1
- package/dist/assets/go.f180871e.js +1 -0
- package/dist/assets/groovy.4db995a9.js +1 -0
- package/dist/assets/haml.ed77ce51.js +1 -0
- package/dist/assets/handlebars.81504d91.js +1 -0
- package/dist/assets/haskell-literate.d54dc9c7.js +1 -0
- package/dist/assets/haskell.f21c4399.js +1 -0
- package/dist/assets/haxe.50f0db0c.js +1 -0
- package/dist/assets/{hooks.b9909639.js → hooks.feaad058.js} +1 -1
- package/dist/assets/htmlembedded.5ff69a18.js +1 -0
- package/dist/assets/htmlmixed.5efed62b.js +1 -0
- package/dist/assets/{htmlmixed.a7900839.js → htmlmixed.f69cc072.js} +1 -1
- package/dist/assets/http.6b260d22.js +1 -0
- package/dist/assets/idl.617214c8.js +1 -0
- package/dist/assets/{iis.63d75601.js → iis.0358929d.js} +1 -1
- package/dist/assets/{import-export.fe680598.js → import-export.391b74e0.js} +2 -2
- package/dist/assets/{index.ffcfdc79.js → index.04b73e2f.js} +1 -1
- package/dist/assets/{index.3ccb1a62.js → index.09845961.js} +1 -1
- package/dist/assets/{index.671547c3.js → index.130287f6.js} +1 -1
- package/dist/assets/{index.3d4f0091.css → index.19e6c20c.css} +1 -1
- package/dist/assets/{index.20179e31.js → index.1ba23fe5.js} +1 -1
- package/dist/assets/{index.f19e5b18.js → index.1f330fc3.js} +1 -1
- package/dist/assets/{index.7f210d25.js → index.24999c03.js} +1 -1
- package/dist/assets/{index.f047ba76.entry.js → index.312f2c91.entry.js} +2693 -2687
- package/dist/assets/{index.c781a7ba.js → index.31f6e6f2.js} +3 -3
- package/dist/assets/{index.7c5199ad.js → index.330c3aee.js} +1 -1
- package/dist/assets/{index.549a82a6.js → index.3470f134.js} +1 -1
- package/dist/assets/index.38d152bf.js +1 -0
- package/dist/assets/{index.a6c65314.js → index.4044e5c7.js} +1 -1
- package/dist/assets/{index.764b9d6e.js → index.4706b3f5.js} +1 -1
- package/dist/assets/{index.875a771b.js → index.4b24f075.js} +1 -1
- package/dist/assets/{index.6949d989.js → index.4c6e76b7.js} +1 -1
- package/dist/assets/{index.0d7f4d79.js → index.522f44b0.js} +1 -1
- package/dist/assets/{index.1c9cfeb8.js → index.525d8fd8.js} +1 -1
- package/dist/assets/{index.d8e4727e.js → index.528e4b54.js} +1 -1
- package/dist/assets/{index.d9e48160.js → index.52a4297c.js} +1 -1
- package/dist/assets/{index.34c47fcf.js → index.530fd584.js} +1 -1
- package/dist/assets/{index.91e98759.js → index.546018df.js} +1 -1
- package/dist/assets/{index.d557b36c.js → index.57542755.js} +1 -1
- package/dist/assets/{index.425c965c.js → index.5a8952da.js} +1 -1
- package/dist/assets/{index.9b6db0de.js → index.5cf97c2b.js} +1 -1
- package/dist/assets/index.65e5d28f.css +1 -0
- package/dist/assets/{index.08c5d5a2.js → index.6b77e807.js} +1 -1
- package/dist/assets/{index.393b7fd6.js → index.6bf3a163.js} +1 -1
- package/dist/assets/{index.fe4bc374.js → index.6c07a132.js} +1 -1
- package/dist/assets/{index.1f99dc82.js → index.6c4fabf1.js} +1 -1
- package/dist/assets/{index.7468a23c.js → index.6fa71870.js} +1 -1
- package/dist/assets/{index.8fb3c07f.js → index.7045dfad.js} +1 -1
- package/dist/assets/{index.aa66a39f.js → index.75ef0473.js} +1 -1
- package/dist/assets/{index.c3959367.js → index.77b8f02e.js} +1 -1
- package/dist/assets/{index.62e48e8e.js → index.7943fd38.js} +1 -1
- package/dist/assets/{index.ac96f5b3.js → index.7c5b74dc.js} +1 -1
- package/dist/assets/{index.f32d0fbe.js → index.7de5db57.js} +1 -1
- package/dist/assets/{index.8aa50b59.js → index.7e90d361.js} +1 -1
- package/dist/assets/{index.2399ffb8.js → index.7edb8b15.js} +1 -1
- package/dist/assets/{index.d370fafd.js → index.7fcf2b86.js} +1 -1
- package/dist/assets/{index.5c5acddc.js → index.80106d2d.js} +1 -1
- package/dist/assets/{index.8b8e6073.js → index.804b3c9b.js} +1 -1
- package/dist/assets/{index.5264aa26.js → index.8063dc25.js} +1 -1
- package/dist/assets/{index.eb772cab.js → index.81a02f8c.js} +1 -1
- package/dist/assets/{index.38e5dfc6.js → index.81d5b763.js} +1 -1
- package/dist/assets/{index.7269b9b7.js → index.8200528c.js} +1 -1
- package/dist/assets/{index.00acb7aa.js → index.82939b3a.js} +1 -1
- package/dist/assets/{index.d024a491.js → index.8446e18c.js} +1 -1
- package/dist/assets/index.87afb869.js +1 -0
- package/dist/assets/{index.7e37814b.js → index.92f59a75.js} +1 -1
- package/dist/assets/{index.3abfd687.js → index.98cb4ee1.js} +1 -1
- package/dist/assets/{index.486669b9.js → index.9d2fbf00.js} +1 -1
- package/dist/assets/{index.ec87e7f6.js → index.9dfe292c.js} +1 -1
- package/dist/assets/{index.4ce96101.js → index.a1b7be9b.js} +1 -1
- package/dist/assets/{index.1b594a21.js → index.a5356d91.js} +1 -1
- package/dist/assets/{index.b67fb5fc.js → index.ab4e5ca3.js} +1 -1
- package/dist/assets/{index.f511aff3.js → index.ab7b6cba.js} +1 -1
- package/dist/assets/{index.578c30ec.js → index.ac6c3fe9.js} +1 -1
- package/dist/assets/{index.5062f951.js → index.adc560cb.js} +1 -1
- package/dist/assets/{index.045e97f0.js → index.ae4bf6ea.js} +1 -1
- package/dist/assets/{index.9f69b190.js → index.aeaa0aa9.js} +1 -1
- package/dist/assets/{index.8b9e43f4.js → index.afc6b30e.js} +1 -1
- package/dist/assets/{index.23def130.js → index.b02dbd39.js} +1 -1
- package/dist/assets/{index.3cb24d7f.js → index.b391672d.js} +1 -1
- package/dist/assets/{index.19a506a0.js → index.b503f187.js} +1 -1
- package/dist/assets/{index.a88d2d0b.js → index.b7113e87.js} +1 -1
- package/dist/assets/{index.7bb84aa5.js → index.c156c46e.js} +1 -1
- package/dist/assets/{index.68337c85.js → index.c5e16ef6.js} +1 -1
- package/dist/assets/{index.45686201.js → index.c85c3f77.js} +1 -1
- package/dist/assets/{index.03886e4a.js → index.cb7799d1.js} +1 -1
- package/dist/assets/{index.eb4d5cbc.js → index.cb93c1e8.js} +1 -1
- package/dist/assets/{index.dc4d9b6a.js → index.d0d998a0.js} +1 -1
- package/dist/assets/{index.c2858d95.js → index.d790d684.js} +1 -1
- package/dist/assets/{index.a264494d.js → index.dc9006a1.js} +1 -1
- package/dist/assets/{index.8130aabc.js → index.e3619b04.js} +1 -1
- package/dist/assets/{index.ab5ebdc3.js → index.e4224764.js} +1 -1
- package/dist/assets/{index.426d219b.js → index.e5079c3a.js} +1 -1
- package/dist/assets/{index.90ecf353.js → index.e6971ab1.js} +1 -1
- package/dist/assets/{index.b2e447e3.js → index.e85bc569.js} +1 -1
- package/dist/assets/{index.42614221.js → index.e95b7e4b.js} +1 -1
- package/dist/assets/{index.0608a502.js → index.ec8cfaac.js} +1 -1
- package/dist/assets/{index.b0e3c55c.js → index.f2e26d1f.js} +1 -1
- package/dist/assets/{index.eecb0d4b.js → index.f60d22d0.js} +1 -1
- package/dist/assets/{index.a8b94b31.js → index.f828781f.js} +1 -1
- package/dist/assets/{index.2b61f9fb.js → index.fb6b1657.js} +1 -1
- package/dist/assets/{index.9c4a7f65.js → index.fb8023b0.js} +1 -1
- package/dist/assets/{index.79264a03.js → index.fe536421.js} +1 -1
- package/dist/assets/{input-rich-text-html.7e721a60.js → input-rich-text-html.b1656039.js} +30 -30
- package/dist/assets/{insights.bb6e6dd9.js → insights.8a1beae6.js} +2 -2
- package/dist/assets/{installation.a80b7bdd.js → installation.2db8d0e1.js} +1 -1
- package/dist/assets/{interface.6b3d318d.js → interface.8e4a64f0.js} +1 -1
- package/dist/assets/{interfaces.9c9cb203.js → interfaces.8e88b01f.js} +4 -4
- package/dist/assets/{introduction.17ce0958.js → introduction.2a0882fe.js} +4 -4
- package/dist/assets/{introduction.74d5f276.js → introduction.42a2136e.js} +1 -1
- package/dist/assets/{introduction.2b473cdb.js → introduction.4f0ccbaf.js} +1 -1
- package/dist/assets/{introduction.23bcca02.js → introduction.dbd85d4e.js} +1 -1
- package/dist/assets/{items.a200a734.js → items.9f358fa7.js} +5 -5
- package/dist/assets/{items.d9558b12.js → items.abb8d314.js} +1 -1
- package/dist/assets/javascript-hint.bd3c0fcf.js +1 -0
- package/dist/assets/javascript.7eff1543.js +1 -0
- package/dist/assets/jinja2.eec1b998.js +1 -0
- package/dist/assets/jsx.8808ecb1.js +1 -0
- package/dist/assets/julia.56479fbf.js +1 -0
- package/dist/assets/{layouts.71139077.js → layouts.9c64beac.js} +3 -3
- package/dist/assets/{layouts.67e010c3.js → layouts.b4771384.js} +1 -1
- package/dist/assets/livescript.37040ed1.js +1 -0
- package/dist/assets/lua.7730f9fd.js +1 -0
- package/dist/assets/{manual.be26c257.js → manual.4a53ccfe.js} +4 -4
- package/dist/assets/mark-selection.c1a5d4e1.js +1 -0
- package/dist/assets/match-highlighter.ed7a2467.js +1 -0
- package/dist/assets/{matchbrackets.e0f8c83a.js → matchbrackets.ebc48bf8.js} +1 -1
- package/dist/assets/mathematica.1dbfb6f4.js +1 -0
- package/dist/assets/mbox.0ac8a216.js +1 -0
- package/dist/assets/{migrations.58c8fd96.js → migrations.2969a369.js} +1 -1
- package/dist/assets/mirc.1cc06f67.js +1 -0
- package/dist/assets/mllike.cee4eaf7.js +1 -0
- package/dist/assets/modelica.2292d0b8.js +1 -0
- package/dist/assets/{modules.0cfbe882.js → modules.f057fcd0.js} +3 -3
- package/dist/assets/mscgen.38b6bb11.js +1 -0
- package/dist/assets/multiplex.1d92e024.js +3 -0
- package/dist/assets/mumps.f37c25cb.js +1 -0
- package/dist/assets/nginx.39e016a3.js +1 -0
- package/dist/assets/{notifications.7b442623.js → notifications.ca876814.js} +11 -11
- package/dist/assets/nsis.1cf932c7.js +1 -0
- package/dist/assets/ntriples.e6c37d71.js +1 -0
- package/dist/assets/octave.2bec4045.js +1 -0
- package/dist/assets/{operations.bd173669.js → operations.246298bc.js} +11 -11
- package/dist/assets/{operations.6fcceb98.js → operations.64af444f.js} +3 -3
- package/dist/assets/{operations.30bbad94.js → operations.b4042de2.js} +2 -2
- package/dist/assets/overlay.16f98fb6.js +1 -0
- package/dist/assets/{overview.cb1196c4.js → overview.0b4ab371.js} +1 -1
- package/dist/assets/{overview.4c1683c3.js → overview.359f9713.js} +1 -1
- package/dist/assets/{overview.23ad824a.js → overview.40893677.js} +1 -1
- package/dist/assets/oz.8955a131.js +1 -0
- package/dist/assets/{panels.187b8f0d.js → panels.3969b423.js} +2 -2
- package/dist/assets/pascal.7213d964.js +1 -0
- package/dist/assets/pegjs.6877c220.js +1 -0
- package/dist/assets/perl.7f37e0c4.js +1 -0
- package/dist/assets/{permissions.2ad2e118.js → permissions.0712320e.js} +4 -4
- package/dist/assets/php.b63c0c50.js +1 -0
- package/dist/assets/pig.1cddd148.js +1 -0
- package/dist/assets/{pinia.24c7b35a.entry.js → pinia.0d44ec62.entry.js} +2 -2
- package/dist/assets/{plesk.279941fc.js → plesk.e3ea514c.js} +5 -5
- package/dist/assets/powershell.3aecbe91.js +1 -0
- package/dist/assets/{presets-bookmarks.62ac9314.js → presets-bookmarks.0baf10eb.js} +1 -1
- package/dist/assets/{presets.0390ff92.js → presets.0de7849a.js} +8 -8
- package/dist/assets/{project-settings.8b91aa04.js → project-settings.6e5956c8.js} +1 -1
- package/dist/assets/{projects.97bc15fa.js → projects.12d7a177.js} +1 -1
- package/dist/assets/properties.db539b03.js +1 -0
- package/dist/assets/protobuf.0fa0e9b4.js +1 -0
- package/dist/assets/pt-BR.2c2e8c4f.js +1 -0
- package/dist/assets/pug.e6d33f3a.js +1 -0
- package/dist/assets/puppet.18346b43.js +1 -0
- package/dist/assets/python.065d28e0.js +1 -0
- package/dist/assets/q.ed3c142c.js +1 -0
- package/dist/assets/{query.19ee7756.js → query.6dcece55.js} +1 -1
- package/dist/assets/{quickstart.96d7fa17.js → quickstart.f1c431cf.js} +3 -3
- package/dist/assets/{quickstart.7f55e26e.js → quickstart.fd328631.js} +2 -2
- package/dist/assets/r.f2ad8682.js +1 -0
- package/dist/assets/{readme.abb2691e.js → readme.c063616b.js} +1 -1
- package/dist/assets/{relations.1409faa0.js → relations.c92ebc4e.js} +6 -6
- package/dist/assets/{relationship.8e3bc45d.js → relationship.0344c790.js} +1 -1
- package/dist/assets/{relationships.2449eed5.js → relationships.ad2ee267.js} +7 -7
- package/dist/assets/{resources.f9b64d6f.js → resources.84b84252.js} +1 -1
- package/dist/assets/{revisions.7ffa76fe.js → revisions.39f423d0.js} +4 -4
- package/dist/assets/ro-RO.4c33f715.js +1 -0
- package/dist/assets/{roles.ce6518a4.js → roles.89c51107.js} +7 -7
- package/dist/assets/rpm.1674f668.js +1 -0
- package/dist/assets/rst.0a69f626.js +1 -0
- package/dist/assets/ruby.02498746.js +1 -0
- package/dist/assets/{ruby.57265cfb.js → ruby.d805273a.js} +1 -1
- package/dist/assets/{running-locally.8b135453.js → running-locally.24e1b4bf.js} +6 -6
- package/dist/assets/runtime-core.esm-bundler.22ec0346.js +1 -0
- package/dist/assets/rust.90ce6688.js +1 -0
- package/dist/assets/sas.3b045c8d.js +1 -0
- package/dist/assets/sass.4fcb9b12.js +1 -0
- package/dist/assets/{schema.6649576e.js → schema.c326d911.js} +1 -1
- package/dist/assets/scheme.eb7abc5c.js +1 -0
- package/dist/assets/{sdk.33dcc072.js → sdk.2fdc3788.js} +17 -17
- package/dist/assets/{security.acb2be94.js → security.a0326c54.js} +1 -1
- package/dist/assets/{server.60bfa539.js → server.5b19042c.js} +1 -1
- package/dist/assets/{settings.6ac3895b.js → settings.2195b191.js} +1 -1
- package/dist/assets/{settings.a00aa4fa.js → settings.2553780f.js} +1 -1
- package/dist/assets/{shares.9a7ea736.js → shares.a17e644c.js} +1 -1
- package/dist/assets/shell.09d717f3.js +1 -0
- package/dist/assets/show-hint.4fc17cec.js +1 -0
- package/dist/assets/sieve.fe87517f.js +1 -0
- package/dist/assets/slim.76f6114d.js +1 -0
- package/dist/assets/smalltalk.eaf13594.js +1 -0
- package/dist/assets/smarty.abf4421d.js +1 -0
- package/dist/assets/solr.62208f30.js +1 -0
- package/dist/assets/soy.b2db807b.js +1 -0
- package/dist/assets/sparql.7042a2b3.js +1 -0
- package/dist/assets/spreadsheet.ca1422ad.js +1 -0
- package/dist/assets/sql.fcb976c5.js +1 -0
- package/dist/assets/{sso-examples.eb3ba478.js → sso-examples.8a36c968.js} +2 -2
- package/dist/assets/{sso.29d67116.js → sso.92e5b5f1.js} +4 -4
- package/dist/assets/stex.30c4dc01.js +1 -0
- package/dist/assets/{stex.a70dfdc0.js → stex.a5fe2e4a.js} +1 -1
- package/dist/assets/stylus.f7fcee76.js +1 -0
- package/dist/assets/{support.e9e535b3.js → support.f153d4ae.js} +1 -1
- package/dist/assets/swift.116cdb17.js +1 -0
- package/dist/assets/tcl.42613799.js +1 -0
- package/dist/assets/{teams.347f0563.js → teams.c564c81f.js} +1 -1
- package/dist/assets/textile.4285b886.js +1 -0
- package/dist/assets/{themes.32a50b86.js → themes.6c5c943f.js} +2 -2
- package/dist/assets/tiddlywiki.eb66e0c7.js +1 -0
- package/dist/assets/tiki.c796e616.js +1 -0
- package/dist/assets/toml.3b8b1e04.js +1 -0
- package/dist/assets/tornado.89f4bce8.js +1 -0
- package/dist/assets/{translation-strings.285d6bb2.js → translation-strings.326a2741.js} +1 -1
- package/dist/assets/translations.4c0efc6a.js +1 -0
- package/dist/assets/{translations.f87a601e.js → translations.645f8c9c.js} +1 -1
- package/dist/assets/{triggers.325e50d8.js → triggers.44703cf0.js} +1 -1
- package/dist/assets/troff.51ba9964.js +1 -0
- package/dist/assets/ttcn-cfg.62ff9e40.js +1 -0
- package/dist/assets/ttcn.08f34f21.js +1 -0
- package/dist/assets/turtle.2efc3e1b.js +1 -0
- package/dist/assets/twig.bd0ee3cd.js +1 -0
- package/dist/assets/{ubuntu.3ba252fe.js → ubuntu.47e06de3.js} +2 -2
- package/dist/assets/uk-UA.fe247137.js +1 -0
- package/dist/assets/{upgrades-migrations.a091b8af.js → upgrades-migrations.a23cace7.js} +1 -1
- package/dist/assets/{use-sync.d9160f34.js → use-sync.e83d9ab3.js} +3 -3
- package/dist/assets/{user-directory.9ca05985.js → user-directory.e1f15d1a.js} +1 -1
- package/dist/assets/{users-roles-permissions.bb71f6c9.js → users-roles-permissions.14757490.js} +1 -1
- package/dist/assets/{users.a44125e3.js → users.0ea4e372.js} +1 -1
- package/dist/assets/{utilities.0380c496.js → utilities.c76e17ac.js} +7 -7
- package/dist/assets/validation.99c6fcd4.js +1 -0
- package/dist/assets/vb.e77c04f4.js +1 -0
- package/dist/assets/vbscript.b1155c12.js +1 -0
- package/dist/assets/velocity.5f33a92c.js +1 -0
- package/dist/assets/verilog.064306e8.js +1 -0
- package/dist/assets/vhdl.c71b4d0c.js +1 -0
- package/dist/assets/{vue-i18n.df8d89e7.entry.js → vue-i18n.fbc77449.entry.js} +1 -1
- package/dist/assets/vue-router.3a828e63.entry.js +5 -0
- package/dist/assets/vue.1a8f18be.js +1 -0
- package/dist/assets/vue.486f3e62.entry.js +1 -0
- package/dist/assets/vue.runtime.esm-bundler.f6138180.js +1 -0
- package/dist/assets/wast.7970d24f.js +1 -0
- package/dist/assets/{webhooks.2d23be4c.js → webhooks.105c0454.js} +1 -1
- package/dist/assets/{webhooks.40d9a7a3.js → webhooks.d7f419fe.js} +4 -4
- package/dist/assets/webidl.f56d782e.js +1 -0
- package/dist/assets/{xml.ea66d5f3.js → xml.c9106c48.js} +1 -1
- package/dist/assets/xquery.d326f7d2.js +1 -0
- package/dist/assets/yacas.aab21d14.js +1 -0
- package/dist/assets/yaml-frontmatter.c4684bee.js +1 -0
- package/dist/assets/yaml.02beca9a.js +1 -0
- package/dist/assets/z80.2c343a72.js +1 -0
- package/dist/assets/{zh-CN.a9e8d795.js → zh-CN.a8f9e881.js} +1 -1
- package/dist/index.html +8 -8
- package/package.json +61 -61
- package/dist/assets/@directus_extensions-sdk.fd0e4213.entry.js +0 -1
- package/dist/assets/active-line.9ef493aa.js +0 -1
- package/dist/assets/apl.80228b26.js +0 -1
- package/dist/assets/asciiarmor.6c86ea34.js +0 -1
- package/dist/assets/asn.1.c414ac8d.js +0 -1
- package/dist/assets/asterisk.b919c017.js +0 -1
- package/dist/assets/autorefresh.4d24f530.js +0 -1
- package/dist/assets/brainfuck.31207812.js +0 -1
- package/dist/assets/clike.4381bb65.js +0 -1
- package/dist/assets/clike.70f54732.js +0 -1
- package/dist/assets/clojure.5e71b148.js +0 -1
- package/dist/assets/cmake.4292630d.js +0 -1
- package/dist/assets/cobol.0f026188.js +0 -1
- package/dist/assets/coffeescript.c9867ce1.js +0 -1
- package/dist/assets/commonlisp.575f73fb.js +0 -1
- package/dist/assets/crystal.c6b2e074.js +0 -1
- package/dist/assets/css.68e5f1b4.js +0 -1
- package/dist/assets/cypher.b9a2a2ff.js +0 -4
- package/dist/assets/d.29704d27.js +0 -1
- package/dist/assets/dart.3bc9103c.js +0 -1
- package/dist/assets/de-DE.1232afb9.js +0 -1
- package/dist/assets/diff.ed5ea48e.js +0 -1
- package/dist/assets/display.4a967445.js +0 -1
- package/dist/assets/django.a4f2e396.js +0 -1
- package/dist/assets/dockerfile.63d471ed.js +0 -1
- package/dist/assets/dtd.a3075452.js +0 -1
- package/dist/assets/dylan.f084efb3.js +0 -1
- package/dist/assets/ebnf.04f6993f.js +0 -1
- package/dist/assets/ecl.716928e4.js +0 -1
- package/dist/assets/eiffel.adac2439.js +0 -1
- package/dist/assets/elm.79decf86.js +0 -1
- package/dist/assets/erlang.3a8664fd.js +0 -1
- package/dist/assets/factor.5720b335.js +0 -1
- package/dist/assets/fcl.23169462.js +0 -1
- package/dist/assets/forth.0aa4b2af.js +0 -1
- package/dist/assets/fortran.2a5ba2e9.js +0 -1
- package/dist/assets/fr-FR.fa3f9dfa.js +0 -1
- package/dist/assets/gas.bb020a68.js +0 -1
- package/dist/assets/gfm.ab87931a.js +0 -1
- package/dist/assets/gherkin.14ad5708.js +0 -1
- package/dist/assets/go.db54967b.js +0 -1
- package/dist/assets/groovy.70142c17.js +0 -1
- package/dist/assets/haml.48d17fa5.js +0 -1
- package/dist/assets/handlebars.99f3b281.js +0 -1
- package/dist/assets/haskell-literate.dd8055d7.js +0 -1
- package/dist/assets/haskell.5163bc39.js +0 -1
- package/dist/assets/haxe.c37e45b0.js +0 -1
- package/dist/assets/htmlembedded.259e134c.js +0 -1
- package/dist/assets/htmlmixed.d4ccede2.js +0 -1
- package/dist/assets/http.c2a41932.js +0 -1
- package/dist/assets/idl.756f9381.js +0 -1
- package/dist/assets/index.4ce1e26c.js +0 -1
- package/dist/assets/index.90515a60.css +0 -1
- package/dist/assets/index.a36c94c4.js +0 -1
- package/dist/assets/javascript-hint.edf0fbfe.js +0 -1
- package/dist/assets/javascript.3f76a939.js +0 -1
- package/dist/assets/jinja2.5ece3da1.js +0 -1
- package/dist/assets/jsx.bf843278.js +0 -1
- package/dist/assets/julia.3deacccb.js +0 -1
- package/dist/assets/livescript.0f4ee94d.js +0 -1
- package/dist/assets/lua.55a0ef58.js +0 -1
- package/dist/assets/mark-selection.c61be770.js +0 -1
- package/dist/assets/match-highlighter.653539e4.js +0 -1
- package/dist/assets/mathematica.581f102c.js +0 -1
- package/dist/assets/mbox.b8d42368.js +0 -1
- package/dist/assets/mirc.54d6f3dc.js +0 -1
- package/dist/assets/mllike.3fea0214.js +0 -1
- package/dist/assets/modelica.e91f192a.js +0 -1
- package/dist/assets/mscgen.26838643.js +0 -1
- package/dist/assets/multiplex.93cf07bd.js +0 -3
- package/dist/assets/mumps.47e48202.js +0 -1
- package/dist/assets/nginx.87019c99.js +0 -1
- package/dist/assets/nsis.fafee21f.js +0 -1
- package/dist/assets/ntriples.a43258b6.js +0 -1
- package/dist/assets/octave.1f682cef.js +0 -1
- package/dist/assets/overlay.a2442f5e.js +0 -1
- package/dist/assets/oz.62b729b0.js +0 -1
- package/dist/assets/pascal.0fa9599a.js +0 -1
- package/dist/assets/pegjs.32083f8f.js +0 -1
- package/dist/assets/perl.5a777d8c.js +0 -1
- package/dist/assets/php.c6ab96f7.js +0 -1
- package/dist/assets/pig.2c7c4277.js +0 -1
- package/dist/assets/powershell.e6b0a933.js +0 -1
- package/dist/assets/properties.35c2d705.js +0 -1
- package/dist/assets/protobuf.625d3a47.js +0 -1
- package/dist/assets/pt-BR.c51763f3.js +0 -1
- package/dist/assets/pug.da3530b5.js +0 -1
- package/dist/assets/puppet.655afe2c.js +0 -1
- package/dist/assets/python.a67d678a.js +0 -1
- package/dist/assets/q.cc56fcdd.js +0 -1
- package/dist/assets/r.c1bddb02.js +0 -1
- package/dist/assets/ro-RO.52802a17.js +0 -1
- package/dist/assets/rpm.e046de56.js +0 -1
- package/dist/assets/rst.424d4d80.js +0 -1
- package/dist/assets/ruby.c0348dbc.js +0 -1
- package/dist/assets/runtime-core.esm-bundler.fe249c5c.js +0 -4
- package/dist/assets/rust.b8eab4c6.js +0 -1
- package/dist/assets/sas.171b5cec.js +0 -1
- package/dist/assets/sass.ef1df49e.js +0 -1
- package/dist/assets/scheme.96f6ce73.js +0 -1
- package/dist/assets/shell.4c172f18.js +0 -1
- package/dist/assets/show-hint.e95ab391.js +0 -1
- package/dist/assets/sieve.bdcdd5e1.js +0 -1
- package/dist/assets/slim.bab26569.js +0 -1
- package/dist/assets/smalltalk.0234383f.js +0 -1
- package/dist/assets/smarty.d8aca261.js +0 -1
- package/dist/assets/solr.d8e27de0.js +0 -1
- package/dist/assets/soy.06b4848e.js +0 -1
- package/dist/assets/sparql.ef7b1e37.js +0 -1
- package/dist/assets/spreadsheet.0d9dfaef.js +0 -1
- package/dist/assets/sql.85f5cd30.js +0 -1
- package/dist/assets/stex.38cc6e30.js +0 -1
- package/dist/assets/stylus.4d43a0f9.js +0 -1
- package/dist/assets/swift.e665f92b.js +0 -1
- package/dist/assets/tcl.4f846188.js +0 -1
- package/dist/assets/textile.eef6bf65.js +0 -1
- package/dist/assets/tiddlywiki.29dce321.js +0 -1
- package/dist/assets/tiki.a2f71a50.js +0 -1
- package/dist/assets/toml.64d737ee.js +0 -1
- package/dist/assets/tornado.5ebb7f6b.js +0 -1
- package/dist/assets/translations.074feb87.js +0 -1
- package/dist/assets/troff.e64b5292.js +0 -1
- package/dist/assets/ttcn-cfg.1b57714e.js +0 -1
- package/dist/assets/ttcn.3ddce744.js +0 -1
- package/dist/assets/turtle.0839041f.js +0 -1
- package/dist/assets/twig.99a62381.js +0 -1
- package/dist/assets/uk-UA.99a7a7a6.js +0 -1
- package/dist/assets/validation.cb080608.js +0 -1
- package/dist/assets/vb.9a802cc7.js +0 -1
- package/dist/assets/vbscript.c3cbffdb.js +0 -1
- package/dist/assets/velocity.a1b7e170.js +0 -1
- package/dist/assets/verilog.d98a6823.js +0 -1
- package/dist/assets/vhdl.6a93f1eb.js +0 -1
- package/dist/assets/vue-router.805cb517.entry.js +0 -5
- package/dist/assets/vue.c7dd8317.entry.js +0 -1
- package/dist/assets/vue.f82ff76a.js +0 -1
- package/dist/assets/vue.runtime.esm-bundler.eb605ed6.js +0 -1
- package/dist/assets/wast.2c3ec473.js +0 -1
- package/dist/assets/webidl.49c5abd3.js +0 -1
- package/dist/assets/xquery.a0c67ec5.js +0 -1
- package/dist/assets/yacas.d6cc38c0.js +0 -1
- package/dist/assets/yaml-frontmatter.f078c218.js +0 -1
- package/dist/assets/yaml.2ae1a5ef.js +0 -1
- package/dist/assets/z80.fc28354f.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as l,o as d,
|
|
1
|
+
import{a as l,o as d,e as r,y as t,u as e,z as o,q as n}from"./runtime-core.esm-bundler.22ec0346.js";const u={class:"markdown-body"},h=e("h2",{id:"scaffolding-your-directus-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#scaffolding-your-directus-extension"},"#"),n(" Scaffolding your Directus Extension")],-1),p=e("p",null,[n("The easiest way to start developing extensions is to use the "),e("code",null,"create-directus-extension"),n(" utility:")],-1),f=e("pre",null,[e("code",{class:"language-bash"},`npm init directus-extension
|
|
2
2
|
`)],-1),x=e("p",null,"After specifying the name of the extension, the type of the extension and the programming language you want to use, the utility will create a folder with the recommended file structure to create an extension.",-1),_=e("h3",{id:"extension-folder-structure",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#extension-folder-structure"},"#"),n(" Extension Folder Structure")],-1),g=e("p",null,[n("The folder created by the utility is in fact an npm package. It comes with a few pre-installed packages depending on the extension type and the language you chose. The most important one is "),e("code",null,"@directus/extensions-sdk"),n(". This package includes a CLI, which allows you to build your extension and to scaffold additional extensions, and it provides Typescript helpers and other utilities.")],-1),y=e("p",null,[n("Inside the created folder there is a "),e("code",null,"src/"),n(" folder. This folder contains the entrypoint of your extension. If you write additional source files, they should go into this folder.")],-1),m=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Entrypoint"),e("p",null,[n("The entrypoint is either called "),e("code",null,"index.js"),n(" or "),e("code",null,"index.ts"),n(", depending on which programming language you chose.")])],-1),b=e("p",null,[n("The generated "),e("code",null,"package.json"),n(" file contains an additional "),e("code",null,"directus:extension"),n(" field with the following sub-fields:")],-1),w=e("ul",null,[e("li",null,[e("code",null,"type"),n(" \u2014 The type of the extension")]),e("li",null,[e("code",null,"path"),n(" \u2014 The path to the built extension")]),e("li",null,[e("code",null,"source"),n(" \u2014 The path to the source entrypoint")]),e("li",null,[e("code",null,"host"),n(" \u2014 A semver string that indicates with which versions of the Directus host, the extension is compatible with")])],-1),k=e("p",null,"The CLI will use those fields by default to determine the input and output file paths and how the extension should be built.",-1),v=e("h2",{id:"building-your-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#building-your-extension"},"#"),n(" Building your Extension")],-1),T=e("p",null,[n("Before your extension can be used by Directus, it has to be built. If you used the "),e("code",null,"create-directus-extension"),n(" utility to scaffold your extension, building your extension is as easy as running:")],-1),j=e("pre",null,[e("code",{class:"language-bash"},`npm run build
|
|
3
3
|
`)],-1),E=e("p",null,[n("The generated "),e("code",null,"package.json"),n(" contains a script that calls the "),e("code",null,"directus-extension"),n(" CLI which is part of "),e("code",null,"@directus/extensions-sdk"),n(":")],-1),I=e("pre",null,[e("code",{class:"language-json"},[e("span",{class:"hljs-punctuation"},"{"),n(`
|
|
4
4
|
`),e("span",{class:"hljs-attr"},'"scripts"'),e("span",{class:"hljs-punctuation"},":"),n(),e("span",{class:"hljs-punctuation"},"{"),n(`
|
|
@@ -8,6 +8,6 @@ import{a as l,o as d,b as r,w as t,l as e,e as o,E as n}from"./runtime-core.esm-
|
|
|
8
8
|
`)])],-1),C=e("p",null,[n("If you prefer to scaffold your extension manually, you can use the "),e("code",null,"directus-extension"),n(" CLI binary directly. The "),e("code",null,"--help"),n(" flag provides useful information regarding the available options and flags.")],-1),L=e("p",null,"Internally, the CLI uses Rollup to bundle your extension to a single entrypoint.",-1),D=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"Watch"),e("p",null,[n("The CLI supports rebuilding extensions whenever a file has changed by using the "),e("code",null,"--watch"),n(" flag.")])],-1),A=e("h3",{id:"configuring-the-cli",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#configuring-the-cli"},"#"),n(" Configuring the CLI")],-1),S=e("p",null,[n("Most of the time, it should be sufficient to use the CLI as is. But, in some cases it might be necessary to customize it to your specific needs. This can be done by creating a "),e("code",null,"extension.config.js"),n(" file at the root of your extension package with the following content:")],-1),B=e("pre",null,[e("code",{class:"language-js"},[e("span",{class:"hljs-variable language_"},"module"),n("."),e("span",{class:"hljs-property"},"exports"),n(` = {
|
|
9
9
|
`),e("span",{class:"hljs-attr"},"plugins"),n(`: [],
|
|
10
10
|
};
|
|
11
|
-
`)])],-1),O=e("h4",{id:"supported-options",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#supported-options"},"#"),n(" Supported Options")],-1),P=e("ul",null,[e("li",null,[e("code",null,"plugins"),n(" \u2014 An array of Rollup plugins that will be used when building extensions in addition to the built-in ones.")])],-1),M=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"CommonJS or ESM"),e("p",null,[n("By using the "),e("code",null,"type"),n(" field inside your "),e("code",null,"package.json"),n(" file or using the appropriate file extension ("),e("code",null,".mjs"),n(" or "),e("code",null,".cjs"),n("), the config file can be loaded as a CommonJS or ESM file.")])],-1),N=e("h2",{id:"developing-your-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#developing-your-extension"},"#"),n(" Developing your Extension")],-1),R=e("p",null,"To learn more about developing extensions of a specific type, you can refer to one of the individual guides:",-1),V=e("h4",{id:"app-extensions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#app-extensions"},"#"),n(" App Extensions")],-1),
|
|
11
|
+
`)])],-1),O=e("h4",{id:"supported-options",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#supported-options"},"#"),n(" Supported Options")],-1),P=e("ul",null,[e("li",null,[e("code",null,"plugins"),n(" \u2014 An array of Rollup plugins that will be used when building extensions in addition to the built-in ones.")])],-1),M=e("div",{class:"tip hint"},[e("div",{class:"hint-title"},"CommonJS or ESM"),e("p",null,[n("By using the "),e("code",null,"type"),n(" field inside your "),e("code",null,"package.json"),n(" file or using the appropriate file extension ("),e("code",null,".mjs"),n(" or "),e("code",null,".cjs"),n("), the config file can be loaded as a CommonJS or ESM file.")])],-1),N=e("h2",{id:"developing-your-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#developing-your-extension"},"#"),n(" Developing your Extension")],-1),R=e("p",null,"To learn more about developing extensions of a specific type, you can refer to one of the individual guides:",-1),V=e("h4",{id:"app-extensions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#app-extensions"},"#"),n(" App Extensions")],-1),z=e("h4",{id:"api-extensions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#api-extensions"},"#"),n(" API Extensions")],-1),F=e("h4",{id:"hybrid-extensions",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#hybrid-extensions"},"#"),n(" Hybrid Extensions")],-1),H={class:"tip hint"},J=e("div",{class:"hint-title"},"Live Reloading",-1),W=e("code",null,"EXTENSIONS_AUTO_RELOAD",-1),q=e("h2",{id:"publishing-your-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#publishing-your-extension"},"#"),n(" Publishing your Extension")],-1),U=e("p",null,[n("To make an extension available to all Directus users, you can publish the npm package created by "),e("code",null,"@directus/extensions-sdk"),n(" to the npm registry. Make sure the name of the package follows the naming convention for package extensions: "),e("code",null,"directus-extension-<extension-name>"),n(" or "),e("code",null,"@<scope>/directus-extension-<extension-name>"),n(". "),e("code",null,"<extension-name>"),n(" has to be replaced with the name of your extension.")],-1),X=e("h2",{id:"installing-an-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#installing-an-extension"},"#"),n(" Installing an Extension")],-1),G=e("p",null,"There are two ways to install an extension.",-1),K=e("h3",{id:"package-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#package-extension"},"#"),n(" Package Extension")],-1),Q=e("p",null,"Package extensions are essentially npm packages. They can be installed from the npm registry, from a tarball, from a git repository or any other means supported by npm. On startup, Directus will automatically load any package extension installed into your Directus project folder.",-1),Y=e("p",null,"To install an extension from the npm registry, simply use the npm CLI:",-1),Z=e("pre",null,[e("code",{class:"language-bash"},[e("span",{class:"hljs-built_in"},"cd"),n(` <directus-project-folder>
|
|
12
12
|
npm install <full-package-extension-name>
|
|
13
|
-
`)])],-1),$=e("p",null,[e("code",null,"<project-folder>"),n(" has to be replaced by the Directus project folder. "),e("code",null,"<full-package-extension-name>"),n(" should be replaced with the full name of the package extension (e.g. "),e("code",null,"directus-extension-custom"),n(").")],-1),ee=e("h3",{id:"local-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#local-extension"},"#"),n(" Local Extension")],-1),ne=e("p",null,[n("Local extensions are essentially the files generated by the "),e("code",null,"directus-extension build"),n(" command. They can be installed by copying those files into a specific extensions folder.")],-1),te=e("p",null,[n("To install an extension locally, you have to move the output from the "),e("code",null,"dist/"),n(" folder into your project\u2019s "),e("code",null,"./extensions/<extension-folder>/<extension-name>/"),n(" folder. "),e("code",null,"<extension-folder>"),n(" has to be replaced by the extension type in plural form (e.g. interfaces). "),e("code",null,"<extension-name>"),n(" should be replaced with the name of your extension.")],-1),se=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Configurable Folders"),e("p",null,"The path to the built extension as well as the extensions directory are configurable and may be located elsewhere.")],-1),ce="Creating Extensions",de=!1,re="A guide on how to scaffold your Directus Extension.",ue="5 min read",he={__name:"creating-extensions",setup(oe,{expose:a}){const i={title:"Creating Extensions",modularExtension:!1,description:"A guide on how to scaffold your Directus Extension.",readTime:"5 min read"};return a({frontmatter:i}),(ie,le)=>{const s=l("router-link"),c=l("docs-wrapper");return d(),r(c,{frontmatter:i},{default:t(()=>[e("div",u,[h,p,f,x,_,g,y,m,b,w,k,v,T,j,E,I,C,L,D,A,S,B,O,P,M,N,R,V,e("ul",null,[e("li",null,[o(s,{to:"/docs/extensions/interfaces"},{default:t(()=>[n("Interfaces")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/displays"},{default:t(()=>[n("Displays")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/layouts"},{default:t(()=>[n("Layouts")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/modules"},{default:t(()=>[n("Modules")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/panels"},{default:t(()=>[n("Panels")]),_:1})])]),
|
|
13
|
+
`)])],-1),$=e("p",null,[e("code",null,"<project-folder>"),n(" has to be replaced by the Directus project folder. "),e("code",null,"<full-package-extension-name>"),n(" should be replaced with the full name of the package extension (e.g. "),e("code",null,"directus-extension-custom"),n(").")],-1),ee=e("h3",{id:"local-extension",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#local-extension"},"#"),n(" Local Extension")],-1),ne=e("p",null,[n("Local extensions are essentially the files generated by the "),e("code",null,"directus-extension build"),n(" command. They can be installed by copying those files into a specific extensions folder.")],-1),te=e("p",null,[n("To install an extension locally, you have to move the output from the "),e("code",null,"dist/"),n(" folder into your project\u2019s "),e("code",null,"./extensions/<extension-folder>/<extension-name>/"),n(" folder. "),e("code",null,"<extension-folder>"),n(" has to be replaced by the extension type in plural form (e.g. interfaces). "),e("code",null,"<extension-name>"),n(" should be replaced with the name of your extension.")],-1),se=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Configurable Folders"),e("p",null,"The path to the built extension as well as the extensions directory are configurable and may be located elsewhere.")],-1),ce="Creating Extensions",de=!1,re="A guide on how to scaffold your Directus Extension.",ue="5 min read",he={__name:"creating-extensions",setup(oe,{expose:a}){const i={title:"Creating Extensions",modularExtension:!1,description:"A guide on how to scaffold your Directus Extension.",readTime:"5 min read"};return a({frontmatter:i}),(ie,le)=>{const s=l("router-link"),c=l("docs-wrapper");return d(),r(c,{frontmatter:i},{default:t(()=>[e("div",u,[h,p,f,x,_,g,y,m,b,w,k,v,T,j,E,I,C,L,D,A,S,B,O,P,M,N,R,V,e("ul",null,[e("li",null,[o(s,{to:"/docs/extensions/interfaces"},{default:t(()=>[n("Interfaces")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/displays"},{default:t(()=>[n("Displays")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/layouts"},{default:t(()=>[n("Layouts")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/modules"},{default:t(()=>[n("Modules")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/panels"},{default:t(()=>[n("Panels")]),_:1})])]),z,e("ul",null,[e("li",null,[o(s,{to:"/docs/extensions/hooks"},{default:t(()=>[n("Hooks")]),_:1})]),e("li",null,[o(s,{to:"/docs/extensions/endpoints"},{default:t(()=>[n("Endpoints")]),_:1})])]),F,e("ul",null,[e("li",null,[o(s,{to:"/docs/extensions/operations"},{default:t(()=>[n("Operations")]),_:1})])]),e("div",H,[J,e("p",null,[n("When working on extensions, try setting the "),o(s,{to:"/docs/self-hosted/config-options"},{default:t(()=>[W,n(" environment variable")]),_:1}),n(". This will make the API reload extensions on changes automatically.")])]),q,U,X,G,K,Q,Y,Z,$,ee,ne,te,se])]),_:1})}}};export{he as default,re as description,de as modularExtension,ue as readTime,ce as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as L}from"./index.312f2c91.entry.js";function q(v,y){for(var c=0;c<y.length;c++){const l=y[c];if(typeof l!="string"&&!Array.isArray(l)){for(const i in l)if(i!=="default"&&!(i in v)){const f=Object.getOwnPropertyDescriptor(l,i);f&&Object.defineProperty(v,i,f.get?f:{enumerable:!0,get:()=>l[i]})}}}return Object.freeze(Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}))}var A={exports:{}};(function(v,y){(function(c){c(L.exports)})(function(c){c.defineMode("crystal",function(l){function i(n,e){return new RegExp((e?"":"^")+"(?:"+n.join("|")+")"+(e?"$":"\\b"))}function f(n,e,r){return r.tokenize.push(n),n(e,r)}var _=/^(?:[-+/%|&^]|\*\*?|[<>]{2})/,z=/^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/,g=/^(?:\[\][?=]?)/,O=/^(?:\.(?:\.{2})?|->|[?:])/,h=/^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/,F=/^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/,T=i(["abstract","alias","as","asm","begin","break","case","class","def","do","else","elsif","end","ensure","enum","extend","for","fun","if","include","instance_sizeof","lib","macro","module","next","of","out","pointerof","private","protected","rescue","return","require","select","sizeof","struct","super","then","type","typeof","uninitialized","union","unless","until","when","while","with","yield","__DIR__","__END_LINE__","__FILE__","__LINE__"]),P=i(["true","false","nil","self"]),j=["def","fun","macro","class","module","struct","lib","enum","union","do","for"],K=i(j),D=["if","unless","case","while","until","begin","then"],M=i(D),b=["end","else","elsif","rescue","ensure"],N=i(b),I=["\\)","\\}","\\]"],Z=new RegExp("^(?:"+I.join("|")+")$"),S={def:E,fun:E,macro:$,class:p,module:p,struct:p,lib:p,enum:p,union:p},w={"[":"]","{":"}","(":")","<":">"};function s(n,e){if(n.eatSpace())return null;if(e.lastToken!="\\"&&n.match("{%",!1))return f(a("%","%"),n,e);if(e.lastToken!="\\"&&n.match("{{",!1))return f(a("{","}"),n,e);if(n.peek()=="#")return n.skipToEnd(),"comment";var r;if(n.match(h))return n.eat(/[?!]/),r=n.current(),n.eat(":")?"atom":e.lastToken=="."?"property":T.test(r)?(K.test(r)?!(r=="fun"&&e.blocks.indexOf("lib")>=0)&&!(r=="def"&&e.lastToken=="abstract")&&(e.blocks.push(r),e.currentIndent+=1):(e.lastStyle=="operator"||!e.lastStyle)&&M.test(r)?(e.blocks.push(r),e.currentIndent+=1):r=="end"&&(e.blocks.pop(),e.currentIndent-=1),S.hasOwnProperty(r)&&e.tokenize.push(S[r]),"keyword"):P.test(r)?"atom":"variable";if(n.eat("@"))return n.peek()=="["?f(d("[","]","meta"),n,e):(n.eat("@"),n.match(h)||n.match(F),"variable-2");if(n.match(F))return"tag";if(n.eat(":"))return n.eat('"')?f(x('"',"atom",!1),n,e):n.match(h)||n.match(F)||n.match(_)||n.match(z)||n.match(g)?"atom":(n.eat(":"),"operator");if(n.eat('"'))return f(x('"',"string",!0),n,e);if(n.peek()=="%"){var u="string",t=!0,o;if(n.match("%r"))u="string-2",o=n.next();else if(n.match("%w"))t=!1,o=n.next();else if(n.match("%q"))t=!1,o=n.next();else if(o=n.match(/^%([^\w\s=])/))o=o[1];else{if(n.match(/^%[a-zA-Z_\u009F-\uFFFF][\w\u009F-\uFFFF]*/))return"meta";if(n.eat("%"))return"operator"}return w.hasOwnProperty(o)&&(o=w[o]),f(x(o,u,t),n,e)}return(r=n.match(/^<<-('?)([A-Z]\w*)\1/))?f(R(r[2],!r[1]),n,e):n.eat("'")?(n.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/),n.eat("'"),"atom"):n.eat("0")?(n.eat("x")?n.match(/^[0-9a-fA-F_]+/):n.eat("o")?n.match(/^[0-7_]+/):n.eat("b")&&n.match(/^[01_]+/),"number"):n.eat(/^\d/)?(n.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+-]?\d+)?/),"number"):n.match(_)?(n.eat("="),"operator"):n.match(z)||n.match(O)?"operator":(r=n.match(/[({[]/,!1))?(r=r[0],f(d(r,w[r],null),n,e)):n.eat("\\")?(n.next(),"meta"):(n.next(),null)}function d(n,e,r,u){return function(t,o){if(!u&&t.match(n))return o.tokenize[o.tokenize.length-1]=d(n,e,r,!0),o.currentIndent+=1,r;var k=s(t,o);return t.current()===e&&(o.tokenize.pop(),o.currentIndent-=1,k=r),k}}function a(n,e,r){return function(u,t){return!r&&u.match("{"+n)?(t.currentIndent+=1,t.tokenize[t.tokenize.length-1]=a(n,e,!0),"meta"):u.match(e+"}")?(t.currentIndent-=1,t.tokenize.pop(),"meta"):s(u,t)}}function $(n,e){if(n.eatSpace())return null;var r;if(r=n.match(h)){if(r=="def")return"keyword";n.eat(/[?!]/)}return e.tokenize.pop(),"def"}function E(n,e){return n.eatSpace()?null:(n.match(h)?n.eat(/[!?]/):n.match(_)||n.match(z)||n.match(g),e.tokenize.pop(),"def")}function p(n,e){return n.eatSpace()?null:(n.match(F),e.tokenize.pop(),"def")}function x(n,e,r){return function(u,t){for(var o=!1;u.peek();)if(o)u.next(),o=!1;else{if(u.match("{%",!1))return t.tokenize.push(a("%","%")),e;if(u.match("{{",!1))return t.tokenize.push(a("{","}")),e;if(r&&u.match("#{",!1))return t.tokenize.push(d("#{","}","meta")),e;var k=u.next();if(k==n)return t.tokenize.pop(),e;o=r&&k=="\\"}return e}}function R(n,e){return function(r,u){if(r.sol()&&(r.eatSpace(),r.match(n)))return u.tokenize.pop(),"string";for(var t=!1;r.peek();)if(t)r.next(),t=!1;else{if(r.match("{%",!1))return u.tokenize.push(a("%","%")),"string";if(r.match("{{",!1))return u.tokenize.push(a("{","}")),"string";if(e&&r.match("#{",!1))return u.tokenize.push(d("#{","}","meta")),"string";t=e&&r.next()=="\\"}return"string"}}return{startState:function(){return{tokenize:[s],currentIndent:0,lastToken:null,lastStyle:null,blocks:[]}},token:function(n,e){var r=e.tokenize[e.tokenize.length-1](n,e),u=n.current();return r&&r!="comment"&&(e.lastToken=u,e.lastStyle=r),r},indent:function(n,e){return e=e.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g,""),N.test(e)||Z.test(e)?l.indentUnit*(n.currentIndent-1):l.indentUnit*n.currentIndent},fold:"indent",electricInput:i(I.concat(b),!0),lineComment:"#"}}),c.defineMIME("text/x-crystal","crystal")})})();const U=A.exports,H=q({__proto__:null,default:U},[A.exports]);export{H as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as ce}from"./index.312f2c91.entry.js";function ue(x,O){for(var u=0;u<O.length;u++){const c=O[u];if(typeof c!="string"&&!Array.isArray(c)){for(const b in c)if(b!=="default"&&!(b in x)){const k=Object.getOwnPropertyDescriptor(c,b);k&&Object.defineProperty(x,b,k.get?k:{enumerable:!0,get:()=>c[b]})}}}return Object.freeze(Object.defineProperty(x,Symbol.toStringTag,{value:"Module"}))}var G={exports:{}};(function(x,O){(function(u){u(ce.exports)})(function(u){u.defineMode("css",function(o,i){var f=i.inline;i.propertyKeywords||(i=u.resolveMode("text/css"));var w=o.indentUnit,L=i.tokenHooks,ee=i.documentTypes||{},re=i.mediaTypes||{},te=i.mediaFeatures||{},oe=i.mediaValueKeywords||{},N=i.propertyKeywords||{},M=i.nonStandardPropertyKeywords||{},ie=i.fontProperties||{},ne=i.counterDescriptors||{},C=i.colorKeywords||{},I=i.valueKeywords||{},y=i.allowNested,ae=i.lineComment,le=i.supportsAtComponent===!0,X=o.highlightNonStandardPropertyKeywords!==!1,B,n;function d(e,t){return B=t,e}function se(e,t){var r=e.next();if(L[r]){var a=L[r](e,t);if(a!==!1)return a}if(r=="@")return e.eatWhile(/[\w\\\-]/),d("def",e.current());if(r=="="||(r=="~"||r=="|")&&e.eat("="))return d(null,"compare");if(r=='"'||r=="'")return t.tokenize=Y(r),t.tokenize(e,t);if(r=="#")return e.eatWhile(/[\w\\\-]/),d("atom","hash");if(r=="!")return e.match(/^\s*\w*/),d("keyword","important");if(/\d/.test(r)||r=="."&&e.eat(/\d/))return e.eatWhile(/[\w.%]/),d("number","unit");if(r==="-"){if(/[\d.]/.test(e.peek()))return e.eatWhile(/[\w.%]/),d("number","unit");if(e.match(/^-[\w\\\-]*/))return e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?d("variable-2","variable-definition"):d("variable-2","variable");if(e.match(/^\w+-/))return d("meta","meta")}else return/[,+>*\/]/.test(r)?d(null,"select-op"):r=="."&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?d("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(r)?d(null,r):e.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(e.current())&&(t.tokenize=de),d("variable callee","variable")):/[\w\\\-]/.test(r)?(e.eatWhile(/[\w\\\-]/),d("property","word")):d(null,null)}function Y(e){return function(t,r){for(var a=!1,p;(p=t.next())!=null;){if(p==e&&!a){e==")"&&t.backUp(1);break}a=!a&&p=="\\"}return(p==e||!a&&e!=")")&&(r.tokenize=null),d("string","string")}}function de(e,t){return e.next(),e.match(/^\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=Y(")"),d(null,"(")}function U(e,t,r){this.type=e,this.indent=t,this.prev=r}function s(e,t,r,a){return e.context=new U(r,t.indentation()+(a===!1?0:w),e.context),r}function m(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function v(e,t,r){return l[r.context.type](e,t,r)}function g(e,t,r,a){for(var p=a||1;p>0;p--)r.context=r.context.prev;return v(e,t,r)}function Z(e){var t=e.current().toLowerCase();I.hasOwnProperty(t)?n="atom":C.hasOwnProperty(t)?n="keyword":n="variable"}var l={};return l.top=function(e,t,r){if(e=="{")return s(r,t,"block");if(e=="}"&&r.context.prev)return m(r);if(le&&/@component/i.test(e))return s(r,t,"atComponentBlock");if(/^@(-moz-)?document$/i.test(e))return s(r,t,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return s(r,t,"atBlock");if(/^@(font-face|counter-style)/i.test(e))return r.stateArg=e,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return"keyframes";if(e&&e.charAt(0)=="@")return s(r,t,"at");if(e=="hash")n="builtin";else if(e=="word")n="tag";else{if(e=="variable-definition")return"maybeprop";if(e=="interpolation")return s(r,t,"interpolation");if(e==":")return"pseudo";if(y&&e=="(")return s(r,t,"parens")}return r.context.type},l.block=function(e,t,r){if(e=="word"){var a=t.current().toLowerCase();return N.hasOwnProperty(a)?(n="property","maybeprop"):M.hasOwnProperty(a)?(n=X?"string-2":"property","maybeprop"):y?(n=t.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(n+=" error","maybeprop")}else return e=="meta"?"block":!y&&(e=="hash"||e=="qualifier")?(n="error","block"):l.top(e,t,r)},l.maybeprop=function(e,t,r){return e==":"?s(r,t,"prop"):v(e,t,r)},l.prop=function(e,t,r){if(e==";")return m(r);if(e=="{"&&y)return s(r,t,"propBlock");if(e=="}"||e=="{")return g(e,t,r);if(e=="(")return s(r,t,"parens");if(e=="hash"&&!/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current()))n+=" error";else if(e=="word")Z(t);else if(e=="interpolation")return s(r,t,"interpolation");return"prop"},l.propBlock=function(e,t,r){return e=="}"?m(r):e=="word"?(n="property","maybeprop"):r.context.type},l.parens=function(e,t,r){return e=="{"||e=="}"?g(e,t,r):e==")"?m(r):e=="("?s(r,t,"parens"):e=="interpolation"?s(r,t,"interpolation"):(e=="word"&&Z(t),"parens")},l.pseudo=function(e,t,r){return e=="meta"?"pseudo":e=="word"?(n="variable-3",r.context.type):v(e,t,r)},l.documentTypes=function(e,t,r){return e=="word"&&ee.hasOwnProperty(t.current())?(n="tag",r.context.type):l.atBlock(e,t,r)},l.atBlock=function(e,t,r){if(e=="(")return s(r,t,"atBlock_parens");if(e=="}"||e==";")return g(e,t,r);if(e=="{")return m(r)&&s(r,t,y?"block":"top");if(e=="interpolation")return s(r,t,"interpolation");if(e=="word"){var a=t.current().toLowerCase();a=="only"||a=="not"||a=="and"||a=="or"?n="keyword":re.hasOwnProperty(a)?n="attribute":te.hasOwnProperty(a)?n="property":oe.hasOwnProperty(a)?n="keyword":N.hasOwnProperty(a)?n="property":M.hasOwnProperty(a)?n=X?"string-2":"property":I.hasOwnProperty(a)?n="atom":C.hasOwnProperty(a)?n="keyword":n="error"}return r.context.type},l.atComponentBlock=function(e,t,r){return e=="}"?g(e,t,r):e=="{"?m(r)&&s(r,t,y?"block":"top",!1):(e=="word"&&(n="error"),r.context.type)},l.atBlock_parens=function(e,t,r){return e==")"?m(r):e=="{"||e=="}"?g(e,t,r,2):l.atBlock(e,t,r)},l.restricted_atBlock_before=function(e,t,r){return e=="{"?s(r,t,"restricted_atBlock"):e=="word"&&r.stateArg=="@counter-style"?(n="variable","restricted_atBlock_before"):v(e,t,r)},l.restricted_atBlock=function(e,t,r){return e=="}"?(r.stateArg=null,m(r)):e=="word"?(r.stateArg=="@font-face"&&!ie.hasOwnProperty(t.current().toLowerCase())||r.stateArg=="@counter-style"&&!ne.hasOwnProperty(t.current().toLowerCase())?n="error":n="property","maybeprop"):"restricted_atBlock"},l.keyframes=function(e,t,r){return e=="word"?(n="variable","keyframes"):e=="{"?s(r,t,"top"):v(e,t,r)},l.at=function(e,t,r){return e==";"?m(r):e=="{"||e=="}"?g(e,t,r):(e=="word"?n="tag":e=="hash"&&(n="builtin"),"at")},l.interpolation=function(e,t,r){return e=="}"?m(r):e=="{"||e==";"?g(e,t,r):(e=="word"?n="variable":e!="variable"&&e!="("&&e!=")"&&(n="error"),"interpolation")},{startState:function(e){return{tokenize:null,state:f?"block":"top",stateArg:null,context:new U(f?"block":"top",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var r=(t.tokenize||se)(e,t);return r&&typeof r=="object"&&(B=r[1],r=r[0]),n=r,B!="comment"&&(t.state=l[t.state](B,e,t)),n},indent:function(e,t){var r=e.context,a=t&&t.charAt(0),p=r.indent;return r.type=="prop"&&(a=="}"||a==")")&&(r=r.prev),r.prev&&(a=="}"&&(r.type=="block"||r.type=="top"||r.type=="interpolation"||r.type=="restricted_atBlock")?(r=r.prev,p=r.indent):(a==")"&&(r.type=="parens"||r.type=="atBlock_parens")||a=="{"&&(r.type=="at"||r.type=="atBlock"))&&(p=Math.max(0,r.indent-w))),p},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:ae,fold:"brace"}});function c(o){for(var i={},f=0;f<o.length;++f)i[o[f].toLowerCase()]=!0;return i}var b=["domain","regexp","url","url-prefix"],k=c(b),A=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],z=c(A),F=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover","prefers-color-scheme","dynamic-range","video-dynamic-range"],K=c(F),W=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive","dark","light","standard","high"],S=c(W),$=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","all","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","binding","bleed","block-size","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-content","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-height-step","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotate","rotation","rotation-point","row-gap","ruby-align","ruby-overhang","ruby-position","ruby-span","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-type","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-orientation","text-outline","text-overflow","text-rendering","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","touch-action","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","paint-order","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],P=c($),E=["accent-color","aspect-ratio","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","content-visibility","margin-block","margin-block-end","margin-block-start","margin-inline","margin-inline-end","margin-inline-start","overflow-anchor","overscroll-behavior","padding-block","padding-block-end","padding-block-start","padding-inline","padding-inline-end","padding-inline-start","scroll-snap-stop","scrollbar-3d-light-color","scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-track-color","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","shape-inside","zoom"],_=c(E),J=["font-display","font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],j=c(J),Q=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],V=c(Q),D=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],q=c(D),H=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","blur","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","brightness","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","contrast","copy","counter","counters","cover","crop","cross","crosshair","cubic-bezier","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","drop-shadow","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","grayscale","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","hue-rotate","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","manipulation","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiple_mask_images","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturate","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","sepia","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],T=c(H),R=b.concat(A).concat(F).concat(W).concat($).concat(E).concat(D).concat(H);u.registerHelper("hintWords","css",R);function h(o,i){for(var f=!1,w;(w=o.next())!=null;){if(f&&w=="/"){i.tokenize=null;break}f=w=="*"}return["comment","comment"]}u.defineMIME("text/css",{documentTypes:k,mediaTypes:z,mediaFeatures:K,mediaValueKeywords:S,propertyKeywords:P,nonStandardPropertyKeywords:_,fontProperties:j,counterDescriptors:V,colorKeywords:q,valueKeywords:T,tokenHooks:{"/":function(o,i){return o.eat("*")?(i.tokenize=h,h(o,i)):!1}},name:"css"}),u.defineMIME("text/x-scss",{mediaTypes:z,mediaFeatures:K,mediaValueKeywords:S,propertyKeywords:P,nonStandardPropertyKeywords:_,colorKeywords:q,valueKeywords:T,fontProperties:j,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(o,i){return o.eat("/")?(o.skipToEnd(),["comment","comment"]):o.eat("*")?(i.tokenize=h,h(o,i)):["operator","operator"]},":":function(o){return o.match(/^\s*\{/,!1)?[null,null]:!1},$:function(o){return o.match(/^[\w-]+/),o.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(o){return o.eat("{")?[null,"interpolation"]:!1}},name:"css",helperType:"scss"}),u.defineMIME("text/x-less",{mediaTypes:z,mediaFeatures:K,mediaValueKeywords:S,propertyKeywords:P,nonStandardPropertyKeywords:_,colorKeywords:q,valueKeywords:T,fontProperties:j,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(o,i){return o.eat("/")?(o.skipToEnd(),["comment","comment"]):o.eat("*")?(i.tokenize=h,h(o,i)):["operator","operator"]},"@":function(o){return o.eat("{")?[null,"interpolation"]:o.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)?!1:(o.eatWhile(/[\w\\\-]/),o.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),u.defineMIME("text/x-gss",{documentTypes:k,mediaTypes:z,mediaFeatures:K,propertyKeywords:P,nonStandardPropertyKeywords:_,fontProperties:j,counterDescriptors:V,colorKeywords:q,valueKeywords:T,supportsAtComponent:!0,tokenHooks:{"/":function(o,i){return o.eat("*")?(i.tokenize=h,h(o,i)):!1}},name:"css",helperType:"gss"})})})();const pe=G.exports,fe=ue({__proto__:null,default:pe},[G.exports]);export{G as a,fe as c};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{y as w}from"./index.312f2c91.entry.js";function k(u,d){for(var c=0;c<d.length;c++){const l=d[c];if(typeof l!="string"&&!Array.isArray(l)){for(const r in l)if(r!=="default"&&!(r in u)){const i=Object.getOwnPropertyDescriptor(l,r);i&&Object.defineProperty(u,r,i.get?i:{enumerable:!0,get:()=>l[r]})}}}return Object.freeze(Object.defineProperty(u,Symbol.toStringTag,{value:"Module"}))}var x={exports:{}};(function(u,d){(function(c){c(w.exports)})(function(c){var l=function(r){return new RegExp("^(?:"+r.join("|")+")$","i")};c.defineMode("cypher",function(r){var i=function(n){var e=n.next();if(e==='"')return n.match(/^[^"]*"/),"string";if(e==="'")return n.match(/^[^']*'/),"string";if(/[{}\(\),\.;\[\]]/.test(e))return s=e,"node";if(e==="/"&&n.eat("/"))return n.skipToEnd(),"comment";if(f.test(e))return n.eatWhile(f),null;if(n.eatWhile(/[_\w\d]/),n.eat(":"))return n.eatWhile(/[\w\d_\-]/),"atom";var t=n.current();return y.test(t)?"builtin":v.test(t)?"def":m.test(t)||b.test(t)?"keyword":"variable"},a=function(n,e,t){return n.context={prev:n.context,indent:n.indent,col:t,type:e}},p=function(n){return n.indent=n.context.indent,n.context=n.context.prev},g=r.indentUnit,s,y=l(["abs","acos","allShortestPaths","asin","atan","atan2","avg","ceil","coalesce","collect","cos","cot","count","degrees","e","endnode","exp","extract","filter","floor","haversin","head","id","keys","labels","last","left","length","log","log10","lower","ltrim","max","min","node","nodes","percentileCont","percentileDisc","pi","radians","rand","range","reduce","rel","relationship","relationships","replace","reverse","right","round","rtrim","shortestPath","sign","sin","size","split","sqrt","startnode","stdev","stdevp","str","substring","sum","tail","tan","timestamp","toFloat","toInt","toString","trim","type","upper"]),v=l(["all","and","any","contains","exists","has","in","none","not","or","single","xor"]),m=l(["as","asc","ascending","assert","by","case","commit","constraint","create","csv","cypher","delete","desc","descending","detach","distinct","drop","else","end","ends","explain","false","fieldterminator","foreach","from","headers","in","index","is","join","limit","load","match","merge","null","on","optional","order","periodic","profile","remove","return","scan","set","skip","start","starts","then","true","union","unique","unwind","using","when","where","with","call","yield"]),b=l(["access","active","assign","all","alter","as","catalog","change","copy","create","constraint","constraints","current","database","databases","dbms","default","deny","drop","element","elements","exists","from","grant","graph","graphs","if","index","indexes","label","labels","management","match","name","names","new","node","nodes","not","of","on","or","password","populated","privileges","property","read","relationship","relationships","remove","replace","required","revoke","role","roles","set","show","start","status","stop","suspended","to","traverse","type","types","user","users","with","write"]),f=/[*+\-<>=&|~%^]/;return{startState:function(){return{tokenize:i,context:null,indent:0,col:0}},token:function(n,e){if(n.sol()&&(e.context&&e.context.align==null&&(e.context.align=!1),e.indent=n.indentation()),n.eatSpace())return null;var t=e.tokenize(n,e);if(t!=="comment"&&e.context&&e.context.align==null&&e.context.type!=="pattern"&&(e.context.align=!0),s==="(")a(e,")",n.column());else if(s==="[")a(e,"]",n.column());else if(s==="{")a(e,"}",n.column());else if(/[\]\}\)]/.test(s)){for(;e.context&&e.context.type==="pattern";)p(e);e.context&&s===e.context.type&&p(e)}else s==="."&&e.context&&e.context.type==="pattern"?p(e):/atom|string|variable/.test(t)&&e.context&&(/[\}\]]/.test(e.context.type)?a(e,"pattern",n.column()):e.context.type==="pattern"&&!e.context.align&&(e.context.align=!0,e.context.col=n.column()));return t},indent:function(n,e){var t=e&&e.charAt(0),o=n.context;if(/[\]\}]/.test(t))for(;o&&o.type==="pattern";)o=o.prev;var h=o&&t===o.type;return o?o.type==="keywords"?c.commands.newlineAndIndent:o.align?o.col+(h?0:1):o.indent+(h?0:g):0}}}),c.modeExtensions.cypher={autoFormatLineBreaks:function(r){for(var i,a,p,a=r.split(`
|
|
2
|
+
`),p=/\s+\b(return|where|order by|match|with|skip|limit|create|delete|set)\b\s/g,i=0;i<a.length;i++)a[i]=a[i].replace(p,`
|
|
3
|
+
$1 `).trim();return a.join(`
|
|
4
|
+
`)}},c.defineMIME("application/x-cypher-query","cypher")})})();const P=x.exports,_=k({__proto__:null,default:P},[x.exports]);export{_ as c};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as C}from"./index.312f2c91.entry.js";function P(m,h){for(var c=0;c<h.length;c++){const u=h[c];if(typeof u!="string"&&!Array.isArray(u)){for(const a in u)if(a!=="default"&&!(a in m)){const f=Object.getOwnPropertyDescriptor(u,a);f&&Object.defineProperty(m,a,f.get?f:{enumerable:!0,get:()=>u[a]})}}}return Object.freeze(Object.defineProperty(m,Symbol.toStringTag,{value:"Module"}))}var E={exports:{}};(function(m,h){(function(c){c(C.exports)})(function(c){c.defineMode("d",function(f,l){var d=f.indentUnit,s=l.statementIndentUnit||d,I=l.keywords||{},O=l.builtin||{},b=l.blockKeywords||{},S=l.atoms||{},k=l.hooks||{},L=l.multiLineStrings,x=/[+\-*&%=<>!?|\/]/,i;function v(e,n){var t=e.next();if(k[t]){var r=k[t](e,n);if(r!==!1)return r}if(t=='"'||t=="'"||t=="`")return n.tokenize=j(t),n.tokenize(e,n);if(/[\[\]{}\(\),;\:\.]/.test(t))return i=t,null;if(/\d/.test(t))return e.eatWhile(/[\w\.]/),"number";if(t=="/"){if(e.eat("+"))return n.tokenize=_,_(e,n);if(e.eat("*"))return n.tokenize=w,w(e,n);if(e.eat("/"))return e.skipToEnd(),"comment"}if(x.test(t))return e.eatWhile(x),"operator";e.eatWhile(/[\w\$_\xa1-\uffff]/);var o=e.current();return I.propertyIsEnumerable(o)?(b.propertyIsEnumerable(o)&&(i="newstatement"),"keyword"):O.propertyIsEnumerable(o)?(b.propertyIsEnumerable(o)&&(i="newstatement"),"builtin"):S.propertyIsEnumerable(o)?"atom":"variable"}function j(e){return function(n,t){for(var r=!1,o,z=!1;(o=n.next())!=null;){if(o==e&&!r){z=!0;break}r=!r&&o=="\\"}return(z||!(r||L))&&(t.tokenize=null),"string"}}function w(e,n){for(var t=!1,r;r=e.next();){if(r=="/"&&t){n.tokenize=null;break}t=r=="*"}return"comment"}function _(e,n){for(var t=!1,r;r=e.next();){if(r=="/"&&t){n.tokenize=null;break}t=r=="+"}return"comment"}function g(e,n,t,r,o){this.indented=e,this.column=n,this.type=t,this.align=r,this.prev=o}function y(e,n,t){var r=e.indented;return e.context&&e.context.type=="statement"&&(r=e.context.indented),e.context=new g(r,n,t,null,e.context)}function p(e){var n=e.context.type;return(n==")"||n=="]"||n=="}")&&(e.indented=e.context.indented),e.context=e.context.prev}return{startState:function(e){return{tokenize:null,context:new g((e||0)-d,0,"top",!1),indented:0,startOfLine:!0}},token:function(e,n){var t=n.context;if(e.sol()&&(t.align==null&&(t.align=!1),n.indented=e.indentation(),n.startOfLine=!0),e.eatSpace())return null;i=null;var r=(n.tokenize||v)(e,n);if(r=="comment"||r=="meta")return r;if(t.align==null&&(t.align=!0),(i==";"||i==":"||i==",")&&t.type=="statement")p(n);else if(i=="{")y(n,e.column(),"}");else if(i=="[")y(n,e.column(),"]");else if(i=="(")y(n,e.column(),")");else if(i=="}"){for(;t.type=="statement";)t=p(n);for(t.type=="}"&&(t=p(n));t.type=="statement";)t=p(n)}else i==t.type?p(n):((t.type=="}"||t.type=="top")&&i!=";"||t.type=="statement"&&i=="newstatement")&&y(n,e.column(),"statement");return n.startOfLine=!1,r},indent:function(e,n){if(e.tokenize!=v&&e.tokenize!=null)return c.Pass;var t=e.context,r=n&&n.charAt(0);t.type=="statement"&&r=="}"&&(t=t.prev);var o=r==t.type;return t.type=="statement"?t.indented+(r=="{"?0:s):t.align?t.column+(o?0:1):t.indented+(o?0:d)},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}});function u(f){for(var l={},d=f.split(" "),s=0;s<d.length;++s)l[d[s]]=!0;return l}var a="body catch class do else enum for foreach foreach_reverse if in interface mixin out scope struct switch try union unittest version while with";c.defineMIME("text/x-d",{name:"d",keywords:u("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue debug default delegate delete deprecated export extern final finally function goto immutable import inout invariant is lazy macro module new nothrow override package pragma private protected public pure ref return shared short static super synchronized template this throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters "+a),blockKeywords:u(a),builtin:u("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte ucent uint ulong ushort wchar wstring void size_t sizediff_t"),atoms:u("exit failure success true false null"),hooks:{"@":function(f,l){return f.eatWhile(/[\w\$_]/),"meta"}}})})})();const K=E.exports,W=P({__proto__:null,default:K},[E.exports]);export{W as d};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as $}from"./index.312f2c91.entry.js";import{a as I}from"./clike.8df07672.js";function j(c,k){for(var r=0;r<k.length;r++){const i=k[r];if(typeof i!="string"&&!Array.isArray(i)){for(const l in i)if(l!=="default"&&!(l in c)){const a=Object.getOwnPropertyDescriptor(i,l);a&&Object.defineProperty(c,l,a.get?a:{enumerable:!0,get:()=>i[l]})}}}return Object.freeze(Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}))}var w={exports:{}};(function(c,k){(function(r){r($.exports,I.exports)})(function(r){var i="this super static final const abstract class extends external factory implements mixin get native set typedef with enum throw rethrow assert break case continue default in return new deferred async await covariant try catch finally do else for if switch while import library export part of show hide is as extension on yield late required".split(" "),l="try catch finally do else for if switch while".split(" "),a="true false null".split(" "),v="void bool num int double dynamic var String Null Never".split(" ");function u(e){for(var n={},t=0;t<e.length;++t)n[e[t]]=!0;return n}function x(e){(e.interpolationStack||(e.interpolationStack=[])).push(e.tokenize)}function y(e){return(e.interpolationStack||(e.interpolationStack=[])).pop()}function S(e){return e.interpolationStack?e.interpolationStack.length:0}r.defineMIME("application/dart",{name:"clike",keywords:u(i),blockKeywords:u(l),builtin:u(v),atoms:u(a),hooks:{"@":function(e){return e.eatWhile(/[\w\$_\.]/),"meta"},"'":function(e,n){return s("'",e,n,!1)},'"':function(e,n){return s('"',e,n,!1)},r:function(e,n){var t=e.peek();return t=="'"||t=='"'?s(e.next(),e,n,!0):!1},"}":function(e,n){return S(n)>0?(n.tokenize=y(n),null):!1},"/":function(e,n){return e.eat("*")?(n.tokenize=d(1),n.tokenize(e,n)):!1},token:function(e,n,t){if(t=="variable"){var o=RegExp("^[_$]*[A-Z][a-zA-Z0-9_$]*$","g");if(o.test(e.current()))return"variable-2"}}}});function s(e,n,t,o){var b=!1;if(n.eat(e))if(n.eat(e))b=!0;else return"string";function g(f,h){for(var p=!1;!f.eol();){if(!o&&!p&&f.peek()=="$")return x(h),h.tokenize=m,"string";var z=f.next();if(z==e&&!p&&(!b||f.match(e+e))){h.tokenize=null;break}p=!o&&!p&&z=="\\"}return"string"}return t.tokenize=g,g(n,t)}function m(e,n){return e.eat("$"),e.eat("{")?n.tokenize=null:n.tokenize=_,null}function _(e,n){return e.eatWhile(/[\w_]/),n.tokenize=y(n),"variable"}function d(e){return function(n,t){for(var o;o=n.next();)if(o=="*"&&n.eat("/"))if(e==1){t.tokenize=null;break}else return t.tokenize=d(e-1),t.tokenize(n,t);else if(o=="/"&&n.eat("*"))return t.tokenize=d(e+1),t.tokenize(n,t);return"comment"}}r.registerHelper("hintWords","application/dart",i.concat(a).concat(v)),r.defineMode("dart",function(e){return r.getMode(e,"application/dart")},"clike")})})();const O=w.exports,P=j({__proto__:null,default:O},[w.exports]);export{P as d};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as l,o as r,b as c,w as a,l as e,E as t,e as n}from"./runtime-core.esm-bundler.fe249c5c.js";const u={class:"markdown-body"},h=e("blockquote",null,[e("p",null,"The Directus data studio enables no-code configuration and management for any SQL database, with no arbitrary restrictions on how you build your data model. You get control over table, column and relationship configuration, as well as how users view and interact with data inside the data studio.")],-1),m={class:"tip hint"},p=e("div",{class:"hint-title"},"Learn More",-1),y=e("h2",{id:"relational-data-models",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#relational-data-models"},"#"),t(" Relational Data Models")],-1),b=e("p",null,[t("In order to understand how Directus handles data models, you will need an understanding of what relational data models are. This section provides a brief summary of the core concepts. It may be useful as a review, or for business users working on your team that want a simple explanation of how data models work. If you have a firm knowledge of relational data model concepts, such as databases, data tables, columns, data types, primary and foreign keys, rows, relationships, and schemas then feel free to jump to "),e("a",{href:"#data-models-in-directus"},"Data Models in Directus"),t(".")],-1),f=e("h3",{id:"databases",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#databases"},"#"),t(" Databases")],-1),w=e("p",null,"Directus is an SQL database wrapper. A database is a set of data stored in a computer, in a structured way, making it organized, accessible, and scalable. The specific way you structure your data within a database is called your data model.",-1),g=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/database-schema-20220805A.webp",alt:"A Database Schema"})],-1),_=e("h3",{id:"database-vs-excel",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#database-vs-excel"},"#"),t(" Database vs Excel")],-1),v=e("p",null,[t("To make a comparison most business users can relate with, storing data in a database is "),e("em",null,"somewhat"),t(" similar to storing data in Excel spreadsheets. You know how you can build a table on one sheet in Excel, build another table on another sheet, then link the rows of each table together? That is pretty much how a relational data model works. But there are some key points where Excel and relational databases differ.")],-1),k=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/spreadsheet-20220805A.webp",alt:"Data in an Excel Spreadsheet"})],-1),D=e("p",null,[t("Many times, we store data as a table in Excel, but that\u2019s not always the case, as the program serves tons of other purposes. Excel lets you make your data stylized "),e("em",null,"(bold, italicized, colored, custom fonts, etc.)"),t(", set dynamic functions in cells, add graphics like charts and graphs, and input any kind of data into any cell you\u2019d like with no enforced structure. Your Excel spreadsheet is a blank canvas, designed to store up to tens of thousands of rows of information.")],-1),T=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/datatable-20220805A.webp",alt:"A data table"})],-1),x=e("p",null,[t("There is no stylization within databases. They strictly store raw data values in a structured way. Any time you want to style data, build a function, put data into a graph, "),e("em",null,"etc.,"),t(" you must create that functionality in your app or website. Databases store raw, un-stylized, structured data and are designed to handle millions, "),e("em",null,"and in some cases billions and trillions"),t(", of rows of information.")],-1),I=e("h3",{id:"data-tables",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-tables"},"#"),t(" Data Tables")],-1),A=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/rows-and-columns.webp",alt:"A Data Table: rows and columns"})],-1),S=e("p",null,[t("SQL databases store data across data tables. Data tables typically store information about one distinct type of record, object, or observation, such as a financial transaction, blog post, geo-position, user, IoT event, "),e("em",null,"or anything"),t(". Data tables are further broken down into columns and rows.")],-1),M=e("h3",{id:"columns",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#columns"},"#"),t(" Columns")],-1),j=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/columns-20220805A.webp",alt:"A Column"})],-1),E=e("p",null,[t("Columns are categories that store one kind of information. Each column has a unique, descriptive name and stores one unit of information in each of its "),e("a",{href:"#cell-values"},"cell values"),t(". Columns keep the data organized, consistent, and easily accessible. The columns you choose to add to a data table will completely depend on the information you need to store.")],-1),R=e("h3",{id:"cell-values",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cell-values"},"#"),t(" Cell Values")],-1),q=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/datatable-cell-value-20220805A.webp",alt:"Cell Values"})],-1),C=e("p",null,[t("Each value in a column is stored in its own cell. In general, you want to create columns that save "),e("em",null,"atomic"),t(" values. That means create the column to store the smallest indivisible units There is no restriction for the kinds of information to include in a column, but there are good and bad practices. For example:")],-1),F=e("ul",null,[e("li",null,[e("strong",null,"A Bad Column:"),t(" A "),e("code",null,"city_state_zipcode"),t(" column.")]),e("li",null,[e("strong",null,"Good Columns:"),t(" Separate "),e("code",null,"city"),t(", "),e("code",null,"state"),t(" and "),e("code",null,"zipcode"),t(" columns.")])],-1),z=e("h3",{id:"data-types",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-types"},"#"),t(" Data Types")],-1),L=e("p",null,[t("To further maintain structure and consistency, when you create a column, you must also define its data type. For example, an "),e("code",null,"age"),t(" column might be assigned "),e("code",null,"INTEGER"),t(" and a "),e("code",null,"blog_content"),t(" column may be assigned a "),e("code",null,"STRING"),t(" or "),e("code",null,"TEXT"),t(" data type. There are countless incongruent, unexpected, and potentially dangerous behaviors that could emerge when a program tries to process data with the wrong data type.")],-1),N=e("p",null,[t("To give an example, if you type the character "),e("code",null,"2"),t(", it may be stored as an "),e("code",null,"INTEGER"),t(" or as "),e("code",null,"STRING"),t(". If you stored "),e("code",null,"2"),t(" as an "),e("code",null,"INTEGER"),t(", when you try to add "),e("code",null,"2 + 2"),t(", the computer will typically calculate "),e("code",null,"4"),t(". In some languages, if you stored the character "),e("code",null,'"2"'),t(" as a "),e("code",null,"STRING"),t(", when you try to add "),e("code",null,'"2" + "2"'),t(", the computer will concatenate them into "),e("code",null,"22"),t(", while in others, trying to do this may crash the program!")],-1),P=e("p",null,"Therefore when you work with data, it is important to know what its data type is because the wrong data type can cause unexpected and even dangerous behaviors in your program.",-1),Q=e("h3",{id:"rows",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#rows"},"#"),t(" Rows")],-1),O=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/row-20220805A.webp",alt:"Rows"})],-1),U=e("p",null,[t("Each row stores data associated to a unique record, event, object, entity, observation, etc. Data tables can contain millions, "),e("em",null,"even billions and trillions"),t(" of rows of data.")],-1),Y=e("h3",{id:"primary-keys",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#primary-keys"},"#"),t(" Primary Keys")],-1),G=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/primary-keys-20220805A.webp",alt:"Primary Key"})],-1),W=e("p",null,[t("In order to uniquely identify and track each row, every data table must have a primary key column. A primary key is a unique ID that identifies a specific row. Any pattern or system could be used to generate primary keys, so long as it guarantees each key is unique. Perhaps the most common is incrementing integers, where the primary key on each new row increments as follows "),e("code",null,"1"),t(", "),e("code",null,"2"),t(", "),e("code",null,"3"),t(", "),e("code",null,"4"),t(", etc\u2026 The primary key column guarantees you can always find a row and differentiate it from other rows.")],-1),B=e("h3",{id:"foreign-keys",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#foreign-keys"},"#"),t(" Foreign Keys")],-1),H=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/foreign-keys-20220805A.webp",alt:"Foreign Keys"})],-1),K=e("p",null,[t("Since primary keys uniquely identify each and every row in a data table, they are the perfect tool to create relationships. If you want to relationally link rows between two data tables, you create a column to store "),e("em",null,"foreign keys"),t(", which are simply primary keys from a foreign table. This is called a "),e("em",null,"foreign key column"),t(", to signify it stores the keys from a foreign table.")],-1),V=e("h3",{id:"parent-vs.-related-tables",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#parent-vs.-related-tables"},"#"),t(" Parent vs. Related Tables")],-1),J=e("p",null,[t("When we talk about two related tables, we refer to them as the "),e("em",null,"parent table"),t(" and the "),e("em",null,"related table"),t(". These two terms are based solely on perspective, similar to the terms "),e("em",null,"this"),t(" and "),e("em",null,"that"),t(" or the terms "),e("em",null,"here"),t(" and "),e("em",null,"there"),t(", signifying the perspective from which you are looking at the relationship.")],-1),X=e("p",null,[t("For example, within the data model, a "),e("a",{href:"#types-of-relationships"},"many-to-one relationship"),t(" is the same as a "),e("a",{href:"#types-of-relationships"},"one-to-many relationship"),t(", the term used just depends on which collection you consider the parent.")],-1),Z=e("h3",{id:"types-of-relationships",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#types-of-relationships"},"#"),t(" Types of Relationships")],-1),$=e("p",null,"There are several ways you can relationally link tables:",-1),ee=e("ul",null,[e("li",null,[e("strong",null,"One to One"),t(" \u2014 Each row in the parent data table can link to one row "),e("em",null,"(max)"),t(" in the related table.")]),e("li",null,[e("strong",null,"Many to One"),t(" \u2014 Many rows in the parent data table can link to one row in the related table.")]),e("li",null,[e("strong",null,"One to Many"),t(" \u2014 Each row in a data table can link to many rows in another data table."),e("br"),e("em",null,"Note: in a data model, Many-to-One and One-to-Many relationships are identical. The naming difference is a matter of perspective.")]),e("li",null,[e("strong",null,"Many to Many"),t(" \u2014 Many rows in the parent table can link to many rows in the related table. M2M relationships require a third table, called junction table. An M2M is nothing more than an O2M and an M2O stored on the junction table.")]),e("li",null,[e("strong",null,"Many to Any"),t(" \u2014 Many Rows in a data table can link to many rows across any other table in the database. Similar to M2M relationships, M2As require a junction data table as well as an additional column on the junction table to store the related tables\u2019 names.")])],-1),te=e("h3",{id:"database-schemas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#database-schemas"},"#"),t(" Database Schemas")],-1),ae=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/datatable-to-schema-20220805A.webp",alt:"Data Table to schema"})],-1),oe=e("p",null,[t("In our examples so far, we have seen and described actual "),e("a",{href:"#data-tables"},"data tables"),t(". As you design your relational data model, you will need to create a schema to keep track of its complexity.")],-1),ne=e("p",null,"A schema is a blueprint for your data model, which defines its data tables, columns in each table, details about each column and relationships between tables. It does not include the actual data points stored. Here is a simple schema of two relationally linked tables:",-1),se=e("pre",null,[e("code",null,`table_one
|
|
1
|
+
import{a as l,o as r,e as c,y as a,u as e,q as t,z as n}from"./runtime-core.esm-bundler.22ec0346.js";const u={class:"markdown-body"},h=e("blockquote",null,[e("p",null,"The Directus data studio enables no-code configuration and management for any SQL database, with no arbitrary restrictions on how you build your data model. You get control over table, column and relationship configuration, as well as how users view and interact with data inside the data studio.")],-1),m={class:"tip hint"},p=e("div",{class:"hint-title"},"Learn More",-1),y=e("h2",{id:"relational-data-models",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#relational-data-models"},"#"),t(" Relational Data Models")],-1),b=e("p",null,[t("In order to understand how Directus handles data models, you will need an understanding of what relational data models are. This section provides a brief summary of the core concepts. It may be useful as a review, or for business users working on your team that want a simple explanation of how data models work. If you have a firm knowledge of relational data model concepts, such as databases, data tables, columns, data types, primary and foreign keys, rows, relationships, and schemas then feel free to jump to "),e("a",{href:"#data-models-in-directus"},"Data Models in Directus"),t(".")],-1),f=e("h3",{id:"databases",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#databases"},"#"),t(" Databases")],-1),g=e("p",null,"Directus is an SQL database wrapper. A database is a set of data stored in a computer, in a structured way, making it organized, accessible, and scalable. The specific way you structure your data within a database is called your data model.",-1),w=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/database-schema-20220805A.webp",alt:"A Database Schema"})],-1),_=e("h3",{id:"database-vs-excel",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#database-vs-excel"},"#"),t(" Database vs Excel")],-1),v=e("p",null,[t("To make a comparison most business users can relate with, storing data in a database is "),e("em",null,"somewhat"),t(" similar to storing data in Excel spreadsheets. You know how you can build a table on one sheet in Excel, build another table on another sheet, then link the rows of each table together? That is pretty much how a relational data model works. But there are some key points where Excel and relational databases differ.")],-1),k=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/spreadsheet-20220805A.webp",alt:"Data in an Excel Spreadsheet"})],-1),D=e("p",null,[t("Many times, we store data as a table in Excel, but that\u2019s not always the case, as the program serves tons of other purposes. Excel lets you make your data stylized "),e("em",null,"(bold, italicized, colored, custom fonts, etc.)"),t(", set dynamic functions in cells, add graphics like charts and graphs, and input any kind of data into any cell you\u2019d like with no enforced structure. Your Excel spreadsheet is a blank canvas, designed to store up to tens of thousands of rows of information.")],-1),T=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/datatable-20220805A.webp",alt:"A data table"})],-1),x=e("p",null,[t("There is no stylization within databases. They strictly store raw data values in a structured way. Any time you want to style data, build a function, put data into a graph, "),e("em",null,"etc.,"),t(" you must create that functionality in your app or website. Databases store raw, un-stylized, structured data and are designed to handle millions, "),e("em",null,"and in some cases billions and trillions"),t(", of rows of information.")],-1),I=e("h3",{id:"data-tables",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-tables"},"#"),t(" Data Tables")],-1),A=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/rows-and-columns.webp",alt:"A Data Table: rows and columns"})],-1),S=e("p",null,[t("SQL databases store data across data tables. Data tables typically store information about one distinct type of record, object, or observation, such as a financial transaction, blog post, geo-position, user, IoT event, "),e("em",null,"or anything"),t(". Data tables are further broken down into columns and rows.")],-1),M=e("h3",{id:"columns",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#columns"},"#"),t(" Columns")],-1),j=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/columns-20220805A.webp",alt:"A Column"})],-1),E=e("p",null,[t("Columns are categories that store one kind of information. Each column has a unique, descriptive name and stores one unit of information in each of its "),e("a",{href:"#cell-values"},"cell values"),t(". Columns keep the data organized, consistent, and easily accessible. The columns you choose to add to a data table will completely depend on the information you need to store.")],-1),R=e("h3",{id:"cell-values",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#cell-values"},"#"),t(" Cell Values")],-1),q=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/datatable-cell-value-20220805A.webp",alt:"Cell Values"})],-1),C=e("p",null,[t("Each value in a column is stored in its own cell. In general, you want to create columns that save "),e("em",null,"atomic"),t(" values. That means create the column to store the smallest indivisible units There is no restriction for the kinds of information to include in a column, but there are good and bad practices. For example:")],-1),F=e("ul",null,[e("li",null,[e("strong",null,"A Bad Column:"),t(" A "),e("code",null,"city_state_zipcode"),t(" column.")]),e("li",null,[e("strong",null,"Good Columns:"),t(" Separate "),e("code",null,"city"),t(", "),e("code",null,"state"),t(" and "),e("code",null,"zipcode"),t(" columns.")])],-1),z=e("h3",{id:"data-types",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-types"},"#"),t(" Data Types")],-1),L=e("p",null,[t("To further maintain structure and consistency, when you create a column, you must also define its data type. For example, an "),e("code",null,"age"),t(" column might be assigned "),e("code",null,"INTEGER"),t(" and a "),e("code",null,"blog_content"),t(" column may be assigned a "),e("code",null,"STRING"),t(" or "),e("code",null,"TEXT"),t(" data type. There are countless incongruent, unexpected, and potentially dangerous behaviors that could emerge when a program tries to process data with the wrong data type.")],-1),N=e("p",null,[t("To give an example, if you type the character "),e("code",null,"2"),t(", it may be stored as an "),e("code",null,"INTEGER"),t(" or as "),e("code",null,"STRING"),t(". If you stored "),e("code",null,"2"),t(" as an "),e("code",null,"INTEGER"),t(", when you try to add "),e("code",null,"2 + 2"),t(", the computer will typically calculate "),e("code",null,"4"),t(". In some languages, if you stored the character "),e("code",null,'"2"'),t(" as a "),e("code",null,"STRING"),t(", when you try to add "),e("code",null,'"2" + "2"'),t(", the computer will concatenate them into "),e("code",null,"22"),t(", while in others, trying to do this may crash the program!")],-1),P=e("p",null,"Therefore when you work with data, it is important to know what its data type is because the wrong data type can cause unexpected and even dangerous behaviors in your program.",-1),Q=e("h3",{id:"rows",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#rows"},"#"),t(" Rows")],-1),O=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/row-20220805A.webp",alt:"Rows"})],-1),U=e("p",null,[t("Each row stores data associated to a unique record, event, object, entity, observation, etc. Data tables can contain millions, "),e("em",null,"even billions and trillions"),t(" of rows of data.")],-1),Y=e("h3",{id:"primary-keys",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#primary-keys"},"#"),t(" Primary Keys")],-1),G=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/primary-keys-20220805A.webp",alt:"Primary Key"})],-1),W=e("p",null,[t("In order to uniquely identify and track each row, every data table must have a primary key column. A primary key is a unique ID that identifies a specific row. Any pattern or system could be used to generate primary keys, so long as it guarantees each key is unique. Perhaps the most common is incrementing integers, where the primary key on each new row increments as follows "),e("code",null,"1"),t(", "),e("code",null,"2"),t(", "),e("code",null,"3"),t(", "),e("code",null,"4"),t(", etc\u2026 The primary key column guarantees you can always find a row and differentiate it from other rows.")],-1),B=e("h3",{id:"foreign-keys",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#foreign-keys"},"#"),t(" Foreign Keys")],-1),H=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/foreign-keys-20220805A.webp",alt:"Foreign Keys"})],-1),K=e("p",null,[t("Since primary keys uniquely identify each and every row in a data table, they are the perfect tool to create relationships. If you want to relationally link rows between two data tables, you create a column to store "),e("em",null,"foreign keys"),t(", which are simply primary keys from a foreign table. This is called a "),e("em",null,"foreign key column"),t(", to signify it stores the keys from a foreign table.")],-1),V=e("h3",{id:"parent-vs.-related-tables",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#parent-vs.-related-tables"},"#"),t(" Parent vs. Related Tables")],-1),J=e("p",null,[t("When we talk about two related tables, we refer to them as the "),e("em",null,"parent table"),t(" and the "),e("em",null,"related table"),t(". These two terms are based solely on perspective, similar to the terms "),e("em",null,"this"),t(" and "),e("em",null,"that"),t(" or the terms "),e("em",null,"here"),t(" and "),e("em",null,"there"),t(", signifying the perspective from which you are looking at the relationship.")],-1),X=e("p",null,[t("For example, within the data model, a "),e("a",{href:"#types-of-relationships"},"many-to-one relationship"),t(" is the same as a "),e("a",{href:"#types-of-relationships"},"one-to-many relationship"),t(", the term used just depends on which collection you consider the parent.")],-1),Z=e("h3",{id:"types-of-relationships",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#types-of-relationships"},"#"),t(" Types of Relationships")],-1),$=e("p",null,"There are several ways you can relationally link tables:",-1),ee=e("ul",null,[e("li",null,[e("strong",null,"One to One"),t(" \u2014 Each row in the parent data table can link to one row "),e("em",null,"(max)"),t(" in the related table.")]),e("li",null,[e("strong",null,"Many to One"),t(" \u2014 Many rows in the parent data table can link to one row in the related table.")]),e("li",null,[e("strong",null,"One to Many"),t(" \u2014 Each row in a data table can link to many rows in another data table."),e("br"),e("em",null,"Note: in a data model, Many-to-One and One-to-Many relationships are identical. The naming difference is a matter of perspective.")]),e("li",null,[e("strong",null,"Many to Many"),t(" \u2014 Many rows in the parent table can link to many rows in the related table. M2M relationships require a third table, called junction table. An M2M is nothing more than an O2M and an M2O stored on the junction table.")]),e("li",null,[e("strong",null,"Many to Any"),t(" \u2014 Many Rows in a data table can link to many rows across any other table in the database. Similar to M2M relationships, M2As require a junction data table as well as an additional column on the junction table to store the related tables\u2019 names.")])],-1),te=e("h3",{id:"database-schemas",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#database-schemas"},"#"),t(" Database Schemas")],-1),ae=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/datatable-to-schema-20220805A.webp",alt:"Data Table to schema"})],-1),oe=e("p",null,[t("In our examples so far, we have seen and described actual "),e("a",{href:"#data-tables"},"data tables"),t(". As you design your relational data model, you will need to create a schema to keep track of its complexity.")],-1),ne=e("p",null,"A schema is a blueprint for your data model, which defines its data tables, columns in each table, details about each column and relationships between tables. It does not include the actual data points stored. Here is a simple schema of two relationally linked tables:",-1),se=e("pre",null,[e("code",null,`table_one
|
|
2
2
|
- column1 (primary key)
|
|
3
3
|
- column2 (data type, optionally explain what the column stores)
|
|
4
4
|
- column3 (...)
|
|
@@ -19,7 +19,7 @@ import{a as l,o as r,b as c,w as a,l as e,E as t,e as n}from"./runtime-core.esm-
|
|
|
19
19
|
- author_name (string, stores author's full name)
|
|
20
20
|
- author_email (string, stores author's email)
|
|
21
21
|
- author_img (string, stores link to author's profile picture)
|
|
22
|
-
`)],-1),fe=e("p",null,[t("You might be starting to notice this data table no longer represents one single object, but two: blog posts and authors. This is "),e("em",null,"almost always"),t(" a sign the data should be split across different tables and relationally linked.")],-1),
|
|
22
|
+
`)],-1),fe=e("p",null,[t("You might be starting to notice this data table no longer represents one single object, but two: blog posts and authors. This is "),e("em",null,"almost always"),t(" a sign the data should be split across different tables and relationally linked.")],-1),ge=e("p",null,[t("Now let\u2019s also imagine that authors are one type of user. All user details are stored in a "),e("code",null,"users"),t(" data table and its data is displayed on each user profile page, for chat messaging and other types of transactions, "),e("em",null,"this is a common situation in many projects"),t(". In this case, the author name and other details would also need to exist in the "),e("code",null,"users"),t(" table.")],-1),we=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/duplicate-data-20220829A.webp",alt:"Duplicate Data"})],-1),_e=e("p",null,"This creates duplicate data. There are two big problems with this:",-1),ve=e("p",null,[t("First, it becomes difficult or impossible to maintain accurate information. If the author decides to change their social media information under "),e("code",null,"users"),t(", someone would have to go through and update author details on every single row containing their blog posts. With just 10 or even 100 blog posts, this would be annoying but perhaps not a massive problem. However, as volume of data grows to millions or billions of rows, updating duplicate data becomes a serious problem.")],-1),ke=e("p",null,"Furthermore, an error on an author\u2019s name and personal information may not be a truly dangerous situation, but inaccurate information would be catastrophic in data tables containing banking transactions or medical records!",-1),De=e("p",null,"Second, it wastes storage space and slows down performance. With a data model containing a few hundred blog posts, duplicate data may not take up enough space to cause huge drops in performance. But again, if you have the same information repeated again and again over millions or billions of rows, storage is wasted on a massive scale.",-1),Te=e("h3",{id:"why-we-use-relational-data-models",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#why-we-use-relational-data-models"},"#"),t(" Why We Use Relational Data Models")],-1),xe=e("p",null,[t("As shown from the previous section, you want to make sure that every single data point is unique. This is where the "),e("em",null,"relational"),t(" part of relational data models comes into play. To avoid data duplication, it is always best practice to "),e("em",null,"normalize your data model"),t(", which is the technical term used to describe designing a data model so that there is no duplicate information stored "),e("em",null,"at all"),t(". Instead of storing all information needed in a given situation in one table, like we saw when mixing up blog and author information above, database normalization is the process of splitting up this information across tables and relationally linking it all together so that information is never repeated.")],-1),Ie=e("p",null,[t("There is a lot to learn to master database normalization and a thorough education in the practice goes beyond the scope of this document. There are plenty of resources to learn about it online. However, to provide one simple example by improving the example "),e("code",null,"blog"),t(" data table provided in the previous "),e("a",{href:"#avoid-data-duplication"},"Avoid Data Duplication"),t(" section:")],-1),Ae=e("pre",null,[e("code",null,`blog
|
|
23
23
|
- id
|
|
24
24
|
- title
|
|
25
25
|
- content
|
|
@@ -42,4 +42,4 @@ import{a as l,o as r,b as c,w as a,l as e,E as t,e as n}from"./runtime-core.esm-
|
|
|
42
42
|
`),e("span",{class:"hljs-attr"},'"lat"'),e("span",{class:"hljs-punctuation"},":"),t(),e("span",{class:"hljs-number"},"36.088010"),e("span",{class:"hljs-punctuation"},","),t(`
|
|
43
43
|
`),e("span",{class:"hljs-attr"},'"lng"'),e("span",{class:"hljs-punctuation"},":"),t(),e("span",{class:"hljs-number"},"120.379771"),t(`
|
|
44
44
|
`),e("span",{class:"hljs-punctuation"},"}"),t(`
|
|
45
|
-
`)])],-1),Ue=e("p",null,"Therefore, developers need to build front-ends with polished UIs and custom display logic to make working with the data human-friendly. However, even for developers with strong SQL database skills, building out APIs and GUIs to build and manage a data model is time consuming.",-1),Ye=e("h2",{id:"data-models-in-directus",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-models-in-directus"},"#"),t(" Data Models in Directus")],-1),Ge=e("video",{title:"Settings > Data Model",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/data-model-overview-20220805A.mp4",type:"video/mp4"})],-1),We=e("p",null,"All relational data model concepts listed above apply in Directus. You get complete, un-opinionated, relational data model design and configuration. The difference is that Directus handles all SQL, builds the API, and provides a Data Studio which lets business users work with data in a human-friendly way.",-1),Be=e("p",null,"You have the power to do the following things, without a line of code or SQL:",-1),He=e("ul",null,[e("li",null,"View, configure, and manage your relational data model and asset storage."),e("li",null,"Configure how data is displayed within the Data Studio."),e("li",null,"Configure how data is interacted with by users in the Data Studio."),e("li",null,"Translate any and all text in the Data Studio into any language.")],-1),Ke=e("p",null,[t("Directus replaces traditional relational database jargon with more user-friendly terms and concepts. Please keep in mind that while traditional relational database jargon strictly encompasses database concepts, some of the new Directus terms encompass these relational database concepts "),e("em",null,"plus display and interaction logic"),t(". The following sections will introduce Directus terms and map them to classic relational database concepts.")],-1),Ve=e("h2",{id:"collections",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#collections"},"#"),t(" Collections")],-1),Je=e("video",{title:"Collections",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/collections-20220805A.mp4",type:"video/mp4"})],-1),Xe=e("p",null,[t("A collection "),e("em",null,[t("is a set of "),e("a",{href:"#items"},"items")]),t(". This can be a 1-1 match-up with a data table in SQL, a group of other collections, or a readonly view.")],-1),Ze=e("strong",null,"Settings > Data Model",-1),$e=e("h2",{id:"fields",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fields"},"#"),t(" Fields")],-1),et=e("video",{title:"Fields",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/fields-20220805A.mp4",type:"video/mp4"})],-1),tt=e("p",null,"Fields are database columns, but with a twist.",-1),at=e("h2",{id:"items",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#items"},"#"),t(" Items")],-1),ot=e("video",{title:"Collections",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/items-20220805A.mp4",type:"video/mp4"})],-1),nt=e("p",null,"Items are data table rows, but with a twist.",-1),st=e("p",null,[t("Remember from our discussion above about traditional databases, the ideal relational database is "),e("em",null,"normalized"),t(". Unfortunately, normalized data is not always the easiest for people to imagine or envision because related data is spread across multiple data tables. Therefore, when you access an item, you may get more than just the current collection\u2019s row level-data, "),e("em",null,"in some cases an item may provide access to the data in related rows.")],-1),lt=e("h2",{id:"data-type-superset",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-type-superset"},"#"),t(" Data Type Superset")],-1),it=e("h2",{id:"keys-and-ids",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#keys-and-ids"},"#"),t(" Keys and IDs")],-1),dt=e("video",{title:"Keys and IDs",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/keys-and-ids-20220805A.mp4",type:"video/mp4"})],-1),rt=e("code",null,"id",-1),ct=e("ul",null,[e("li",null,[e("strong",null,"Auto-Incremented Integer"),t(" \u2014 IDs increment "),e("code",null,"1"),t(", "),e("code",null,"2"),t(", "),e("code",null,"3"),t(" up to "),e("code",null,"2^31-1"),t(" or "),e("code",null,"2,147,483,647"),t(".")]),e("li",null,[e("strong",null,"Auto-Incremented Big Integer"),t(" \u2014 IDs increment "),e("code",null,"1"),t(", "),e("code",null,"2"),t(", "),e("code",null,"3"),t(" up to "),e("code",null,"2^63-1"),t(" or "),e("code",null,"9,223,372,036,854,775,807"),t(". "),e("em",null,"(only available in MySQL and PostgreSQL)")]),e("li",null,[e("strong",null,"Generated UUID"),t(" \u2014 Universally Unique Identifier. Creates a completely unique ID. IDs generated with this system "),e("em",null,"(not just in your database, but anywhere this system is used)"),t(" are so statistically unlikely to be repeated that for all practical purposes they are unique.")]),e("li",null,[e("strong",null,"Manually Entered String"),t(" \u2014 You manually type out a unique string as the ID for each item.")])],-1),ut=e("h2",{id:"relationships",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#relationships"},"#"),t(" Relationships")],-1),ht=e("video",{title:"Relations",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/relationships-20220805A.mp4",type:"video/mp4"})],-1),mt=e("a",{href:"#types-of-relationships"},"types of relationships",-1),wt="Data Model",gt=!1,_t="The data model describes the structure of your database's schema using Collections, database tables, and Fields.",vt="15 min read",kt={__name:"data-model",setup(pt,{expose:i}){const s={title:"Data Model",modularExtension:!1,description:"The data model describes the structure of your database's schema using Collections, database tables, and Fields.",readTime:"15 min read"};return i({frontmatter:s}),(yt,bt)=>{const o=l("router-link"),d=l("docs-wrapper");return r(),c(d,{frontmatter:s},{default:a(()=>[e("div",u,[h,e("div",m,[p,e("p",null,[t("Remember, you will have full access to manage your database using SQL. Directus will mirror any changes. You can also configure your data model programmatically via the API. To learn more, see our API documentation on "),n(o,{to:"/docs/reference/system/collections"},{default:a(()=>[t("Collections")]),_:1}),t(", "),n(o,{to:"/docs/reference/system/fields"},{default:a(()=>[t("Fields")]),_:1}),t(", and "),n(o,{to:"/docs/reference/system/relations"},{default:a(()=>[t("Relations")]),_:1}),t(".")])]),y,b,f,w,g,_,v,k,D,T,x,I,A,S,M,j,E,R,q,C,F,z,L,N,P,Q,O,U,Y,G,W,B,H,K,V,J,X,Z,$,ee,e("p",null,[t("To learn more about how these relationships work conceptually, as well as how they are handled within Directus, see our guide on "),n(o,{to:"/docs/configuration/data-model/relationships"},{default:a(()=>[t("relationships")]),_:1}),t(".")]),te,ae,oe,ne,se,le,ie,de,re,ce,ue,he,me,pe,ye,be,fe,we,ge,_e,ve,ke,De,Te,xe,Ie,Ae,e("p",null,[t("As described in the section on "),n(o,{to:"/docs/configuration/data-model#rows"},{default:a(()=>[t("Rows")]),_:1}),t(", we want each row in a data table to represent one unique record, event, object, entity, observation, etc. To do this, we can remove the "),Se,t(" column from the "),Me,t(" table and replace it with an "),je,t(" foreign key table, which stores foreign keys from the "),Ee,t(" table.")]),Re,qe,Ce,Fe,ze,Le,Ne,Pe,Qe,Oe,Ue,Ye,Ge,We,e("p",null,[t("The Data Studio also offers features and functionalities to display and interact with your data intuitively. Once your data model is configured, the data is accessible across the other "),n(o,{to:"/docs/getting-started/glossary#modules"},{default:a(()=>[t("modules")]),_:1}),t(".")]),Be,He,Ke,Ve,Je,Xe,e("p",null,[t("You access all collections, including built-in system collections required to power your project, under "),Ze,t(". From there, click a collection to open its configurations page. To learn more, see our guide on "),n(o,{to:"/docs/configuration/data-model/collections"},{default:a(()=>[t("collections")]),_:1}),t(".")]),$e,et,tt,e("p",null,[t("Remember, SQL database columns store pure, raw data. From there, developers build out custom logic and UIs to determine how this data is displayed and interacted with. In Directus, fields encompass column configurations, as well as custom configuration over how to the data is displayed and interacted with in the Data Studio. Directus also has "),n(o,{to:"/docs/getting-started/glossary#alias"},{default:a(()=>[t("alias fields")]),_:1}),t(", which are virtual and do not match directly to a column. To learn more, see our guide on "),n(o,{to:"/docs/configuration/data-model/fields/"},{default:a(()=>[t("fields")]),_:1}),t(".")]),at,ot,nt,st,e("p",null,[t("You access items from other app modules, such as "),n(o,{to:"/docs/app/content"},{default:a(()=>[t("Content")]),_:1}),t(", "),n(o,{to:"/docs/app/user-directory"},{default:a(()=>[t("User Directory")]),_:1}),t(", and "),n(o,{to:"/docs/app/file-library"},{default:a(()=>[t("File Library")]),_:1}),t(".")]),lt,e("p",null,[t("Directus abstracts type differences between SQL vendors with a "),n(o,{to:"/docs/getting-started/glossary#data-type-superset"},{default:a(()=>[t("Data Type Superset")]),_:1}),t(".")]),it,dt,e("p",null,[t("Primary keys are called IDs in Directus fairly frequently. When you "),n(o,{to:"/docs/configuration/data-model/collections#create-a-collection"},{default:a(()=>[t("create a collection")]),_:1}),t(", you must add an "),rt,t(" field. Directus supports the following types of IDs:")]),ct,ut,ht,e("p",null,[t("Directus supports all standard "),mt,t(", as well as a few more of its own compound types. To learn more, see our guide on "),n(o,{to:"/docs/configuration/data-model/relationships"},{default:a(()=>[t("relationships")]),_:1}),t(".")])])]),_:1})}}};export{kt as default,_t as description,gt as modularExtension,vt as readTime,wt as title};
|
|
45
|
+
`)])],-1),Ue=e("p",null,"Therefore, developers need to build front-ends with polished UIs and custom display logic to make working with the data human-friendly. However, even for developers with strong SQL database skills, building out APIs and GUIs to build and manage a data model is time consuming.",-1),Ye=e("h2",{id:"data-models-in-directus",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-models-in-directus"},"#"),t(" Data Models in Directus")],-1),Ge=e("video",{title:"Settings > Data Model",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/data-model-overview-20220805A.mp4",type:"video/mp4"})],-1),We=e("p",null,"All relational data model concepts listed above apply in Directus. You get complete, un-opinionated, relational data model design and configuration. The difference is that Directus handles all SQL, builds the API, and provides a Data Studio which lets business users work with data in a human-friendly way.",-1),Be=e("p",null,"You have the power to do the following things, without a line of code or SQL:",-1),He=e("ul",null,[e("li",null,"View, configure, and manage your relational data model and asset storage."),e("li",null,"Configure how data is displayed within the Data Studio."),e("li",null,"Configure how data is interacted with by users in the Data Studio."),e("li",null,"Translate any and all text in the Data Studio into any language.")],-1),Ke=e("p",null,[t("Directus replaces traditional relational database jargon with more user-friendly terms and concepts. Please keep in mind that while traditional relational database jargon strictly encompasses database concepts, some of the new Directus terms encompass these relational database concepts "),e("em",null,"plus display and interaction logic"),t(". The following sections will introduce Directus terms and map them to classic relational database concepts.")],-1),Ve=e("h2",{id:"collections",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#collections"},"#"),t(" Collections")],-1),Je=e("video",{title:"Collections",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/collections-20220805A.mp4",type:"video/mp4"})],-1),Xe=e("p",null,[t("A collection "),e("em",null,[t("is a set of "),e("a",{href:"#items"},"items")]),t(". This can be a 1-1 match-up with a data table in SQL, a group of other collections, or a readonly view.")],-1),Ze=e("strong",null,"Settings > Data Model",-1),$e=e("h2",{id:"fields",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#fields"},"#"),t(" Fields")],-1),et=e("video",{title:"Fields",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/fields-20220805A.mp4",type:"video/mp4"})],-1),tt=e("p",null,"Fields are database columns, but with a twist.",-1),at=e("h2",{id:"items",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#items"},"#"),t(" Items")],-1),ot=e("video",{title:"Collections",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/items-20220805A.mp4",type:"video/mp4"})],-1),nt=e("p",null,"Items are data table rows, but with a twist.",-1),st=e("p",null,[t("Remember from our discussion above about traditional databases, the ideal relational database is "),e("em",null,"normalized"),t(". Unfortunately, normalized data is not always the easiest for people to imagine or envision because related data is spread across multiple data tables. Therefore, when you access an item, you may get more than just the current collection\u2019s row level-data, "),e("em",null,"in some cases an item may provide access to the data in related rows.")],-1),lt=e("h2",{id:"data-type-superset",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#data-type-superset"},"#"),t(" Data Type Superset")],-1),it=e("h2",{id:"keys-and-ids",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#keys-and-ids"},"#"),t(" Keys and IDs")],-1),dt=e("video",{title:"Keys and IDs",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/keys-and-ids-20220805A.mp4",type:"video/mp4"})],-1),rt=e("code",null,"id",-1),ct=e("ul",null,[e("li",null,[e("strong",null,"Auto-Incremented Integer"),t(" \u2014 IDs increment "),e("code",null,"1"),t(", "),e("code",null,"2"),t(", "),e("code",null,"3"),t(" up to "),e("code",null,"2^31-1"),t(" or "),e("code",null,"2,147,483,647"),t(".")]),e("li",null,[e("strong",null,"Auto-Incremented Big Integer"),t(" \u2014 IDs increment "),e("code",null,"1"),t(", "),e("code",null,"2"),t(", "),e("code",null,"3"),t(" up to "),e("code",null,"2^63-1"),t(" or "),e("code",null,"9,223,372,036,854,775,807"),t(". "),e("em",null,"(only available in MySQL and PostgreSQL)")]),e("li",null,[e("strong",null,"Generated UUID"),t(" \u2014 Universally Unique Identifier. Creates a completely unique ID. IDs generated with this system "),e("em",null,"(not just in your database, but anywhere this system is used)"),t(" are so statistically unlikely to be repeated that for all practical purposes they are unique.")]),e("li",null,[e("strong",null,"Manually Entered String"),t(" \u2014 You manually type out a unique string as the ID for each item.")])],-1),ut=e("h2",{id:"relationships",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#relationships"},"#"),t(" Relationships")],-1),ht=e("video",{title:"Relations",autoplay:"",playsinline:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/configuration/data-model/data-model-20220805/relationships-20220805A.mp4",type:"video/mp4"})],-1),mt=e("a",{href:"#types-of-relationships"},"types of relationships",-1),gt="Data Model",wt=!1,_t="The data model describes the structure of your database's schema using Collections, database tables, and Fields.",vt="15 min read",kt={__name:"data-model",setup(pt,{expose:i}){const s={title:"Data Model",modularExtension:!1,description:"The data model describes the structure of your database's schema using Collections, database tables, and Fields.",readTime:"15 min read"};return i({frontmatter:s}),(yt,bt)=>{const o=l("router-link"),d=l("docs-wrapper");return r(),c(d,{frontmatter:s},{default:a(()=>[e("div",u,[h,e("div",m,[p,e("p",null,[t("Remember, you will have full access to manage your database using SQL. Directus will mirror any changes. You can also configure your data model programmatically via the API. To learn more, see our API documentation on "),n(o,{to:"/docs/reference/system/collections"},{default:a(()=>[t("Collections")]),_:1}),t(", "),n(o,{to:"/docs/reference/system/fields"},{default:a(()=>[t("Fields")]),_:1}),t(", and "),n(o,{to:"/docs/reference/system/relations"},{default:a(()=>[t("Relations")]),_:1}),t(".")])]),y,b,f,g,w,_,v,k,D,T,x,I,A,S,M,j,E,R,q,C,F,z,L,N,P,Q,O,U,Y,G,W,B,H,K,V,J,X,Z,$,ee,e("p",null,[t("To learn more about how these relationships work conceptually, as well as how they are handled within Directus, see our guide on "),n(o,{to:"/docs/configuration/data-model/relationships"},{default:a(()=>[t("relationships")]),_:1}),t(".")]),te,ae,oe,ne,se,le,ie,de,re,ce,ue,he,me,pe,ye,be,fe,ge,we,_e,ve,ke,De,Te,xe,Ie,Ae,e("p",null,[t("As described in the section on "),n(o,{to:"/docs/configuration/data-model#rows"},{default:a(()=>[t("Rows")]),_:1}),t(", we want each row in a data table to represent one unique record, event, object, entity, observation, etc. To do this, we can remove the "),Se,t(" column from the "),Me,t(" table and replace it with an "),je,t(" foreign key table, which stores foreign keys from the "),Ee,t(" table.")]),Re,qe,Ce,Fe,ze,Le,Ne,Pe,Qe,Oe,Ue,Ye,Ge,We,e("p",null,[t("The Data Studio also offers features and functionalities to display and interact with your data intuitively. Once your data model is configured, the data is accessible across the other "),n(o,{to:"/docs/getting-started/glossary#modules"},{default:a(()=>[t("modules")]),_:1}),t(".")]),Be,He,Ke,Ve,Je,Xe,e("p",null,[t("You access all collections, including built-in system collections required to power your project, under "),Ze,t(". From there, click a collection to open its configurations page. To learn more, see our guide on "),n(o,{to:"/docs/configuration/data-model/collections"},{default:a(()=>[t("collections")]),_:1}),t(".")]),$e,et,tt,e("p",null,[t("Remember, SQL database columns store pure, raw data. From there, developers build out custom logic and UIs to determine how this data is displayed and interacted with. In Directus, fields encompass column configurations, as well as custom configuration over how to the data is displayed and interacted with in the Data Studio. Directus also has "),n(o,{to:"/docs/getting-started/glossary#alias"},{default:a(()=>[t("alias fields")]),_:1}),t(", which are virtual and do not match directly to a column. To learn more, see our guide on "),n(o,{to:"/docs/configuration/data-model/fields/"},{default:a(()=>[t("fields")]),_:1}),t(".")]),at,ot,nt,st,e("p",null,[t("You access items from other app modules, such as "),n(o,{to:"/docs/app/content"},{default:a(()=>[t("Content")]),_:1}),t(", "),n(o,{to:"/docs/app/user-directory"},{default:a(()=>[t("User Directory")]),_:1}),t(", and "),n(o,{to:"/docs/app/file-library"},{default:a(()=>[t("File Library")]),_:1}),t(".")]),lt,e("p",null,[t("Directus abstracts type differences between SQL vendors with a "),n(o,{to:"/docs/getting-started/glossary#data-type-superset"},{default:a(()=>[t("Data Type Superset")]),_:1}),t(".")]),it,dt,e("p",null,[t("Primary keys are called IDs in Directus fairly frequently. When you "),n(o,{to:"/docs/configuration/data-model/collections#create-a-collection"},{default:a(()=>[t("create a collection")]),_:1}),t(", you must add an "),rt,t(" field. Directus supports the following types of IDs:")]),ct,ut,ht,e("p",null,[t("Directus supports all standard "),mt,t(", as well as a few more of its own compound types. To learn more, see our guide on "),n(o,{to:"/docs/configuration/data-model/relationships"},{default:a(()=>[t("relationships")]),_:1}),t(".")])])]),_:1})}}};export{kt as default,_t as description,wt as modularExtension,vt as readTime,gt as title};
|