
Security News
npm ‘is’ Package Hijacked in Expanding Supply Chain Attack
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.
drizzle-orm-helpers
Advanced tools
⚠️ Use at your own risk ⚠️
🚧 This package is under construction, expect some things to be broken! 🚧
This is a collection of unofficial typescript-friendly helpers for use with Drizzle ORM. Provided items include common SQL/dialect-specific values, functions, operators, and column types. Note that most the work is currently oriented towards Postgres and that most "solutions" provided by this package should be seen as provisory, in wait of being replaced by implementations provided officially and with more stability through Drizzle-ORM package(s).
A crude auto-generated documentation is available here.
const APP_LANGUAGES = ['fr', 'en', 'es'] as const;
type AppLanguage = (typeof APP_LANGUAGES)[number]; // 'fr' | 'en' | 'es';
const languages = pgTable('languages', {
lang: textenum('lang', { enum: APP_LANGUAGES }),
});
const projects = pgTable('projects', {
id: text('id')
.default(nanoid({ size: 12 }))
.primaryKey(),
createdById: text('created_by_id').references(() => users.id, {
onDelete: 'cascade',
onUpdate: 'cascade',
}),
});
const projectsTranslations = pgTable(
'projects_t',
{
id: text('id')
.references(() => projects.id, { onDelete: 'cascade', onUpdate: 'cascade' })
.notNull(),
lang: textenum('lang', { enum: APP_LANGUAGES })
.references(() => languages.lang, { onDelete: 'cascade', onUpdate: 'cascade' })
.notNull(),
title: text('title'),
description: text('description'),
},
(table) => {
return {
pk: primaryKey({ columns: [table.id, table.lang] }),
};
}
);
/**
* Build a json object aggregating translations with languages as keys and joined columns as nested
* properties.
*/
export function aggTranslations<TSelection extends ColumnsSelection>(selection: TSelection) {
return jsonObjectAgg(languages.lang, jsonBuildObject(selection));
}
/**
* Join translations through the languages table.
*/
export function joinTranslations<
TSelect extends PgSelect,
TTranslations extends
| (AnyTable<TableConfig> & LangColumn)
| (Subquery<string, ColumnSelection> & LangColumn),
>(select: TSelect, translations: TTranslations, on: SQL) {
return select
.leftJoin(languages, $true)
.leftJoin(translations, and(on, eq(languages.lang, translations.lang)));
}
const projectsWithTranslations = await joinTranslations(
db
.select({
...getColumns(projects),
translations: aggTranslations(getColumns(projectsTranslations)),
})
.from(projects),
projectsTranslations,
eq(projects.id, projectsTranslations.id)
);
Would return aggregated data with expected types as:
[
{
id: string,
created_by_id: string,
translations: {
fr: {
id: string,
lang: string,
title?: string,
description?: string
},
en: {
id: string,
lang: string,
title?: string,
description?: string
}
es: {
id: string,
lang: string,
title?: string,
description?: string
}
}
},
//...
]
FAQs
A collection a tiny helpers for Drizzle ORM.
We found that drizzle-orm-helpers demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.
Security News
A critical flaw in the popular npm form-data package could allow HTTP parameter pollution, affecting millions of projects until patched versions are adopted.
Security News
Bun 1.2.19 introduces isolated installs for smoother monorepo workflows, along with performance boosts, new tooling, and key compatibility fixes.