@lunora/codegen 1.0.0-alpha.108 → 1.0.0-alpha.109
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.d.mts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.mjs +1 -1
- package/dist/packem_shared/AGENTS_FILENAME-CPHo8Se5.mjs +1 -0
- package/dist/packem_shared/{CONTAINERS_FILENAME-DQpyhY6c.mjs → CONTAINERS_FILENAME-Bvn6LZP6.mjs} +1 -1
- package/dist/packem_shared/CodegenDiagnosticError-BUXlG3P-.mjs +1 -0
- package/dist/packem_shared/DEFAULT_TARGET-CIH5PRk1.mjs +1 -0
- package/dist/packem_shared/FLAGS_FILENAME-DtBWyUKq.mjs +1 -0
- package/dist/packem_shared/GENERATED_HEADER-GSCh67g3.mjs +1 -0
- package/dist/packem_shared/{LUNORA_ERROR_CODES-zfAI2OFs.mjs → LUNORA_ERROR_CODES-BYg8Lpgb.mjs} +1 -1
- package/dist/packem_shared/MUTATORS_FILENAME-CRmTpN4y.mjs +1 -0
- package/dist/packem_shared/NOTIFY_FILENAME-BybR3Xbd.mjs +1 -0
- package/dist/packem_shared/OPENRPC_VERSION-DB1PSt8W.mjs +3 -0
- package/dist/packem_shared/QUEUES_FILENAME-BnGLtAIu.mjs +1 -0
- package/dist/packem_shared/SCHEMA_SNAPSHOT_FILENAME-D9rvsQ0t.mjs +9 -0
- package/dist/packem_shared/SCHEMA_SNAPSHOT_VERSION-DIqnj_32.mjs +2 -0
- package/dist/packem_shared/SDK_LANGUAGES-p7vq4x7B.mjs +320 -0
- package/dist/packem_shared/SHAPES_FILENAME-DxoIrQhA.mjs +1 -0
- package/dist/packem_shared/SchemaSnapshotParseError-Dc1aZAph.mjs +16 -0
- package/dist/packem_shared/WORKFLOWS_FILENAME-B8y51Frf.mjs +1 -0
- package/dist/packem_shared/buildOpenApiDocument-B2mW3f5a.mjs +3 -0
- package/dist/packem_shared/describeErrorLevelFindings-D23VSkFP.mjs +1 -0
- package/dist/packem_shared/discover-ast-D33zP-NZ.mjs +1 -0
- package/dist/packem_shared/discover-queries-Dfj_0WJG.mjs +1 -0
- package/dist/packem_shared/discoverAuthApiCalls-DUjcl0SB.mjs +1 -0
- package/dist/packem_shared/discoverCrons-BUJO2ipU.mjs +1 -0
- package/dist/packem_shared/discoverFunctions-h8i51Mec.mjs +1 -0
- package/dist/packem_shared/discoverHttpRoutes-MX6y-iVE.mjs +1 -0
- package/dist/packem_shared/discoverInserts-YX8AmrzL.mjs +1 -0
- package/dist/packem_shared/discoverMaskProcedures-DhcK-YMG.mjs +1 -0
- package/dist/packem_shared/discoverMigrations-4Jjf5DJE.mjs +1 -0
- package/dist/packem_shared/discoverNondeterministicCalls-CjS2Mznw.mjs +1 -0
- package/dist/packem_shared/discoverQueries-C5S9tFoD.mjs +1 -0
- package/dist/packem_shared/discoverR2sqlCalls-DuTuaSMM.mjs +1 -0
- package/dist/packem_shared/discoverRlsMetadata-BYVq6cVp.mjs +1 -0
- package/dist/packem_shared/{discoverSandboxUsage-DBM98vVh.mjs → discoverSandboxUsage-L0lV17de.mjs} +1 -1
- package/dist/packem_shared/discoverSchema-BtlNz9b_.mjs +1 -0
- package/dist/packem_shared/discoverStorageRulesMetadata-CKPFWHT5.mjs +1 -0
- package/dist/packem_shared/{emit-BbLyaTLJ.mjs → emit-Ba3NiOwK.mjs} +326 -326
- package/dist/packem_shared/{emitApp-DkO-Qvoo.mjs → emitApp-hKEej7rj.mjs} +18 -18
- package/dist/packem_shared/formatAdvisories-BjTV22uR.mjs +2 -0
- package/dist/packem_shared/isTypedSchema-CU-O5qSH.mjs +2 -0
- package/dist/packem_shared/module-specifiers-WF8iAydP.mjs +1 -0
- package/dist/packem_shared/parse-validator-DtALyvid.mjs +1 -0
- package/dist/packem_shared/paths-C-9fwEgQ.mjs +1 -0
- package/dist/packem_shared/readPackageDependencies-C6h6FZuP.mjs +1 -0
- package/dist/packem_shared/redact-Cy14LEnc.mjs +1 -0
- package/dist/packem_shared/schemaFromIr-BWFnvCVg.mjs +1 -0
- package/package.json +3 -3
- package/dist/packem_shared/AGENTS_FILENAME-Dk-k250h.mjs +0 -1
- package/dist/packem_shared/CodegenDiagnosticError-DPezpZTz.mjs +0 -1
- package/dist/packem_shared/DEFAULT_TARGET-CH5disA3.mjs +0 -1
- package/dist/packem_shared/FLAGS_FILENAME-Boqm0YCP.mjs +0 -1
- package/dist/packem_shared/GENERATED_HEADER-CtitJsDk.mjs +0 -1
- package/dist/packem_shared/MUTATORS_FILENAME-Cp_JxLSz.mjs +0 -1
- package/dist/packem_shared/NOTIFY_FILENAME-DwyJ5I4Q.mjs +0 -1
- package/dist/packem_shared/OPENRPC_VERSION-Bzh1vxcl.mjs +0 -3
- package/dist/packem_shared/QUEUES_FILENAME-QpMZsde0.mjs +0 -1
- package/dist/packem_shared/SCHEMA_SNAPSHOT_FILENAME-lAJi8U-X.mjs +0 -9
- package/dist/packem_shared/SCHEMA_SNAPSHOT_VERSION-CFhF_hmg.mjs +0 -2
- package/dist/packem_shared/SDK_LANGUAGES-fIqQtE14.mjs +0 -320
- package/dist/packem_shared/SHAPES_FILENAME-WxXOsYfe.mjs +0 -1
- package/dist/packem_shared/SchemaSnapshotParseError-BkgxjBPQ.mjs +0 -16
- package/dist/packem_shared/WORKFLOWS_FILENAME-Dz80zqeT.mjs +0 -1
- package/dist/packem_shared/buildOpenApiDocument-B8-PH9af.mjs +0 -3
- package/dist/packem_shared/describeErrorLevelFindings-IhNx9gPr.mjs +0 -1
- package/dist/packem_shared/discover-ast-7ABwvTVn.mjs +0 -1
- package/dist/packem_shared/discover-queries-CU9o_j87.mjs +0 -1
- package/dist/packem_shared/discoverAuthApiCalls-XfNbxqlq.mjs +0 -1
- package/dist/packem_shared/discoverCrons-RlATa0_t.mjs +0 -1
- package/dist/packem_shared/discoverFunctions-4TNKUv7P.mjs +0 -1
- package/dist/packem_shared/discoverHttpRoutes-DQivLBqT.mjs +0 -1
- package/dist/packem_shared/discoverInserts-D6szWzrV.mjs +0 -1
- package/dist/packem_shared/discoverMaskProcedures-BBPqLXA5.mjs +0 -1
- package/dist/packem_shared/discoverMigrations-rbjxflR8.mjs +0 -1
- package/dist/packem_shared/discoverNondeterministicCalls-Bxr652Rz.mjs +0 -1
- package/dist/packem_shared/discoverQueries-CIU5dc0u.mjs +0 -1
- package/dist/packem_shared/discoverR2sqlCalls-DMxG6gHr.mjs +0 -1
- package/dist/packem_shared/discoverRlsMetadata-B63ARnKG.mjs +0 -1
- package/dist/packem_shared/discoverSchema-BNr7PVcZ.mjs +0 -1
- package/dist/packem_shared/discoverStorageRulesMetadata-_40MGqRX.mjs +0 -1
- package/dist/packem_shared/formatAdvisories-CQvIhQ04.mjs +0 -2
- package/dist/packem_shared/isTypedSchema-9wiKtXr2.mjs +0 -2
- package/dist/packem_shared/module-specifiers-8FEEiUcv.mjs +0 -1
- package/dist/packem_shared/parse-validator-CusS8QwU.mjs +0 -1
- package/dist/packem_shared/paths-BmX5O1sG.mjs +0 -1
- package/dist/packem_shared/readPackageDependencies-CogJX1Ia.mjs +0 -1
- package/dist/packem_shared/redact-6jD4lAhq.mjs +0 -1
- package/dist/packem_shared/schemaFromIr-R1ZFzVyy.mjs +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{LunoraError as T}from"@lunora/errors";import{Node as s,SyntaxKind as j}from"ts-morph";import{diagnosticAt as u}from"./CodegenDiagnosticError-DPezpZTz.mjs";import{g as A}from"./parse-validator-CusS8QwU.mjs";import{createRequire as _}from"node:module";import{join as N}from"node:path";const O=e=>{switch(typeof e){case"bigint":return e.toString();case"boolean":case"number":return String(e);case"string":return JSON.stringify(e);default:return e===null?"null":void 0}},D=e=>({...e?.defaultValue!==void 0||e?.defaultFn!==void 0||e?.serverDefault!==void 0?{hasDefault:!0}:{},...e?.onUpdateFn===void 0?{}:{hasOnUpdate:!0},notNull:e?.notNull??!0,...e?.unique===!0?{unique:!0}:{}}),g=e=>{const r=e?._meta??{},t=e?.kind??"unknown",n={column:D(r.column),kind:t};switch(t){case"array":case"optional":{n.inner=g(r.inner);break}case"from":break;case"id":{n.tableName=r.tableName;break}case"literal":{n.literalValue=O(r.value);break}case"object":{const i=r.shape??{};n.shape=Object.fromEntries(Object.entries(i).map(([a,o])=>[a,g(o)]));break}case"record":{n.valueType=g(r.valueValidator),r.keyValidator!==void 0&&(n.keyType=g(r.keyValidator));break}case"storage":{typeof r.bucket=="string"&&(n.bucket=r.bucket);break}case"union":{const i=r.members??[];n.members=i.map(a=>g(a));break}}return n},M=e=>e?.kind==="global"?"global":e?.kind==="shardBy"&&typeof e.field=="string"?{field:e.field,kind:"shardBy"}:"root",z=(e,r)=>{const t=[];e.relationMap&&Object.keys(e.relationMap).length>0&&t.push("relations"),e.rankIndexes&&e.rankIndexes.length>0&&t.push("rank indexes"),e.vectorIndexes&&e.vectorIndexes.length>0&&t.push("vector indexes"),t.length>0&&console.warn(`@lunora/codegen: package schema-extension table "${r}" declares ${t.join(" + ")}, which are not yet introspected from a node_modules extension — they will be absent from the generated types.`)},B=(e,r)=>{const t=e.shape??{},n=(e.indexes??[]).map(i=>({fields:i.fields,name:i.name,...i.unique?{unique:!0}:{}}));return z(e,r),{...e.isExternallyManaged?{externallyManaged:!0}:{},geoIndexes:[],indexes:n,name:r,rankIndexes:[],relations:[],searchIndexes:(e.searchIndexes??[]).map(i=>({field:i.field,...i.filterFields?{filterFields:i.filterFields}:{},...i.language===void 0?{}:{language:i.language},...i.staged===void 0?{}:{staged:i.staged},...i.strategy===void 0?{}:{strategy:i.strategy},name:i.name})),shape:Object.fromEntries(Object.entries(t).map(([i,a])=>[i,g(a)])),shardMode:M(e.shardMode),vectorIndexes:[]}},F=e=>{const{key:r,tables:t}=e;if(typeof r!="string"||typeof t!="object"||t===null)return;const n=Object.entries(t).map(([o,l])=>B(l,o)),i=e.vectorIndexes??{},a=Object.entries(i??{}).map(([o,l])=>({...l.dimensions===void 0?{}:{dimensions:l.dimensions},...l.field===void 0?{}:{field:l.field},...l.metadata===void 0?{}:{metadata:l.metadata},...l.metric===void 0?{}:{metric:l.metric},name:o,table:l.table??""}));return{bareTables:n,bareVectorIndexes:a,key:r}},q=e=>{if(s.isIdentifier(e))return e.getText();if(s.isPropertyAccessExpression(e)){const r=e.getExpression();return s.isIdentifier(r)?r.getText():void 0}},R=e=>{const r=q(e);if(r===void 0)return;const t=s.isPropertyAccessExpression(e)?e.getName():void 0,n=t===void 0?[]:[t];for(const i of e.getSourceFile().getImportDeclarations()){const a=i.getModuleSpecifierValue();for(const o of i.getNamedImports())if((o.getAliasNode()?.getText()??o.getName())===r)return{importedName:o.getName(),moduleSpecifier:a,propertyPath:n};if(i.getDefaultImport()?.getText()===r)return{importedName:"default",moduleSpecifier:a,propertyPath:n};if(i.getNamespaceImport()?.getText()===r&&t!==void 0)return{importedName:t,moduleSpecifier:a,propertyPath:[]}}},C=(e,r)=>{let t=e[r.importedName];for(const n of r.propertyPath){if(typeof t!="object"||t===null)return;t=t[n]}return t},V=(e,r)=>{const t=R(e);if(t)try{const n=_(N(r,"noop.cjs")),i=n.resolve(t.moduleSpecifier),a=n(i),o=C(a,t);return typeof o!="object"||o===null?void 0:F(o)}catch{return}},J=new Set(["cosine","dot-product","euclidean"]),U=new Set(["cascade","restrict","set null"]),I=new Set(["delete","get","insert","normalizeId","patch","query","replace","system"]),K=/^[A-Za-z_$][\w$]*$/u,Z=e=>e.replaceAll(/^["']|["']$/gu,""),Q=(e,r)=>{const t=Z(e);if(I.has(t))throw u(r,`table name "${t}" is reserved — it collides with a \`ctx.db\` member (one of ${[...I].map(n=>`"${n}"`).join(", ")}). Rename the table.`);if(!K.test(t))throw u(r,`table name ${JSON.stringify(t)} is not a valid JS identifier — table names are used in generated type names (Doc_<name>) and must match [A-Za-z_$][A-Za-z0-9_$]*. Rename the table.`)},p=(e,r)=>{const t=e.getProperty(r);if(t&&s.isPropertyAssignment(t))return t.getInitializer()},d=(e,r)=>{const t=p(e,r);if(t&&s.isStringLiteral(t))return t.getLiteralText()},m=(e,r)=>{const t=p(e,r);if(t&&s.isNumericLiteral(t))return Number(t.getLiteralText())},X=(e,r)=>{const t=p(e,r);if(t&&(s.isTrueLiteral(t)||s.isFalseLiteral(t)))return t.getLiteralValue()},x=(e,r)=>{const t=p(e,r);if(t&&s.isArrayLiteralExpression(t))return t.getElements().filter(n=>s.isStringLiteral(n)).map(n=>n.getLiteralText())},L=e=>e&&J.has(e)?e:void 0,G=e=>e&&U.has(e)?e:void 0,H=e=>{if(!s.isArrowFunction(e))return;let r=e.getBody();if(s.isParenthesizedExpression(r))r=r.getExpression();else if(s.isBlock(r)){const t=r.getStatements().find(n=>s.isReturnStatement(n));r=t&&s.isReturnStatement(t)?t.getExpression()??r:r}return s.isObjectLiteralExpression(r)?r:void 0},W=e=>{if(!s.isPropertyAssignment(e))return;const r=e.getInitializer();if(!r||!s.isCallExpression(r))return;const t=r.getExpression();if(!s.isPropertyAccessExpression(t))return;const n=t.getName();if(n!=="one"&&n!=="many")return;const[i,a]=r.getArguments(),o=i&&s.isStringLiteral(i)?i.getLiteralText():"_unknown_";let l="_unknown_",c="_id",f;return a&&s.isObjectLiteralExpression(a)&&(l=d(a,"field")??l,c=d(a,"references")??c,f=n==="one"?G(d(a,"onDelete")):void 0),{field:l,kind:n,name:e.getName(),onDelete:f,references:c,table:o}},Y=e=>{const r=H(e);if(!r)return[];const t=[];for(const n of r.getProperties()){const i=W(n);i&&t.push(i)}return t},b=e=>e&&s.isStringLiteral(e)?e.getLiteralText():"_unnamed_",ee=(e,r,t)=>{if(!r.includes("."))return;const[n="",...i]=r.split("."),a=`${n}${i.map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join("")}`;throw u(e,`index "${t}" indexes the nested path ${JSON.stringify(r)} — Lunora indexes only top-level columns. Denormalise the value into its own column (e.g. \`${a}\`), index that instead, and keep it in sync with a table \`.triggers()\` beforeInsert/beforeUpdate.`)},te=e=>{if(!e||!s.isObjectLiteralExpression(e))return!1;const r=e.getProperty("unique");if(!r||!s.isPropertyAssignment(r))return!1;const t=r.getInitializer();if(t===void 0)return!1;if(!s.isTrueLiteral(t)&&!s.isFalseLiteral(t))throw u(t,`\`unique\` must be a literal \`true\` or \`false\`, got ${JSON.stringify(t.getText())}`);return s.isTrueLiteral(t)},re=e=>{const[r,t,n]=e,i=te(n),a=b(r),o=t&&s.isArrayLiteralExpression(t)?t.getElements():[];for(const c of o)if(!s.isStringLiteral(c))throw u(c,`index "${a}" lists a non-literal field (${JSON.stringify(c.getText())}); codegen reads index fields statically, so every entry must be a string literal.`);const l=o.filter(c=>s.isStringLiteral(c));for(const c of l)ee(c,c.getLiteralText(),a);return{fields:l.map(c=>c.getLiteralText()),name:a,unique:i}},ne=e=>{const[r,t]=e;let n="_unknown_",i,a,o,l;return t&&s.isObjectLiteralExpression(t)&&(n=d(t,"field")??n,i=x(t,"filterFields"),a=d(t,"language"),o=X(t,"staged"),l=d(t,"strategy")),{field:n,filterFields:i,language:a,name:b(r),staged:o,strategy:l}},ie=e=>{const[r,t]=e;let n="_unknown_",i;return t&&s.isObjectLiteralExpression(t)&&(n=d(t,"field")??n,i=m(t,"precision")),{field:n,name:b(r),precision:i}},se=e=>{const[r,t]=e,n=r&&s.isStringLiteral(r)?r.getLiteralText():"_unknown_";let i;return t&&s.isObjectLiteralExpression(t)&&(i=m(t,"after")),{after:i,field:n}},ae=e=>{if(!s.isObjectLiteralExpression(e))return;const r=d(e,"field");return r===void 0?void 0:{direction:d(e,"direction")==="desc"?"desc":"asc",field:r}},oe=e=>{const[r,t]=e;let n=[],i;if(t&&s.isObjectLiteralExpression(t)){const a=t.getProperty("sortBy");if(a&&s.isPropertyAssignment(a)){const o=a.getInitializer();o&&s.isArrayLiteralExpression(o)&&(n=o.getElements().map(l=>ae(l)).filter(l=>l!==void 0))}i=x(t,"partitionBy")}return{name:b(r),partitionBy:i,sortBy:n}},le=(e,r)=>{const[t,n]=e,i=t&&s.isStringLiteral(t)?t.getLiteralText():"_unknown_";if(!(!n||!s.isObjectLiteralExpression(n)))return{dimensions:m(n,"dimensions"),field:i,metadata:x(n,"metadata"),metric:L(d(n,"metric")),name:d(n,"index")??"_unnamed_",table:r}},ce=e=>{const r=e[0];return r&&s.isObjectLiteralExpression(r)&&d(r,"backend")==="hyperdrive"?"hyperdrive":"d1"},de=e=>{if(e&&s.isObjectLiteralExpression(e)){const r=e.getProperty("field");if(r&&s.isPropertyAssignment(r)){const t=r.getInitializer();if(t&&s.isStringLiteral(t))return t.getLiteralText()}}return"deletedAt"},ue=(e,r)=>{const t=x(e,r);return t!==void 0&&t.length>0?t:void 0},fe=e=>{const r=e[0];return!r||!s.isObjectLiteralExpression(r)?{binding:"",hasTenantBy:!1,unanalyzable:!0}:{binding:d(r,"binding")??"",columns:ue(r,"columns"),hasReconcile:r.getProperty("reconcileEveryMs")!==void 0,hasSoftDelete:r.getProperty("softDeleteColumn")!==void 0,hasTenantBy:r.getProperty("tenantBy")!==void 0,idColumn:d(r,"idColumn"),mode:d(r,"mode"),query:d(r,"query")}},ge=(e,r,t,n)=>{switch(r){case"externallyManaged":{e.externallyManaged=!0;break}case"geoIndex":{e.geoIndexes.push(ie(t));break}case"global":{e.shardMode="global",e.globalBackend=ce(t);break}case"index":{e.indexes.push(re(t));break}case"public":{e.isPublic=!0;break}case"rankIndex":{e.rankIndexes.push(oe(t));break}case"relations":{const i=t[0];i&&e.relations.push(...Y(i));break}case"searchIndex":{e.searchIndexes.push(ne(t));break}case"shardBy":{const i=t[0];e.shardMode={field:i&&s.isStringLiteral(i)?i.getLiteralText():"_unknown_",kind:"shardBy"};break}case"softDelete":{e.softDelete={field:de(t[0])};break}case"source":{e.externalSource=fe(t),e.externallyManaged=!0;break}case"ttl":{e.ttl=se(t);break}case"vectorize":{const i=le(t,n);i&&e.vectorIndexes.push(i);break}}},E=["__vocab","_config","_content","_data","_docsize","_idx"],pe=(e,r,t)=>{const n=new Set(t.map(i=>i.name));for(const i of t)for(const a of E){const o=`${i.name}${a}`;if(!n.has(o))continue;const l=a==="__vocab"?`the \`fts5vocab\` companion for "${o}" is created \`IF NOT EXISTS\`, so it silently resolves to "${i.name}"'s — the second index then reads the wrong vocabulary and returns wrong results, with no error`:`creating "${o}" is rejected (\`object name reserved for internal use: SQLITE_ERROR\`), which aborts the shard migration and leaves every sharded table unreadable`;throw u(e,`table "${r}" declares search indexes "${i.name}" and "${o}", whose generated FTS5 tables collide: "${i.name}" already owns "${r}__fts_${o}" as its "${a}" companion, so ${l}. Rename one of them so neither ends with another's name plus ${E.join(", ")}.`)}},S=(e,r)=>{const t={externallyManaged:!1,geoIndexes:[],indexes:[],isPublic:!1,rankIndexes:[],relations:[],searchIndexes:[],shardMode:"root",vectorIndexes:[]};let n={},i=e;for(;s.isCallExpression(i);){const a=i.getExpression(),o=i.getArguments();if(s.isPropertyAccessExpression(a))ge(t,a.getName(),o,r),i=a.getExpression();else if(s.isIdentifier(a)&&a.getText()==="defineTable"){const l=o[0];if(l&&s.isObjectLiteralExpression(l))n=A(l);else if(l)throw u(l,`table "${r}" calls defineTable(${JSON.stringify(l.getText())}), but codegen reads the field map syntactically and can only read an object literal. Inline the fields into the defineTable(...) call. To reuse them in an \`.input()\`, derive from the generated \`Doc_${r}\` / \`Insert_${r}\` type instead of sharing the runtime value.`);break}else break}return t.softDelete&&!(t.softDelete.field in n)&&(n={...n,[t.softDelete.field]:{inner:{kind:"number"},kind:"optional"}}),pe(e,r,t.searchIndexes),{externallyManaged:t.externallyManaged,externalSource:t.externalSource,geoIndexes:t.geoIndexes,globalBackend:t.shardMode==="global"?t.globalBackend??"d1":void 0,indexes:t.indexes,isPublic:t.isPublic,name:r,rankIndexes:t.rankIndexes,relations:t.relations,searchIndexes:t.searchIndexes,shape:n,shardMode:t.shardMode,softDelete:t.softDelete,ttl:t.ttl,vectorIndexes:t.vectorIndexes}},me=e=>{const r=e.getProperty("source");if(r&&s.isPropertyAssignment(r)){const t=r.getInitializer();if(t&&s.isObjectLiteralExpression(t))return d(t,"table")??"_unknown_"}return"_unknown_"},xe=e=>{if(!s.isPropertyAssignment(e))return;const r=e.getInitializer();if(!r||!s.isCallExpression(r))return;const t=r.getExpression();if(!s.isIdentifier(t)||t.getText()!=="defineVectorIndex")return;const n=r.getArguments()[0];if(!n||!s.isObjectLiteralExpression(n))return;const i=e.getNameNode(),a=s.isStringLiteral(i)?i.getLiteralText():i.getText();return{dimensions:m(n,"dimensions"),metric:L(d(n,"metric")),name:a,table:me(n)}},$=e=>{const r=[];for(const t of e.getProperties()){const n=xe(t);n&&r.push(n)}return r},k=(e,r)=>`${e}_${r}`,y=(e,r,t)=>t.has(e)?k(r,e):e,be=(e,r,t)=>{const n=k(r,e.name);return{...e,extensionKey:r,name:n,relations:e.relations.map(i=>({...i,table:y(i.table,r,t)})),vectorIndexes:e.vectorIndexes.map(i=>({...i,table:y(i.table,r,t)}))}},he=e=>{if(s.isVariableDeclaration(e)||s.isPropertyAssignment(e))return e.getInitializer();if(s.isShorthandPropertyAssignment(e))return e.getNameNode()},ye=e=>{if(!s.isCallExpression(e))return!1;const r=e.getExpression();return s.isIdentifier(r)&&r.getText()==="defineSchemaExtension"},ke=e=>{if(s.isIdentifier(e))return e;if(s.isPropertyAccessExpression(e)){const r=e.getExpression();return s.isIdentifier(r)?r:void 0}},ve=e=>{if(s.isObjectLiteralExpression(e))return e;if(s.isCallExpression(e)){const r=e.getExpression();let t;if(s.isIdentifier(r)?t=r.getText():s.isPropertyAccessExpression(r)&&(t=r.getName()),t==="definePlugin"){const n=e.getArguments()[1];return n&&s.isObjectLiteralExpression(n)?n:void 0}}},Ie=(e,r)=>{const t=he(e);if(t){if(s.isPropertyAccessExpression(r)){const n=ve(t);return n?p(n,r.getName()):void 0}return t}},Ee=e=>{let r=e,t=0;for(;r&&t<32;){if(t+=1,ye(r))return r;const n=ke(r),i=n&&s.isIdentifier(n)?n.getSymbol():void 0,a=(i?.getAliasedSymbol()?.getDeclarations()??i?.getDeclarations()??[])[0];if(!a)return;const o=a.getSourceFile();if(o.isInNodeModules()||o.isDeclarationFile())return;r=Ie(a,r)}},Le=e=>{const[r,t]=e.getArguments();if(!(!r||!s.isStringLiteral(r))&&!(!t||!s.isObjectLiteralExpression(t)))return{key:r.getLiteralText(),options:t}},Se=e=>{const r=e.getProperty("tables");if(!r||!s.isPropertyAssignment(r))return[];const t=r.getInitializer();if(!t||!s.isObjectLiteralExpression(t))return[];const n=[];for(const i of t.getProperties()){if(!s.isPropertyAssignment(i))continue;const a=i.getInitializer();a&&n.push(S(a,i.getName()))}return n},$e=e=>{const r=e.getProperty("vectorIndexes");if(!r||!s.isPropertyAssignment(r))return[];const t=r.getInitializer();return!t||!s.isObjectLiteralExpression(t)?[]:$(t)},w=(e,r,t)=>{const n=new Set(r.map(o=>o.name)),i=r.map(o=>be(o,e,n)),a=t.map(o=>({...o,name:k(e,o.name),table:y(o.table,e,n)}));return{tables:i,vectorIndexes:a}},we=(e,r)=>w(e,Se(r),$e(r)),Pe=(e,r)=>{const t=e.getArguments()[0];if(!t)return;const n=Ee(t);if(!n){if(r!==void 0){const a=V(t,r);if(a)return w(a.key,a.bareTables,a.bareVectorIndexes)}console.warn(`@lunora/codegen: skipping \`.extend(${t.getText()})\` — its \`defineSchemaExtension(...)\` could not be resolved from local sources, and ${r===void 0?"no project root was available to resolve the package":"the package could not be imported/introspected"}. Extension tables will be absent from the generated types.`);return}const i=Le(n);if(!i){console.warn("@lunora/codegen: skipping `.extend(...)` — `defineSchemaExtension` requires a string `key` and an options object literal.");return}return we(i.key,i.options)},Te=e=>{const r=[];let t=e;for(;;){const n=t.getParent();if(!n||!s.isPropertyAccessExpression(n))break;const i=n.getParent();if(!i||!s.isCallExpression(i))break;n.getName()==="extend"&&r.push(i),t=i}return r},P=(e,r,t,n,i)=>{let a=e;for(;;){const o=a.getParent();if(!o||!s.isPropertyAccessExpression(o))break;const l=o.getParent();if(!l||!s.isCallExpression(l))break;if(o.getName()===r){const c=l.getArguments()[0];if(!c||!s.isStringLiteral(c))throw u(l,`\`.${r}(...)\` expects a string literal (${i})`);const f=c.getLiteralText();if(!n.has(f))throw u(c,`unknown ${t} ${JSON.stringify(f)} — expected ${i}`);return f}a=l}},je=new Set(["eu","fedramp","us"]),Ae=e=>P(e,"jurisdiction","jurisdiction",je,'"eu", "us", or "fedramp"'),_e=new Set(["required"]),Ne=e=>P(e,"rls","rls mode",_e,'"required"'),Oe=e=>{const r=[];for(const t of e.getProperties()){if(!s.isPropertyAssignment(t))continue;const n=t.getInitializer();if(n){const i=t.getName();Q(i,t.getNameNode()),r.push(S(n,i))}}return r},De=(e,r,t)=>{const n=new Set(r.map(a=>a.name)),i=[];for(const a of Te(e)){const o=Pe(a,t);if(o){for(const l of o.tables){if(n.has(l.name))throw u(a,`defineSchema(...).extend(...): table "${l.name}" already exists — another extension with the same key already contributed it.`);n.add(l.name),r.push(l)}i.push(...o.vectorIndexes)}}return i},Ce=(e,r,t)=>{const n=e.addSourceFileAtPath(r).getDescendantsOfKind(j.CallExpression).find(h=>{const v=h.getExpression();return s.isIdentifier(v)&&v.getText()==="defineSchema"});if(!n)throw new T("INTERNAL",`defineSchema() not found in ${r}`);const i=n.getArguments()[0];if(!i||!s.isObjectLiteralExpression(i))throw u(n,"defineSchema() expects an object literal");const a=Oe(i),o=n.getArguments()[1],l=o&&s.isObjectLiteralExpression(o)?$(o):[],c=De(n,a,t),f=[...a.flatMap(h=>h.vectorIndexes),...l,...c];return{jurisdiction:Ae(n),rlsMode:Ne(n),tables:a,vectorIndexes:f}};export{Ce as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Node as n}from"ts-morph";import{g as u,p,D as l}from"./discover-ast-7ABwvTVn.mjs";import{classifyProcedureCall as g}from"./discoverFunctions-4TNKUv7P.mjs";const m=new Set(["delete","list","read","write"]),x=o=>{if(!n.isCallExpression(o))return!1;const e=o.getExpression();return n.isIdentifier(e)?e.getText()==="storageRules":n.isPropertyAccessExpression(e)&&e.getName()==="storageRules"},d=o=>{const e=[];let s=o;for(;n.isCallExpression(s);){const r=s.getExpression();if(!n.isPropertyAccessExpression(r))break;if(r.getName()==="use"){const t=s.getArguments()[0];t&&x(t)&&e.push(t)}s=r.getExpression()}return e},E=(o,e,s)=>{const r=o.getArguments()[0];if(!r||!n.isArrayLiteralExpression(r))return[];const t=[];for(const i of r.getElements()){if(!n.isObjectLiteralExpression(i))continue;const c=l(i,"on");if(c===void 0||!m.has(c))continue;const a=l(i,"prefix"),f={bucket:l(i,"bucket")??"",file:e,on:c,procedure:s};a!==void 0&&(f.prefix=a),t.push(f)}return t},v=o=>{const e=[];for(const s of o.getVariableStatements())if(s.isExported())for(const r of s.getDeclarations()){const t=r.getInitializer(),i=t&&n.isCallExpression(t)?g(t):void 0;i?.receiver&&e.push({name:r.getName(),receiver:i.receiver})}return e},S=(o,e)=>{const s=[];for(const r of u(e)){const t=o.getSourceFile(r)??o.addSourceFileAtPath(r),i=p(e,r);for(const{name:c,receiver:a}of v(t))for(const f of d(a))s.push(...E(f,i,c))}return{rules:s}};export{S as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{runAdvisor as i}from"@lunora/advisor";const o=a=>[...a.indexes.map(e=>({fields:e.fields,kind:"index",name:e.name,unique:e.unique})),...a.searchIndexes.map(e=>({fields:[e.field,...e.filterFields??[]],kind:"search",name:e.name})),...a.rankIndexes.map(e=>({fields:[...e.sortBy.map(n=>n.field),...e.partitionBy??[]],kind:"rank",name:e.name})),...a.vectorIndexes.filter(e=>e.field!==void 0).map(e=>({fields:[e.field],kind:"vector",name:e.name})),...(a.geoIndexes??[]).map(e=>({fields:[e.field],kind:"geo",name:e.name}))],r=a=>{const e={};for(const[n,t]of Object.entries(a.shape))e[n]=t.kind==="optional"?t.inner?.kind??"optional":t.kind;return e},d=a=>({rlsMode:a.rlsMode,tables:a.tables.map(e=>({externallyManaged:e.externallyManaged??!1,externalSource:e.externalSource?{hasReconcile:e.externalSource.hasReconcile??!1,hasSoftDelete:e.externalSource.hasSoftDelete??!1,hasTenantBy:e.externalSource.hasTenantBy,mode:e.externalSource.mode,unanalyzable:e.externalSource.unanalyzable}:void 0,columnKinds:r(e),fields:Object.keys(e.shape),indexes:o(e),isPublic:e.isPublic??!1,name:e.name,relations:e.relations.map(n=>({field:n.field,kind:n.kind,name:n.name,onDelete:n.onDelete,references:n.references,table:n.table})),shardKind:typeof e.shardMode=="string"?e.shardMode:"shardBy",softDelete:e.softDelete,ttl:e.ttl}))}),m=a=>a.map(e=>({exportName:e.exportName,file:`lunora/${e.filePath}.ts`,table:e.table})),c=a=>{const{argumentValidators:e,queries:n,schema:t,shapes:s,...l}=a;return{...l,argValidators:e,queries:n??[],schema:d(t),shapes:s===void 0?void 0:m(s)}},u=a=>i(c(a),{source:"static"}),h=a=>{if(a.length===0)return"";const e=`@lunora/codegen: ${String(a.length)} schema advisor finding${a.length===1?"":"s"}`,n=a.map(t=>` [${t.level}] ${t.name}: ${t.detail}`);return[e,...n].join(`
|
|
2
|
-
`)};export{h as formatAdvisories,u as lintSchema,c as toAdvisorContext};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const p=/[^a-zA-Z0-9]+/gu,f=/([a-z0-9])([A-Z])/gu,l=t=>t.split(p).filter(e=>e.length>0).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(""),A=t=>t.replaceAll(f,"$1_$2").replaceAll(p,"_").toLowerCase(),i=t=>t===void 0?!1:["$ref","allOf","anyOf","enum","items","oneOf","properties","type"].some(e=>e in t),h=t=>t==="query"?"query":t==="action"?"action":"mutation",n=(t,e=0)=>{if(e>32||t===null||typeof t!="object")return!1;if(Array.isArray(t))return t.some(s=>n(s,e+1));const a=t;if(a.type==="integer"&&a.format==="int64"||a.type==="string"&&a.contentEncoding==="base64")return!0;const{properties:r}=a;return r!==null&&typeof r=="object"&&Object.values(r).some(s=>n(s,e+1))?!0:["additionalProperties","allOf","anyOf","items","oneOf"].some(s=>n(a[s],e+1))},b=t=>t.replaceAll(/[\n\r\u2028\u2029]+/gu," ").replaceAll("*/","* /").replaceAll('"""','" ""'),g=t=>t.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(`
|
|
2
|
-
`,"\\n").replaceAll("\r","\\r"),y=["$","{","'","$","'","}"].join(""),v=t=>g(t).split("$").join(y),T=(t,e)=>t.argsType!==void 0?e.typed(t.argsType):t.takesArgs?e.untyped:e.none,m=t=>{const[e="",a=""]=t.name.split(":"),r=`${l(e)}${l(a)}`,s=t.params?.[0]?.schema,o=t.result?.schema;return{argsType:i(s)&&!n(s)?`${r}Args`:void 0,takesArgs:i(s),functionName:a,functionPath:t.name,namespace:e,resultType:i(o)&&!n(o)?`${r}Result`:void 0,summary:t.summary??t.name,verb:h(t["x-lunora-function-kind"])}},S=t=>{const e=new Map;for(const a of t.methods){const r=m(a),s=e.get(r.namespace);s===void 0?e.set(r.namespace,[r]):s.push(r)}return[...e.entries()].toSorted(([a],[r])=>a.localeCompare(r)).map(([a,r])=>({methods:r.toSorted((s,o)=>s.functionName.localeCompare(o.functionName)),name:a}))},M=t=>t.methods.flatMap(e=>{const a=m(e);return[{name:a.argsType,schema:e.params?.[0]?.schema},{name:a.resultType,schema:e.result?.schema}]}).filter(e=>e.name!==void 0&&e.schema!==void 0).toSorted((e,a)=>e.name.localeCompare(a.name)),$=/^[A-Za-z][A-Za-z0-9]*$/u,d=t=>$.test(t),w=t=>{const e=new Map;for(const a of t.methods){const r=l(a.functionName);if(!d(r))throw new Error(`sdk: function "${a.functionPath}" produces the invalid identifier "${r}" — rename the export so it starts with a letter.`);const s=a.verb==="query"?[r,`Subscribe${r}`]:[r];for(const o of s){const c=e.get(o);if(c!==void 0)throw new Error(`sdk: functions "${c}" and "${a.functionPath}" both generate "${o}" — rename one so the generated methods stay distinct.`);e.set(o,a.functionPath)}}},C=t=>{const e=new Map;for(const a of t){const r=l(a.name);if(!d(r))throw new Error(`sdk: namespace "${a.name}" produces the invalid identifier "${r}" — rename the file so it starts with a letter.`);const s=e.get(r);if(s!==void 0)throw new Error(`sdk: namespaces "${s}" and "${a.name}" both generate "${r}" — rename one so the generated types stay distinct.`);e.set(r,a.name),w(a)}},u=t=>t.flatMap(e=>e.methods),k=t=>[`GENERATED by \`lunora sdk generate --lang ${t}\` — do not edit.`,"Run the command again to regenerate."],E=(t,e)=>{const a=r=>r!==void 0&&new RegExp(String.raw`\b${r}\b`,"u").test(e)?r:void 0;return t.map(r=>({methods:r.methods.map(s=>({...s,argsType:a(s.argsType),resultType:a(s.resultType)})),name:r.name}))},O=t=>t.methods.filter(e=>n(e.params?.[0]?.schema)||n(e.result?.schema)).map(e=>e.name).toSorted((e,a)=>e.localeCompare(a)),j=(t,e)=>[...new Set(u(t).flatMap(a=>[a.argsType,a.resultType]).filter(a=>a!==void 0&&!new RegExp(String.raw`\b${a}\b`,"u").test(e)))].toSorted((a,r)=>a.localeCompare(r)),x=t=>[...new Set(u(t).flatMap(e=>[e.argsType,e.resultType]).filter(e=>e!==void 0))].toSorted((e,a)=>e.localeCompare(a));export{u as allMethods,T as argsChoice,C as assertGeneratable,b as commentText,k as generatedHeaderLines,n as hasUnrepresentableWireType,i as isTypedSchema,v as kotlinLiteral,M as modelSources,m as parseMethod,S as parseSpec,x as referencedModels,g as stringLiteral,l as toPascalCase,A as toSnakeCase,j as undeclaredModels,O as unrepresentableFunctions,h as verbForKind,E as withDeclaredModels};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const s=/(?:^|\/)_generated\/server(?:\.js)?$/u,r=new Set(["@lunora/server","lunorash/server"]),n=e=>r.has(e),t=e=>s.test(e),o=e=>n(e)||t(e),a=new Set(["@lunora/scheduler",...r]),u=e=>a.has(e);export{u as E,n as o,o as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{LunoraError as g}from"@lunora/errors";import{Node as r}from"ts-morph";let c;const v=e=>{c=e},p=/^[A-Za-z_$][\w$]*$/u,f=new Set(["$defaultFn","$onUpdateFn","$type","default","defaultNow","nullable","unique"]),k=(e,n)=>{const t={notNull:!0,...e.column};switch(n){case"$defaultFn":case"default":case"defaultNow":{t.hasDefault=!0;break}case"$onUpdateFn":{t.hasOnUpdate=!0;break}case"$type":break;case"nullable":{t.notNull=!1;break}case"unique":{t.unique=!0;break}}return{...e,column:t}},m=new Set(["any","bigint","boolean","bytes","date","geoPoint","null","number","string","timestamp"]),y=new Set(["check","meta"]),d=new Set,b=e=>{const n=e.getSymbol(),t=(n?.getAliasedSymbol()??n)?.getValueDeclaration();if(!(t===void 0||!r.isVariableDeclaration(t)))return t.getInitializer()},x="v",N=e=>{if(r.isIdentifier(e))return!0;let n=e;for(;r.isCallExpression(n);){const t=n.getExpression();if(!r.isPropertyAccessExpression(t))return!1;n=t.getExpression()}return r.isIdentifier(n)&&n.getText()===x},o=e=>{if(r.isIdentifier(e)&&!d.has(e)){const n=b(e);if(n!==void 0&&N(n)){d.add(e);try{return o(n)}finally{d.delete(e)}}}return r.isCallExpression(e)?w(e):{kind:"any",sourceText:e.getText()}},h=e=>{const n={};for(const t of e.getProperties()){const s=r.isShorthandPropertyAssignment(t);if(!s&&!r.isPropertyAssignment(t))continue;const i=t.getNameNode();if(r.isComputedPropertyName(i))continue;const a=s?t.getNameNode():t.getInitializer();if(!a)continue;const l=t.getName();if(!p.test(l))throw new g("INTERNAL",`@lunora/codegen: field name is not a valid JS identifier: ${JSON.stringify(l)}`);n[l]=o(a)}return n},u=(e,n)=>e&&r.isExpression(e)?o(e):n,E=e=>e===void 0?"undefined":r.isStringLiteral(e)||r.isNoSubstitutionTemplateLiteral(e)?JSON.stringify(e.getLiteralValue()):e.getText(),S=e=>{const n=e&&c?c(e):void 0;return n===void 0?{kind:"from"}:{kind:"from",tsType:n}},T=(e,n)=>{if(m.has(e))return{kind:e};const[t,s]=n;switch(e){case"array":return{inner:u(t,{kind:"any"}),kind:"array"};case"from":return S(t);case"id":return{kind:"id",tableName:t&&r.isStringLiteral(t)?t.getLiteralText():"_unknown_"};case"literal":return{kind:"literal",literalValue:E(t)};case"object":return t&&r.isObjectLiteralExpression(t)?{kind:"object",shape:h(t)}:{kind:"object",shape:{}};case"optional":return{inner:u(t,{kind:"any"}),kind:"optional"};case"record":return{keyType:u(t,{kind:"string"}),kind:"record",valueType:u(s,{kind:"any"})};case"storage":return t&&r.isStringLiteral(t)?{bucket:t.getLiteralText(),kind:"storage"}:{kind:"storage"};case"union":return{kind:"union",members:n.filter(i=>r.isExpression(i)).map(i=>o(i))};default:throw new g("INTERNAL",`Unsupported validator kind: ${e}`)}},w=e=>{const n=e.getExpression();if(!r.isPropertyAccessExpression(n))return{kind:"any",sourceText:e.getText()};const t=n.getName(),s=e.getArguments();if(f.has(t)||y.has(t)){const i=n.getExpression(),a=r.isExpression(i)?o(i):{kind:"any"};return f.has(t)?k(a,t):t==="check"?{...a,hasRefinement:!0}:a}return T(t,s)};export{h as g,o as s,v as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const a=/\/index$/u,l=/[^\dA-Za-z]/gu,c=e=>e.replace(a,"").replaceAll(l,"_");export{c as n};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{existsSync as i,readFileSync as f}from"node:fs";import{join as p}from"node:path";const l=t=>{const n=p(t,"package.json");if(i(n))try{const c=JSON.parse(f(n,"utf8")),o=new Set;for(const r of["dependencies","devDependencies","peerDependencies","optionalDependencies"]){const e=c[r];if(e!==null&&typeof e=="object")for(const s of Object.keys(e))o.add(s)}return o}catch{return}};export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const s=/[\w+/=-]{40,}/u,a=/[a-z]/u,i=/[A-Z]/u,r=/\d/u,n=/\b(?:[\da-f]{32,}|[\dA-F]{32,})\b/u,d=e=>{const t=s.exec(e)?.[0];return t===void 0?!1:a.test(t)&&i.test(t)&&r.test(t)},k=e=>n.test(e),c=/\b(?:sk|rk)_live_[\dA-Za-z]{20,}/u,o=/\bAKIA[\dA-Z]{16}\b/u,u=/\bgh[posru]_[\dA-Za-z]{36,}/u,h=/\bsk-[\dA-Za-z]{32,}/u,_=/\bxox[abprs]-[\dA-Za-z-]{10,}/u,p=/-----BEGIN(?: [A-Z]+)? PRIVATE KEY-----/u,l=[{kind:"stripe_live_key",test:e=>c.test(e)},{kind:"aws_access_key",test:e=>o.test(e)},{kind:"github_token",test:e=>u.test(e)},{kind:"openai_key",test:e=>h.test(e)},{kind:"slack_token",test:e=>_.test(e)},{kind:"private_key",test:e=>p.test(e)},{kind:"high_entropy",test:d},{kind:"hex_secret",test:k}],A=new Set(["hex_secret","high_entropy"]),b=new Set(["auth","bearer","credential","credentials","hmac","key","keys","passphrase","password","private","secret","secrets","signature","signing","token"]),g=/([a-z\d])([A-Z])/gu,y=/[^A-Za-z\d]+/u,Z=e=>e.replaceAll(g,"$1 $2").split(y).filter(Boolean).map(t=>t.toLowerCase()),S=e=>e!==void 0&&Z(e).some(t=>b.has(t)),z=e=>l.find(t=>t.test(e))?.kind,E=e=>A.has(e),v=e=>`${e.slice(0,4)}…(${String(e.length)} chars)`;export{l as SECRET_RULES,E as isHeuristicSecretKind,S as isSecretishName,v as redact,z as secretKindOf};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const n=e=>{try{return JSON.parse(e)}catch{const t=e.trim();return t.length>=2&&(t.startsWith("'")||t.startsWith('"'))&&t.at(-1)===t[0]?t.slice(1,-1):t}},a=e=>{const t={};return e.column!==void 0&&(t.column={defaultValue:e.column.hasDefault===!0?null:void 0,notNull:e.column.notNull,unique:e.column.unique}),e.inner!==void 0&&(t.inner=a(e.inner)),e.members!==void 0&&(t.members=e.members.map(r=>a(r))),e.shape!==void 0&&(t.shape=Object.fromEntries(Object.entries(e.shape).map(([r,l])=>[r,a(l)]))),e.tableName!==void 0&&(t.tableName=e.tableName),e.literalValue!==void 0&&(t.value=n(e.literalValue)),e.keyType!==void 0&&(t.keyValidator=a(e.keyType)),e.valueType!==void 0&&(t.valueValidator=a(e.valueType)),{_meta:t,kind:e.kind}},i=e=>({tables:Object.fromEntries(e.tables.map(t=>[t.name,{shape:Object.fromEntries(Object.entries(t.shape).map(([r,l])=>[r,a(l)]))}]))});export{i as schemaFromIr};
|