@lunora/seed 1.0.0-alpha.78 → 1.0.0-alpha.79

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/index.mjs CHANGED
@@ -1 +1 @@
1
- import{createSeedClient as o}from"./packem_shared/createSeedClient-BFBL3m7v.mjs";import{s as a}from"./packem_shared/plan-D1fxWyQ-.mjs";export{o as createSeedClient,a as seedPlan};
1
+ import{createSeedClient as o}from"./packem_shared/createSeedClient-DCeTN5tl.mjs";import{s as a}from"./packem_shared/plan-vnUMmTjD.mjs";export{o as createSeedClient,a as seedPlan};
@@ -1 +1 @@
1
- import{a as S,s as $,c as C}from"./plan-D1fxWyQ-.mjs";const P=e=>Array.isArray(e)&&e.length===2&&typeof e[0]=="number"&&typeof e[1]=="number",T=(e,d,u,r)=>{const o=n=>typeof n=="number"?n:C.int([u,d,"count"],{max:n[1],min:n[0]});return e===void 0?{count:r}:typeof e=="number"?{count:e}:typeof e=="function"?{count:e(o)}:P(e)?{count:o(e)}:{count:e.length,partials:e}},A=(e,d,u)=>{const r={};if(e!==void 0){const o=new Set(e.flatMap(n=>Object.keys(n)));for(const n of o)r[n]=i=>e[i.index-u]?.[n]}for(const[o,n]of Object.entries(d??{}))r[o]=n;return r},B=(e,d={})=>{const{defaultCount:u=10,persist:r,seed:o=0}=d,n={},i={},l={},j=async(t,s,a)=>{S(o);const{count:c,partials:v}=T(s,t,o,u),h=l[t]??0,g=$(e,{counts:{[t]:c},existingIds:i,indexOffset:{[t]:h},only:[t],overrides:{[t]:A(v,a?.overrides,h)},seed:o});let m=[];for(const{rows:y,table:f}of g){const k=y.map(w=>w._id);n[f]??=[],n[f].push(...y),i[f]??=[],i[f].push(...k),l[f]=(l[f]??0)+y.length,f===t&&(m=k),r!==void 0&&await r(f,y)}return{[t]:m}};let b=Promise.resolve();const x=(t,s,a)=>{const c=b.then(()=>j(t,s,a));return b=c.then(()=>{},()=>{}),c},O={$ids:i,$reset:()=>{for(const t of Object.keys(n))delete n[t];for(const t of Object.keys(i))delete i[t];for(const t of Object.keys(l))delete l[t]},$store:n};return new Proxy(O,{get(t,s,a){return typeof s=="string"&&!s.startsWith("$")&&Object.hasOwn(e.tables,s)?(c,v)=>x(s,c,v):Reflect.get(t,s,a)}})};export{B as createSeedClient};
1
+ import{a as S,s as $,c as C}from"./plan-vnUMmTjD.mjs";const P=e=>Array.isArray(e)&&e.length===2&&typeof e[0]=="number"&&typeof e[1]=="number",T=(e,d,u,r)=>{const o=n=>typeof n=="number"?n:C.int([u,d,"count"],{max:n[1],min:n[0]});return e===void 0?{count:r}:typeof e=="number"?{count:e}:typeof e=="function"?{count:e(o)}:P(e)?{count:o(e)}:{count:e.length,partials:e}},A=(e,d,u)=>{const r={};if(e!==void 0){const o=new Set(e.flatMap(n=>Object.keys(n)));for(const n of o)r[n]=i=>e[i.index-u]?.[n]}for(const[o,n]of Object.entries(d??{}))r[o]=n;return r},B=(e,d={})=>{const{defaultCount:u=10,persist:r,seed:o=0}=d,n={},i={},l={},j=async(t,s,a)=>{S(o);const{count:c,partials:v}=T(s,t,o,u),h=l[t]??0,g=$(e,{counts:{[t]:c},existingIds:i,indexOffset:{[t]:h},only:[t],overrides:{[t]:A(v,a?.overrides,h)},seed:o});let m=[];for(const{rows:y,table:f}of g){const k=y.map(w=>w._id);n[f]??=[],n[f].push(...y),i[f]??=[],i[f].push(...k),l[f]=(l[f]??0)+y.length,f===t&&(m=k),r!==void 0&&await r(f,y)}return{[t]:m}};let b=Promise.resolve();const x=(t,s,a)=>{const c=b.then(()=>j(t,s,a));return b=c.then(()=>{},()=>{}),c},O={$ids:i,$reset:()=>{for(const t of Object.keys(n))delete n[t];for(const t of Object.keys(i))delete i[t];for(const t of Object.keys(l))delete l[t]},$store:n};return new Proxy(O,{get(t,s,a){return typeof s=="string"&&!s.startsWith("$")&&Object.hasOwn(e.tables,s)?(c,v)=>x(s,c,v):Reflect.get(t,s,a)}})};export{B as createSeedClient};
@@ -0,0 +1 @@
1
+ import{LunoraError as y}from"@lunora/errors";import{faker as m}from"@faker-js/faker";import{optionalInner as W}from"@lunora/values";let x=0;const oe=(e,t)=>e<t?-1:e>t?1:0,_=e=>e===void 0?"undefined":typeof e=="bigint"?`${e.toString()}n`:e===null||typeof e!="object"?JSON.stringify(e)??"null":Array.isArray(e)?`[${e.map(n=>_(n)).join(",")}]`:`{${Object.keys(e).toSorted(oe).map(n=>`${JSON.stringify(n)}:${_(e[n])}`).join(",")}}`,H=(e,t)=>{let n=3735928559^t,r=1103547991^t;for(let o=0;o<e.length;o+=1){const i=e.codePointAt(o)??0;n=Math.imul(n^i,2654435761),r=Math.imul(r^i,1597334677)}return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(r^r>>>13,3266489909),r=Math.imul(r^r>>>16,2246822507),r^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&r)+(n>>>0)},se="\0",ae=e=>{const t=typeof e=="string"?se+e:_(e);return H(t,x)%4294967296},ie=e=>{if(typeof e=="number"){x=e>>>0;return}if(typeof e=="string"){x=H(e,0)%4294967296;return}let t=0;for(const n of e)t=Math.imul(t^n,2654435761)>>>0;x=t},f=(e,t)=>(m.seed(ae(e)),t()),ce=(e,t)=>{if(typeof t=="number")return t;const[n,r]=t;return f(["__count__",e],()=>m.number.int({max:r,min:n}))},ue=/[a-z]/,le=/[A-Z]/,me=/\d/,u={bool(e){return f(e,()=>m.datatype.boolean())},city(e){return f(e,()=>m.location.city())},country(e){return f(e,()=>m.location.country())},dateString(e,t){const n=t?.min??new Date("1980-01-01T00:00:00.000Z"),r=t?.max??new Date("2020-01-01T00:00:00.000Z");return f(e,()=>m.date.between({from:n,to:r}).toISOString())},email(e){return f(e,()=>m.internet.email().toLowerCase())},firstName(e){return f(e,()=>m.person.firstName())},float(e,t){const{fractionDigits:n=2,max:r=1e3,min:o=0}=t??{};return f(e,()=>m.number.float({fractionDigits:n,max:r,min:o}))},fullName(e){return f(e,()=>m.person.fullName())},int(e,t){const{max:n=1e3,min:r=0}=t??{};return f(e,()=>m.number.int({max:n,min:r}))},lastName(e){return f(e,()=>m.person.lastName())},oneOf(e,t){if(t.length!==0)return f(e,()=>m.helpers.arrayElement(t))},paragraph(e){return f(e,()=>m.lorem.paragraph())},password(e){return f(e,()=>m.internet.password())},phoneNumber(e){return f(e,()=>m.phone.number())},scramble(e,t){const n=new Set(t?.preserve);return Array.from({length:e.length},(r,o)=>{const i=e.charAt(o);return n.has(i)?i:ue.test(i)?f([e,o,"l"],()=>m.string.alpha({casing:"lower",length:1})):le.test(i)?f([e,o,"u"],()=>m.string.alpha({casing:"upper",length:1})):me.test(i)?f([e,o,"d"],()=>String(m.number.int({max:9,min:0}))):i}).join("")},sentence(e,t){return f(e,()=>m.lorem.sentence(t?{max:t.max??8,min:t.min??3}:void 0))},slug(e){return f(e,()=>m.lorem.slug())},streetAddress(e){return f(e,()=>m.location.streetAddress())},times(e,t,n){const r=ce(e,t),o=[];for(let i=0;i<r;i+=1)o.push(n([e,i]));return o},url(e){return f(e,()=>m.internet.url())},username(e){return f(e,()=>m.internet.username())},uuid(e){return f(e,()=>m.string.uuid())},word(e){return f(e,()=>m.lorem.word())}},p=e=>e._meta??{},Z=e=>W(e)??e,z=e=>{const{column:t}=p(e);if(t?.defaultValue!==void 0||t?.defaultFn!==void 0)return!0;const n=W(e);return n===void 0?!1:z(n)},de=(e,t)=>{const n=Z(t),r=p(n);return{fkTable:n.kind==="id"?r.tableName:void 0,hasServerDefault:z(t),kind:n.kind,name:e,nullable:r.column?.notNull===!1,optional:t.kind==="optional",unique:r.column?.unique===!0,validator:n}},fe=e=>{const{tables:t}=e;return Object.entries(t).map(([n,r])=>({fields:Object.entries(r.shape).map(([o,i])=>de(o,i)),name:n}))},he=(e,t)=>{const n=new Map(e.map(s=>[s.name,s])),r=s=>{const c=n.get(s);if(c===void 0)return new Set;const l=new Set;for(const h of c.fields)h.fkTable!==void 0&&h.fkTable!==s&&t.has(h.fkTable)&&l.add(h.fkTable);return l},o=[],i=new Set,a=[...t].filter(s=>n.has(s));for(;a.length>0;){const s=a.findIndex(h=>[...r(h)].every(g=>i.has(g))),c=s===-1?0:s,[l]=a.splice(c,1);if(l===void 0)break;o.push(l),i.add(l)}return o},ge=(e,t,n=new Set)=>{const r=new Map(e.map(a=>[a.name,a])),o=new Set(t),i=[...o];for(;i.length>0;){const a=i.pop();if(a===void 0)break;const s=r.get(a);if(s!==void 0&&!n.has(a))for(const c of s.fields)c.fkTable!==void 0&&c.fkTable!==a&&r.has(c.fkTable)&&!o.has(c.fkTable)&&(o.add(c.fkTable),i.push(c.fkTable))}return o},J=e=>p(e).constraints??{},ve=[{generate:e=>u.email(e),keywords:["email"]},{generate:e=>u.firstName(e),keywords:["firstname"]},{generate:e=>u.lastName(e),keywords:["lastname","surname"]},{generate:e=>u.username(e),keywords:["username"]},{generate:e=>u.fullName(e),keywords:["name"]},{generate:e=>u.sentence(e,{max:5,min:2}),keywords:["title"]},{generate:e=>u.url(e),keywords:["url","link","image","avatar"]},{generate:e=>u.phoneNumber(e),keywords:["phone"]},{generate:e=>u.paragraph(e),keywords:["description","bio","body","content","text"]},{generate:e=>u.slug(e),keywords:["slug","key","code"]},{generate:e=>u.city(e),keywords:["city"]},{generate:e=>u.country(e),keywords:["country"]},{generate:e=>u.streetAddress(e),keywords:["address","street"]},{generate:e=>u.password(e),keywords:["password","secret","token"]}],pe=new Set(["at","date","deadline","expires","expiry","since","timestamp","until"]),we=/([a-z\d])([A-Z])/gu,be=/[\s_-]+/u,ye=e=>e.replaceAll(we,"$1 $2").split(be).filter(t=>t!=="").map(t=>t.toLowerCase()),$={max:1e3,min:0},E={max:1e6,min:0},Se=4320*60*60*1e3,K=e=>{const n=ye(e).at(-1);return n!==void 0&&pe.has(n)},Ae=(e,t)=>t-u.int(e,{max:Se,min:0}),Te=(e,t,n)=>{const r=e.toLowerCase(),o=ve.find(l=>l.keywords.some(h=>r.includes(h))),i=o===void 0?u.word(t):o.generate(t),{maxLength:a,minLength:s}=n;if(a!==void 0&&s!==void 0&&s>a)throw new y("INTERNAL",`Seed constraint error for field "${e}": minLength (${String(s)}) > maxLength (${String(a)}). Adjust the schema constraints.`);const c=a!==void 0&&i.length>a?i.slice(0,a):i;return s!==void 0&&c.length<s?c.padEnd(s,c.length>0?c:"x"):c},b=(e,t,n,r)=>{const o=Z(e),i=J(o);if(i.enum!==void 0&&i.enum.length>0)return u.oneOf(n,i.enum);switch(o.kind){case"any":return u.word(n);case"array":{const a=p(o).inner;return a===void 0?[]:u.times(n,[1,3],s=>b(a,t,s,r))}case"bigint":return u.int(n,{max:E.max,min:E.min});case"boolean":return u.bool(n);case"bytes":return Array.from({length:8},(a,s)=>u.int([n,s],{max:255,min:0}));case"date":case"timestamp":return new Date(u.dateString(n)).getTime();case"from":throw new y("INTERNAL",`@lunora/seed: column "${t}" is a v.from() validator, whose external Standard Schema the seeder cannot introspect to invent a conforming value. Supply one via \`overrides\` (\`{ <table>: { ${t}: … } }\`), restrict the run with \`only\` so the table is skipped, or give the column a concrete v.* type.`);case"id":return u.uuid(n);case"literal":return p(o).value;case"null":return null;case"number":{const{maximum:a,minimum:s}=i;if(a===void 0&&s===void 0&&K(t))return Ae(n,r);if(a!==void 0&&s!==void 0&&s>a)throw new y("INTERNAL",`Seed constraint error for field "${t}": minimum (${String(s)}) > maximum (${String(a)}). Adjust the schema constraints.`);const c=s??$.min,l=a??$.max;return!Number.isInteger(c)||!Number.isInteger(l)?u.float(n,{max:l,min:c}):u.int(n,{max:l,min:c})}case"object":{const a=p(o).shape??{};return Object.fromEntries(Object.entries(a).map(([s,c])=>[s,b(c,s,[n,s],r)]))}case"record":{const{keyValidator:a,valueValidator:s}=p(o),c=u.times(n,[1,3],l=>{const h=a===void 0?u.word(["k",l]):String(b(a,t,["k",l],r)),g=s===void 0?u.word(["v",l]):b(s,t,["v",l],r);return[h,g]});return Object.fromEntries(c)}case"storage":return`seed/${u.uuid(n)}`;case"string":return Te(t,n,i);case"union":{const a=p(o).members??[],s=u.oneOf(n,a);return s===void 0?u.word(n):b(s,t,[n,"u"],r)}default:return u.word(n)}},O=1e6,Ie=6e4,ke=2**32,xe=(e,t,n)=>{const r=[...e];for(let o=r.length-1;o>0;o-=1){const i=u.int([t,n,"unique-deal",o],{max:o,min:0}),a=r[o];r[o]=r[i],r[i]=a}return r},F="@example.com",Ne=(e,t,n)=>{const{maxLength:r}=n,o=String(t),i=e.indexOf("@");if(i>0){const c=e.slice(0,i),l=e.slice(i),h=r===void 0?c.length:Math.max(0,r-l.length-o.length-1);return`${c.slice(0,h)}+${o}${l}`}if(n.format==="email"){const c=r===void 0?e.length:Math.max(0,r-F.length-o.length);return`${e.slice(0,c)}${o}${F}`}const a=`-${o}`,s=r===void 0?e.length:Math.max(0,r-a.length);return`${e.slice(0,s)}${a}`},B=(e,t,n)=>{const r=xe(e,t,n);return{capacity:r.length,valueAt:o=>r[o%r.length]}},Oe=(e,t)=>{if(Number.isInteger(e)&&Number.isInteger(t)){const n=t-e+1;return{capacity:n,valueAt:r=>e+r%n}}return{capacity:O,valueAt:n=>e+n%O*(t-e)/O}},V=e=>({capacity:Number.POSITIVE_INFINITY,valueAt:t=>e-t*Ie}),_e={capacity:Number.POSITIVE_INFINITY,valueAt:e=>e},U=(e,t)=>{const{maximum:n,minimum:r}=e;return n===void 0&&r===void 0?_e:Oe(r??t.min,n??t.max)},G=(e,t,n)=>{throw new y("INTERNAL",`@lunora/seed: cannot generate unique values for "${e}"."${t}" — ${n}. Supply them via \`overrides\` (\`{ ${e}: { ${t}: … } }\`) or drop \`.unique()\` from the column.`)},$e=e=>e===void 0?Number.POSITIVE_INFINITY:e<=1?0:10**(e-1),Ee=(e,t,n)=>(e.pattern!==void 0&&G(t,n,"the column is pattern-constrained, and an index-tagged value would no longer match it"),e.format!==void 0&&e.format!=="email"&&G(t,n,`the column declares format "${e.format}", which an index-tagged value would no longer satisfy`),{capacity:$e(e.maxLength),valueAt:(r,o)=>Ne(String(o()),r,e)}),Me=(e,t)=>{const{now:n,table:r}=t,o=J(e.validator),i=o.enum;if(Array.isArray(i)&&i.length>0)return B(i,r,e.name);switch(e.kind){case"any":case"string":return Ee(o,r,e.name);case"bigint":return U(o,E);case"boolean":return B([!1,!0],r,e.name);case"bytes":return{capacity:ke,valueAt:a=>[Math.floor(a/16777216)%256,Math.floor(a/65536)%256,Math.floor(a/256)%256,a%256,...Array.from({length:4},(s,c)=>u.int([r,e.name,"unique-bytes",c],{max:255,min:0}))]};case"date":case"timestamp":return V(n);case"literal":return{capacity:1,valueAt:()=>p(e.validator).value};case"number":return o.maximum===void 0&&o.minimum===void 0&&K(e.name)?V(n):U(o,$);default:return{capacity:Number.POSITIVE_INFINITY,valueAt:(a,s)=>s()}}},De=(e,t)=>typeof e=="function"?e(t):e,Le=(e,t)=>{if(!e.optional)return e.nullable?null:u.uuid(t)},Re=(e,t,n,r,o)=>{const i=e.fkTable,a=i===t?(r.get(t)??[]).slice(0,n):r.get(i)??[],s=o[i]??[];return s.length===0?a:[...a,...s]},Y=(e,t,n,r)=>[e,t,n,r],Pe=(e,t)=>{const{existingIds:n,idsByTable:r,index:o,input:i,localIndex:a,now:s,table:c,uniqueDeals:l}=t;if(e.fkTable!==void 0){const g=Re(e,c,a,r,n);return g.length===0?Le(e,i):u.oneOf(i,g)}if(e.hasServerDefault)return;const h=e.unique?l.get(e.name):void 0;return h!==void 0?h.valueAt(o,()=>b(e.validator,e.name,i,s)):b(e.validator,e.name,i,s)},je=(e,t,n,r,o,i)=>{const a=new Map;for(const s of e){if(!s.unique||s.fkTable!==void 0||s.hasServerDefault)continue;const c=Me(s,{now:o,table:t}),l=r+n;if(l>c.capacity&&!Object.hasOwn(i,s.name))throw new y("BAD_REQUEST",`cannot seed ${String(l)} rows into "${t}": unique column "${s.name}" has only ${String(c.capacity)} possible values`);a.set(s.name,c)}return a},Be=(e,t={})=>{const{counts:n={},defaultCount:r=10,existingIds:o={},indexOffset:i={},now:a=Date.now(),only:s,overrides:c={},seed:l=0}=t;ie(l);const h=fe(e);if(s!==void 0){const d=new Set(h.map(w=>w.name));for(const w of s)if(!d.has(w)){const S=h.map(T=>T.name).join(", ");throw new y("BAD_REQUEST",`unknown table "${w}" in seed \`only\` — schema defines: ${S||"(no tables)"}`)}}const g=new Set(s??h.map(d=>d.name)),Q=new Set(Object.keys(o).filter(d=>!g.has(d)&&(o[d]??[]).length>0)),X=new Set([...ge(h,g,Q)].filter(d=>g.has(d)||(o[d]??[]).length===0)),ee=he(h,X),te=new Map(h.map(d=>[d.name,d])),M=new Map,D={},L=[];for(const d of ee){const w=te.get(d);if(w===void 0)continue;const S=c[d]??{},T=n[d]??r,R=i[d]??0,ne=je(w.fields,d,T,R,a,S),P=[];M.set(d,P);const N=[];D[d]=N;for(let I=0;I<T;I+=1){const k=R+I,A={},j=(v,re)=>{if(Object.hasOwn(S,v)){const C=De(S[v],{field:v,index:k,row:A,store:D,table:d});if(C!==void 0){A[v]=C;return}}const q=re();q!==void 0&&(A[v]=q)};j("_id",()=>u.uuid(Y(l,d,k,"_id"))),P.push(A._id);for(const v of w.fields)j(v.name,()=>Pe(v,{existingIds:o,idsByTable:M,index:k,input:Y(l,d,k,v.name),localIndex:I,now:a,table:d,uniqueDeals:ne}));N.push(A)}L.push({rows:N,table:d})}return L};export{ie as a,u as c,fe as i,Be as s};
@@ -0,0 +1 @@
1
+ import{s as a}from"./plan-vnUMmTjD.mjs";export{a as seedPlan};
package/dist/testing.mjs CHANGED
@@ -1 +1 @@
1
- import{s as m,i as u}from"./packem_shared/plan-D1fxWyQ-.mjs";const g=(r,o,a)=>{if(o.size===0&&a.size===0)return r;const s={...r};for(const n of o){const t=s[n];typeof t=="number"&&(s[n]=BigInt(t))}for(const n of a){const t=s[n];Array.isArray(t)&&(s[n]=Uint8Array.from(t).buffer)}return s},S=async(r,o,a={})=>{const s=m(o,a),n=u(o),t=new Map,l=new Map;for(const i of n){const c=new Set(i.fields.filter(e=>e.kind==="bigint").map(e=>e.name)),f=new Set(i.fields.filter(e=>e.kind==="bytes").map(e=>e.name));c.size>0&&t.set(i.name,c),f.size>0&&l.set(i.name,f)}const d={};return await r.run(async i=>{const c=i.db.insert;for(const{rows:f,table:e}of s){const b=[],p=t.get(e)??new Set,w=l.get(e)??new Set;for(const y of f)b.push(await c(e,g(y,p,w),{allowExplicitId:!0}));d[e]=b}}),d};export{S as seed};
1
+ import{s as m,i as u}from"./packem_shared/plan-vnUMmTjD.mjs";const g=(r,o,a)=>{if(o.size===0&&a.size===0)return r;const s={...r};for(const n of o){const t=s[n];typeof t=="number"&&(s[n]=BigInt(t))}for(const n of a){const t=s[n];Array.isArray(t)&&(s[n]=Uint8Array.from(t).buffer)}return s},S=async(r,o,a={})=>{const s=m(o,a),n=u(o),t=new Map,l=new Map;for(const i of n){const c=new Set(i.fields.filter(e=>e.kind==="bigint").map(e=>e.name)),f=new Set(i.fields.filter(e=>e.kind==="bytes").map(e=>e.name));c.size>0&&t.set(i.name,c),f.size>0&&l.set(i.name,f)}const d={};return await r.run(async i=>{const c=i.db.insert;for(const{rows:f,table:e}of s){const b=[],p=t.get(e)??new Set,w=l.get(e)??new Set;for(const y of f)b.push(await c(e,g(y,p,w),{allowExplicitId:!0}));d[e]=b}}),d};export{S as seed};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunora/seed",
3
- "version": "1.0.0-alpha.78",
3
+ "version": "1.0.0-alpha.79",
4
4
  "description": "Schema-driven, deterministic database seeding for Lunora: realistic fake data from defineSchema",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -1 +0,0 @@
1
- import{LunoraError as O}from"@lunora/errors";import{faker as u}from"@faker-js/faker";import{optionalInner as P}from"@lunora/values";let T=0;const z=(e,t)=>e<t?-1:e>t?1:0,_=e=>e===void 0?"undefined":typeof e=="bigint"?`${e.toString()}n`:e===null||typeof e!="object"?JSON.stringify(e)??"null":Array.isArray(e)?`[${e.map(n=>_(n)).join(",")}]`:`{${Object.keys(e).toSorted(z).map(n=>`${JSON.stringify(n)}:${_(e[n])}`).join(",")}}`,C=(e,t)=>{let n=3735928559^t,o=1103547991^t;for(let s=0;s<e.length;s+=1){const i=e.codePointAt(s)??0;n=Math.imul(n^i,2654435761),o=Math.imul(o^i,1597334677)}return n=Math.imul(n^n>>>16,2246822507),n^=Math.imul(o^o>>>13,3266489909),o=Math.imul(o^o>>>16,2246822507),o^=Math.imul(n^n>>>13,3266489909),4294967296*(2097151&o)+(n>>>0)},J="\0",q=e=>{const t=typeof e=="string"?J+e:_(e);return C(t,T)%4294967296},K=e=>{if(typeof e=="number"){T=e>>>0;return}if(typeof e=="string"){T=C(e,0)%4294967296;return}let t=0;for(const n of e)t=Math.imul(t^n,2654435761)>>>0;T=t},d=(e,t)=>(u.seed(q(e)),t()),Q=(e,t)=>{if(typeof t=="number")return t;const[n,o]=t;return d(["__count__",e],()=>u.number.int({max:o,min:n}))},Y=/[a-z]/,X=/[A-Z]/,ee=/\d/,c={bool(e){return d(e,()=>u.datatype.boolean())},city(e){return d(e,()=>u.location.city())},country(e){return d(e,()=>u.location.country())},dateString(e,t){const n=t?.min??new Date("1980-01-01T00:00:00.000Z"),o=t?.max??new Date("2020-01-01T00:00:00.000Z");return d(e,()=>u.date.between({from:n,to:o}).toISOString())},email(e){return d(e,()=>u.internet.email().toLowerCase())},firstName(e){return d(e,()=>u.person.firstName())},float(e,t){const{fractionDigits:n=2,max:o=1e3,min:s=0}=t??{};return d(e,()=>u.number.float({fractionDigits:n,max:o,min:s}))},fullName(e){return d(e,()=>u.person.fullName())},int(e,t){const{max:n=1e3,min:o=0}=t??{};return d(e,()=>u.number.int({max:n,min:o}))},lastName(e){return d(e,()=>u.person.lastName())},oneOf(e,t){if(t.length!==0)return d(e,()=>u.helpers.arrayElement(t))},paragraph(e){return d(e,()=>u.lorem.paragraph())},password(e){return d(e,()=>u.internet.password())},phoneNumber(e){return d(e,()=>u.phone.number())},scramble(e,t){const n=new Set(t?.preserve);return Array.from({length:e.length},(o,s)=>{const i=e.charAt(s);return n.has(i)?i:Y.test(i)?d([e,s,"l"],()=>u.string.alpha({casing:"lower",length:1})):X.test(i)?d([e,s,"u"],()=>u.string.alpha({casing:"upper",length:1})):ee.test(i)?d([e,s,"d"],()=>String(u.number.int({max:9,min:0}))):i}).join("")},sentence(e,t){return d(e,()=>u.lorem.sentence(t?{max:t.max??8,min:t.min??3}:void 0))},slug(e){return d(e,()=>u.lorem.slug())},streetAddress(e){return d(e,()=>u.location.streetAddress())},times(e,t,n){const o=Q(e,t),s=[];for(let i=0;i<o;i+=1)s.push(n([e,i]));return s},url(e){return d(e,()=>u.internet.url())},username(e){return d(e,()=>u.internet.username())},uuid(e){return d(e,()=>u.string.uuid())},word(e){return d(e,()=>u.lorem.word())}},w=e=>e._meta??{},F=e=>P(e)??e,W=e=>{const{column:t}=w(e);if(t?.defaultValue!==void 0||t?.defaultFn!==void 0)return!0;const n=P(e);return n===void 0?!1:W(n)},te=(e,t)=>{const n=F(t),o=w(n);return{fkTable:n.kind==="id"?o.tableName:void 0,hasServerDefault:W(t),kind:n.kind,name:e,nullable:o.column?.notNull===!1,optional:t.kind==="optional",validator:n}},ne=e=>{const{tables:t}=e;return Object.entries(t).map(([n,o])=>({fields:Object.entries(o.shape).map(([s,i])=>te(s,i)),name:n}))},re=(e,t)=>{const n=new Map(e.map(r=>[r.name,r])),o=r=>{const l=n.get(r);if(l===void 0)return new Set;const f=new Set;for(const h of l.fields)h.fkTable!==void 0&&h.fkTable!==r&&t.has(h.fkTable)&&f.add(h.fkTable);return f},s=[],i=new Set,a=[...t].filter(r=>n.has(r));for(;a.length>0;){const r=a.findIndex(h=>[...o(h)].every(b=>i.has(b))),l=r===-1?0:r,[f]=a.splice(l,1);if(f===void 0)break;s.push(f),i.add(f)}return s},oe=(e,t,n=new Set)=>{const o=new Map(e.map(a=>[a.name,a])),s=new Set(t),i=[...s];for(;i.length>0;){const a=i.pop();if(a===void 0)break;const r=o.get(a);if(r!==void 0&&!n.has(a))for(const l of r.fields)l.fkTable!==void 0&&l.fkTable!==a&&o.has(l.fkTable)&&!s.has(l.fkTable)&&(s.add(l.fkTable),i.push(l.fkTable))}return s},se=e=>w(e).constraints??{},ae=[{generate:e=>c.email(e),keywords:["email"]},{generate:e=>c.firstName(e),keywords:["firstname"]},{generate:e=>c.lastName(e),keywords:["lastname","surname"]},{generate:e=>c.username(e),keywords:["username"]},{generate:e=>c.fullName(e),keywords:["name"]},{generate:e=>c.sentence(e,{max:5,min:2}),keywords:["title"]},{generate:e=>c.url(e),keywords:["url","link","image","avatar"]},{generate:e=>c.phoneNumber(e),keywords:["phone"]},{generate:e=>c.paragraph(e),keywords:["description","bio","body","content","text"]},{generate:e=>c.slug(e),keywords:["slug","key","code"]},{generate:e=>c.city(e),keywords:["city"]},{generate:e=>c.country(e),keywords:["country"]},{generate:e=>c.streetAddress(e),keywords:["address","street"]},{generate:e=>c.password(e),keywords:["password","secret","token"]}],ie=new Set(["at","date","deadline","expires","expiry","since","timestamp","until"]),ce=/([a-z\d])([A-Z])/gu,le=/[\s_-]+/u,ue=e=>e.replaceAll(ce,"$1 $2").split(le).filter(t=>t!=="").map(t=>t.toLowerCase()),de=4320*60*60*1e3,me=e=>{const n=ue(e).at(-1);return n!==void 0&&ie.has(n)},fe=(e,t)=>t-c.int(e,{max:de,min:0}),he=(e,t,n)=>{const o=e.toLowerCase(),s=ae.find(f=>f.keywords.some(h=>o.includes(h))),i=s===void 0?c.word(t):s.generate(t),{maxLength:a,minLength:r}=n;if(a!==void 0&&r!==void 0&&r>a)throw new O("INTERNAL",`Seed constraint error for field "${e}": minLength (${String(r)}) > maxLength (${String(a)}). Adjust the schema constraints.`);const l=a!==void 0&&i.length>a?i.slice(0,a):i;return r!==void 0&&l.length<r?l.padEnd(r,l.length>0?l:"x"):l},p=(e,t,n,o)=>{const s=F(e),i=se(s);if(i.enum!==void 0&&i.enum.length>0)return c.oneOf(n,i.enum);switch(s.kind){case"any":return c.word(n);case"array":{const a=w(s).inner;return a===void 0?[]:c.times(n,[1,3],r=>p(a,t,r,o))}case"bigint":return c.int(n,{max:1e6,min:0});case"boolean":return c.bool(n);case"bytes":return Array.from({length:8},(a,r)=>c.int([n,r],{max:255,min:0}));case"date":case"timestamp":return new Date(c.dateString(n)).getTime();case"from":throw new O("INTERNAL",`@lunora/seed: column "${t}" is a v.from() validator, whose external Standard Schema the seeder cannot introspect to invent a conforming value. Supply one via \`overrides\` (\`{ <table>: { ${t}: … } }\`), restrict the run with \`only\` so the table is skipped, or give the column a concrete v.* type.`);case"id":return c.uuid(n);case"literal":return w(s).value;case"null":return null;case"number":{const{maximum:a,minimum:r}=i;if(a===void 0&&r===void 0&&me(t))return fe(n,o);if(a!==void 0&&r!==void 0&&r>a)throw new O("INTERNAL",`Seed constraint error for field "${t}": minimum (${String(r)}) > maximum (${String(a)}). Adjust the schema constraints.`);const l=r??0,f=a??1e3;return!Number.isInteger(l)||!Number.isInteger(f)?c.float(n,{max:f,min:l}):c.int(n,{max:f,min:l})}case"object":{const a=w(s).shape??{};return Object.fromEntries(Object.entries(a).map(([r,l])=>[r,p(l,r,[n,r],o)]))}case"record":{const{keyValidator:a,valueValidator:r}=w(s),l=c.times(n,[1,3],f=>{const h=a===void 0?c.word(["k",f]):String(p(a,t,["k",f],o)),b=r===void 0?c.word(["v",f]):p(r,t,["v",f],o);return[h,b]});return Object.fromEntries(l)}case"storage":return`seed/${c.uuid(n)}`;case"string":return he(t,n,i);case"union":{const a=w(s).members??[],r=c.oneOf(n,a);return r===void 0?c.word(n):p(r,t,[n,"u"],o)}default:return c.word(n)}},ge=(e,t)=>typeof e=="function"?e(t):e,we=(e,t)=>{if(!e.optional)return e.nullable?null:c.uuid(t)},be=(e,t,n,o,s)=>{const i=e.fkTable,a=i===t?(o.get(t)??[]).slice(0,n):o.get(i)??[],r=s[i]??[];return r.length===0?a:[...a,...r]},R=(e,t,n,o)=>[e,t,n,o],ve=(e,t,n,o,s,i,a)=>{if(e.fkTable!==void 0){const r=be(e,t,o,s,i);return r.length===0?we(e,n):c.oneOf(n,r)}if(!e.hasServerDefault)return p(e.validator,e.name,n,a)},ke=(e,t={})=>{const{counts:n={},defaultCount:o=10,existingIds:s={},indexOffset:i={},now:a=Date.now(),only:r,overrides:l={},seed:f=0}=t;K(f);const h=ne(e);if(r!==void 0){const m=new Set(h.map(v=>v.name));for(const v of r)if(!m.has(v)){const S=h.map(x=>x.name).join(", ");throw new O("BAD_REQUEST",`unknown table "${v}" in seed \`only\` — schema defines: ${S||"(no tables)"}`)}}const b=new Set(r??h.map(m=>m.name)),G=new Set(Object.keys(s).filter(m=>!b.has(m)&&(s[m]??[]).length>0)),H=new Set([...oe(h,b,G)].filter(m=>b.has(m)||(s[m]??[]).length===0)),U=re(h,H),V=new Map(h.map(m=>[m.name,m])),I=new Map,M={},$=[];for(const m of U){const v=V.get(m);if(v===void 0)continue;const S=l[m]??{},x=n[m]??o,Z=i[m]??0,E=[];I.set(m,E);const A=[];M[m]=A;for(let k=0;k<x;k+=1){const N=Z+k,y={},j=(g,B)=>{if(Object.hasOwn(S,g)){const L=ge(S[g],{field:g,index:N,row:y,store:M,table:m});if(L!==void 0){y[g]=L;return}}const D=B();D!==void 0&&(y[g]=D)};j("_id",()=>c.uuid(R(f,m,N,"_id"))),E.push(y._id);for(const g of v.fields)j(g.name,()=>ve(g,m,R(f,m,N,g.name),k,I,s,a));A.push(y)}$.push({rows:A,table:m})}return $};export{K as a,c,ne as i,ke as s};
@@ -1 +0,0 @@
1
- import{s as a}from"./plan-D1fxWyQ-.mjs";export{a as seedPlan};