mirror of
https://github.com/directus/directus.git
synced 2026-01-27 11:18:25 -05:00
* 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>
131 lines
3.2 KiB
JavaScript
131 lines
3.2 KiB
JavaScript
import {
|
|
APP_OR_HYBRID_EXTENSION_PACKAGE_TYPES,
|
|
APP_OR_HYBRID_EXTENSION_TYPES,
|
|
APP_SHARED_DEPS,
|
|
NESTED_EXTENSION_TYPES,
|
|
} from '@directus/constants';
|
|
import {
|
|
ensureExtensionDirs,
|
|
generateExtensionsEntrypoint,
|
|
getLocalExtensions,
|
|
getPackageExtensions,
|
|
} from '@directus/utils/node';
|
|
import yaml from '@rollup/plugin-yaml';
|
|
import vue from '@vitejs/plugin-vue';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
import { searchForWorkspaceRoot } from 'vite';
|
|
import { defineConfig } from 'vitest/config';
|
|
|
|
const API_PATH = path.join('..', 'api');
|
|
const EXTENSIONS_PATH = path.join(API_PATH, 'extensions');
|
|
|
|
// https://vitejs.dev/config/
|
|
export default defineConfig({
|
|
plugins: [
|
|
directusExtensions(),
|
|
vue(),
|
|
yaml({
|
|
transform(data) {
|
|
return data === null ? {} : undefined;
|
|
},
|
|
}),
|
|
],
|
|
resolve: {
|
|
alias: [
|
|
{ find: '@', replacement: path.resolve(__dirname, 'src') },
|
|
{ find: 'json2csv', replacement: 'json2csv/dist/json2csv.umd.js' },
|
|
],
|
|
},
|
|
base: process.env.NODE_ENV === 'production' ? '' : '/admin/',
|
|
server: {
|
|
port: 8080,
|
|
proxy: {
|
|
'^/(?!admin)': {
|
|
target: process.env.API_URL ? process.env.API_URL : 'http://127.0.0.1:8055/',
|
|
changeOrigin: true,
|
|
},
|
|
},
|
|
fs: {
|
|
allow: [searchForWorkspaceRoot(process.cwd()), ...getExtensionsRealPaths()],
|
|
},
|
|
},
|
|
test: {
|
|
environment: 'happy-dom',
|
|
setupFiles: ['src/__setup__/mock-globals.ts'],
|
|
},
|
|
});
|
|
|
|
function getExtensionsRealPaths() {
|
|
return fs.existsSync(EXTENSIONS_PATH)
|
|
? fs
|
|
.readdirSync(EXTENSIONS_PATH)
|
|
.flatMap((typeDir) => {
|
|
const extensionTypeDir = path.join(EXTENSIONS_PATH, typeDir);
|
|
if (!fs.lstatSync(extensionTypeDir).isDirectory()) return;
|
|
return fs.readdirSync(extensionTypeDir).map((dir) => fs.realpathSync(path.join(extensionTypeDir, dir)));
|
|
})
|
|
.filter((v) => v)
|
|
: [];
|
|
}
|
|
|
|
function directusExtensions() {
|
|
const virtualExtensionsId = '@directus-extensions';
|
|
|
|
let extensionsEntrypoint = null;
|
|
|
|
return [
|
|
{
|
|
name: 'directus-extensions-serve',
|
|
apply: 'serve',
|
|
config: () => ({
|
|
optimizeDeps: {
|
|
include: APP_SHARED_DEPS,
|
|
},
|
|
}),
|
|
async buildStart() {
|
|
await loadExtensions();
|
|
},
|
|
resolveId(id) {
|
|
if (id === virtualExtensionsId) {
|
|
return id;
|
|
}
|
|
},
|
|
load(id) {
|
|
if (id === virtualExtensionsId) {
|
|
return extensionsEntrypoint;
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: 'directus-extensions-build',
|
|
apply: 'build',
|
|
config: () => ({
|
|
build: {
|
|
rollupOptions: {
|
|
input: {
|
|
index: path.resolve(__dirname, 'index.html'),
|
|
...APP_SHARED_DEPS.reduce((acc, dep) => ({ ...acc, [dep.replace(/\//g, '_')]: dep }), {}),
|
|
},
|
|
output: {
|
|
entryFileNames: 'assets/[name].[hash].entry.js',
|
|
},
|
|
external: [virtualExtensionsId],
|
|
preserveEntrySignatures: 'exports-only',
|
|
},
|
|
},
|
|
}),
|
|
},
|
|
];
|
|
|
|
async function loadExtensions() {
|
|
await ensureExtensionDirs(EXTENSIONS_PATH, NESTED_EXTENSION_TYPES);
|
|
const packageExtensions = await getPackageExtensions(API_PATH, APP_OR_HYBRID_EXTENSION_PACKAGE_TYPES);
|
|
const localExtensions = await getLocalExtensions(EXTENSIONS_PATH, APP_OR_HYBRID_EXTENSION_TYPES);
|
|
|
|
const extensions = [...packageExtensions, ...localExtensions];
|
|
|
|
extensionsEntrypoint = generateExtensionsEntrypoint(extensions);
|
|
}
|
|
}
|