From af2ce35d67f2d93b9d18c5937a87ddbd8f877a2a Mon Sep 17 00:00:00 2001 From: Nicola Krumschmidt Date: Thu, 27 Apr 2023 23:18:02 +0200 Subject: [PATCH] Add shared javascript file ext constant (#18350) * Add shared javascript file ext constant * Add changeset --- .changeset/calm-glasses-enjoy.md | 7 +++++++ api/src/extensions.ts | 8 ++++---- packages/constants/src/files.ts | 1 + packages/constants/src/index.ts | 1 + packages/extensions-sdk/create-build.test.ts | 5 ++--- .../src/cli/commands/helpers/load-config.ts | 7 ++++--- 6 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 .changeset/calm-glasses-enjoy.md create mode 100644 packages/constants/src/files.ts diff --git a/.changeset/calm-glasses-enjoy.md b/.changeset/calm-glasses-enjoy.md new file mode 100644 index 0000000000..70d94849de --- /dev/null +++ b/.changeset/calm-glasses-enjoy.md @@ -0,0 +1,7 @@ +--- +'@directus/extensions-sdk': patch +'@directus/constants': patch +'@directus/api': patch +--- + +Added a constant with all possible javascript file extensions diff --git a/api/src/extensions.ts b/api/src/extensions.ts index f439ebf4b5..d4160a20da 100644 --- a/api/src/extensions.ts +++ b/api/src/extensions.ts @@ -2,6 +2,7 @@ import { APP_EXTENSION_TYPES, APP_SHARED_DEPS, HYBRID_EXTENSION_TYPES, + JAVASCRIPT_FILE_EXTS, NESTED_EXTENSION_TYPES, } from '@directus/constants'; import * as sharedExceptions from '@directus/exceptions'; @@ -298,15 +299,14 @@ class ExtensionManager { const localExtensionUrls = NESTED_EXTENSION_TYPES.flatMap((type) => { const typeDir = path.posix.join(extensionDirUrl, pluralize(type)); - const fileExts = ['js', 'mjs', 'cjs']; if (isIn(type, HYBRID_EXTENSION_TYPES)) { return [ - path.posix.join(typeDir, '*', `app.{${fileExts.join()}}`), - path.posix.join(typeDir, '*', `api.{${fileExts.join()}}`), + path.posix.join(typeDir, '*', `app.{${JAVASCRIPT_FILE_EXTS.join()}}`), + path.posix.join(typeDir, '*', `api.{${JAVASCRIPT_FILE_EXTS.join()}}`), ]; } else { - return path.posix.join(typeDir, '*', `index.{${fileExts.join()}}`); + return path.posix.join(typeDir, '*', `index.{${JAVASCRIPT_FILE_EXTS.join()}}`); } }); diff --git a/packages/constants/src/files.ts b/packages/constants/src/files.ts new file mode 100644 index 0000000000..38afc714e9 --- /dev/null +++ b/packages/constants/src/files.ts @@ -0,0 +1 @@ +export const JAVASCRIPT_FILE_EXTS = ['js', 'mjs', 'cjs'] as const; diff --git a/packages/constants/src/index.ts b/packages/constants/src/index.ts index a11c6edef8..50af655ec3 100644 --- a/packages/constants/src/index.ts +++ b/packages/constants/src/index.ts @@ -1,5 +1,6 @@ export * from './activity.js'; export * from './extensions.js'; export * from './fields.js'; +export * from './files.js'; export * from './injection.js'; export * from './regex.js'; diff --git a/packages/extensions-sdk/create-build.test.ts b/packages/extensions-sdk/create-build.test.ts index b88fd2ca0b..afba3f978d 100644 --- a/packages/extensions-sdk/create-build.test.ts +++ b/packages/extensions-sdk/create-build.test.ts @@ -1,11 +1,10 @@ -import { EXTENSION_LANGUAGES } from '@directus/constants'; +import { EXTENSION_LANGUAGES, JAVASCRIPT_FILE_EXTS } from '@directus/constants'; import { execa } from 'execa'; import fse from 'fs-extra'; import { resolve } from 'node:path'; import { afterAll, expect, test } from 'vitest'; import { create } from './src/cli/index.js'; import { languageToShort } from './src/cli/utils/languages.js'; -import { CONFIG_FILE_NAMES } from './src/cli/commands/helpers/load-config.js'; const testPrefix = `temp-extension`; @@ -33,7 +32,7 @@ function getConfigFileContent(configFileName: string) { // Test one extension from each of app/api/hybrid extensions, and each config file names test.each( ['interface', 'endpoint', 'operation'].map((extensionType, index) => { - return { extensionType, configFileName: CONFIG_FILE_NAMES[index] }; + return { extensionType, configFileName: `extension.config.${JAVASCRIPT_FILE_EXTS[index]}` }; }) )( `create and build new $extensionType extension with $configFileName config file`, diff --git a/packages/extensions-sdk/src/cli/commands/helpers/load-config.ts b/packages/extensions-sdk/src/cli/commands/helpers/load-config.ts index e081fe6d63..ba50cbf3ac 100644 --- a/packages/extensions-sdk/src/cli/commands/helpers/load-config.ts +++ b/packages/extensions-sdk/src/cli/commands/helpers/load-config.ts @@ -1,17 +1,18 @@ +import { JAVASCRIPT_FILE_EXTS } from '@directus/constants'; import { pathToRelativeUrl } from '@directus/utils/node'; import fse from 'fs-extra'; import path from 'path'; import { fileURLToPath } from 'url'; import type { Config } from '../../types.js'; -export const CONFIG_FILE_NAMES = ['extension.config.js', 'extension.config.mjs', 'extension.config.cjs']; - // This is needed to work around Typescript always transpiling import() to require() for CommonJS targets. const _import = new Function('url', 'return import(url)'); const __dirname = path.dirname(fileURLToPath(import.meta.url)); export default async function loadConfig(): Promise { - for (const fileName of CONFIG_FILE_NAMES) { + for (const ext of JAVASCRIPT_FILE_EXTS) { + const fileName = `extension.config.${ext}`; + if (await fse.pathExists(fileName)) { const configFile = await _import(pathToRelativeUrl(path.resolve(fileName), __dirname));