@asla/yoursql

中文文档
0.14.0发布于 2026/05/10MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 2721

[![ESM package][package]][package-url] [![NPM version][npm]][npm-url] [![JSR version][jsr]][jsr-url] [![Install size][size]][size-url]

原始使用文档

ESM package NPM version JSR version Install size

SQL 生成器

API 文档

v()

安全转将 JS 值转换为 SQL 值,避免 SQL 注入

v 函数能够将 JS 值转换为 SQL 的文本形式。
默认情况下,支持 PostgresSQL, 因为不同数据库的值转换有些差异,如果使用其他数据库,可能需要配置对象到字符串的自定义转换器

import { v } from "@asla/yoursql";

v(1); // "1"
v(1n); // "1"
v("te'xt"); // "'te''xt'"
v(new Date()); // "'2024-11-30T05:08:33.112Z'"
v([1, 2, 3]); // "ARRAY[1,2,3]"
v({ id: "abc", size: 1 }); // "'{\"id\":\"abc\",\"size\":1}'"
v(null); // "NULL"
v(undefined); // "DEFAULT"

const params = { id: 3 };
const sql = `SELECT * FROM user WHERE user_id=${v(params.id)}`;

如果传入 String 对象,将保留其字符串值,不会进行任何转换, 这在有些需要原生SQL操作的场景下非常有用

import { v } from "@asla/yoursql";

v(new String("1+1")); // "1+1"

你可以自定义对象到字符串的转换, 例如,你想将 Set 转换为 PostgresSql 的 ARRAY[] 输入格式

import { v } from "@asla/yoursql";

v.setTransformer(Set, function (value: Set) {
  return this.v(Array.from(value));
});

v(new Set([1, 2, 3])); // "ARRAY[1,2,3]"

v.toValues()

转换数组为 values 的单个值

import { v } from "@asla/yoursql";
v.toValues([1, "abc", null, undefined, { key: "value" }]); // `1,'abc',NULL,DEFAULT,'{"key":"value"}'`

v.createExplicitValues() 和 v.createImplicitValues()

转换单个对象或对象数组为 VALUES

import { v } from "@asla/yoursql";

const values = [{ a: 1, b: undefined }, { c: 3 }];

// 这将自动选择数组中所有键的并集
v.createExplicitValues(values).text; // "(1,NULL,NULL),(NULL,NULL,3)"
v.createImplicitValues(values).text; // "(1,DEFAULT,NULL),(NULL,NULL,3)"

// 或者你可以指定选择键并指定顺序
const valueStr = v.createExplicitValues(values, ["c", "b"]).text; // "(NULL,2),(3,NULL)"

const sql = `INSERT INTO user(name, role) VALUES ${valueStr}`;

可以指定 SQL类型和 JS 类型断言

const objectList = [{ age: 1, name: "hhh" }, { age: 2, name: "row2" }, {
  age: 3,
  name: "row3",
}, {}];

v.createExplicitValues("customName", objectList, {
  age: { sqlType: "INT", sqlDefault: "MAXIMUM(1,2)" },
  name: "TEXT",
});
//这将返回
`(VALUES
  (1::INT,'hhh'::TEXT),
  (2,'row2'),
  (3,'row3'),
  (MAXIMUM(1,2),NULL))
  AS customName(age,name)`;

生成 SQL 语句

import { select, v } from "@asla/yoursql";

const searchName = "Bob";
const s = select({ uid: "u.id", rid: "r.id", example: "u.id||r.id" })
  .from("user AS u")
  .innerJoin("role", { as: "r", on: "u.id=r.user_id" })
  .where(`u.name LIKE %${v(searchName)}%`)
  .toString();

查看 select 用法 查看 insert/update/delete 用法

Constructable

toto

ConditionParam

toto

版本与发布记录

@asla/yoursql 共发布 52 个版本,首次发布于 2024/09/27;过去 12 个月发布了 10 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.14.0latest2026/05/105 个月前
0.13.12026/01/0410 个月前
0.13.02026/01/0210 个月前
0.12.12025/12/0711 个月前
0.12.02025/12/0711 个月前
0.11.42025/12/0711 个月前

关于 @asla/yoursql 的常见问题

@asla/yoursql 是什么?

[![ESM package][package]][package-url] [![NPM version][npm]][npm-url] [![JSR version][jsr]][jsr-url] [![Install size][size]][size-url]

如何安装 @asla/yoursql?

在项目目录运行 npm install @asla/yoursql,或使用 pnpm add / yarn add / bun add。

@asla/yoursql 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@asla/yoursql 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@asla/yoursql 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@asla/yoursql 可以商用吗?

@asla/yoursql 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@asla/yoursql 的下载量有多少?

根据 npm 官方下载统计,@asla/yoursql 在 2026/10/07 – 2026/11/05 这 30 天内被下载 2,721 次,日均约 91 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@asla/yoursql 还在维护吗?

最新版本 0.14.0 发布于 2026/05/10(5 个月前);至今共发布 52 个版本,其中过去 12 个月发布了 10 个;首次发布于 2024/09/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。