From 30eebd0bccafd62c33cd136d17f2f4648efd4f79 Mon Sep 17 00:00:00 2001 From: Christian Capeans Date: Thu, 4 Jan 2024 18:36:41 +0100 Subject: [PATCH] chore: create script for sqlite migration --- .../5.0.0/sqlite3-to-better-sqlite3.code.ts | 43 +++++++++++++++++++ .../5.0.0/sqlite3-to-better-sqlite3.json.ts | 29 +++++++++++++ .../upgrade/src/modules/json/transform-api.ts | 7 ++- .../utils/upgrade/src/modules/json/types.ts | 1 + 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 packages/utils/upgrade/resources/codemods/5.0.0/sqlite3-to-better-sqlite3.code.ts create mode 100644 packages/utils/upgrade/resources/codemods/5.0.0/sqlite3-to-better-sqlite3.json.ts diff --git a/packages/utils/upgrade/resources/codemods/5.0.0/sqlite3-to-better-sqlite3.code.ts b/packages/utils/upgrade/resources/codemods/5.0.0/sqlite3-to-better-sqlite3.code.ts new file mode 100644 index 0000000000..2c420ade0c --- /dev/null +++ b/packages/utils/upgrade/resources/codemods/5.0.0/sqlite3-to-better-sqlite3.code.ts @@ -0,0 +1,43 @@ +import type { StringLiteral, Transform } from 'jscodeshift'; + +const transform: Transform = (file, api) => { + const { j } = api; + + // Parse the file content + const root = j(file.source); + + if (!file.path.includes('config/database.js')) { + return file.source; + } + const targetProperties = new Set([ + 'sqlite3', + 'vscode/sqlite3', + 'sqlite-legacy', + 'better-sqlite3', + ]); + + return root + .find(j.ObjectExpression) + .forEach((path) => { + j(path) + .find(j.Property) + .forEach((propertyPath) => { + // Check if the property name is one of the targets + const key = propertyPath.node.key; + const propertyName = key.type === 'Identifier' ? key.name : (key as StringLiteral).value; + + if (targetProperties.has(propertyName)) { + // Rename the property to 'sqlite' + if (key.type === 'Identifier') { + key.name = 'sqlite'; + } else { + // For Literal types + (key as StringLiteral).value = 'sqlite'; + } + } + }); + }) + .toSource({ quote: 'single' }); +}; + +export default transform; diff --git a/packages/utils/upgrade/resources/codemods/5.0.0/sqlite3-to-better-sqlite3.json.ts b/packages/utils/upgrade/resources/codemods/5.0.0/sqlite3-to-better-sqlite3.json.ts new file mode 100644 index 0000000000..c352f03a34 --- /dev/null +++ b/packages/utils/upgrade/resources/codemods/5.0.0/sqlite3-to-better-sqlite3.json.ts @@ -0,0 +1,29 @@ +import path from 'node:path'; + +import type { modules } from '../../../dist'; + +const transform: modules.runner.json.JSONTransform = (file, params) => { + const { cwd, json } = params; + + const rootPackageJsonPath = path.join(cwd, 'package.json'); + + if (file.path !== rootPackageJsonPath) { + return file.json; + } + + const j = json(file.json); + + const targetProperties = ['sqlite3', 'vscode/sqlite3', 'sqlite-legacy']; + + targetProperties.forEach((targetProperty) => { + const oldSqliteDependency = `dependencies.${targetProperty}`; + if (j.has(oldSqliteDependency)) { + j.remove(oldSqliteDependency); + j.set('dependencies.better-sqlite3', '9.0.0'); + } + }); + + return j.root(); +}; + +export default transform; diff --git a/packages/utils/upgrade/src/modules/json/transform-api.ts b/packages/utils/upgrade/src/modules/json/transform-api.ts index ee9530ae00..23d022b304 100644 --- a/packages/utils/upgrade/src/modules/json/transform-api.ts +++ b/packages/utils/upgrade/src/modules/json/transform-api.ts @@ -1,4 +1,4 @@ -import { cloneDeep, get, has, set, merge } from 'lodash/fp'; +import { cloneDeep, get, has, set, merge, omit } from 'lodash/fp'; import type { Utils } from '@strapi/types'; @@ -31,6 +31,11 @@ export class JSONTransformAPI implements JSONTransformAPIInterface { return this; } + remove(path: string) { + this.json = omit(path, this.json); + return this; + } + root(): Utils.JSONObject { return cloneDeep(this.json); } diff --git a/packages/utils/upgrade/src/modules/json/types.ts b/packages/utils/upgrade/src/modules/json/types.ts index adc1af6958..b1b3bc11af 100644 --- a/packages/utils/upgrade/src/modules/json/types.ts +++ b/packages/utils/upgrade/src/modules/json/types.ts @@ -8,4 +8,5 @@ export interface JSONTransformAPI { set(path: string, value: Utils.JSONValue): this; merge(other: Utils.JSONObject): this; root(): Utils.JSONObject; + remove(path: string): this; }