* 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>
* 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
* Temp remove settings pane
Different PR!
* Add changeset
* Run formatter
* Fix import in test
* Change license to BSL1.1
* Mark major version
* Fix formatting
* Remove duplicate heading
* Update formatting
* Copy paste error
* Update license
* Update license
* Format covenants
* Update readme.md
* Update licenses for packages
* Update readme.md
* Update contributors.yml
OG... but to be clear, rijkvanzanten is the one who really built all of this ❤️
* Tweak license in openapi
* Update packages/specs/src/openapi.yaml
* Add MIT license headers
* Use v10 in examples
* Update additional examples
* Update generate-extensions-entrypoint.test.ts
* Update tests to use latest v9 and v10 versions
* use lowercase for naming consistency
* change casing for api license
* Update migrations doc
* Update dictionary
* Consistent ordering of license field in app/package.json
* Use major version in specs again (but as string)
So it's valid for all v10 versions
* Consolidate readme's
---------
Co-authored-by: Ben Haynes <ben@directus.io>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.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>