@murumets-ee/content 0.1.3 → 0.1.5
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/dist/block-diff-H1AttKiz.mjs +2 -0
- package/dist/block-diff-H1AttKiz.mjs.map +1 -0
- package/dist/blocks/index.d.mts +197 -0
- package/dist/blocks/index.d.mts.map +1 -0
- package/dist/blocks/index.mjs +2 -0
- package/dist/blocks/index.mjs.map +1 -0
- package/dist/client.d.mts +208 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +2 -0
- package/dist/client.mjs.map +1 -0
- package/dist/define-block-D-7OpIn5.mjs +2 -0
- package/dist/define-block-D-7OpIn5.mjs.map +1 -0
- package/dist/drafts-BYyRdmiT.mjs +2 -0
- package/dist/drafts-BYyRdmiT.mjs.map +1 -0
- package/dist/index.d.mts +71 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/locale-status-CGttT38v.mjs +2 -0
- package/dist/locale-status-CGttT38v.mjs.map +1 -0
- package/dist/lock-service.d.mts +54 -0
- package/dist/lock-service.d.mts.map +1 -0
- package/dist/lock-service.mjs +2 -0
- package/dist/lock-service.mjs.map +1 -0
- package/dist/locks-CNxQJieo.mjs +2 -0
- package/dist/locks-CNxQJieo.mjs.map +1 -0
- package/dist/plugin.d.mts +15 -0
- package/dist/plugin.d.mts.map +1 -0
- package/dist/plugin.mjs +2 -0
- package/dist/plugin.mjs.map +1 -0
- package/dist/query-client.d.mts +60 -0
- package/dist/query-client.d.mts.map +1 -0
- package/dist/query-client.mjs +2 -0
- package/dist/query-client.mjs.map +1 -0
- package/dist/types-nXbE5Ufa.d.mts +43 -0
- package/dist/types-nXbE5Ufa.d.mts.map +1 -0
- package/dist/types-wLHyjcWf.d.mts +95 -0
- package/dist/types-wLHyjcWf.d.mts.map +1 -0
- package/dist/versions-cotph2VG.mjs +2 -0
- package/dist/versions-cotph2VG.mjs.map +1 -0
- package/package.json +20 -20
- package/dist/blocks/index.d.ts +0 -187
- package/dist/blocks/index.js +0 -1
- package/dist/chunk-BVMZMEPV.js +0 -1
- package/dist/chunk-CULYIGZI.js +0 -1
- package/dist/client.d.ts +0 -215
- package/dist/client.js +0 -1
- package/dist/drafts-2ZRAHAUK.js +0 -1
- package/dist/index.d.ts +0 -142
- package/dist/index.js +0 -1
- package/dist/locale-status-B7B3WFXF.js +0 -1
- package/dist/lock-service.d.ts +0 -61
- package/dist/lock-service.js +0 -1
- package/dist/locks-AXFCTV7F.js +0 -1
- package/dist/plugin.d.ts +0 -33
- package/dist/plugin.js +0 -1
- package/dist/query-client.d.ts +0 -67
- package/dist/query-client.js +0 -1
- package/dist/types-BYeiE1ie.d.ts +0 -99
- package/dist/types-Cr0ifLn_.d.ts +0 -41
- package/dist/versions-4ICOJIK2.js +0 -1
package/dist/lock-service.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"server-only";var p=5,g=class{db;constructor(r){this.db=r.db}async getTable(){let{schemaRegistry:r}=await import("@murumets-ee/db");return r.get("toolkit_content_locks")}async acquireLock(r,o,c,s){let{eq:t,and:a,lt:i}=await import("drizzle-orm"),e=await this.getTable();if(!e)return{acquired:!0};let n=new Date,d=new Date(n.getTime()+p*60*1e3);await this.db.delete(e).where(a(t(e.entityType,r),t(e.entityId,o),t(e.locale,c),i(e.expiresAt,n)));let[l]=await this.db.select().from(e).where(a(t(e.entityType,r),t(e.entityId,o),t(e.locale,c))).limit(1);return l?l.lockedBy===s.id?(await this.db.update(e).set({expiresAt:d,lockedAt:n}).where(t(e.id,l.id)),{acquired:!0}):{acquired:!1,lock:{lockedBy:l.lockedBy,lockedByName:l.lockedByName??null,lockedAt:l.lockedAt,expiresAt:l.expiresAt}}:(await this.db.insert(e).values({entityType:r,entityId:o,locale:c,lockedBy:s.id,lockedByName:s.name??null,lockedAt:n,expiresAt:d}),{acquired:!0})}async renewLock(r,o,c,s){let{eq:t,and:a,gte:i}=await import("drizzle-orm"),e=await this.getTable();if(!e)return!0;let n=new Date,d=new Date(n.getTime()+p*60*1e3);return(await this.db.update(e).set({expiresAt:d}).where(a(t(e.entityType,r),t(e.entityId,o),t(e.locale,c),t(e.lockedBy,s),i(e.expiresAt,n))).returning({id:e.id})).length>0}async releaseLock(r,o,c,s){let{eq:t,and:a}=await import("drizzle-orm"),i=await this.getTable();return i?(await this.db.delete(i).where(a(t(i.entityType,r),t(i.entityId,o),t(i.locale,c),t(i.lockedBy,s))).returning({id:i.id})).length>0:!0}async forceReleaseLock(r,o,c){let{eq:s,and:t}=await import("drizzle-orm"),a=await this.getTable();return a?(await this.db.delete(a).where(t(s(a.entityType,r),s(a.entityId,o),s(a.locale,c))).returning({id:a.id})).length>0:!0}async getLock(r,o,c){let{eq:s,and:t,gte:a}=await import("drizzle-orm"),i=await this.getTable();if(!i)return null;let e=new Date,[n]=await this.db.select().from(i).where(t(s(i.entityType,r),s(i.entityId,o),s(i.locale,c),a(i.expiresAt,e))).limit(1);return n?{lockedBy:n.lockedBy,lockedByName:n.lockedByName??null,lockedAt:n.lockedAt,expiresAt:n.expiresAt}:null}};async function y(){let{getApp:u}=await import("@murumets-ee/core"),r=u();return new g({db:r.db.readWrite})}export{g as LockService,y as createLockService};
|
package/dist/locks-AXFCTV7F.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{pgTable as o,timestamp as l,unique as n,uuid as i,varchar as t}from"drizzle-orm/pg-core";var d=o("toolkit_content_locks",{id:i("id").primaryKey().defaultRandom(),entityType:t("entity_type",{length:100}).notNull(),entityId:t("entity_id",{length:255}).notNull(),locale:t("locale",{length:10}).notNull().default("_"),lockedBy:t("locked_by",{length:255}).notNull(),lockedByName:t("locked_by_name",{length:255}),lockedAt:l("locked_at",{withTimezone:!0}).notNull().defaultNow(),expiresAt:l("expires_at",{withTimezone:!0}).notNull()},e=>({uniqueEntityLock:n().on(e.entityType,e.entityId,e.locale)}));export{d as toolkitContentLocks};
|
package/dist/plugin.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Plugin } from '@murumets-ee/core';
|
|
2
|
-
import { C as ContentConfig } from './types-BYeiE1ie.js';
|
|
3
|
-
import '@murumets-ee/entity';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Content plugin — registers locale configuration and version schemas.
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* import { content } from '@murumets-ee/content/plugin'
|
|
10
|
-
*
|
|
11
|
-
* export default defineConfig({
|
|
12
|
-
* plugins: [
|
|
13
|
-
* content({
|
|
14
|
-
* locales: [
|
|
15
|
-
* { code: 'en', label: 'English' },
|
|
16
|
-
* { code: 'de', label: 'German' },
|
|
17
|
-
* ],
|
|
18
|
-
* defaultLocale: 'en',
|
|
19
|
-
* }),
|
|
20
|
-
* ],
|
|
21
|
-
* })
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Get the content configuration. Throws if plugin not initialized.
|
|
26
|
-
*/
|
|
27
|
-
declare function getContentConfig(): ContentConfig;
|
|
28
|
-
/**
|
|
29
|
-
* Content plugin factory.
|
|
30
|
-
*/
|
|
31
|
-
declare function content(config: ContentConfig): Plugin;
|
|
32
|
-
|
|
33
|
-
export { content, getContentConfig };
|
package/dist/plugin.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var r=null;function v(){if(!r)throw new Error("@murumets-ee/content plugin not initialized. Add content() to your plugins array.");return r}function E(a){if(!a.locales||a.locales.length===0)throw new Error("content() requires at least one locale");if(!a.defaultLocale)throw new Error("content() requires a defaultLocale");if(!a.locales.some(l=>l.code===a.defaultLocale))throw new Error(`defaultLocale "${a.defaultLocale}" not found in locales: [${a.locales.map(l=>l.code).join(", ")}]`);return{name:"@murumets-ee/content",init:async l=>{r=a;let{schemaRegistry:e}=await import("@murumets-ee/db"),{generateVersionsSchema:d}=await import("./versions-4ICOJIK2.js"),{generateLocaleStatusSchema:g}=await import("./locale-status-B7B3WFXF.js"),{generateDraftsSchema:p}=await import("./drafts-2ZRAHAUK.js"),{toolkitContentLocks:y}=await import("./locks-AXFCTV7F.js"),{generateLayoutSchema:C,generateLayoutTranslationSchema:w}=await import("@murumets-ee/entity"),c=0,u=0,m=0,f=0;e.has("toolkit_content_locks")||e.register("toolkit_content_locks",y);for(let[n,o]of l.entities){if(o.behaviors?.some(t=>t.name==="versionable")){let t=`${n}_versions`;if(!e.has(t)){let s=d(o);e.register(t,s)}c++}let h=o.allFields;if(Object.values(h).some(t=>t.type==="blocks")){let t=`${n}_layout`;if(!e.has(t)){let i=C(o);i&&e.register(t,i)}let s=`${n}_layout_translations`;if(!e.has(s)){let i=w(o);i&&e.register(s,i)}u++}let b=o.behaviors?.some(t=>t.name==="publishable"),S=Object.values(h).some(t=>t.translatable);if(b&&S){let t=`${n}_locale_status`;if(!e.has(t)){let s=g(o);e.register(t,s)}m++}if(b){let t=`${n}_drafts`;if(!e.has(t)){let s=p(o);e.register(t,s)}f++}}l.logger.info({locales:a.locales.map(n=>n.code),defaultLocale:a.defaultLocale,versionableEntities:c,blockEntities:u,localeStatusEntities:m,draftEntities:f},"Content plugin initialized")}}}export{E as content,v as getContentConfig};
|
package/dist/query-client.d.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Logger } from '@murumets-ee/core';
|
|
2
|
-
import { Entity } from '@murumets-ee/entity';
|
|
3
|
-
import { FindByIdOptions, FindManyOptions, CountOptions } from '@murumets-ee/entity/query';
|
|
4
|
-
import { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* ContentQueryClient — read-only content queries, safe for client bundles.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* import { createContentQueryClient } from '@murumets-ee/content/query'
|
|
11
|
-
* const pages = createContentQueryClient(Page)
|
|
12
|
-
* const page = await pages.findBySlug('about', { locale: 'de' })
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
interface ContentQueryClientConfig {
|
|
16
|
-
entity: Entity;
|
|
17
|
-
db: PostgresJsDatabase;
|
|
18
|
-
logger?: Logger;
|
|
19
|
-
}
|
|
20
|
-
declare class ContentQueryClient {
|
|
21
|
-
private entity;
|
|
22
|
-
private db;
|
|
23
|
-
private logger?;
|
|
24
|
-
private query;
|
|
25
|
-
constructor(config: ContentQueryClientConfig);
|
|
26
|
-
private getQuery;
|
|
27
|
-
findById(id: string, options?: FindByIdOptions): Promise<({
|
|
28
|
-
id: string;
|
|
29
|
-
} & {} & {
|
|
30
|
-
[x: string]: string | number | boolean | Record<string, unknown> | Date | Record<string, unknown>[] | {
|
|
31
|
-
[key: string]: unknown;
|
|
32
|
-
_block: string;
|
|
33
|
-
_id: string;
|
|
34
|
-
}[] | null | undefined;
|
|
35
|
-
}) | null>;
|
|
36
|
-
/**
|
|
37
|
-
* Find entity by slug — convenience for slug-based lookups.
|
|
38
|
-
*/
|
|
39
|
-
findBySlug(slug: string, options?: {
|
|
40
|
-
locale?: string;
|
|
41
|
-
}): Promise<({
|
|
42
|
-
id: string;
|
|
43
|
-
} & {} & {
|
|
44
|
-
[x: string]: string | number | boolean | Record<string, unknown> | Date | Record<string, unknown>[] | {
|
|
45
|
-
[key: string]: unknown;
|
|
46
|
-
_block: string;
|
|
47
|
-
_id: string;
|
|
48
|
-
}[] | null | undefined;
|
|
49
|
-
}) | null>;
|
|
50
|
-
findMany(options?: FindManyOptions): Promise<({
|
|
51
|
-
id: string;
|
|
52
|
-
} & {} & {
|
|
53
|
-
[x: string]: string | number | boolean | Record<string, unknown> | Date | Record<string, unknown>[] | {
|
|
54
|
-
[key: string]: unknown;
|
|
55
|
-
_block: string;
|
|
56
|
-
_id: string;
|
|
57
|
-
}[] | null | undefined;
|
|
58
|
-
})[]>;
|
|
59
|
-
count(options?: CountOptions): Promise<number>;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Factory — creates a ContentQueryClient for an entity.
|
|
63
|
-
* Must be called after createApp().
|
|
64
|
-
*/
|
|
65
|
-
declare function createContentQueryClient(entity: Entity): Promise<ContentQueryClient>;
|
|
66
|
-
|
|
67
|
-
export { ContentQueryClient, type ContentQueryClientConfig, createContentQueryClient };
|
package/dist/query-client.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var i=class{entity;db;logger;query=null;constructor(t){this.entity=t.entity,this.db=t.db,this.logger=t.logger}async getQuery(){if(!this.query){let{QueryClient:t}=await import("@murumets-ee/entity/query");this.query=new t({entity:this.entity,db:this.db,logger:this.logger})}return this.query}async findById(t,e){return(await this.getQuery()).findById(t,e)}async findBySlug(t,e){let{schemaRegistry:s}=await import("@murumets-ee/db"),{eq:o}=await import("drizzle-orm"),n=s.get(this.entity.name);return!n||!n.slug?null:(await(await this.getQuery()).findMany({where:o(n.slug,t),limit:1,locale:e?.locale}))[0]??null}async findMany(t){return(await this.getQuery()).findMany(t)}async count(t){return(await this.getQuery()).count(t)}};async function u(r){let{getApp:t}=await import("@murumets-ee/core"),e=t();return new i({entity:r,db:e.db.readOnly,logger:e.logger.child({content:r.name})})}export{i as ContentQueryClient,u as createContentQueryClient};
|
package/dist/types-BYeiE1ie.d.ts
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { FieldConfig, InferEntityDTO } from '@murumets-ee/entity';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Content package types
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* A block definition — describes a reusable content block's data shape.
|
|
9
|
-
*
|
|
10
|
-
* @typeParam F - The literal field map, inferred from the call site.
|
|
11
|
-
*/
|
|
12
|
-
interface BlockDefinition<F extends Record<string, FieldConfig> = Record<string, FieldConfig>> {
|
|
13
|
-
slug: string;
|
|
14
|
-
label: string;
|
|
15
|
-
fields: F;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Infer the data shape of a single block definition.
|
|
19
|
-
* Produces `{ _block: 'hero'; _id: string; heading: string; ... }`
|
|
20
|
-
*/
|
|
21
|
-
type InferBlockData<B extends BlockDefinition> = B extends BlockDefinition<infer F> ? {
|
|
22
|
-
_block: B['slug'];
|
|
23
|
-
_id: string;
|
|
24
|
-
} & Omit<InferEntityDTO<F>, 'id'> : never;
|
|
25
|
-
/**
|
|
26
|
-
* Infer a discriminated union from a tuple of block definitions.
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* type Layout = InferBlocksUnion<typeof [HeroBlock, RichTextBlock]>
|
|
30
|
-
* // = { _block: 'hero'; ... } | { _block: 'richtext'; ... }
|
|
31
|
-
*/
|
|
32
|
-
type InferBlocksUnion<T extends readonly BlockDefinition[]> = {
|
|
33
|
-
[K in keyof T]: T[K] extends BlockDefinition ? InferBlockData<T[K]> : never;
|
|
34
|
-
}[number];
|
|
35
|
-
interface LocaleConfig {
|
|
36
|
-
code: string;
|
|
37
|
-
label: string;
|
|
38
|
-
}
|
|
39
|
-
interface ContentConfig {
|
|
40
|
-
locales: LocaleConfig[];
|
|
41
|
-
defaultLocale: string;
|
|
42
|
-
}
|
|
43
|
-
interface VersionableOptions {
|
|
44
|
-
/** Maximum versions kept per document. Default: 50 */
|
|
45
|
-
maxPerDoc?: number;
|
|
46
|
-
/** Enable autosave (single mutable autosave version). Default: false */
|
|
47
|
-
autosave?: boolean;
|
|
48
|
-
}
|
|
49
|
-
interface VersionEntry {
|
|
50
|
-
id: string;
|
|
51
|
-
entityId: string;
|
|
52
|
-
version: number;
|
|
53
|
-
locale: string;
|
|
54
|
-
data: Record<string, unknown>;
|
|
55
|
-
delta: Record<string, unknown> | null;
|
|
56
|
-
status: string | null;
|
|
57
|
-
createdBy: string | null;
|
|
58
|
-
createdByName: string | null;
|
|
59
|
-
createdAt: Date | string;
|
|
60
|
-
isAutosave: boolean;
|
|
61
|
-
}
|
|
62
|
-
interface TranslationFieldStatus {
|
|
63
|
-
complete: boolean;
|
|
64
|
-
total: number;
|
|
65
|
-
translated: number;
|
|
66
|
-
missing: string[];
|
|
67
|
-
}
|
|
68
|
-
interface TranslationStatus {
|
|
69
|
-
[locale: string]: TranslationFieldStatus;
|
|
70
|
-
}
|
|
71
|
-
interface TranslationReport {
|
|
72
|
-
total: number;
|
|
73
|
-
complete: number;
|
|
74
|
-
partial: number;
|
|
75
|
-
missing: number;
|
|
76
|
-
}
|
|
77
|
-
interface LocalePublishStatus {
|
|
78
|
-
locale: string;
|
|
79
|
-
status: 'draft' | 'published';
|
|
80
|
-
publishedAt: Date | string | null;
|
|
81
|
-
}
|
|
82
|
-
interface DraftEntry {
|
|
83
|
-
id: string;
|
|
84
|
-
entityId: string;
|
|
85
|
-
locale: string;
|
|
86
|
-
data: Record<string, unknown>;
|
|
87
|
-
createdBy: string;
|
|
88
|
-
createdByName: string | null;
|
|
89
|
-
createdAt: Date | string;
|
|
90
|
-
updatedAt: Date | string;
|
|
91
|
-
}
|
|
92
|
-
interface LockInfo {
|
|
93
|
-
lockedBy: string;
|
|
94
|
-
lockedByName: string | null;
|
|
95
|
-
lockedAt: Date | string;
|
|
96
|
-
expiresAt: Date | string;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export type { BlockDefinition as B, ContentConfig as C, DraftEntry as D, InferBlockData as I, LocalePublishStatus as L, TranslationStatus as T, VersionEntry as V, TranslationReport as a, VersionableOptions as b, InferBlocksUnion as c, LocaleConfig as d, LockInfo as e, TranslationFieldStatus as f };
|
package/dist/types-Cr0ifLn_.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Diff result types for version comparison.
|
|
3
|
-
*/
|
|
4
|
-
/** A segment within a word-level text diff. */
|
|
5
|
-
interface DiffSegment {
|
|
6
|
-
type: 'equal' | 'add' | 'remove';
|
|
7
|
-
value: string;
|
|
8
|
-
}
|
|
9
|
-
/** Diff result for a single scalar field. */
|
|
10
|
-
interface FieldDiff {
|
|
11
|
-
field: string;
|
|
12
|
-
type: 'text' | 'number' | 'boolean' | 'date' | 'select' | 'media' | 'richtext' | 'json' | 'blocks' | 'unknown';
|
|
13
|
-
from: unknown;
|
|
14
|
-
to: unknown;
|
|
15
|
-
/** Word-level diff segments (present for text/richtext/slug fields). */
|
|
16
|
-
segments?: DiffSegment[];
|
|
17
|
-
/** Block-level structural diff (present for blocks fields). */
|
|
18
|
-
blockDiffs?: BlockDiffEntry[];
|
|
19
|
-
}
|
|
20
|
-
/** Status of a single block within a structural diff. */
|
|
21
|
-
type BlockDiffStatus = 'added' | 'removed' | 'moved' | 'changed' | 'unchanged';
|
|
22
|
-
/** Diff result for a single block within a blocks field. */
|
|
23
|
-
interface BlockDiffEntry {
|
|
24
|
-
blockId: string;
|
|
25
|
-
blockType: string;
|
|
26
|
-
status: BlockDiffStatus;
|
|
27
|
-
fromIndex?: number;
|
|
28
|
-
toIndex?: number;
|
|
29
|
-
/** Per-prop diffs for changed blocks. */
|
|
30
|
-
propDiffs?: PropDiff[];
|
|
31
|
-
}
|
|
32
|
-
/** Diff for a single prop within a changed block. */
|
|
33
|
-
interface PropDiff {
|
|
34
|
-
field: string;
|
|
35
|
-
from: unknown;
|
|
36
|
-
to: unknown;
|
|
37
|
-
/** Word-level segments for string props. */
|
|
38
|
-
segments?: DiffSegment[];
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export type { BlockDiffEntry as B, DiffSegment as D, FieldDiff as F, PropDiff as P, BlockDiffStatus as a };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{boolean as i,integer as r,jsonb as a,pgTable as u,timestamp as d,unique as s,uuid as n,varchar as e}from"drizzle-orm/pg-core";function c(o){let l=`${o.name}_versions`;return u(l,{id:n("id").primaryKey().defaultRandom(),entityId:n("entity_id").notNull(),version:r("version").notNull(),locale:e("locale",{length:10}).notNull().default("_"),data:a("data").notNull(),delta:a("delta"),status:e("status",{length:20}),createdBy:e("created_by",{length:255}),createdByName:e("created_by_name",{length:255}),createdAt:d("created_at",{withTimezone:!0}).notNull().defaultNow(),isAutosave:i("is_autosave").notNull().default(!1)},t=>({uniqueEntityVersionLocale:s().on(t.entityId,t.version,t.locale)}))}export{c as generateVersionsSchema};
|