@murumets-ee/entity 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -10
- package/dist/admin/index.cjs +0 -1
- package/dist/admin/index.d.cts +0 -510
- package/dist/index.cjs +0 -64
- package/dist/index.d.cts +0 -1027
- package/dist/query/index.cjs +0 -6
- package/dist/query/index.d.cts +0 -417
- package/dist/refs/index.cjs +0 -1
- package/dist/refs/index.d.cts +0 -263
package/dist/index.cjs
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
'use strict';var drizzleOrm=require('drizzle-orm'),pgCore=require('drizzle-orm/pg-core');var s={id:t=>({type:"id",required:true,indexed:true,...t}),text:t=>({type:"text",...t}),number:t=>({type:"number",...t}),boolean:t=>({type:"boolean",default:false,...t}),date:t=>({type:"date",...t}),select:t=>({type:"select",...t}),reference:t=>({type:"reference",cardinality:"one",onDelete:"set-null",...t}),media:t=>({type:"media",...t}),richtext:t=>({type:"richtext",...t}),slug:t=>({type:"slug",unique:true,indexed:true,...t}),json:t=>({type:"json",...t}),blocks:t=>({type:"blocks",...t})};async function R(){try{return (await import(["@murumets-ee","core"].join("/"))).getCurrentUser()?.id}catch{return}}function y(){return {name:"auditable",fields:{createdBy:s.text(),updatedBy:s.text(),createdAt:s.date({indexed:true}),updatedAt:s.date({indexed:true})},hooks:{beforeCreate:async t=>{t.createdAt=new Date,t.updatedAt=new Date;let e=await R();return e&&(t.createdBy=e,t.updatedBy=e),t},beforeUpdate:async(t,e)=>{e.updatedAt=new Date;let r=await R();return r&&(e.updatedBy=r),e}}}}function h(t){return {name:"hierarchical",fields:{parentId:s.reference({entity:"_self",required:false}),path:s.text({indexed:true,maxLength:2048}),depth:s.number({integer:true,default:0,indexed:true})},hooks:{beforeCreate:async e=>(e.parentId||(e.depth=0),e)}}}function g(){return {name:"publishable",fields:{status:s.select({options:["draft","published"],default:"draft",indexed:true}),publishedAt:s.date({indexed:true})},hooks:{beforeUpdate:async(t,e)=>(e.status==="published"&&!e.publishedAt&&(e.publishedAt=new Date),e)}}}function x(){return {name:"revisionable",fields:{_version:s.number({required:true,default:1,integer:true})},hooks:{beforeCreate:async t=>(t._version=1,t),beforeUpdate:async(t,e)=>(e._version=(Number(e._version)||0)+1,e)}}}function f(t){return t.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function F(t,e){return {name:"sluggable",fields:{slug:s.slug({from:t,...e?.translatable?{translatable:true}:{}})},hooks:{beforeCreate:async r=>(!r.slug&&r[t]&&(r.slug=f(String(r[t]))),r),beforeUpdate:async(r,o)=>(o[t]&&!o.slug&&(o.slug=f(String(o[t]))),o)}}}function v(){return {name:"timestamped",fields:{createdAt:s.date({indexed:true}),updatedAt:s.date({indexed:true})},hooks:{beforeCreate:async t=>(t.createdAt=new Date,t.updatedAt=new Date,t),beforeUpdate:async(t,e)=>(e.updatedAt=new Date,e)}}}var D={publishable:g,auditable:y,sluggable:F,revisionable:x,hierarchical:h,timestamped:v};var _=class{cache=new Map;ttlMs;constructor(e=5e3){this.ttlMs=e;}get(e){let r=this.cache.get(e);if(!r||Date.now()>r.expiresAt){r&&this.cache.delete(e);return}return r.count}set(e,r){this.cache.set(e,{count:r,expiresAt:Date.now()+this.ttlMs});}invalidate(e){for(let r of this.cache.keys())r.startsWith(e)&&this.cache.delete(r);}prune(){let e=Date.now();for(let[r,o]of this.cache.entries())e>o.expiresAt&&this.cache.delete(r);}clear(){this.cache.clear();}get size(){return this.cache.size}};async function P(t,e){let r=await t.execute(drizzleOrm.sql`SELECT reltuples::bigint AS estimate FROM pg_class WHERE relname = ${e}`),n=(Array.isArray(r)?r:r.rows??[])[0],i=Number(n?.estimate??0);return i>0?i:0}var M=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function J(t,e,r){let o={field:e,value:t[e],direction:r,id:t.id};return btoa(JSON.stringify(o))}function V(t){try{let e=atob(t),r=JSON.parse(e);if(typeof r!="object"||r===null)return null;let o=r;return typeof o.field!="string"||!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(o.field)||typeof o.value!="string"&&typeof o.value!="number"||o.direction!=="asc"&&o.direction!=="desc"||o.id!==void 0&&(typeof o.id!="string"||!M.test(o.id))?null:{field:o.field,value:o.value,direction:o.direction,id:o.id}}catch{return null}}function W(t,e){let r=t[e.field];if(!r)return null;let n=e.direction==="desc"?drizzleOrm.lt:drizzleOrm.gt,i=n(r,e.value);if(!e.id)return i;let a=t.id;if(!a)return i;let l=n(a,e.id);return drizzleOrm.or(i,drizzleOrm.and(drizzleOrm.eq(r,e.value),l))}function Q(t){let e={},r={};for(let n of t.behaviors||[]){if(n.fields)for(let[i,a]of Object.entries(n.fields)){if(e[i]){console.warn(`Field '${i}' from behavior '${n.name}' conflicts with existing field. Skipping.`);continue}e[i]=a;}if(n.hooks)for(let[i,a]of Object.entries(n.hooks)){let l=i;if(a){let c=r[l];if(c){let S=c,N=a,A=async(...m)=>{let E=await S(...m);if(E!==void 0){let b=[...m];return b[b.length-1]=E,await N(...b)}return await N(...m)};r[l]=A;}else r[l]=a;}}}let o={id:s.id(),...e,...t.fields};for(let[,n]of Object.entries(o))n.type==="slug"&&!n.translatable&&o[n.from]?.translatable&&(n.translatable=true);return {...t,allFields:o,hooks:r}}var C=class extends Error{entityName;entityId;usages;constructor(e,r,o){let n=o.length;super(`Cannot delete ${e} '${r}': referenced by ${n} other entit${n===1?"y":"ies"}`),this.name="ReferencedEntityError",this.entityName=e,this.entityId=r,this.usages=o;}};function w(t,e,r){let o=r?.nullable??false;switch(e.type){case "id":return pgCore.uuid(t).primaryKey().defaultRandom();case "text":if(e.maxLength&&e.maxLength<=255){let n=pgCore.varchar(t,{length:e.maxLength});return e.unique&&(n=n.unique()),!o&&e.required&&(n=n.notNull()),!o&&e.default!==void 0&&(n=n.default(e.default)),n}else {let n=pgCore.text(t);return e.unique&&(n=n.unique()),!o&&e.required&&(n=n.notNull()),!o&&e.default!==void 0&&(n=n.default(e.default)),n}case "number":{let n=e.integer?pgCore.integer(t):pgCore.doublePrecision(t);return !o&&e.required&&(n=n.notNull()),!o&&e.default!==void 0&&(n=n.default(e.default)),n}case "boolean":{let n=pgCore.boolean(t);if(!o&&e.required&&(n=n.notNull()),!o){let i=e.default!==void 0?e.default:false;n=n.default(i);}return n}case "date":{let n=pgCore.timestamp(t,{withTimezone:true});return !o&&e.required&&(n=n.notNull()),!o&&e.default!==void 0&&(n=n.default(e.default)),n}case "select":{let n=pgCore.varchar(t,{length:100});return !o&&e.required&&(n=n.notNull()),!o&&e.default!==void 0&&(n=n.default(e.default)),n}case "reference":{if(e.cardinality==="many")return pgCore.uuid(t).array();let n=pgCore.uuid(t);return !o&&e.required&&(n=n.notNull()),n}case "media":{let n=pgCore.uuid(t);return !o&&e.required&&(n=n.notNull()),n}case "slug":{let n=pgCore.varchar(t,{length:255});return e.unique&&!o&&(n=n.unique()),!o&&e.required&&(n=n.notNull()),n}case "richtext":{let n=pgCore.text(t);return !o&&e.required&&(n=n.notNull()),n}case "json":return pgCore.jsonb(t);default:return pgCore.text(t)}}function q(t,e,r){let o=r?.nullable??false;switch(e.type){case "id":return "id: uuid('id').primaryKey().defaultRandom()";case "text":{let n=e.maxLength||255,i=n<=255?`varchar('${t}', { length: ${n} })`:`text('${t}')`;return e.unique&&(i+=".unique()"),!o&&e.required&&(i+=".notNull()"),!o&&e.default&&(i+=`.default('${e.default}')`),`${t}: ${i}`}case "number":{let n=e.integer?`integer('${t}')`:`doublePrecision('${t}')`;return !o&&e.required&&(n+=".notNull()"),!o&&e.default!==void 0&&(n+=`.default(${e.default})`),`${t}: ${n}`}case "boolean":{if(o)return `${t}: boolean('${t}')`;let n=e.default??false;return `${t}: boolean('${t}').default(${n})`}case "date":{let n=`timestamp('${t}', { withTimezone: true })`;return !o&&e.required&&(n+=".notNull()"),`${t}: ${n}`}case "reference":{if(e.cardinality==="many")return `${t}: uuid('${t}').array()`;let n=`uuid('${t}')`;return !o&&e.required&&(n+=".notNull()"),`${t}: ${n}`}case "media":{let n=`uuid('${t}')`;return !o&&e.required&&(n+=".notNull()"),`${t}: ${n}`}case "slug":{let n=`varchar('${t}', { length: 255 })`;return e.unique&&!o&&(n+=".unique()"),!o&&e.required&&(n+=".notNull()"),`${t}: ${n}`}case "select":{let n=`varchar('${t}', { length: 100 })`;return !o&&e.required&&(n+=".notNull()"),!o&&e.default&&(n+=`.default('${e.default}')`),`${t}: ${n}`}case "richtext":{let n=`text('${t}')`;return !o&&e.required&&(n+=".notNull()"),`${t}: ${n}`}case "json":return `${t}: jsonb('${t}')`;default:return `${t}: text('${t}')`}}function Y(t){let e=t.name,r={};for(let[i,a]of Object.entries(t.allFields))a.type!=="blocks"&&(r[i]=w(i,a));(t.scope==="team"||t.scope==="user")&&(r._scopeId=pgCore.uuid("_scope_id"));let o=Object.entries(t.allFields).filter(([i,a])=>a.type!=="blocks"&&a.type!=="id"&&a.indexed&&!a.unique),n=t.behaviors?.some(i=>i.name==="publishable")??false;return o.length===0&&!n?pgCore.pgTable(e,r):pgCore.pgTable(e,r,i=>{let a={};for(let[l]of o)a[`idx_${e}_${l}`]=pgCore.index(`idx_${e}_${l}`).on(i[l]);return n&&i.status&&i.createdAt&&(a[`idx_${e}_status_created`]=pgCore.index(`idx_${e}_status_created`).on(i.status,i.createdAt)),a})}function ee(t){let e=t.name,r=[],o=Object.entries(t.allFields).filter(([a,l])=>l.type!=="blocks"&&l.type!=="id"&&l.indexed&&!l.unique),n=t.behaviors?.some(a=>a.name==="publishable")??false,i=o.length>0||n;r.push(`export const ${e} = pgTable('${e}', {`);for(let[a,l]of Object.entries(t.allFields)){if(l.type==="blocks")continue;let c=q(a,l);r.push(` ${c},`);}if((t.scope==="team"||t.scope==="user")&&r.push(" _scopeId: uuid('_scope_id'),"),i){r.push("}, (table) => ({");for(let[a]of o)r.push(` idx_${e}_${a}: index('idx_${e}_${a}').on(table.${a}),`);n&&r.push(` idx_${e}_status_created: index('idx_${e}_status_created').on(table.status, table.createdAt),`),r.push("}))");}else r.push(")");return r.join(`
|
|
2
|
-
`)}function te(t){let e=Object.entries(t.allFields).filter(([i,a])=>a.translatable);if(e.length===0)return null;let r=`${t.name}_translations`,o={id:pgCore.uuid("id").primaryKey().defaultRandom(),entityId:pgCore.uuid("entity_id").notNull(),locale:pgCore.varchar("locale",{length:10}).notNull()},n=e.some(([i,a])=>a.type==="slug");for(let[i,a]of e)o[i]=w(i,a,{nullable:true});return pgCore.pgTable(r,o,i=>({uniqueEntityLocale:pgCore.unique().on(i.entityId,i.locale),...n&&i.slug?{uniqueSlugLocale:pgCore.unique().on(i.slug,i.locale)}:{}}))}function ne(t){let e=Object.entries(t.allFields).filter(([a,l])=>l.translatable);if(e.length===0)return null;let r=`${t.name}_translations`,o=t.name,n=[];n.push(`export const ${r} = pgTable('${r}', {`),n.push(" id: uuid('id').primaryKey().defaultRandom(),"),n.push(` entityId: uuid('entity_id').notNull().references(() => ${o}.id, { onDelete: 'cascade' }),`),n.push(" locale: varchar('locale', { length: 10 }).notNull(),");for(let[a,l]of e){let c=q(a,l,{nullable:true});n.push(` ${c},`);}let i=e.some(([a,l])=>l.type==="slug");return n.push("}, (table) => ({"),n.push(" uniqueEntityLocale: unique().on(table.entityId, table.locale), // One translation per locale"),i&&n.push(" uniqueSlugLocale: unique().on(table.slug, table.locale), // Per-locale slug uniqueness"),n.push("}))"),n.join(`
|
|
3
|
-
`)}function I(t){return Object.values(t.allFields).some(e=>e.type==="blocks")}function re(t){if(!I(t))return null;let e=`${t.name}_layout`;return pgCore.pgTable(e,{id:pgCore.uuid("id").primaryKey().defaultRandom(),entityId:pgCore.uuid("entity_id").notNull(),fieldName:pgCore.varchar("field_name",{length:100}).notNull(),blockType:pgCore.varchar("block_type",{length:100}).notNull(),sortOrder:pgCore.integer("sort_order").notNull().default(0),data:pgCore.jsonb("data"),locale:pgCore.varchar("locale",{length:10})},r=>({idx_entity_locale_sort:pgCore.index(`idx_${e}_entity_locale_sort`).on(r.entityId,r.locale,r.sortOrder)}))}function oe(t){return t.behaviors?.some(e=>e.name==="versionable")??false}function ie(t){if(!(t.behaviors?.some(o=>o.name==="publishable")??false))return false;let r=t.allFields;return Object.values(r).some(o=>o.translatable)}function ae(t){let e=t.name,r=`${e}_locale_status`;return `export const ${r} = pgTable('${r}', {
|
|
4
|
-
id: uuid('id').primaryKey().defaultRandom(),
|
|
5
|
-
entityId: uuid('entity_id').notNull().references(() => ${e}.id, { onDelete: 'cascade' }),
|
|
6
|
-
locale: varchar('locale', { length: 10 }).notNull(),
|
|
7
|
-
status: varchar('status', { length: 20 }).notNull().default('draft'),
|
|
8
|
-
publishedAt: timestamp('published_at', { withTimezone: true }),
|
|
9
|
-
}, (table) => ({
|
|
10
|
-
uniqueEntityLocale: unique().on(table.entityId, table.locale),
|
|
11
|
-
}))`}function le(t){return t.behaviors?.some(e=>e.name==="publishable")??false}function se(t){let e=t.name,r=`${e}_drafts`;return `export const ${r} = pgTable('${r}', {
|
|
12
|
-
id: uuid('id').primaryKey().defaultRandom(),
|
|
13
|
-
entityId: uuid('entity_id').notNull().references(() => ${e}.id, { onDelete: 'cascade' }),
|
|
14
|
-
locale: varchar('locale', { length: 10 }).notNull().default('_'),
|
|
15
|
-
data: jsonb('data').notNull(),
|
|
16
|
-
createdBy: varchar('created_by', { length: 255 }).notNull(),
|
|
17
|
-
createdByName: varchar('created_by_name', { length: 255 }),
|
|
18
|
-
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
|
19
|
-
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
|
|
20
|
-
}, (table) => ({
|
|
21
|
-
uniqueEntityLocale: unique().on(table.entityId, table.locale),
|
|
22
|
-
}))`}function ue(){return `export const toolkit_content_locks = pgTable('toolkit_content_locks', {
|
|
23
|
-
id: uuid('id').primaryKey().defaultRandom(),
|
|
24
|
-
entityType: varchar('entity_type', { length: 100 }).notNull(),
|
|
25
|
-
entityId: varchar('entity_id', { length: 255 }).notNull(),
|
|
26
|
-
locale: varchar('locale', { length: 10 }).notNull().default('_'),
|
|
27
|
-
lockedBy: varchar('locked_by', { length: 255 }).notNull(),
|
|
28
|
-
lockedByName: varchar('locked_by_name', { length: 255 }),
|
|
29
|
-
lockedAt: timestamp('locked_at', { withTimezone: true }).notNull().defaultNow(),
|
|
30
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
31
|
-
}, (table) => ({
|
|
32
|
-
uniqueEntityLock: unique().on(table.entityType, table.entityId, table.locale),
|
|
33
|
-
}))`}function de(t){let e=t.allFields;return Object.values(e).some(r=>r.type!=="blocks"||r.localized?false:r.blocks?.some(o=>Object.values(o.fields).some(n=>n.translatable)))}function ce(t){let e=t.name,r=`${e}_layout`;return `export const ${r} = pgTable('${r}', {
|
|
34
|
-
id: uuid('id').primaryKey().defaultRandom(),
|
|
35
|
-
entityId: uuid('entity_id').notNull().references(() => ${e}.id, { onDelete: 'cascade' }),
|
|
36
|
-
fieldName: varchar('field_name', { length: 100 }).notNull(),
|
|
37
|
-
blockType: varchar('block_type', { length: 100 }).notNull(),
|
|
38
|
-
sortOrder: integer('sort_order').notNull().default(0),
|
|
39
|
-
data: jsonb('data'),
|
|
40
|
-
locale: varchar('locale', { length: 10 }),
|
|
41
|
-
}, (table) => ({
|
|
42
|
-
idx_entity_locale_sort: index('idx_${r}_entity_locale_sort').on(table.entityId, table.locale, table.sortOrder),
|
|
43
|
-
}))`}function pe(t){let e=t.name,r=`${e}_layout_translations`,o=`${e}_layout`;return `export const ${r} = pgTable('${r}', {
|
|
44
|
-
id: uuid('id').primaryKey().defaultRandom(),
|
|
45
|
-
layoutId: uuid('layout_id').notNull().references(() => ${o}.id, { onDelete: 'cascade' }),
|
|
46
|
-
locale: varchar('locale', { length: 10 }).notNull(),
|
|
47
|
-
fields: jsonb('fields').notNull(),
|
|
48
|
-
}, (table) => ({
|
|
49
|
-
uniqueLayoutLocale: unique().on(table.layoutId, table.locale),
|
|
50
|
-
}))`}function fe(t){let e=t.name,r=`${e}_versions`;return `export const ${r} = pgTable('${r}', {
|
|
51
|
-
id: uuid('id').primaryKey().defaultRandom(),
|
|
52
|
-
entityId: uuid('entity_id').notNull().references(() => ${e}.id, { onDelete: 'cascade' }),
|
|
53
|
-
version: integer('version').notNull(),
|
|
54
|
-
locale: varchar('locale', { length: 10 }).notNull().default('_'),
|
|
55
|
-
data: jsonb('data').notNull(),
|
|
56
|
-
delta: jsonb('delta'),
|
|
57
|
-
status: varchar('status', { length: 20 }),
|
|
58
|
-
createdBy: varchar('created_by', { length: 255 }),
|
|
59
|
-
createdByName: varchar('created_by_name', { length: 255 }),
|
|
60
|
-
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
|
61
|
-
isAutosave: boolean('is_autosave').notNull().default(false),
|
|
62
|
-
}, (table) => ({
|
|
63
|
-
uniqueEntityVersionLocale: unique().on(table.entityId, table.version, table.locale),
|
|
64
|
-
}))`}function me(t){let e=Object.values(t.allFields).filter(n=>n.type==="blocks"&&!("localized"in n&&n.localized));if(e.length===0||!e.some(n=>n.type!=="blocks"?false:n.blocks.some(i=>Object.values(i.fields).some(a=>a.translatable))))return null;let o=`${t.name}_layout_translations`;return pgCore.pgTable(o,{id:pgCore.uuid("id").primaryKey().defaultRandom(),layoutId:pgCore.uuid("layout_id").notNull(),locale:pgCore.varchar("locale",{length:10}).notNull(),fields:pgCore.jsonb("fields").notNull()},n=>({uniqueLayoutLocale:pgCore.unique().on(n.layoutId,n.locale)}))}exports.CountCache=_;exports.ReferencedEntityError=C;exports.auditable=y;exports.behavior=D;exports.buildCursorCondition=W;exports.decodeCursor=V;exports.defineEntity=Q;exports.encodeCursor=J;exports.estimateRowCount=P;exports.field=s;exports.generateContentLocksCode=ue;exports.generateDraftsCode=se;exports.generateLayoutCode=ce;exports.generateLayoutSchema=re;exports.generateLayoutTranslationCode=pe;exports.generateLayoutTranslationSchema=me;exports.generateLocaleStatusCode=ae;exports.generateSchema=Y;exports.generateSchemaCode=ee;exports.generateTranslationSchema=te;exports.generateTranslationSchemaCode=ne;exports.generateVersionsCode=fe;exports.hasBlocksFields=I;exports.hasTranslatableBlocks=de;exports.hierarchical=h;exports.isPublishable=le;exports.isVersionable=oe;exports.needsLocaleStatus=ie;exports.publishable=g;exports.revisionable=x;exports.sluggable=F;exports.slugify=f;exports.timestamped=v;
|