Upgrade Node.js runtime version to 22 (#24140)

Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
This commit is contained in:
Rijk van Zanten
2025-01-08 07:26:14 -05:00
committed by GitHub
parent 7cb9d9e304
commit b8cc796f4c
92 changed files with 1313 additions and 1989 deletions

View File

@@ -0,0 +1,32 @@
---
'directus': minor
'create-directus-project': major
'@directus/api': major
'@directus/constants': major
'@directus/env': major
'@directus/errors': major
'@directus/extensions': major
'@directus/extensions-registry': major
'@directus/extensions-sdk': major
'@directus/format-title': major
'@directus/memory': major
'@directus/pressure': major
'@directus/random': major
'@directus/release-notes-generator': major
'@directus/schema': major
'@directus/sdk': major
'@directus/storage': major
'@directus/storage-driver-azure': major
'@directus/storage-driver-cloudinary': major
'@directus/storage-driver-gcs': major
'@directus/storage-driver-local': major
'@directus/storage-driver-s3': major
'@directus/storage-driver-supabase': major
'@directus/system-data': major
'@directus/types': major
'@directus/update-check': major
'@directus/utils': major
'@directus/validation': major
---
Upgrade required Node.js version to 22

View File

@@ -15,14 +15,11 @@ runs:
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 18
node-version-file: package.json
registry-url: ${{ inputs.registry }}
- uses: pnpm/action-setup@v3
name: Install pnpm
id: pnpm-install
with:
run_install: false
- name: Install pnpm
uses: pnpm/action-setup@v4
- name: Get cache info
id: cache-info
@@ -31,8 +28,8 @@ runs:
echo "os-release=$(node --eval 'console.log(os.release())')" >> $GITHUB_OUTPUT
echo "pnpm-cache-dir=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v4
name: Setup pnpm cache
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ steps.cache-info.outputs.pnpm-cache-dir }}
key:
@@ -47,7 +44,7 @@ runs:
- name: Build
if: inputs.build == 'true'
shell: bash
run: pnpm run build
env:
npm_config_workspace_concurrency: '1'
npm_config_workspace_concurrency: 1
NODE_OPTIONS: --max_old_space_size=6144
run: pnpm run build

View File

@@ -1,9 +1,11 @@
# syntax=docker/dockerfile:1.4
ARG NODE_VERSION=22
####################################################################################################
## Build Packages
FROM node:18-alpine AS builder
FROM node:${NODE_VERSION}-alpine AS builder
ARG TARGETPLATFORM
RUN <<EOF
@@ -46,7 +48,7 @@ EOF
####################################################################################################
## Create Production Image
FROM node:18-alpine AS runtime
FROM node:${NODE_VERSION}-alpine AS runtime
RUN npm install --global pm2@5

View File

@@ -181,7 +181,7 @@
},
"devDependencies": {
"@directus/random": "workspace:*",
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@directus/types": "workspace:*",
"@ngneat/falso": "7.3.0",
"@types/async": "3.2.24",
@@ -205,7 +205,7 @@
"@types/lodash-es": "4.17.12",
"@types/mime-types": "2.1.4",
"@types/ms": "0.7.34",
"@types/node": "18.19.70",
"@types/node": "22.10.5",
"@types/node-schedule": "2.1.7",
"@types/nodemailer": "6.4.17",
"@types/object-hash": "3.0.6",
@@ -233,6 +233,6 @@
"tedious": "18.6.1"
},
"engines": {
"node": ">=18.17.0"
"node": ">=22"
}
}

View File

@@ -10,7 +10,7 @@ export const sendReport = async (report: TelemetryReport) => {
const url = new URL('/v1/metrics', env['TELEMETRY_URL'] as string);
const headers: HeadersInit = {
const headers: ResponseInit['headers'] = {
'Content-Type': 'application/json',
};

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"outDir": "dist"
},

View File

@@ -42,7 +42,7 @@
"@directus/stores": "workspace:*",
"@directus/system-data": "workspace:*",
"@directus/themes": "workspace:*",
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@directus/types": "workspace:*",
"@directus/utils": "workspace:*",
"@directus/validation": "workspace:*",

View File

@@ -58,6 +58,6 @@
"@directus/update-check": "workspace:*"
},
"engines": {
"node": ">=18.0.0"
"node": ">=22"
}
}

View File

@@ -8,10 +8,9 @@ To add packages to the Typedocs in the Docs, just follow these steps.
```diff
{
"extends": "@directus/tsconfig/node18-esm.json",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"outDir": "dist",
"lib": ["es2022", "DOM"]
"outDir": "dist"
},
"include": ["src"],
+ "typedocOptions": {

View File

@@ -13,7 +13,7 @@ readTime: 4 min read
::: tip Minimum Requirements
You will need to have [version 18 of Node.js](https://nodejs.org/en/download) for the Development environment of
You will need to have [version 22 of Node.js](https://nodejs.org/en/download) for the Development environment of
Directus.
You will also need to have the package manager [pnpm](https://pnpm.io) installed. It's recommended to install

View File

@@ -1,5 +1,5 @@
[build.environment]
NODE_VERSION = "18"
NODE_VERSION = "22"
[build]
publish = ".vitepress/dist"

View File

@@ -19,7 +19,7 @@
"devDependencies": {
"@directus/format-title": "workspace:*",
"@directus/sdk": "workspace:*",
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@pnpm/find-workspace-dir": "7.0.3",
"@pnpm/find-workspace-packages": "6.0.9",
"markdown-it-for-inline": "2.0.1",

View File

@@ -13,6 +13,21 @@ these to a minimum, but rest assured we only make them with good reason.
Starting with Directus 10.0, here is a list of potential breaking changes with remedial action you may need to take.
## Version 11.4.0
### Node.js 22
The required Node.js runtime version has been upgraded to the current LTS version 22.
Our base Docker image ([`directus/directus`](https://hub.docker.com/r/directus/directus)) has already been updated
accordingly. This means that no further steps are necessary for the vast majority of Directus admins.
For custom, self-hosted setups that are not relying on the official Docker image, it must be ensured that Node.js is
upgraded to version 22, and dependencies are rebuilt.
Additionally, if you're using non-sandboxed extensions, please ensure that the extensions (including their dependencies)
are compatible with Node.js 22 as well.
## Version 11.1.2
### New Comment Endpoints

View File

@@ -13,7 +13,7 @@ readTime: 7 min read
## Requirements
- Node.js [v18](https://github.com/nodejs/release#release-schedule), specifically version 18.17 or higher.
- Node.js [v22](https://github.com/nodejs/release#release-schedule)
## Server

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"declaration": false,
"resolveJsonModule": true

View File

@@ -1,16 +1,17 @@
// @ts-check
import eslint from '@eslint/js';
import eslintJs from '@eslint/js';
import eslintConfigPrettier from 'eslint-config-prettier';
import eslintPluginVue from 'eslint-plugin-vue';
import globals from 'globals';
import tseslint from 'typescript-eslint';
import process from 'node:process';
import typescriptEslint from 'typescript-eslint';
export default tseslint.config(
export default typescriptEslint.config(
// Global config
{
languageOptions: {
ecmaVersion: 2022,
ecmaVersion: 2023,
sourceType: 'module',
globals: {
...globals.browser,
@@ -25,7 +26,7 @@ export default tseslint.config(
},
// Enable recommended rules for JS files
eslint.configs.recommended,
eslintJs.configs.recommended,
// Custom basic rules
{
@@ -77,16 +78,16 @@ export default tseslint.config(
},
// Enable TypeScript plugin and recommended rules for TypeScript files
...tseslint.configs.recommended,
...typescriptEslint.configs.recommended,
// Enable Vue plugin and recommended rules for Vue files
// @ts-expect-error untyped package
...eslintPluginVue.configs['flat/recommended'],
{
files: ['**/*.vue'],
languageOptions: { parserOptions: { parser: tseslint.parser } },
languageOptions: { parserOptions: { parser: typescriptEslint.parser } },
// Apply recommended TypeScript rules to Vue files as well
rules: tseslint.configs.recommended.reduce((rules, config) => ({ ...rules, ...config.rules }), {}),
// @ts-expect-error wrong type assertion
rules: typescriptEslint.configs.recommended.reduce((rules, config) => ({ ...rules, ...config.rules }), {}),
},
// Custom TypeScript rules
@@ -104,7 +105,7 @@ export default tseslint.config(
// Custom Vue rules
{
files: ['**/*.{ts,vue}'],
files: ['**/*.vue'],
rules: {
// Same ordering of component tags everywhere
'vue/component-tags-order': [

View File

@@ -14,8 +14,6 @@
"@changesets/cli": "2.27.11",
"@directus/release-notes-generator": "workspace:*",
"@eslint/js": "9.17.0",
"@types/eslint__js": "8.42.3",
"@types/node": "18",
"eslint": "9.17.0",
"eslint-config-prettier": "9.1.0",
"eslint-plugin-vue": "9.32.0",
@@ -26,7 +24,7 @@
},
"packageManager": "pnpm@9.15.3",
"engines": {
"node": ">=18.18.0",
"node": "22",
"pnpm": "9"
}
}

View File

@@ -29,7 +29,7 @@
"story:preview": "histoire preview"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@histoire/plugin-vue": "0.17.17",
"@vitejs/plugin-vue": "5.2.1",
"@vitest/coverage-v8": "2.1.8",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/vue3",
"compilerOptions": {
"outDir": "dist"
},

View File

@@ -36,7 +36,7 @@
"devDependencies": {
"@directus/extensions": "workspace:*",
"@directus/sdk": "workspace:*",
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@directus/types": "workspace:*",
"@types/lodash-es": "4.17.12",
"@vitest/coverage-v8": "2.1.8",

View File

@@ -26,7 +26,7 @@
"dev": "tsup src/index.ts --format=esm --dts --watch"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"tsup": "8.3.5",
"typescript": "5.7.2"
}

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src"]

View File

@@ -4,17 +4,13 @@ import chalk from 'chalk';
export default function checkRequirements() {
const nodeVersion = process.versions.node;
const nodeVersionSplit = nodeVersion.split('.');
const major = +nodeVersionSplit[0];
const minor = +nodeVersionSplit[1];
const currentMajor = +nodeVersion.split('.')[0];
if (major !== 18 || minor < 17) {
const expectedMajor = 22;
if (currentMajor !== expectedMajor) {
console.error(`You are running ${chalk.red(`Node.js ${nodeVersion}`)}.`);
console.error(
`Directus requires ${chalk.green(`Node.js 18`)}, specifically version 18.17 or higher (>=18.17 & <19).`,
);
console.error(`Directus requires ${chalk.green(`Node.js ${expectedMajor}`)}.`);
console.error('Please adjust your Node.js version and try again.');
process.exit(1);

View File

@@ -33,6 +33,6 @@
"update-check": "1.5.4"
},
"engines": {
"node": ">=18.17.0"
"node": ">=22"
}
}

View File

@@ -26,9 +26,9 @@
"test": "vitest --watch=false"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@types/lodash-es": "4.17.12",
"@types/node": "18.19.70",
"@types/node": "22.10.5",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",
"typescript": "5.7.2",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src"]

View File

@@ -31,7 +31,7 @@
},
"devDependencies": {
"@directus/random": "workspace:*",
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@types/ms": "0.7.34",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",

View File

@@ -1,8 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"compilerOptions": {
"isolatedModules": true
},
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src"]

View File

@@ -35,7 +35,7 @@
"zod": "3.24.1"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@types/lodash-es": "4.17.12",
"@types/validate-npm-package-name": "4.0.2",
"@vitest/coverage-v8": "2.1.8",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src"]

View File

@@ -58,7 +58,7 @@
"vue": "3.5.13"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@types/fs-extra": "11.0.4",
"@types/inquirer": "9.0.7",
"@vitest/coverage-v8": "2.1.8",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"outDir": "dist"
},

View File

@@ -41,10 +41,10 @@
"zod": "3.24.1"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@types/fs-extra": "11.0.4",
"@types/lodash-es": "4.17.12",
"@types/node": "18.19.70",
"@types/node": "22.10.5",
"@types/tmp": "0.2.6",
"@vitest/coverage-v8": "2.1.8",
"knex": "3.1.0",

View File

@@ -1,7 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"compilerOptions": {
"types": ["node"]
},
"extends": "@directus/tsconfig/node22",
"include": ["."]
}

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"types": []
},

View File

@@ -37,12 +37,9 @@
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"tsup": "8.3.5",
"typescript": "5.7.2",
"vitest": "2.1.8"
},
"engines": {
"node": ">=18"
}
}

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src"]

View File

@@ -33,8 +33,8 @@
"rate-limiter-flexible": "5.0.4"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@types/node": "18.19.70",
"@directus/tsconfig": "3.0.0",
"@types/node": "22.10.5",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",
"typescript": "5.7.2",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src/index.ts", "./src/*/index.ts"]

View File

@@ -30,7 +30,7 @@
},
"devDependencies": {
"@directus/random": "workspace:*",
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@types/express": "4.17.21",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src"]

View File

@@ -27,8 +27,8 @@
"test": "vitest --watch=false"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@types/node": "18.19.70",
"@directus/tsconfig": "3.0.0",
"@types/node": "22.10.5",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",
"typescript": "5.7.2",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src"]

View File

@@ -32,9 +32,9 @@
},
"devDependencies": {
"@changesets/types": "6.0.0",
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@pnpm/types": "12.2.0",
"@types/node": "18.19.70",
"@types/node": "22.10.5",
"@types/semver": "7.5.8",
"@vitest/coverage-v8": "2.1.8",
"typescript": "5.7.2",

View File

@@ -1,6 +1,9 @@
{
"extends": "@directus/tsconfig/node18-cjs",
"extends": "@directus/tsconfig/base",
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2023"],
"module": "CommonJS",
"outDir": "dist"
},
"include": ["src"]

View File

@@ -38,7 +38,7 @@
"knex": "3.1.0"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"tsup": "8.3.5",
"typescript": "5.7.2"
}

View File

@@ -1,4 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

View File

@@ -31,7 +31,7 @@
"@directus/utils": "workspace:*"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@ngneat/falso": "7.3.0",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",

View File

@@ -1,4 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

View File

@@ -32,7 +32,7 @@
"undici": "6.21.0"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@ngneat/falso": "7.3.0",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",

View File

@@ -1,4 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

View File

@@ -32,7 +32,7 @@
"@google-cloud/storage": "7.14.0"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@ngneat/falso": "7.3.0",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",

View File

@@ -1,4 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

View File

@@ -29,9 +29,9 @@
"@directus/storage": "workspace:*"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@types/node": "22.10.5",
"@ngneat/falso": "7.3.0",
"@types/node": "18.19.70",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",
"typescript": "5.7.2",

View File

@@ -1,4 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

View File

@@ -36,7 +36,7 @@
"ms": "2.1.3"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@ngneat/falso": "7.3.0",
"@types/ms": "0.7.34",
"@vitest/coverage-v8": "2.1.8",

View File

@@ -1,4 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

View File

@@ -34,7 +34,7 @@
"undici": "6.21.0"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@ngneat/falso": "7.3.0",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",

View File

@@ -1,4 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

View File

@@ -26,8 +26,8 @@
"test": "vitest --watch=false"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@types/node": "18.19.70",
"@directus/tsconfig": "3.0.0",
"@types/node": "22.10.5",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",
"typescript": "5.7.2",

View File

@@ -1,4 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

View File

@@ -28,7 +28,7 @@
"@vueuse/core": "12.3.0"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@vueuse/shared": "12.3.0",
"pinia": "2.3.0",
"tsup": "8.3.5",

View File

@@ -28,7 +28,7 @@
"dev": "NODE_ENV=development tsup"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"esbuild": "0.20.2",
"esbuild-yaml": "1.2.0",
"tsup": "8.3.5",

View File

@@ -1,4 +1,4 @@
import { DataPermission, Permission } from '../types.js';
import type { DataPermission, Permission } from '../types.js';
import permissions from './app-access-permissions.yaml';
import schemaPermissionsRaw from './schema-access-permissions.yaml';

View File

@@ -28,7 +28,7 @@ import userFields from './users.yaml';
import versionFields from './versions.yaml';
import webhookFields from './webhooks.yaml';
import { FieldMeta } from '../types.js';
import type { FieldMeta } from '../types.js';
export const systemFieldRows: FieldMeta[] = [];

View File

@@ -1,4 +1,4 @@
import { RelationMeta } from '../types.js';
import type { RelationMeta } from '../types.js';
import systemData from './relations.yaml';
export const systemRelationRows = (systemData['data'] as RelationMeta[]).map(

View File

@@ -1,8 +1,6 @@
{
"extends": "@directus/tsconfig/base",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"module": "NodeNext",
"lib": ["ES2020"],
"types": ["esbuild-yaml/types"]
},
"include": ["src"],

View File

@@ -33,7 +33,7 @@
"lodash-es": "4.17.21"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@directus/types": "workspace:*",
"@types/lodash-es": "4.17.12",
"@unhead/vue": "1.11.15",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/vue3",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src/index.ts", "./src/*/index.ts"]

View File

@@ -1,23 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Base",
"compilerOptions": {
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"allowUnusedLabels": false,
"allowUnreachableCode": false,
"exactOptionalPropertyTypes": true,
"noFallthroughCasesInSwitch": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noPropertyAccessFromIndexSignature": true,
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"checkJs": true,
"allowSyntheticDefaultImports": true,
"declaration": true
}
}

View File

@@ -1,16 +0,0 @@
MIT License
Copyright 2025 Monospace, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -1,9 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Node.js 18 CommonJS",
"extends": "../base/tsconfig.json",
"compilerOptions": {
"module": "CommonJS",
"target": "ES2022"
}
}

View File

@@ -1,11 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Node.js 18 ESM",
"extends": "../base/tsconfig.json",
"compilerOptions": {
"module": "Node16",
"target": "ES2022",
"moduleResolution": "Node16",
"verbatimModuleSyntax": true
}
}

View File

@@ -1,20 +0,0 @@
{
"name": "@directus/tsconfig",
"version": "2.0.0",
"description": "TSConfig files used in Directus projects",
"homepage": "https://directus.io",
"repository": {
"type": "git",
"url": "https://github.com/directus/directus.git",
"directory": "packages/tsconfig"
},
"funding": "https://github.com/directus/directus?sponsor=1",
"license": "MIT",
"author": "Rijk van Zanten <rijkvanzanten@me.com>",
"exports": {
"./base": "./base/tsconfig.json",
"./node18-cjs": "./node18-cjs/tsconfig.json",
"./node18-esm": "./node18-esm/tsconfig.json",
"./vue3": "./vue3/tsconfig.json"
}
}

View File

@@ -1,24 +0,0 @@
# @directus/tsconfig
Shared TSConfig files used by the projects in the Directus ecosystem.
The following configs are available:
- [`node18-cjs`](./node18-cjs/tsconfig.json) - Config for CommonJS modules running under Node.js 18
- [`node18-esm`](./node18-esm/tsconfig.json) - Config for ESM modules running under Node.js 18
- [`vue3`](./vue3/tsconfig.json) - Config for Vue.js 3 modules
- [`base`](./base/tsconfig.json) - Set of basic rules (included in all of the configs above)
## Usage
```
pnpm add @directus/tsconfig
```
To use one of the shared config, extend the local `tsconfig.json` from it:
```json
{
"extends": "@directus/tsconfig/node18-esm"
}
```

View File

@@ -1,32 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Vue.js 3",
"extends": "../base/tsconfig.json",
"compilerOptions": {
// It's recommended to author and ship in ES modules.
// This recommendation includes environments like Vitest, Vite Config File, Vite SSR, etc.
"module": "ES2022",
// - Vue 3 supports ES2016+
// - For Vite, the actual compilation target is determined by the
// `build.target` option in the Vite config.
// So don't change the `target` field here. It has to be
// at least `ES2020` for dynamic `import()`s and `import.meta` to work correctly.
"target": "ES2022",
// Add DOM definitions.
"lib": ["ES2022", "DOM", "DOM.Iterable"],
// Enable some resolution features that are only available in bundlers.
"moduleResolution": "bundler",
"resolveJsonModule": true,
// Any imports or exports without a type modifier are left around. This is important for `<script setup>`.
// Anything that uses the type modifier is dropped entirely.
"verbatimModuleSyntax": true,
// Required in Vue projects
"jsx": "preserve",
"jsxImportSource": "vue"
}
}

View File

@@ -30,7 +30,7 @@
"@types/geojson": "7946.0.15"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"knex": "3.1.0",
"typescript": "5.7.2",
"vue": "3.5.13"

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"outDir": "dist"
},

View File

@@ -35,9 +35,9 @@
"semver": "7.6.3"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@npm/types": "2.0.0",
"@types/node": "18.19.70",
"@types/node": "22.10.5",
"@types/semver": "7.5.8",
"@vitest/coverage-v8": "2.1.8",
"strip-ansi": "7.1.0",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"include": ["src"],
"typedocOptions": {
"entryPoints": ["./src/index.ts"]

View File

@@ -1,7 +1,8 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"lib": ["es2022", "dom"]
"lib": ["ES2023", "DOM"],
"types": []
},
"include": ["."]
}

View File

@@ -1,7 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"compilerOptions": {
"types": ["node"]
},
"extends": "@directus/tsconfig/node22",
"include": ["."]
}

View File

@@ -42,12 +42,12 @@
"micromustache": "8.0.3"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@directus/types": "workspace:*",
"@types/fs-extra": "11.0.4",
"@types/js-yaml": "4.0.9",
"@types/lodash-es": "4.17.12",
"@types/node": "18.19.70",
"@types/node": "22.10.5",
"@types/tmp": "0.2.6",
"@vitest/coverage-v8": "2.1.8",
"tmp": "0.2.3",

View File

@@ -1,5 +1,5 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"types": []
},

View File

@@ -26,7 +26,7 @@
"dist"
],
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@directus/types": "workspace:*",
"@vitest/coverage-v8": "2.1.8",
"tsup": "8.3.5",

View File

@@ -1,7 +1,4 @@
{
"extends": "@directus/tsconfig/node18-esm",
"compilerOptions": {
"isolatedModules": true
},
"extends": "@directus/tsconfig/node22",
"include": ["src"]
}

2848
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -29,14 +29,13 @@
},
"devDependencies": {
"@directus/system-data": "workspace:*",
"@directus/tsconfig": "workspace:*",
"@types/node-fetch": "2.6.12",
"@directus/tsconfig": "3.0.0",
"esbuild-plugin-replace": "1.4.0",
"tsup": "8.3.5",
"typescript": "5.7.2",
"vitest": "2.1.8"
},
"engines": {
"node": ">=18.0.0"
"node": ">=22"
}
}

View File

@@ -1,7 +1,7 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"lib": ["DOM"]
"lib": ["ES2023", "DOM"]
},
"include": ["src", "tests"],
"typedocOptions": {

View File

@@ -24,7 +24,7 @@ export default defineConfig(() => ({
minify: env === 'production',
watch: env === 'development',
bundle: true,
target: 'es2020',
target: 'es2023',
entry: ['src/index.ts'],
esbuildPlugins: [
replace({

View File

@@ -8,7 +8,7 @@
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@directus/tsconfig": "workspace:*",
"@directus/tsconfig": "3.0.0",
"@directus/types": "workspace:*",
"@directus/utils": "workspace:*",
"@types/js-yaml": "4.0.9",

View File

@@ -1,8 +1,7 @@
{
"extends": "@directus/tsconfig/node18-esm",
"extends": "@directus/tsconfig/node22",
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "Bundler",
"moduleResolution": "bundler",
"paths": {
"@common/*": ["./common/*"],
"@query/*": ["./tests/db/query/*"],