fraci
Version:
Fractional indexing that's robust, performant, and secure, with first-class support for Drizzle ORM and Prisma ORM.
156 lines (150 loc) • 3.83 kB
JavaScript
;
var A = Object.defineProperty;
var O = Object.getOwnPropertyDescriptor;
var q = Object.getOwnPropertyNames;
var w = Object.prototype.hasOwnProperty;
var L = (i, r) => {
for (var e in r)
A(i, e, { get: r[e], enumerable: !0 });
}, h = (i, r, e, o) => {
if (r && typeof r == "object" || typeof r == "function")
for (let n of q(r))
!w.call(i, n) && n !== e && A(i, n, { get: () => r[n], enumerable: !(o = O(r, n)) || o.enumerable });
return i;
};
var R = (i) => h(A({}, "__esModule", { value: !0 }), i);
// src/drizzle.ts
var v = {};
L(v, {
defineDrizzleFraci: () => Q,
drizzleFraci: () => N,
drizzleFraciSync: () => T
});
module.exports = R(v);
// src/drizzle/runtime-sync.ts
var F = require("drizzle-orm");
// src/drizzle/common.ts
var l = require("drizzle-orm");
function s(i, r) {
return r != null ? (0, l.eq)(i, r) : r === null ? (
// Use `isNull` if value is `null`
(0, l.isNull)(i)
) : (
// SECURITY: Always return `FALSE` if value is `undefined`, meaning it's missing
l.sql`FALSE`
);
}
var C = [
[
l.asc,
l.gte,
(i, r) => [i, r]
],
[
l.desc,
l.lte,
(i, r) => [r, i]
]
];
// src/drizzle/runtime-sync.ts
function G(i, {
group: r,
cursor: e,
column: o,
table: n
}, g, p, y) {
let [D, m, d] = C[Number(y)], z = { v: F.sql`${o}` }, t = Object.entries(r).map(
([a, c]) => s(c, g[a])
);
if (!p) {
let a = i.select(z).from(n).where((0, F.and)(...t)).limit(1).orderBy(D(o)).all();
return d(null, a[0]?.v ?? null);
}
let I = (0, F.and)(
...t,
...Object.entries(e).map(
([a, c]) => s(c, p[a])
// Use equity to safely handle null/undefined
)
), x = i.select(z).from(n).where(I).limit(1), u = i.select(z).from(n).where(
(0, F.and)(
...t,
// Stay within the same group
m(o, x)
// Use gte/lte based on direction
)
).limit(2).orderBy(D(o)).all();
return u.length < 1 ? void 0 : d(u[0].v, u[1]?.v ?? null);
}
function b(i, r, e, o) {
return G(i, r, e, o, !1);
}
function S(i, r, e, o) {
return G(i, r, e, o, !0);
}
function T(i, r) {
return {
...r.fraci,
indicesForAfter: (e, o) => b(i, r, e, o),
indicesForBefore: (e, o) => S(i, r, e, o),
indicesForFirst: (e) => b(i, r, e, null),
indicesForLast: (e) => S(i, r, e, null)
};
}
// src/drizzle/runtime.ts
var f = require("drizzle-orm");
async function P(i, {
group: r,
cursor: e,
column: o,
table: n
}, g, p, y) {
let [D, m, d] = C[Number(y)], z = { v: f.sql`${o}` }, t = Object.entries(r).map(
([a, c]) => s(c, g[a])
);
if (!p) {
let a = await i.select(z).from(n).where((0, f.and)(...t)).limit(1).orderBy(D(o));
return d(null, a[0]?.v ?? null);
}
let I = (0, f.and)(
...t,
...Object.entries(e).map(
([a, c]) => s(c, p[a])
// Use equity to safely handle null/undefined
)
), x = i.select(z).from(n).where(I).limit(1), u = await i.select(z).from(n).where(
(0, f.and)(
...t,
// Stay within the same group
m(o, x)
// Use gte/lte based on direction
)
).limit(2).orderBy(D(o));
return u.length < 1 ? void 0 : d(u[0].v, u[1]?.v ?? null);
}
function j(i, r, e, o) {
return P(i, r, e, o, !1);
}
function B(i, r, e, o) {
return P(i, r, e, o, !0);
}
function N(i, r) {
return {
...r.fraci,
indicesForAfter: (e, o) => j(i, r, e, o),
indicesForBefore: (e, o) => B(i, r, e, o),
indicesForFirst: (e) => j(i, r, e, null),
indicesForLast: (e) => B(i, r, e, null)
};
}
// src/drizzle/schema.ts
function Q(i, r, e, o, n) {
return { fraci: i, table: r, column: e, group: o, cursor: n };
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
defineDrizzleFraci,
drizzleFraci,
drizzleFraciSync
});
//# sourceMappingURL=drizzle.cjs.map