* Fix primary key unique constraint error extraction for MySQL
* Add changeset
* Add changeset
* Add comment about MariaDB
* Drop 5.7 special case
---------
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* Limit users
* Add defaults
* Allow specifying of reason for limit exceeded error
* Update config options doc
* Make existing tests pass
* Update extensions limit error
* Update usage of regular expression
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Rename typo
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Rename files
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
* Use first() and remove redundant +=
* Fix incorrect api access count
* Rework to account for passing of unchanged access values
* Fix increased counts in updateMany
* Consistent error message
* Simplify unnecessary find
* Add tests
* Rename UserCount to AccessTypeCount
* renamed env var
* prettier
* Add changeset
* fix limit checking for batch and status updates
* test and prettier
* removed obsolete check
* updated error
* fixed error usage in extenions service
* Use randomUUID from '@directus/random'
* Fix payload check in updateMany
* implemented RolesService.updateBatch from its parent
* resolved unit test error
* updated type
* fixed existing role query
* Temporary activation of blackbox tests
* Move to separate fn, to make skippable for non-existent role
* Revert "Temporary activation of blackbox tests"
This reverts commit 4c4ac846d6.
* Revert "Move to separate fn, to make skippable for non-existent role"
This reverts commit 1d90a82e39.
* Add user limits - extension (#22642)
* adressing existing users issue
* migrated changes from pascal
* only check the role for active users
* only count active users
* updated incorrect if
* default to count zero
* Undid abstraction to separate function
* fixed updating through user counting error
* prettier
* simplified fallback query
* prettier
* Added try catch to be safee
* updated db mocking for tests
* removed extra check to satisfy implementation tests
---------
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Add support for MIGRATIONS_PATH (#20627)
* Deprecate "local" extension types (#20624)
* No longer resolve local non-package extensions
* Remove local extensions from watcher
* Install fs-extra for app dev
* Replace usage of get-extensions
* Rename create functions to match behavior
* Drop extensions prefix from cli create
* Drop name requirement from cli add
* Drop extensions name regex checks
* Don't rely on regex for extension identification
* Add changeset
* Fix build for @directus/extensions
* Don't ensure nested dirs
* Load npm dependency by name prefix
* Throw more helpful error when pkg json is missing
* Fix dependency loading paths
* Only load local extensions if extensions path exists
* Fix merge conflict
* Remove unused fs-extra
* Only sync extensions if location is defined
* `extensions` -> `localExtensions`
* Fix resolving of package extensions
- consistent usage of term "package extensions"
- enhance error messages
* Fix syncing extension from storage
* Revert-revert change from #20627
---------
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Add back `MIGRATIONS_PATH` to `@directus/env` (#21053)
* Setup browse endpoint for browsing Directus extensions (#21033)
* Rename tag directus-custom to directus-extension
* Devil's in the details
* [WIP] Start on search lib
* Setup extensions-registry package
* Update pnpm lock
* Move registry search fn to new package
* Squash bugs
* Remove unused deps
* Remove unused dep in `extensions`
* Add tests for validate-limit
* Finish test coverage
* Remove unused constant
* Add back lodash-es 😇
* Install extensions-registry
* Add default keywords
* Expose registry endpoint in rest api
* Add describe module
* Reinstal pnpm
* Drop reliance on author field
The problem is that there's no requirement for it to be a valid(ated) user. Publisher is the only field we can rely on being an existing NPM user.
* Update convertSearchResult test after author change
* Format
* Allow anything after the route
To support packages with scopes
* Add test for describe
* Add more tests
* Throw unprocessablecontenterror instead of error
* Install errors pkg
* Finish test coverage
* Don't require description
* Don't wrap individual keywords
* Run formatter
* Add changeset
* Update packages/extensions-registry/src/modules/search/utils/validate-text.ts
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Return sandbox information
* Drop support for directus-custom keyword
* Set type to null for multiple tags
* Restart api for new registry
* Add version utility
* Add out-of-date error
* Add assertion for api versions
* Finish new list method
* Add describe
* Use updated registry functions
* Fix controller usage
* Return output in data flag to be consistent
* Add tests for the describe module
* Add tests for list module
* Finish tests for extensions-registry package
* Remove vscode shenanigans
---------
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
* Project Forum: Browse UX (#21276)
* Render marketplace route in-app
* Update api list integration
* Add support for limit/offset in list
* Boilerplate route for drawer
* Render extension readme in drawer
* Render extension detail as separate page
* Setup markup for extension banner
* Render readme with markdown styling
* Boilerplate metadata block
* Use v-list for extension metadata metrics
* Render compatibility metric
* Show downloads and publish date
* Refactor to individual files
* Fix missing import
* Add size metric
* Show author on metadat
* Show verified badge
* Finish metadata
* Run formatter
* Style forum detail banner (#21290)
* Style banner contents
* Add background art
* Add banner styles to default dark mode theme
* Undo base style change to avoid conflict
* Add beta chip badge to settings nav (#21296)
* Add layout styling for detail page (#21297)
* Render metadata as grid if size allows
* Finish layout for detail page
* Fix alignment of count
* Fix search-input active state
* Finalize forum header
* Add marketplace banner
* Style registry filter
* Change v-list-item height to min-height
Allows rows for forum registry to grow
* Finalize styling for extension list item
* Finalize styling for registry
* Don't rely on format util
* Forum account detail page (#21299)
* Add support for author describe endpoint
* Boilerplate author page
* Add author endpoint
* Update naming to account
* Render github name on registry list
* Render user's name + avatar on detail
* Load account data on account page
* Restructure module
* Render account banner on account page
* Render account metadata
* Finish account detail page
* Run formatter
* Add sidebar info detail sections
* install extensions from registry (#21070)
* added an endpoint to install extensions from registries
* add changeset
* Revert format/lint scripts
* Update pnpm-lock
* Remove unused dependency
* Add download module to extensions-registry abstraction
* Download from extension registry instead of direct npm
* Throw on error
* Install based on version ID rather than name
* Install based on ID in body
Allows us to extend it in the future if need be
* Download to tmp path instead of extensions
* Save to extensions manager flattened
* Use const for package folder name
* Run more in try/catch to avoid server exit
* Remove changeset
* Undo docs updates
We'll do all docs in a single PR :)
---------
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
* Manage extensions by directus_extensions primary key instead of npm package name (#21300)
* Add marketplace migration
* Include bundle info
* Rename name to folder
* Store name as folder
* [WIP] Change name to ID
* Update API to use UUIDs for extensions
* Update app to use extensions id
* Run formatter
* Add changeset
* Update generate-app-entrypoint to use updated format
* Fix graphql usage
* Format
* Add forum uninstall endpoint (#21301)
* Bootstrap uninstall
* Finish uninstall endpoint
* Use shared extensions store state for managing extensions in settings (#21317)
* Use extensionsstore for extensions management
* Use shared store for extensions state and modification
* Remove unused emit
* Adds install/uninstall GUI elements for project forum (#21319)
* Use warning color for incompatible
* Styling tweaks
* Transition optional background color
* Add keys for installing
* Add install button to extension detail
* Finish install button
* Add uninstall option to extensions item
* Empty local cached extensions on start
* Add (hopefully) temporary hack to await reload
* Add install / uninstall buttons
* Update lockfile
* Fix bundle entries not rendering properly
* Clean up spinner styling
* Properly wait for reload to be done
* Run formatter
* Fix registry name
* Fix local extension loading
* Render location/company in byline
* Rearchitect metadata to unstyled listitems
* Add max-width to page container
* Only allow admins to install/uninstall extensions
* Remove unused link
* Disable eslint for map use
* Run formatter
* Add no-results indicator (#21389)
* Add no-results indicator
* add error state as well
* Standardize trailing slash
* Standardize pk check
* Resolve unnecessary check
* Move all deps to dev deps in app
* Optimize exec order
* Pull data from top level package
* Redesign filter bar
* Reset page count on filter change
* Use default padding on top of page
Feels weird now, but there's a theme-update coming that'll make this make sense :)
* Show first/last in pagination
* Auto-format package name
* Use updated registry api return names
* Add sorting by total downloads
* Add sparkline for downloads
* Add a bit of padding
* Finalize sparkline styling
* Run formatterg
* Add sandbox flag in list call
* Add MARKETPLACE_TRUST env var
* Set sandbox requirement on download
* Render list item badge
* Fix padding
* Show license in gui
* Add support for multiple maintainers
* Add activity tracking for install
* Make incompatibility notice friendlier
* Tweak margin of sparkline
* Update default CSP headers to include github content
* Make extension readme selectable
* Consistent icon, add tooltips
* Reduce size of install button
* Run formatter
* Render readme anchors with target blank
* Add min width to v-select components
* Fix background on search input
* Reduce padding on marketplace pages
* Fix showing no results
* Be consistent
* Render type filter menu in full height
* Clean up compatibility notice
* Hide count result when search count is 0
* Use v-show instead
* Bump no results notice down a bit
* Cleanup size of install buttons
* Use buttons for install / author
* Fix sparkline rendering
* Add better loading state for extension detail page
* Add spinners
* Render proper error message in case readme is missing
* Use heart logo for marketplace
* Add image border shadow
* Add loading banner on account page
* Show reload warning as persistent notification
* Only show one notification
* Update snapshot
* Add padding to verified icon
* Base extensions id on package id, show installed badge
* Sync pagination / search / filter with URL
Special shoutout to Tim
* Next max ext (#21541)
* Add limit exceeded error
* Add limit exceeded translation
* Add extensions_limit env var
* Load extensions limit in app
* Don't allow installing unknown versions
* Don't require installed flag
* Return bundled entries in describe
* Update chip to match style
* Prevent install on limit reached
* Run formatter
* Fix bundle loading
* Resolve npm extensions by package manifest (#21478)
* Merge main into next (#21669)
* Clean-up deps
* Don't export type (as long as not used anywhere)
* Update semver to latest
* Relax compatibility notice
* Use more suitable icon for version
* Re-render download charts on color-scheme change
* Link extensions to marketplace
---------
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Mahendra Kumar <22556323+mahendraHegde@users.noreply.github.com>
* add docs to eslint
* update prettier ignore
* fix vitepress linting
* eslint ignore fixes
* prettier run
* update prettier ignore
* fix formatting
* enable linting of markdown files
* revert format command change
* fix irregular whitespace
* update dictionary
* (Changelog) Create four-boxes-shake.md
* Rework ESLint / Prettier setup
- Disable js/ts/vue files for Prettier to ensure linting/formatting is
only happening via ESLint
- Rework formatting of code blocks in md files
- Disable formatting of code blocks in md files under '/docs' by Prettier
- Instead use "eslint-plugin-markdown" to format & __lint__ js*/ts*/vue such code blocks
- Replace unmaintained "eslint-plugin-md" plugin by official "eslint-plugin-markdown" plugin
- I'll check whether we can use this to format other code blocks
(json, html, ...) as well
- Restructure, clean-up and apply some fixes to the ESLint config
(Note: Not ready for flat config yet since not supported by
vscode-eslint)
- Enable cache for ESLint / Prettier in scripts
- Clean-up ignore file
- Explicit folder declaration (.../)
- Don't ignore all 'extensions' folders in ESLint (only
'/api/extensions/')
- Enable formatting in '/.github' folder
* Fix all formatting issues with Prettier
* Update md files under /docs/.typedocs
* Fix lint issues in vue/js files
* ESLint / Prettier config revision v2
Enable Prettier for md code blocks, but only as warnings since it can
get into the way with Vitepress md extensions like '[!code ...]'
comments
* Remove prettier-ignore comments
* Make spellchecker happy
* Remove changeset
* Revert lint setup for code blocks
There are many cases in the docs where linting / formatting of code
blocks doesn't make
sense:
- Code block is only an excerpt - linter fails
- Code block contains special comments (e.g. markdown extensions) which
needs to remain at the same place - formatting would break it
- ...
* Apply lint issues / formatting from temp lint setup
* Run formatter
* Fix merge failure
* Simplify & modernize ESLint / Prettier setup
No longer run Prettier via ESLint. Nowadays, this is the recommended
setup. There's no real need to run it this way, it's just an additional
layer.
Add VS Code settings to make the work with the new setup easier.
* Remove unused eslint disable directives
* Make editorconfig more useful
* Fix formatting issues reported by editorconfig
* Format files with Prettier
* Enable formatting of source translations file
* Format source translations file
* Remove unnecessary console error
* Remove unnecessary line
* Only ignore md files under .changeset
* Add CI reporter for Prettier
* Fail job on wrongly formatted files
* Fix format
* Test Prettier action on changed/added file
* Use simple CI format check for now & no cache
* Revert "Test Prettier action on changed/added file"
This reverts commit 4f7d8826ad.
* Introduce code blocks check for docs
* Fix code block issues
* Ignore auto-generated packages dir
* Fix comment position
* Also lint `/app/.storybook`
* Reformat modified files
---------
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com>