♻️ types 重构后的问题搞完了,累死

This commit is contained in:
BTMuli
2023-05-23 00:56:43 +08:00
parent 573eb8bbe4
commit caadb5df79
38 changed files with 362 additions and 408 deletions

View File

@@ -2,68 +2,71 @@
* @file utils TGSql.ts
* @description 数据库sql语句
* @author BTMuli<bt-muli@outlook.com>
* @since Alpha v0.2.0
* @since Alpha v0.1.5
*/
// tauri
import { app } from "@tauri-apps/api";
// utils
import { getBuildTime } from "./TGBuild";
import { TGAppData } from "../data";
import minifySql from "./minifySql";
import { AppAchievementsData, AppAchievementSeriesData, AppNameCardsData } from "../data";
/**
* @description 初始化应用数据表
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @returns {string[]} sql
*/
function initAppTable (): string[] {
const sqlRes = [];
// 创建应用数据表
sqlRes.push(`
sqlRes.push(minifySql(`
CREATE TABLE IF NOT EXISTS AppData
(
key TEXT PRIMARY KEY,
value TEXT DEFAULT NULL,
updated TEXT DEFAULT NULL
);
`);
`));
return sqlRes;
}
/**
* @description 初始化游戏账号数据表
* @since Alpha v0.2.0
* @see BTMuli.User.Game.Account
* @since Alpha v0.1.5
* @see TGApp.Sqlite.Account.Game
* @returns {string[]} sql
*/
function initGameAccountTable (): string[] {
const sqlRes = [];
// 创建游戏账号数据表
sqlRes.push(`
sqlRes.push(minifySql(`
CREATE TABLE IF NOT EXISTS GameAccount
(
game_biz TEXT NOT NULL,
game_uid TEXT NOT NULL,
is_chosen BOOLEAN DEFAULT 0,
is_official BOOLEAN DEFAULT 0,
gameBiz TEXT NOT NULL,
gameUid TEXT NOT NULL,
isChosen BOOLEAN DEFAULT 0,
isOfficial BOOLEAN DEFAULT 0,
level INTEGER DEFAULT 0,
nickname TEXT DEFAULT NULL,
region TEXT DEFAULT NULL,
region_name TEXT DEFAULT NULL,
regionName TEXT DEFAULT NULL,
updated TEXT DEFAULT NULL,
PRIMARY KEY (game_biz, game_uid)
PRIMARY KEY (gameBiz, gameUid)
);
`);
`));
return sqlRes;
}
/**
* @description 初始化成就系列数据表
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @returns {string[]} sql
*/
function initAchievementSeriesTable (): string[] {
const sqlRes = [];
// 创建成就系列数据表
sqlRes.push(`
sqlRes.push(minifySql(`
CREATE TABLE IF NOT EXISTS AchievementSeries
(
id INTEGER PRIMARY KEY,
@@ -76,19 +79,19 @@ function initAchievementSeriesTable (): string[] {
nameCard TEXT NOT NULL,
updated TEXT DEFAULT NULL
);
`);
`));
return sqlRes;
}
/**
* @description 初始化成就数据表
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @returns {string[]} sql
*/
function initAchievementTable (): string[] {
const sqlRes = [];
// 创建成就数据表
sqlRes.push(`
sqlRes.push(minifySql(`
CREATE TABLE IF NOT EXISTS Achievements
(
id INTEGER PRIMARY KEY,
@@ -103,9 +106,9 @@ function initAchievementTable (): string[] {
version TEXT DEFAULT NULL,
updated TEXT DEFAULT NULL
);
`);
`));
// 创建触发器
sqlRes.push(`
sqlRes.push(minifySql(`
CREATE TRIGGER IF NOT EXISTS updateAchievement
AFTER UPDATE ON Achievements
FOR EACH ROW
@@ -115,8 +118,8 @@ function initAchievementTable (): string[] {
UPDATE AchievementSeries SET finCount = finCount - 1, updated = datetime('now', 'localtime')
WHERE id = NEW.series AND NEW.isCompleted = 0 AND OLD.isCompleted = 1;
END;
`);
sqlRes.push(`
`));
sqlRes.push(minifySql(`
CREATE TRIGGER IF NOT EXISTS insertAchievement
AFTER INSERT ON Achievements
FOR EACH ROW
@@ -126,23 +129,23 @@ function initAchievementTable (): string[] {
UPDATE AchievementSeries SET version = NEW.version, updated = datetime('now', 'localtime')
WHERE id = NEW.series AND NEW.version > version;
END;
`);
`));
return sqlRes;
}
/**
* @description 初始化名片数据表
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @returns {string[]} sql
*/
function initNameCardTable (): string[] {
const sqlRes = [];
// 创建名片数据表
sqlRes.push(`
sqlRes.push(minifySql(`
CREATE TABLE IF NOT EXISTS NameCard
(
name TEXT PRIMARY KEY,
description TEXT DEFAULT NULL,
"desc" TEXT DEFAULT NULL,
icon TEXT NOT NULL,
bg TEXT NOT NULL,
profile TEXT NOT NULL,
@@ -150,7 +153,7 @@ function initNameCardTable (): string[] {
source TEXT DEFAULT NULL,
updated TEXT DEFAULT NULL
);
`);
`));
return sqlRes;
}
@@ -171,7 +174,7 @@ export function initSQLiteTable (): string[] {
/**
* @description 初始化应用数据
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @returns {Promise<string[]>} sql
*/
async function initAppData (): Promise<string[]> {
@@ -180,39 +183,38 @@ async function initAppData (): Promise<string[]> {
const buildTime = getBuildTime();
const dataUpdated = buildTime.startsWith("dev") ? buildTime.slice(4) : buildTime;
// 初始化应用版本
sqlRes.push(`
sqlRes.push(minifySql(`
INSERT INTO AppData (key, value, updated)
VALUES ('appVersion', '${appVersion}', datetime('now', 'localtime'))
ON CONFLICT(key) DO UPDATE SET value = '${appVersion}', updated = datetime('now', 'localtime');
`);
`));
// 初始化应用数据更新时间
sqlRes.push(`
sqlRes.push(minifySql(`
INSERT INTO AppData (key, value, updated)
VALUES ('dataUpdated', '${dataUpdated}', datetime('now', 'localtime'))
ON CONFLICT(key) DO UPDATE SET value = '${dataUpdated}', updated = datetime('now', 'localtime');
`);
`));
// 初始化 cookie
sqlRes.push(`
sqlRes.push(minifySql(`
INSERT INTO AppData (key, value, updated)
VALUES ('cookie', '{}', datetime('now', 'localtime'))
ON CONFLICT(key) DO NOTHING;
`);
`));
return sqlRes;
}
/**
* @description 初始化成就系列数据
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @returns {string[]} sql
*/
function initAchievementSeriesData (): string[] {
const sqlRes: string[] = [];
const oriData = TGAppData.achievementSeries;
oriData.map((data) => {
const sql = `
AppAchievementSeriesData.map((data) => {
const sql = minifySql(`
INSERT OR IGNORE INTO AchievementSeries (id, "order", name, version, icon, nameCard, updated)
VALUES (${data.id}, ${data.order}, '${data.name}', '${data.version}', '${data.icon}', '${data.card}', datetime('now', 'localtime'));
`;
`);
return sqlRes.push(sql);
});
return sqlRes;
@@ -220,17 +222,16 @@ function initAchievementSeriesData (): string[] {
/**
* @description 初始化成就数据
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @returns {string[]} sql
*/
function initAchievementData (): string[] {
const sqlRes: string[] = [];
const oriData = TGAppData.achievements;
oriData.map((data) => {
const sql = `
AppAchievementsData.map((data) => {
const sql = minifySql(`
INSERT OR IGNORE INTO Achievements (id, series, "order", name, description, reward, version, updated)
VALUES (${data.id}, ${data.series}, ${data.order}, '${data.name}', '${data.description}', ${data.reward}, '${data.version}', datetime('now', 'localtime'));
`;
`);
return sqlRes.push(sql);
});
return sqlRes;
@@ -238,17 +239,16 @@ function initAchievementData (): string[] {
/**
* @description 初始化名片数据
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @returns {string[]} sql
*/
function initNameCardData (): string[] {
const sqlRes: string[] = [];
const oriData = TGAppData.nameCards;
oriData.map((data) => {
const sql = `
INSERT OR IGNORE INTO NameCard (name, description, icon, bg, profile, type, source, updated)
VALUES ('${data.name}', '${data.description}', '${data.icon}', '${data.bg}', '${data.profile}', ${data.type}, '${data.source}', datetime('now', 'localtime'));
`;
AppNameCardsData.map((data) => {
const sql = minifySql(`
INSERT OR IGNORE INTO NameCard (name, "desc", icon, bg, profile, type, source, updated)
VALUES ('${data.name}', '${data.desc}', '${data.icon}', '${data.bg}', '${data.profile}', ${data.type}, '${data.source}', datetime('now', 'localtime'));
`);
return sqlRes.push(sql);
});
return sqlRes;
@@ -270,11 +270,11 @@ export async function initSQLiteData (): Promise<string[]> {
/**
* @description 导入UIAF数据
* @since Alpha v0.1.4
* @param {TGPlugin.UIAF.Achievement[]} data
* @since Alpha v0.1.5
* @param {TGApp.Plugins.UIAF.Achievement[]} data
* @returns {string[]} sql
*/
export function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
export function importUIAFData (data: TGApp.Plugins.UIAF.Achievement[]): string[] {
const sqlRes: string[] = [];
data.map((achievement) => {
let sql;
@@ -282,17 +282,17 @@ export function importUIAFData (data: TGPlugin.UIAF.Achievement[]): string[] {
const isCompleted = achievement.status === 2 || achievement.status === 3;
if (isCompleted) {
const completedTime = new Date(achievement.timestamp * 1000).toISOString().replace("T", " ").slice(0, 19);
sql = `
sql = minifySql(`
UPDATE Achievements
SET isCompleted = 1, completedTime = '${completedTime}', progress = ${achievement.current}, updated = datetime('now', 'localtime')
WHERE id = ${achievement.id} AND (isCompleted = 0 OR completedTime != '${completedTime}' OR progress != ${achievement.current});
`;
`);
} else {
sql = `
sql = minifySql(`
UPDATE Achievements
SET progress = ${achievement.current}, updated = datetime('now', 'localtime')
WHERE id = ${achievement.id} AND progress != ${achievement.current};
`;
`);
}
return sqlRes.push(sql);
});

View File

@@ -2,13 +2,14 @@
* @file utils TGSqlite.ts
* @description 数据库操作类
* @author BTMuli<bt-muli@outlook.com>
* @since Alpha v0.2.0
* @since Alpha v0.1.5
*/
// tauri
import Database from "tauri-plugin-sql-api";
// utils
import { importUIAFData, initSQLiteData, initSQLiteTable } from "./TGSql";
import minifySql from "./minifySql";
import { getUiafStatus } from "./UIAF";
class TGSqlite {
@@ -59,12 +60,12 @@ class TGSqlite {
* @description 获取数据库信息
* @memberOf TGSqlite
* @since Alpha v0.1.4
* @returns {Promise<{ key: string, value: string, updated: string }[]>}
* @returns {Promise<TGApp.Sqlite.AppData.Item[]>}
*/
public async getAppData (): Promise<Array<{ key: string, value: string, updated: string }>> {
public async getAppData (): Promise<TGApp.Sqlite.AppData.Item[]> {
const db = await Database.load(this.dbPath);
const sql = "SELECT * FROM AppData;";
const res: Array<{ key: string, value: string, updated: string }> = await db.select(sql);
const res: TGApp.Sqlite.AppData.Item[] = await db.select(sql);
await db.close();
return res;
}
@@ -86,29 +87,28 @@ class TGSqlite {
/**
* @description 插入 Account 数据
* @memberOf TGSqlite
* @since Alpha v0.2.0
* @param {BTMuli.User.Game.Account[]} accounts
* @since Alpha v0.1.5
* @param {TGApp.User.Account.Game[]} accounts
* @returns {Promise<void>}
*/
public async insertAccount (accounts: BTMuli.User.Game.Account[]): Promise<void> {
public async insertAccount (accounts: TGApp.User.Account.Game[]): Promise<void> {
const db = await Database.load(this.dbPath);
for (const a of accounts) {
const is_chosen = a.is_chosen ? 1 : 0;
const is_official = a.is_official ? 1 : 0;
const sql = `
INSERT INTO GameAccount (game_biz, game_uid, is_chosen, is_official, level, nickname, region, region_name, updated)
VALUES ('${a.game_biz}', '${a.game_uid}', ${is_chosen}, ${is_official}, '${a.level}', '${a.nickname}',
'${a.region}', '${a.region_name}', datetime('now', 'localtime'))
ON CONFLICT(game_biz, game_uid) DO UPDATE SET
is_chosen = ${is_chosen},
is_official = ${is_official},
level = ${a.level},
nickname = '${a.nickname}',
region = '${a.region}',
region_name = '${a.region_name}',
updated = datetime('now', 'localtime');
`;
console.log(sql);
const isChosen = a.is_chosen ? 1 : 0;
const isOfficial = a.is_official ? 1 : 0;
const sql = minifySql(`
INSERT INTO GameAccount (gameBiz, gameUid, isChosen, isOfficial, level, nickname, region, regionName, updated)
VALUES ('${a.game_biz}', '${a.game_uid}', ${isChosen}, ${isOfficial}, '${a.level}', '${a.nickname}',
'${a.region}', '${a.region_name}', datetime('now', 'localtime'))
ON CONFLICT(gameBiz, gameUid) DO UPDATE SET
isChosen = ${isChosen},
isOfficial = ${isOfficial},
level = ${a.level},
nickname = '${a.nickname}',
region = '${a.region}',
regionName = '${a.region_name}',
updated = datetime('now', 'localtime');
`);
await db.execute(sql);
}
await db.close();
@@ -118,12 +118,12 @@ class TGSqlite {
* @description 获取当前选择的游戏账号
* @memberOf TGSqlite
* @since Alpha v0.2.0
* @returns {Promise<BTMuli.User.Game.Account|false>}
* @returns {Promise<TGApp.User.Account.Game|false>}
*/
public async getCurAccount (): Promise<BTMuli.User.Game.Account | false> {
public async getCurAccount (): Promise<TGApp.User.Account.Game | false> {
const db = await Database.load(this.dbPath);
const sql = "SELECT * FROM GameAccount WHERE is_chosen=1;";
const res: BTMuli.User.Game.Account[] = await db.select(sql);
const sql = "SELECT * FROM GameAccount WHERE isChosen=1;";
const res: TGApp.User.Account.Game[] = await db.select(sql);
await db.close();
return res.length === 0 ? false : res[0];
}
@@ -131,18 +131,18 @@ class TGSqlite {
/**
* @description 保存 appData
* @memberOf TGSqlite
* @since Alpha v0.2.0
* @since Alpha v0.1.5
* @param {string} key
* @param {string} value
* @returns {Promise<void>}
*/
public async saveAppData (key: string, value: string): Promise<void> {
const db = await Database.load(this.dbPath);
const sql = `
const sql = minifySql(`
INSERT INTO AppData (key, value, updated)
VALUES ('${key}', '${value}', datetime('now', 'localtime'))
ON CONFLICT(key) DO UPDATE SET value = '${value}',updated = datetime('now', 'localtime');
`;
`);
await db.execute(sql);
await db.close();
}
@@ -175,7 +175,7 @@ class TGSqlite {
const sqlT = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;";
const res: Array<{ name: string }> = await db.select(sqlT);
// 考虑到 sqlite_sequence 表,所以需要 +1
if (res.length === this.tables.length + 1) {
if (res.length === this.tables.length) {
if (this.tables.every((item) => res.map((i) => i.name).includes(item))) {
isVerified = true;
}
@@ -203,13 +203,13 @@ class TGSqlite {
/**
* @description 获取成就系列列表
* @memberOf TGSqlite
* @since Alpha v0.1.4
* @returns {Promise<BTMuli.SQLite.AchievementSeries[]>}
* @since Alpha v0.1.5
* @returns {Promise<TGApp.Sqlite.Achievement.SeriesTable[]>}
*/
public async getAchievementSeries (): Promise<BTMuli.SQLite.AchievementSeries[]> {
public async getAchievementSeries (): Promise<TGApp.Sqlite.Achievement.SeriesTable[]> {
const db = await Database.load(this.dbPath);
const sql = "SELECT * FROM AchievementSeries ORDER BY `order`;";
const res: BTMuli.SQLite.AchievementSeries[] = await db.select(sql);
const res: TGApp.Sqlite.Achievement.SeriesTable[] = await db.select(sql);
await db.close();
return res;
}
@@ -217,17 +217,14 @@ class TGSqlite {
/**
* @description 获取成就系列对应的名片
* @memberOf TGSqlite
* @since Alpha v0.1.4
* @since Alpha v0.1.5
* @param {number} seriesId 系列 ID
* @returns {Promise<BTMuli.SQLite.NameCard>}
* @returns {Promise<TGApp.Sqlite.NameCard.Item>}
*/
public async getNameCard (seriesId: number): Promise<BTMuli.SQLite.NameCard> {
public async getNameCard (seriesId: number): Promise<TGApp.Sqlite.NameCard.Item> {
const db = await Database.load(this.dbPath);
const sql = `SELECT *
FROM NameCard
WHERE name = (SELECT nameCard FROM AchievementSeries WHERE id = ${seriesId});
`;
const res: BTMuli.SQLite.NameCard[] = await db.select(sql);
const sql = `SELECT * FROM NameCard WHERE name = (SELECT nameCard FROM AchievementSeries WHERE id = ${seriesId});`;
const res: TGApp.Sqlite.NameCard.Item[] = await db.select(sql);
await db.close();
return res[0];
}
@@ -236,10 +233,10 @@ class TGSqlite {
* @description 获取成就列表
* @memberOf TGSqlite
* @param {number} [seriesId] 系列 ID
* @since Alpha v0.1.4
* @returns {Promise<BTMuli.SQLite.Achievements[]>}
* @since Alpha v0.1.5
* @returns {Promise<TGApp.Sqlite.Achievement.SingleTable[]>}
*/
public async getAchievements (seriesId?: number): Promise<BTMuli.SQLite.Achievements[]> {
public async getAchievements (seriesId?: number): Promise<TGApp.Sqlite.Achievement.SingleTable[]> {
const db = await Database.load(this.dbPath);
let sql;
if (seriesId) {
@@ -247,7 +244,7 @@ class TGSqlite {
} else {
sql = "SELECT * FROM Achievements ORDER BY isCompleted, `order`;";
}
const res: BTMuli.SQLite.Achievements[] = await db.select(sql);
const res: TGApp.Sqlite.Achievement.SingleTable[] = await db.select(sql);
await db.close();
return res;
}
@@ -270,24 +267,20 @@ class TGSqlite {
* @description 查询成就
* @memberOf TGSqlite
* @param {string} keyword 关键词
* @since Alpha v0.1.4
* @returns {Promise<BTMuli.SQLite.Achievements[]>}
* @since Alpha v0.1.5
* @returns {Promise<TGApp.Sqlite.Achievement.SingleTable[]>}
*/
public async searchAchievements (keyword: string): Promise<BTMuli.SQLite.Achievements[]> {
public async searchAchievements (keyword: string): Promise<TGApp.Sqlite.Achievement.SingleTable[]> {
const db = await Database.load(this.dbPath);
let sql;
if (keyword.startsWith("v")) {
const version = keyword.replace("v", "");
sql = `SELECT * FROM Achievements WHERE version LIKE '%${version}%' ORDER BY isCompleted, \`order\`;`;
} else {
sql = `SELECT *
FROM Achievements
WHERE name LIKE '%${keyword}%'
OR description LIKE '%${keyword}%'
ORDER BY isCompleted, \`order\`;
`;
sql = `SELECT * FROM Achievements WHERE name LIKE '%${keyword}%' OR description LIKE '%${keyword}%'
ORDER BY isCompleted, \`order\`;`;
}
const res: BTMuli.SQLite.Achievements[] = await db.select(sql);
const res: TGApp.Sqlite.Achievement.SingleTable[] = await db.select(sql);
await db.close();
return res;
}
@@ -295,11 +288,11 @@ class TGSqlite {
/**
* @description 合并 UIAF 数据
* @memberOf TGSqlite
* @param {BTMuli.UIAF.Achievement[]} achievements UIAF 数据
* @param {TGApp.Plugins.UIAF.Achievement[]} achievements UIAF 数据
* @since Alpha v0.1.4
* @returns {Promise<void>}
*/
public async mergeUIAF (achievements: TGPlugin.UIAF.Achievement[]): Promise<void> {
public async mergeUIAF (achievements: TGApp.Plugins.UIAF.Achievement[]): Promise<void> {
const db = await Database.load(this.dbPath);
const sql = importUIAFData(achievements);
for (const item of sql) {
@@ -312,14 +305,14 @@ class TGSqlite {
* @description 获取 UIAF 数据
* @memberOf TGSqlite
* @since Alpha v0.1.4
* @returns {Promise<TGPlugin.UIAF.Achievement[]>}
* @returns {Promise<TGApp.Plugins.UIAF.Achievement[]>}
*/
public async getUIAF (): Promise<TGPlugin.UIAF.Achievement[]> {
public async getUIAF (): Promise<TGApp.Plugins.UIAF.Achievement[]> {
const db = await Database.load(this.dbPath);
const sql = "SELECT * FROM Achievements WHERE isCompleted = 1 OR progress > 0";
const res: BTMuli.SQLite.Achievements[] = await db.select(sql);
const res: TGApp.Sqlite.Achievement.SingleTable[] = await db.select(sql);
await db.close();
const achievements: TGPlugin.UIAF.Achievement[] = [];
const achievements: TGApp.Plugins.UIAF.Achievement[] = [];
for (const item of res) {
const completed = item.isCompleted === 1;
const status = getUiafStatus(completed, item.progress);

View File

@@ -49,9 +49,9 @@ export function getUiafStatus (completed: boolean, progress: number): number {
/**
* @description 获取 UIAF 头部信息
* @since Alpha v0.1.3
* @returns {Promise<TGPlugin.UIAF.Header>}
* @returns {Promise<TGApp.Plugins.UIAF.Export>}
*/
export async function getUiafHeader (): Promise<TGPlugin.UIAF.Header> {
export async function getUiafHeader (): Promise<TGApp.Plugins.UIAF.Export> {
return {
// eslint-disable-next-line camelcase
export_app: "Tauri.Genshin",
@@ -73,7 +73,7 @@ export async function getUiafHeader (): Promise<TGPlugin.UIAF.Header> {
*/
export async function verifyUiafData (path: string): Promise<boolean> {
const fileData: string = await fs.readTextFile(path);
const UiafData: TGPlugin.UIAF.Header = JSON.parse(fileData).info;
const UiafData: TGApp.Plugins.UIAF.Export = JSON.parse(fileData).info;
return UiafData.uiaf_version !== undefined;
}
@@ -99,10 +99,10 @@ export async function readUiafData (userPath: string): Promise<string | false> {
/**
* @description 根据成就数据导出 UIAF 数据
* @since Alpha v0.1.4
* @param {TGPlugin.UIAF.Achievement[]} achievementData - 成就数据
* @param {TGApp.Plugins.UIAF.Achievement[]} achievementData - 成就数据
* @returns {Promise<void>}
*/
export async function backupUiafData (achievementData: TGPlugin.UIAF.Achievement[]): Promise<void> {
export async function backupUiafData (achievementData: TGApp.Plugins.UIAF.Achievement[]): Promise<void> {
const savePath = `${await path.appLocalDataDir()}\\userData\\UIAF.json`;
await fs.writeTextFile(savePath, JSON.stringify(achievementData, null, 2));
}
@@ -118,7 +118,7 @@ export async function restoreUiafData (): Promise<boolean> {
if (!await fs.exists(uiafPath)) {
return false;
}
const uiafData = JSON.parse(await fs.readTextFile(uiafPath)) as TGPlugin.UIAF.Achievement[];
const uiafData = JSON.parse(await fs.readTextFile(uiafPath)) as TGApp.Plugins.UIAF.Achievement[];
await TGSqlite.mergeUIAF(uiafData);
return true;
}

18
src/utils/minifySql.ts Normal file
View File

@@ -0,0 +1,18 @@
/**
* @file utils minifySql.ts
* @description 减少 sql 语句体积的工具函数
* @author BTMuli<bt-muli@outlook.com>
* @since Alpha v0.1.5
*/
/**
* @description 减少 sql 语句体积的工具函数
* @function minifySql
* @param {string} sql - sql 语句
* @return {string} minifiedSql - 减少体积后的 sql 语句
*/
function minifySql (sql: string): string {
return sql.replace(/\n/g, " ").replace(/\s+/g, " ").trim();
}
export default minifySql;