diff --git a/docs/package.json b/docs/package.json index 06d2919653d95..6e6d5fd8ec866 100644 --- a/docs/package.json +++ b/docs/package.json @@ -3,10 +3,11 @@ "private": true, "license": "MIT", "scripts": { - "build": "rimraf ./export && cross-env NODE_ENV=production next build && pnpm build-sw", + "build:adapter-dependencies": "tsx ../scripts/buildPickerAdapterDeps.ts", + "build": "rimraf ./export && pnpm build:adapter-dependencies && cross-env NODE_ENV=production next build && pnpm build-sw", "build:clean": "rimraf .next && pnpm build", "build-sw": "node ./scripts/buildServiceWorker.js", - "dev": "next dev --port 3001", + "dev": "pnpm build:adapter-dependencies && next dev --port 3001", "deploy": "git push -f upstream master:docs-v8", "icons": "rimraf public/static/icons/* && node ./scripts/buildIcons.js", "serve": "serve ./export -l 3010", diff --git a/docs/src/modules/utils/adapter-dependencies.json b/docs/src/modules/utils/adapter-dependencies.json new file mode 100644 index 0000000000000..e8324b79ef2d1 --- /dev/null +++ b/docs/src/modules/utils/adapter-dependencies.json @@ -0,0 +1,9 @@ +{ + "date-fns": "4.1.0", + "date-fns-jalali": "4.1.0-0", + "dayjs": "1.11.13", + "luxon": "3.6.1", + "moment": "2.30.1", + "moment-hijri": "3.0.0", + "moment-jalaali": "0.10.4" +} diff --git a/docs/src/modules/utils/postProcessImport.test.ts b/docs/src/modules/utils/postProcessImport.test.ts index 72e3720dd776c..cf0da86f47666 100644 --- a/docs/src/modules/utils/postProcessImport.test.ts +++ b/docs/src/modules/utils/postProcessImport.test.ts @@ -1,6 +1,5 @@ import { expect } from 'chai'; -// eslint-disable-next-line import/no-relative-packages -import pickersPackageJson from '../../../../packages/x-date-pickers/package.json'; +import adapterDependencies from './adapter-dependencies.json'; import { ADAPTER_TO_LIBRARY, postProcessImport } from './postProcessImport'; describe('postProcessImport', () => { @@ -13,7 +12,7 @@ describe('postProcessImport', () => { const expectedLibrary = ADAPTER_TO_LIBRARY[adapter]; expect(resolvedDep).to.deep.equal({ - [expectedLibrary]: pickersPackageJson.devDependencies[expectedLibrary], + [expectedLibrary]: adapterDependencies[expectedLibrary], }); }); }); @@ -32,7 +31,7 @@ describe('postProcessImport', () => { const expectedLibrary = ADAPTER_TO_LIBRARY[adapter]; expect(resolvedDep).to.deep.equal({ - [expectedLibrary]: pickersPackageJson.devDependencies[expectedLibrary], + [expectedLibrary]: adapterDependencies[expectedLibrary], }); }); }); @@ -51,7 +50,7 @@ describe('postProcessImport', () => { const expectedLibrary = ADAPTER_TO_LIBRARY[adapter]; expect(resolvedDep).to.deep.equal({ - [expectedLibrary]: pickersPackageJson.devDependencies[expectedLibrary], + [expectedLibrary]: adapterDependencies[expectedLibrary], }); }); }); diff --git a/docs/src/modules/utils/postProcessImport.ts b/docs/src/modules/utils/postProcessImport.ts index 9fa1199fb36d0..83251cdd187d7 100644 --- a/docs/src/modules/utils/postProcessImport.ts +++ b/docs/src/modules/utils/postProcessImport.ts @@ -1,7 +1,6 @@ -// eslint-disable-next-line import/no-relative-packages -import pickersPackageJson from '../../../../packages/x-date-pickers/package.json'; +import adapterDependencies from './adapter-dependencies.json'; -export const ADAPTER_TO_LIBRARY: Record = { +export const ADAPTER_TO_LIBRARY: Record = { AdapterDateFns: 'date-fns', AdapterDateFnsJalali: 'date-fns-jalali', AdapterDayjs: 'dayjs', @@ -27,7 +26,7 @@ export const postProcessImport = (importName: string): Record | `Can't determine required npm package for adapter '${dateAdapterMatch[1]}'`, ); } - return { [packageName]: pickersPackageJson.devDependencies[packageName] ?? 'latest' }; + return { [packageName]: adapterDependencies[packageName] ?? 'latest' }; } return null; }; diff --git a/scripts/buildPickerAdapterDeps.ts b/scripts/buildPickerAdapterDeps.ts new file mode 100644 index 0000000000000..0e0626228fce6 --- /dev/null +++ b/scripts/buildPickerAdapterDeps.ts @@ -0,0 +1,35 @@ +import childProcess from 'node:child_process'; +import path from 'node:path'; +import * as fse from 'fs-extra'; + +interface ListedDependency { + name: string; + devDependencies?: { + [key: string]: { + version: string; + }; + }; +} + +const adapterLibs = childProcess.execSync( + 'pnpm list date-fns date-fns-jalali dayjs luxon moment moment-hijri moment-jalaali --json', + { cwd: path.resolve(__dirname, '../packages/x-date-pickers') }, +); +const jsonListedDependencies: ListedDependency[] = JSON.parse(adapterLibs.toString()); +const adapterDependencyMap = Object.entries(jsonListedDependencies[0].devDependencies).reduce( + (result, [libraryName, libraryInfo]) => { + result[libraryName] = libraryInfo.version; + return result; + }, + {}, +); +try { + fse.writeJSON( + path.resolve(__dirname, '../docs/src/modules/utils/adapter-dependencies.json'), + adapterDependencyMap, + { encoding: 'utf8' }, + ); +} catch (error) { + console.error('Error writing adapter dependencies:', error); + process.exit(1); +}