* Content Versioning (#19463)
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
* Update clean-berries-do.md
* Prerelease mode
* v10.7.0-beta.0
* Ignore format of auto-generated pre.json file
* Update naming conventions for Content Versioning (#19678)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Content versioning tweaks (#19700)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Add additional system fields to Content Versioning & include preview in promote drawer (#19752)
* Use key instead of name for Content Versioning (#19813)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Reorder component tags
* Prompt user to keep or delete the version before promoting (#19829)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Fix multiple constraints to users system table from versions system table for MSSQL (#19912)
* fix multiple constraints from versions to users
* fix users unit test
* Add Sorting by Aggregated Queries (#19568)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* Update API References for Content Versioning (#19911)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Add version argument in GraphQL (#19910)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Merge branch 'main' into next (#19974)
* Show installed extensions in settings pane (#19964)
* Setup boilerplate for extensions page
* Allow reading all extensions from the root endpoint
* Add basic sidebar info detail
* Render list of extensions
* Move extensions manager to folder
* Move stuff related to extensions to @directus/extensions
* Import extensions utils/types/etc from ext. package
* Resolve last imports
* Add no-extensions warning
* Start on extensions grouped
* Remove string type
* Improve naming conventions
* Couple more optimizations
* Add more structure
* Add comments
we finally understand how this works! hehe
* Remove constructor in favor of static set
* Add more comments
* Don't filter in get-extensions
TBD if this will break things horrendously
* Sprinkle on better names / comments
* Render by section, nested bundled extensions
* Fix typo
* Live-saving tip from the formatter
* Don't know where this came frmo
* Add a changeset
* 📈 Insights QoL Part 1 (#19467)
* Start adding Create Default Modal
* Add Metric List
* Number Formatter Utility
* Start on Label Formatting Options and Resizing
* Update Metric List to use New Number Formatter
* fix auto fit and styling
* fix typings for number formatter and error catching
* add conditional formatting to metric list
* Add Number Formatting to Metrics and Size Formats
* Add Option to Hide Percentage and Fix Sizing of Meter
* Add manual sizing for labels
* Add translation strings
* Add comments to insights
* Fix color errors and add icon
* update translations
* Refine Linechart
* Revert "Start adding Create Default Modal"
This reverts commit 184dd0bb73.
* Run prettier
* Remove Console Logging
* Fix Typings
* Create itchy-berries-rule.md
* Format file
* Fix Metric List for Aggre Group PR
* Remove Empty Class
* Run formatter
* Fix linter errors
* Fix import
* Update app/src/panels/label/panel-label.vue
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Update app/src/panels/label/panel-label.vue
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Update app/src/panels/line-chart/panel-line-chart.vue
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Remove commented css
* Remove unneeded logic
* Fix auto resizing and text alignment
* Remove Expect Error Typechecking
* Add Migration
* Fix Prettier
* Lint auto-fixes
* Fix Resizing CSS and JS
* Add Metric List Translation
* Optimize migration
* Format files
* Fix metric-list translations
* Fix type issue in metric-list/index.ts
> Default export of the module has or is using private name 'Aggregate'.ts(4082)
> Default export of the module has or is using private name 'Group'.ts(4082)
* Remove Unit Translations
* De-duplicate migration
---------
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* SDK support for Content Versioning (#20000)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Add basic support for theming! (#20026)
* WIP start integrating theming
* Fix name
* Fix typo
* Move theme definition to json files
* Generate json from vite plugin
* Move default themes to root
* Render theme-provider in app
* Format variable names
* Move build script to separate npm run scrip
t
* Render correct var names in provider
* Render dark mode
* Update dependencies
* Setup styling rules for module bar
* Remove variables
* Don't rely on scoped var in editor
* Move light styles to theme
* Use theme vars in module bar
* Render theme styles in head
* Render alongside rather than wrapped
* Themable nav
* Allow using local devtools
* Do magic
* Fix auto theme fallback
* Update vue-i18n
* Use proper unicode symbol for multiplication
* Reorganize settings sidebar
* Use global translations for appearance options
* Add fields to migration
* Add theming group fields to system data
* Add strings to en-us for theming
* Add theming route that only renders theme group
* Add custom css to theming group
* Add system-theme interface
* Move default themes above custom css
* Move theme to global translations
* Use an array instead of object structure
* Add defaults for system fields
* Update migrations
* Pass theming information to provider
* Don't use default key in theme settings
* Use lodash.merge instead of defu
Better TypeScript type inference
* Nevermind the standalone app
It kinda sucks
* Only override rules
* Fetch theme overrides from user
* Use same field layout as settings
* Add theme overrides to db
* Classic 🤦🏻♂️
* Fix import
* Boilerplate overrides interface
* Update themes rules to use type def
* Boilerplate nested sections for themes
* Custom favicon (#19968)
* Add public_favicon field
* Add translation for favicon note
* Allow favicon regardless of permissions
* Return favicon as project info
* Type favicon in store
* Replace set-favicon with generate-fav util
* Render favicon in usehead
* Add changset
* Reads a little cleaner
* Semi-colons are a sign of wealth in wisdom
* Add a theme-overrides interface (#19970)
* Install typebox
* Rough in overrides interface
* Update theming settings in settings
* Upgrade dependencies
* Move theme output generation to separate composable
* Upgrade typebox
* Rename app/use-theme to use theme config
* Rework overrides interface
* Add changeset
* Allow default inheritAttrs
* Fixed handling of multiple WebSocket subscriptions on same target (#20005)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Add a cache clear method to the UtilsService (#19990)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Change csv db type to text (#19953)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Update placeholder text in file-image interface (#20004)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Use current Directus version in docs (#20008)
* Use theme background instead of background-page
* Replace foreground normal with theme foreground
* Add missing translation
* Use foreground-accent and foreground-subdued from theme
* Rename --brand to --project-color
* Reuse variable color
* Replace primary/secondary/success/warning/danger
* Use theme based vars in api data
* Add header bar theming options
* Add more theming rules
* Nest icon colors
* Fix names
* Fix names in sidebar icon
* Update theming form layout
* Consolidate shades
* Consolidate primary shades
* Add primary shades
* Use shade-calculcated primary alternatives
* Use primary as mixing color
* Define warning/danger/success/secondary as shades
* Support form field label
* Add schema for interface foreground
* Allow setting input colors
* Add Google custom font loading algorithm
* Use font variables from theme
* Use unhead to load google fonts
* Install unhead to themes provider
* Use display font in title text and large dividers
* Add the dark mode default
* Run formatter
* Updating seeds is a no-no
* 😔
* Fix test
---------
Co-authored-by: Nihcep <32708027+Nihcep@users.noreply.github.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Rob Lee <rob@nodeworks.com>
Co-authored-by: Daniel Biegler <DanielBiegler@users.noreply.github.com>
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
* Fix build script on components package
* Fix RGB var usage
* Resolve Azri's notes
See https://github.com/directus/directus/pull/20026#pullrequestreview-1676876461
* Fix extensions icon
* Add ability to enable/disable extensions from App Settings (#20015)
* Add migrations for directus extensions table
* Prevent duplicate extensions from being loaded
* Add extension settings type
* Add settings getter with db sync
* Add commented out columns
For part 2!
* Load settings when loading extensions
* Normalize settings into extension info
* Use system-like output for extensions endpoint
* Render extensions overview from new meta type
* white space
* Bundle shared stuff as node exports as well
* Format file
* Fix output type of nested bundle entries
* Update package lock
* Hide uninstalled extensions
* Add disable context menu
* Hide disable controls on bundles
* Add API endpoint to update enabled state in DB
* Reload extensions on enable/disable
* Add refreshing on state change for disabled
* Remove commented out code
* Remove commented fields
* Add changeset
* Image having no empty line at the end
* Update GraphQL endpoints for extensions enable/disable (#20017)
* Update type for extensions read
* Add update extension
* Add changeset
* Update docs for updates in 19988 (#20019)
* SDK methods for extension reading/updating (#20018)
* Update SDK methods for extensions
* Add changeset
* Resolve Pascal's notes
* extracted extension api output type
* updated the update command
* Update sdk/src/types/extensions.ts
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
---------
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Run formatter
* Add extensions to app deny list
* Fix input param name
* Fix typo in docs
* Azri is right, again!
* Remove extraneous fields
* Fix registration of operation and bundle extensions (#20030)
* Fix icon map
* Fix extension enable flag type on SQLite
* Fetch settings from itemservice
Fixes database inconsistency issues
* Only load extensions service when database is installed
---------
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Nicola Krumschmidt <nicola.krumschmidt@freenet.de>
* Use theme colors in extensions settings
* 📈 Insights QoL Part 2 (#20029)
* Update Dashboard Overview Page + New Only Import Sidebar
* Update Panel Config Drawer
* Remove Old Export Function
* Add changeset
* Add Back Missing Translations
* Fix Styling
* Update Styling to use new themeing
* Fox Formatting
* Fix Last CSS Var
---------
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* Fix auto-theme issue on public pages (#20045)
* Return default appearance from server info
* Don't default to auto
* Render light/dark class based on theme appearance
* Render browser matches dynamically
* Read default appearance on public project info
* No-mo' auto
* Fix linter error
* Use unhead to set body class attr
* Content Versioning: Small tweaks & fixes (#20020)
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
* fix input-rich-text-html body color css variable (#20049)
* Fix three small issues in `next` (#20051)
* Fix casting of json fields on sqlite
* Cast to json on user settings as well
* Prevent multiple versions of Vue/Pinia (#20066)
Co-authored-by: Brainslug <tim@brainslug.nl>
* Insights QoL - QA Fixes (#20063)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Add changeset for #20066 (#20071)
* Merge `main` into `next` (#20082)
* added save options and hide archive button for Content Versioning (#20095)
* Allow removal of version name (#20101)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Merge `main` into `next` (#20100)
* Add max length to `key` & `name` for Content Versioning (#20097)
* Make `next` ready for `main` (#20104)
* Durus: test for o2m (#19957)
* Fix casing in file names
* Refactor file structure
* Split up related field node
* formatter
* renamed fields-node.ts to fields.ts
* added o2m field in tdd test
* Split up tests
Co-authored-by: Nitwel <mail@nitwel.de>
* moved variables to test
* used random values in db response mock
* finalized actual test
* added some explanation
* encapsulated mock stream creation
* encapsulated receiving data from stream
* removed root prop in query
* Fix some spelling errors and variable names
* Remove mocked stream hotfix
* Reset mock after each test
* reduced test to a minimum
---------
Co-authored-by: Nicola Krumschmidt <nicola.krumschmidt@freenet.de>
Co-authored-by: Nitwel <mail@nitwel.de>
* fix styling for specific map buttons (#20047)
* fix styling for specific map buttons
* added myself to contributors.yml
* fix format
* fix location of code.
* removed extra space
* signed cla (#20058)
* Fix format of contributors.yml (#20068)
* Correct count param in BlobClient.download() (#20056)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* move api/errors to @directus/errors package (#20054)
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Fix http range request when transformation in use (#20060)
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Fixed SDK docblock for docs build (#20075)
* Docs: Snippet Toggler Improvements (#20077)
* Enforce Vue shorthand form for `true` attribute (#20079)
* Add homepage for quick ref in root package.json (#20083)
* Apply min-width for attached menus only (#20092)
* Apply min-width for attached menus only
* Add changeset
* Content Versioning Documentation (#20070)
* docs: add content-versioning guide
* docs: add versioning to user guide items
* updates: made updates to docs
* updates: add to headless cms guide
* fix: format
* fix: typo
* Fix link to versions ref page
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Use "Content Versioning" capitalized
* Addressed comments
* Format file
---------
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Kevin Lewis <kvn@lws.io>
* Allow disabling of field menu options (#20094)
* New Crowdin updates (#19816)
* New translations en-us.yaml (German)
* New translations en-us.yaml (Portuguese, Brazilian)
* New translations en-us.yaml (Persian)
* New translations en-us.yaml (Chinese Simplified)
* New translations en-us.yaml (Arabic)
* New translations en-us.yaml (Italian)
* New translations en-us.yaml (Dutch)
* New translations en-us.yaml (Vietnamese)
* New translations en-us.yaml (Spanish, Mexico)
* New translations en-us.yaml (Spanish)
* New translations en-us.yaml (Croatian)
* New translations en-us.yaml (Turkish)
* New translations en-us.yaml (Romanian)
* New translations en-us.yaml (French)
* New translations en-us.yaml (Afrikaans)
* New translations en-us.yaml (Bulgarian)
* New translations en-us.yaml (Catalan)
* New translations en-us.yaml (Czech)
* New translations en-us.yaml (Danish)
* New translations en-us.yaml (Greek)
* New translations en-us.yaml (Finnish)
* New translations en-us.yaml (Hebrew)
* New translations en-us.yaml (Hungarian)
* New translations en-us.yaml (Japanese)
* New translations en-us.yaml (Korean)
* New translations en-us.yaml (Lithuanian)
* New translations en-us.yaml (Norwegian)
* New translations en-us.yaml (Polish)
* New translations en-us.yaml (Portuguese)
* New translations en-us.yaml (Russian)
* New translations en-us.yaml (Slovak)
* New translations en-us.yaml (Slovenian)
* New translations en-us.yaml (Albanian)
* New translations en-us.yaml (Swedish)
* New translations en-us.yaml (Ukrainian)
* New translations en-us.yaml (Chinese Traditional)
* New translations en-us.yaml (Icelandic)
* New translations en-us.yaml (Indonesian)
* New translations en-us.yaml (Spanish, Chile)
* New translations en-us.yaml (Thai)
* New translations en-us.yaml (Estonian)
* New translations en-us.yaml (Hindi)
* New translations en-us.yaml (Malay)
* New translations en-us.yaml (English, Canada)
* New translations en-us.yaml (English, United Kingdom)
* New translations en-us.yaml (French, Canada)
* New translations en-us.yaml (Faroese)
* New translations en-us.yaml (Esperanto)
* New translations en-us.yaml (Breton)
* New translations en-us.yaml (Bosnian)
* New translations en-us.yaml (Serbian (Latin))
* New translations en-us.yaml (Nepali)
* New translations en-us.yaml (Sorani (Kurdish))
* New translations en-us.yaml (Spanish, Latin America)
* Update source file en-US.yaml
* Update source file en-US.yaml
* New translations en-us.yaml (Croatian)
* New translations en-us.yaml (Croatian)
* New translations en-us.yaml (Russian)
* New translations en-us.yaml (Italian)
* New translations en-us.yaml (Italian)
* New translations en-us.yaml (Italian)
* New translations en-us.yaml (Croatian)
* Update source file en-US.yaml
* Update source file en-US.yaml
* New translations en-us.yaml (German)
* New translations en-us.yaml (Greek)
* New translations en-us.yaml (Italian)
* New translations en-us.yaml (Greek)
* New translations en-us.yaml (Albanian)
* 10.6.4 (#20102)
* Exit prerelease mode
---------
Co-authored-by: Jan Arends <jan.arends@mailbox.org>
Co-authored-by: Nicola Krumschmidt <nicola.krumschmidt@freenet.de>
Co-authored-by: Nitwel <mail@nitwel.de>
Co-authored-by: Boegie19 <34578426+Boegie19@users.noreply.github.com>
Co-authored-by: Dominic <dmarx@marxulm.de>
Co-authored-by: mscbpi <ms@cbpi.ch>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Esther Agbaje <53586167+estheragbaje@users.noreply.github.com>
Co-authored-by: Kevin Lewis <kvn@lws.io>
---------
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: Connor <12714889+ConnorSimply@users.noreply.github.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Nihcep <32708027+Nihcep@users.noreply.github.com>
Co-authored-by: Rob Lee <rob@nodeworks.com>
Co-authored-by: Daniel Biegler <DanielBiegler@users.noreply.github.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Nicola Krumschmidt <nicola.krumschmidt@freenet.de>
Co-authored-by: Jan Arends <jan.arends@mailbox.org>
Co-authored-by: Nitwel <mail@nitwel.de>
Co-authored-by: Boegie19 <34578426+Boegie19@users.noreply.github.com>
Co-authored-by: Dominic <dmarx@marxulm.de>
Co-authored-by: mscbpi <ms@cbpi.ch>
Co-authored-by: Esther Agbaje <53586167+estheragbaje@users.noreply.github.com>
Co-authored-by: Kevin Lewis <kvn@lws.io>
* Remove res.status calculation as it is set later
* Ensure 500 is thrown on multiple errors of different types
* Add changeset
---------
Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
* Step 1
* Step 2
* False sense of confidence
* Couple more before dinner
* Update schema package
* Update format-title
* Upgrade specs file
* Close
* Replace ts-node-dev with tsx, and various others
* Replace lodash with lodash-es
* Add lodash-es types
* Update knex import
* More fun is had
* FSE
* Consolidate repos
* Various tweaks and fixes
* Fix specs
* Remove dependency on knex-schema-inspector
* Fix wrong imports of inspector
* Move shared exceptions to new package
* Move constants to separate module
* Move types to new types package
* Use directus/types
* I believe this is no longer needed
* [WIP] Start moving utils to esm
* ESMify Shared
* Move shared utils to @directus/utils
* Use @directus/utils instead of @directus/shared/utils
* It runs!
* Use correct schemaoverview type
* Fix imports
* Fix the thing
* Start on new update-checker lib
* Use new update-check package
* Swap out directus/shared in app
* Pushing through the last bits now
* Dangerously make extensions SDK ESM
* Use @directus/types in tests
* Copy util function to test
* Fix linter config
* Add missing import
* Hot takes
* Fix build
* Curse these default exports
* No tests in constants
* Add tests
* Remove tests from types
* Add tests for exceptions
* Fix test
* Fix app tests
* Fix import in test
* Fix various tests
* Fix specs export
* Some more tests
* Remove broken integration tests
These were broken beyond repair.. They were also written before we really knew what we we're doing with tests, so I think it's better to say goodbye and start over with these
* Regenerate lockfile
* Fix imports from merge
* I create my own problems
* Make sharp play nice
* Add vitest config
* Install missing blackbox dep
* Consts shouldn't be in types
tsk tsk tsk tsk
* Fix type/const usage in extensions-sdk
* cursed.default
* Reduce circular deps
* Fix circular dep in items service
* vvv
* Trigger testing for all vendors
* Add workaround for rollup
* Prepend the file protocol for the ESM loader to be compatible with Windows
"WARN: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'"
* Fix postgres
* Schema package updates
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
* Resolve cjs/mjs extensions
* Clean-up eslint config
* fixed extension concatination
* using string interpolation for consistency
* Revert MySQL optimisation
* Revert testing for all vendors
* Replace tsx with esbuild-kit/esm-loader
Is a bit faster and we can rely on the built-in `watch` and `inspect`
functionalities of Node.js
Note: The possibility to watch other files (.env in our case) might be
added in the future, see https://github.com/nodejs/node/issues/45467
* Use exact version for esbuild-kit/esm-loader
* Fix import
---------
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Add `getMilliseconds` util for safer value interpretation
* Test more data types
* Remove remnant
* Customizable fallback with default of undefined
* Clean-up
* Transform getMilliseconds to named export
---------
Co-authored-by: ian <licitdev@gmail.com>
* EXTENSIONS_CACHE_TTL: Add to allow list & decouple from other cache envs
* Remove unnecessary import
* Broaden getCacheControlHeader function, use it for assets & extensions
* Add unit tests
* Apply suggestions from code review
Consistent lowercase "cache-control" in test description
---------
Co-authored-by: ian <licitdev@gmail.com>
* Expose schema endpoints
* respond with 204
* fix payload for export flag
* allow export as YAML
* use SchemaService
* move getStringFromStream to utils
* clearer exceptions with logs
* check empty request body
* specs
* add bypassCache flag and remove flushCaches calls
* Identify integer typed fields in Oracle
* Fix uuid foreign keys type for Oracle
* Detect autoincrement for CockroachDB
* Bypass cache for fields and relations services
* Add same DB tests
* Test if working for all vendors
* Add schema snapshot testing into sequential flow
* Fix schema re-apply attempts when it's a different database vendor (#14816)
* prevent diffing on certain properties
* fix apply-snapshot test
* prevent updates to autoincrement fields' schema
* sanitize relations
* remove `colleciton.schema.sql` parsing in test
It is now being sanitized by `sanitizeCollection()` function in get-snapshot-diff.ts
* Change concurrency group to not cancel test running on main
* remove multipart for apply & add hash checking
* check incoming version & add force query param
* refine error message & stub for nested hash
* add `vendor` top-level property
as an additional safety net for cross db vendor applies
* sanitize generated schema snapshots
* snapshot joi validation
* diff joi validation
* minor cleanup
* extract applyDiff & use deep-diff applyChange
* use applyDiff in schema service
* Mark vendor as optional
* Update tests to apply diffs
* move force flag check into service
* Patch mssql vendor typo
* Set relation no action in cyclic relations
* Update mysql timestamp default value
* Oracle cannot define no action
* Update oracle timestamp type default values
* add hash checking for outdated diffs
* fix diff service & endpoint
* Add hashes when returning after
* Fix self referencing relations for Oracle
* Add temp fix for CURRENT_TIMESTAMP defaults in Oracle
* clean up driver and database client types
* only require diff hash if not kind N
* update hash comparison logic for create/delete
* Set no action constraint for self referencing M2M in MSSQL
* Add basic hash check tests
* omit default value when hashing auto increments
Specifically for CockroachDB with differing sequences
* add vendor check
* update specs
* Validate vendors with type definition
* Spread the vendors input array
* re-add Export component
* re-add js-yaml to root
* Propagate mutation options for schema apply
* Verify that snapshots differ and clear cache before hash tests
* Fix unit test
* Revert temp fix for CURRENT_TIMESTAMP defaults in Oracle
* Define and reuse type for export format
* Define and reuse list of database clients
* change `were` to `was`
* change `where` to `were`
* add some empty lines for readability
* tweak exception message
* fix test
* use object-hash
* use boolean to check whether file is included
* simplify request content type check
* throw error when multiple files were uploaded
* use nullish coalesce instead of short circuit
* Update api/src/services/schema.ts
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* Remove unnecessary `Omit` on `SnapshotWithHash` type
* Revert "Remove unnecessary `Omit` on `SnapshotWithHash` type"
This reverts commit d22ac771ec.
* check empty snapshot earlier
* use allow-list logic via pick instead of omit
* Update api/src/services/schema.ts
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Move to own /schema endpoint controller
* Fix refs to schema endpoint
* move streamToString to utils package
* move get-versioned-hash and add test
* extract kind into an enum
* Fix mysql5 timestamp value
* Fix test collection existing on rerun
* resolve TODO comment in blackbox test
* Drop deep level hashes in diff
These hashes are used only for more accurate error reporting
but are otherwise superfluous, since changes are already
detected by the top level hash.
Therefore we remove them in favor of a simpler diff format and
implementation.
* Revert schema "fix" for createItem, add comment
* Strict diff schema validation
* Revert CrDB auto-increment detection patch in 816c998
* Clear systemCache to expose newly added fields
* Use DiffKind constants
* Extract diff & snapshot validation into own tested utils
* Apply suggestions from @azrikahar
* Update knex-schema-inspector to 3.0.1
Includes the fix for CrDB auto-increment detection (knex/knex-schema-inspector#135)
* Update knex-schema-inspector in packages
* Update lock file
* add test for schema service
* add test for export service
* add relevant tests to modified util functions
* fix csv test to account for os end of line
* fix files controller test
* dedupe test data for schema service
* Align schema specs with docs
* Update api/src/controllers/schema.ts
* Revert testing for all vendors
---------
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Refactor storage logic to testable setup
* Add tests to get storage config
* Add tests for register drivers
* Tests for index
* Organize imports
* Add missing getStorage
* Setup boilerplate for cloudinary drive
* Add build script
* Add cloudinary configuration
* WIP tweaks for R&D
* Start storage abstraction v2
* Make storage manager single file
* Add test coverage
* Organize imports
* Setup local driver boilerplate
* [WIP] Start on local driver 2.0
* Add more methods
* Lunchtime
* Add put method
* Add list method
* [WIP] Try using storage in api
* Use node16 module-resolution
* Lets not mess with apply-query rn
* I love CJS. Death to CJS.
* Use dynamic imports
* Make things work
* Add path normalizer
* Add azure storage driver
* Update lock
* Start on tests
* Add getBuffer test
* Add getStat tests
* Add tests for exists
* Add tests for move
* Add tests for copy
* Add tests for put
* Add tests for delete
* Add test coverage for list
* Add removeLeading option to normalizePath
* Use removeLeading option
* Start on gcs
* Add fullpath test
* Add getStream
* Add getBuffer
* Add getStat
* Add exists
* Add move
* Add copy
* Add put
* Add delete
* Finish DriverGCS
* Cleanup tests a bit
* Start s3
* Add getStream
* Add getBuffer
* Please Wryn
* Add #exists
* Use randomize data
* No more hardcoded values 🙅♀️
* Add tests for copy
* Add tests for put
* Add put/copy/delete
* Add tests for delete
* WIP list
* Remove duplicate fullPath check
* Finish AWS tests
* Listen to wryn
* Mission critical tweak
* Add randomization, cleanup tests
* Check src vs dest full path
* Start on Cloudinary
* Add parameter signature helper
* Fix ESM building of shared
* Fix ESM building of shared
* Improve tests
* Update pnpm
* Remove old build commands
* Generated d.ts files
* Fix export naming
* Move ESM only utils to new @directus/utils
* Update lockfile
* Fix type exports
* Implement getStream
* Cleanup tests
* Simplify api
* Simplify API
* Simplify api
* Simplify API
* Add read/stat
* Cleanup / add exists
* Add move
* Add write
* Move uploadChunk to separate method
* Add test for #uploadChunk
* Add tests for write
* Add copy
* Add delete
* Add list
* Add list error handling
* Remove old drive packages
* Start updating API usage of storage
* Use Readable instead of NodeJS.ReadableStream
* Use readable instead of buffer
* Restore shared to main
* Update lockfile
* Use a streaming pipeline for sharp metadata
* Add basic e2e test for local upload and delete
* Fix integer filesize in SQLite
* fixed environment mocking in unit tests
* applied the same env mocking to other tests
* Update api/src/storage/register-drivers.ts
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Use sha256 by default
* Add base read test for /assets
* Replace exifr with exif-reader
* Fix tests for storage/index
* Install faking lib for tests
* Add test for register-drivers
* Add tests for register-locations
* Finish tests
* Organize imports
* Resolve Azris comments
* Fix outdated tests
Certainly not the cleanest, but I need to do a bigger pass on all these tests to get them up to date with the latest team requirements. Gonna do that in a separate PR..
* Test for sha256
* Attempt 1 at fixing toString errorr
I'm not seeing this issue locally, so we'll spam a couple commits here to get things going
* Use node 18 in tests?!
* Fix localhost resolution with 127.0.0.1
* Mock getEnv()
* Use @directus/tsconfig instead of duplicated conf
* Does this fix it?
* OK fun detour
* Recreate lockfile
* Update config files
* Use multipart uploads in S3
* Cleanup imports
* File Storage 2.0: Make metadata extraction backward-compatible (#16868)
* Reinstall packages using pnpm instead of manually removing them (#16871)
* Added extra environment setting for sharp processing of invalid images (#16811)
* Added extra environment setting for sharp processing of invalid images
* renamed environment var to `ASSETS_INVALID_IMAGE_SENSITIVITY_LEVEL`
* Remove unused excludes from tsconfig
* Remove copy/paste leftover
* Update packages/utils/readme.md
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Update packages/utils/package.json
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Propagate mutation options for schema apply
* Fix unit test
* Add bypassCache flag and remove flushCaches calls
* remove accountability option from getSchema
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
* build: ➕ add vitest and update test scripts
* build: 🔧 add vitest config
* build: ✅ Migrate tests to vitest
Remove jest references from test api test files and replace with vitest equivalents.
Tests: 13 tests are failing.
* build: 🚚 move vite.config.ts to api/src folder
* build: 🔥 remove unused vitest.config from api root
* build: ✅ import vitest modules for tests
* build: ✅ add type conversion for actual object
* Finish switch from Jest to Vitest in API
* Replace some leftovers
* Load "sharp" before tests
* Try with cjs
* Temporary enable verbose reporter
* Try with globalSetup
* Fix path to globalSetup
* Provide default export in globalSetup
* Final clean-up
* Remove @vitest/ui & update vitest to 0.25.0
* Add vitest c8 coverage dependency
* Update vitest to v0.25.1
* Replace unnecessary Vitest workaround
* Rework new tests
* Resolve build errors
Co-authored-by: Dorian C Brown <brown.3794@gmail.com>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* Utils to compress/decompress data
Gzip was chosen because we want smaller data but quick algorithm since this will be ran for every request
* Compress system cache
* Decompress system cache
* Set/Get compressed cache for individual requests
* Switch from gzip to snappy, use json compression too
* Fix cache exp set/get
* Remove unused import
Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
* query function added to list
* dashboard reading query, adding to object
* typecasting of filter vals needed still
* numbers accepting strings too
* json-to-graphql-query => devD
* fixed unneeded return in list index.ts
* stitching and calling but not actually calling
* calls on panel change
* query object += new panel before dashboard save
* uuid generated in app not api
* fixed panel ids in query
* fixed the tests I just wrote
* passing the query data down!
* list showing data
* objDiff test moved to test
* metric bug fixes + data
* dashboard logic
* time series conversion started
* timeseries GQL query almost there
* query querying
* chart loading
* aggregate handling improved
* error handling for aggregate+filter errors
* removed query on empty queryObj
* maybe more error handling
* more error handling working
* improvements to erorr handling
* stitchGQL() error return type corrected
* added string fields to COUNT
* pushing up but needs work
* not an endless recursion
* its not pretty but it works.
* throws an error
* system collections supported
* refactor to solve some errors
* loading correct
* metric function fixed
* data loading but not blocking rendering
* removed redundant code.
* relational fields
* deep nesting relations
* options.precision has a default
* relational fields fix. (thanks azri)
* the limit
* limit and time series
* range has a default
* datat to workspace
* v-if
* panels loading
* workspaces dont get data anymore
* package.json
* requested changes
* loading
* get groups util
* timeseries => script setup
* list => script setup
* metric => script setup
* label => script setup
* declare optional props
* loadingPanels: only loading spinner on loading panels
* remove unneeded parseDate!!
* applyDataToPanels tests
* -.only
* remove unneeded steps
* processQuery tests
* tests
* removed unused var
* jest.config and some queryCaller tests
* one more test
* query tests
* typo
* clean up
* fix some but not all bugs
* bugs from merge fixed
* Start cleaning up 🧹
* Refactor custom input type
* Small tweaks in list index
* Cleanup imports
* Require Query object to be returned from query prop
* Tweak return statement
* Fix imports
* Cleanup metric watch effect
* Tweaks tweaks tweaks
* Don't rely on options, simplify fetch logic
* Add paths to validation errors
* [WIP] Start handling things in the store
* Rework query fetching logic into store
* Clean up data passing
* Use composition setup for insights store
* Remove outdated
* Fix missing return
* Allow batch updating in REST API
Allows sending an array of partial items to the endpoints, updating all to their own values
* Add batch update to graphql
* Start integrating edits
* Readd clear
* Add deletion
* Add duplication
* Finish create flow
* Resolve cache refresh on panel config
* Prevent warnings about component name
* Improve loading state
* Finalize dashboard overhaul
* Add auto-refresh sidebar detail
* Add efficient panel reloading
* Set/remove errors on succeeded requests
* Move options rendering to shared
* Fix wrong imports, render options in app
* Selectively reload panels with changed variables
* Ensure newly added panels don't lose data
* Only refresh panel if data query changed
* Never use empty filter object in metric query
* Add default value support to variable panel
* Centralize no-data state
* Only reload data on var change when query is altered
* Fix build
* Fix time series order
* Remove unused utils
* Remove no-longer-used logic
* Mark batch update result as non-nullable in GraphQL schema
* Interim flows fix
* Skip parsing undefined keys
* Refresh insights dashboard when discarding changes
* Don't submit primary key when updating batch
* Handle null prop field better
* Tweak panel padding
Co-authored-by: jaycammarano <jay.cammarano@gmail.com>
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
Co-authored-by: ian <licitdev@gmail.com>
* Adds x-directus-cache response header with HIT value
* Added ENV var for cache header and MISS, UNCACHEABLE
* Rename CACHE_HEADER_KEY -> CACHE_STATUS_HEADER
Tad opinionated, but I feel like it describes the functionality slightly better
* Return miss consistently
Uncacheable doesn't quite describe what's happening. The user actively requests the cache to be skipped, which should result in an expected miss. The value isn't un-cacheable, the cache is skipped on purpose
Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
* Use script setup
* Start on export dialog
* Use new system field interface, replace limit with numeric input
* Set placeholder
* Add sort config
* Use folder picker, correct layoutQuery use
* Add local download button
* Allow writing exports to file
* Add notification after export
* Fix sort config, use new export endpoint
* Setup notification hints
* Add information notice
* Fix local limit, cancel button
* Add (basic) docs for export functionality
* Fix json export file format
* Implement xml batch stitching
* Resolve review points
* Add "authenticate" filter hook that allows custom auth check
* Start on test
* Update Jest, restructure API tests, start implementing authenticate test
* Move access token verify to util function
* Ensure jest can show inline warnings on correct lines
* Update is-directus-jwt to use jsonwebtoken decode + add tests
* Remove unused package
* Tweak and finish + test authenticate
* Tweak test
* Add authenticate filter to docs
* Don't scan tests for codeql
* No seriously, ignore tests