@sequenceholdings/orm 0.1.0 → 0.1.2
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/README.md +1 -1
- package/dist/authoring.cjs +794 -0
- package/dist/authoring.cjs.map +1 -0
- package/dist/authoring.d.cts +274 -0
- package/dist/authoring.d.ts +274 -0
- package/dist/authoring.js +763 -0
- package/dist/authoring.js.map +1 -0
- package/dist/canonical.cjs +146 -0
- package/dist/canonical.cjs.map +1 -0
- package/dist/canonical.d.cts +369 -0
- package/dist/canonical.d.ts +369 -0
- package/dist/canonical.js +131 -0
- package/dist/canonical.js.map +1 -0
- package/dist/cli.cjs +6208 -1693
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +8 -1
- package/dist/cli.d.ts +8 -1
- package/dist/cli.js +6262 -1749
- package/dist/cli.js.map +1 -1
- package/dist/client.cjs +120 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +74 -2
- package/dist/client.d.ts +74 -2
- package/dist/client.js +116 -1
- package/dist/client.js.map +1 -1
- package/dist/compiler.cjs +3001 -0
- package/dist/compiler.cjs.map +1 -0
- package/dist/compiler.d.cts +581 -0
- package/dist/compiler.d.ts +581 -0
- package/dist/compiler.js +2947 -0
- package/dist/compiler.js.map +1 -0
- package/dist/index.cjs +1730 -327
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +126 -56
- package/dist/index.d.ts +126 -56
- package/dist/index.js +1643 -324
- package/dist/index.js.map +1 -1
- package/dist/ir.cjs +407 -0
- package/dist/ir.cjs.map +1 -0
- package/dist/ir.d.cts +1179 -0
- package/dist/ir.d.ts +1179 -0
- package/dist/ir.js +388 -0
- package/dist/ir.js.map +1 -0
- package/dist/naming-CTvWSRTf.d.ts +79 -0
- package/dist/naming-DRyinU4u.d.cts +79 -0
- package/dist/sdl.cjs +833 -0
- package/dist/sdl.cjs.map +1 -0
- package/dist/sdl.d.cts +96 -0
- package/dist/sdl.d.ts +96 -0
- package/dist/sdl.js +809 -0
- package/dist/sdl.js.map +1 -0
- package/package.json +36 -3
- package/src/codegen-gql/apollo-hooks.cjs +98 -0
- package/src/codegen-gql/server-fns.cjs +101 -0
- package/templates/README.md +13 -0
- package/templates/orm-namespace/CLAUDE.md +81 -0
- package/templates/orm-namespace/codegen.ts +22 -0
- package/templates/orm-namespace/gitignore +5 -0
- package/templates/orm-namespace/graphql/example/queries.ts +56 -0
- package/templates/orm-namespace/package.json +24 -0
- package/templates/orm-namespace/schema/tables.ts +71 -0
- package/templates/orm-namespace/sequence.config.ts +32 -0
- package/templates/orm-namespace/tsconfig.json +15 -0
package/dist/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/codegen/types.ts","../src/constants.ts","../src/errors.ts","../src/predicate/ast.ts","../src/schema/identifiers.ts","../src/schema/columns.ts","../src/predicate/parse.ts","../src/schema/predicates.ts","../src/schema/actions.ts","../src/engine/types.ts","../src/compiler/sql.ts","../src/compiler/predicates.ts","../src/compiler/actions.ts","../src/engine/actions.ts","../src/schema/table.ts","../src/engine/security.ts","../src/engine/columns.ts","../src/engine/tables.ts","../src/engine/snapshot.ts","../src/engine/index.ts","../src/hash.ts","../src/schema/custom-roles-block.ts","../src/schema/namespace.ts","../src/schema/namespace-config.ts","../src/loader.ts","../src/migrations/workspace.ts","../src/migrations/committed.ts","../src/migrations/classify.ts","../src/migrations/diff.ts","../src/cli.ts"],"names":["z","index","sql","QUOTED_STRING_PATTERN","policyName","uuid","text","integer","bigint","numeric","doublePrecision","boolean","timestamp","date","jsonb","pgSchema","uniqueIndex","foreignKey","previousId","generateDrizzleJson","upPgSnapshot","generateMigration","createHash","readFile","join","loadYaml","extname","readdir","path","mkdir","writeFile"],"mappings":";;;;;;;;;;;;;;AAWA,IAAM,UAAA,GAAmD;AAAA,EACvD,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa,QAAA;AAAA,EACb,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAUO,SAAS,uBAAuB,UAAA,EAAyC;AAC9E,EAAA,MAAM,KAAA,GAAkB;AAAA,IACtB,CAAA,sDAAA,EAAyD,WAAW,SAAS,CAAA,iCAAA,CAAA;AAAA,IAC7E,EAAA;AAAA,IACA,CAAA,YAAA,EAAe,kBAAA,CAAmB,UAAA,CAAW,SAAS,CAAC,CAAA,IAAA;AAAA,GACzD;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAIhB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,KAAA,CAAM,MAAM,CAAA,2CAAA,CAAwC,CAAA;AACpF,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,yBAAA,CAA2B,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,GAAA,CAAK,CAAA;AAChC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAGhE,MAAA,IAAI,OAAO,UAAA,EAAY;AACvB,MAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAI,KAAK,cAAA,CAAe,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,IACrD;AACA,IAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,EAClB;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,EAAE,CAAA;AAClB,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,eAAA,CAAgB,UAAU,CAAC,CAAA;AACzC,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AASA,SAAS,gBAAgB,UAAA,EAA2C;AAClE,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAC,CAAA;AACxF,EAAA,MAAM,QAAQ,CAAC,CAAA,YAAA,EAAe,qBAAqB,UAAA,CAAW,SAAS,CAAC,CAAA,IAAA,CAAM,CAAA;AAC9E,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,KAAM,EAAE,aAAA,CAAc,CAAC,CAAC,CAAA,EAAG;AAC3E,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,IAAI,CAAA,YAAA,EAAe,gBAAA,CAAiB,MAAM,CAAC,CAAA,UAAA,EAAa,gBAAA,CAAiB,MAAM,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EACtG;AACA,EAAA,KAAA,CAAM,IAAA,CAAK,KAAK,EAAE,CAAA;AAClB,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,iBAAiB,MAAA,EAAkC;AAC1D,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAClD,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,sBAAA;AACjC,EAAA,MAAM,SAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AAC5C,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAClC,IAAA,OAAO,KAAA,CAAM,QAAA,GAAW,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,IAAI,CAAA,OAAA,CAAA,GAAY,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,EACvE,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,CAAA;AAC/B;AAEA,SAAS,iBAAiB,MAAA,EAAkC;AAC1D,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,0BAAA;AAG5B,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AACnE,IAAA,MAAM,IAAA,GAAO,WAAW,IAAI,CAAA;AAC5B,IAAA,OAAO,IAAA,KAAS,SAAA,GAAY,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,OAAA,CAAA;AAAA,EACnE,CAAC,CAAA;AACD,EAAA,OAAO,CAAA,gBAAA,EAAmB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,KAAA,CAAA;AAC9C;AAEO,SAAS,mBAAmB,SAAA,EAA2B;AAC5D,EAAA,OAAO,CAAA,EAAG,UAAA,CAAW,SAAS,CAAC,CAAA,MAAA,CAAA;AACjC;AAEO,SAAS,qBAAqB,SAAA,EAA2B;AAC9D,EAAA,OAAO,CAAA,EAAG,UAAA,CAAW,SAAS,CAAC,CAAA,OAAA,CAAA;AACjC;AAEA,SAAS,WAAW,SAAA,EAA2B;AAC7C,EAAA,OAAO,UACJ,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC1D,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,eAAe,MAAA,EAAkC;AACxD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AACnC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,WAAA,KAAgB,IAAA,IAAQ,OAAO,QAAA,KAAa,KAAA;AACnE,EAAA,OAAO,OAAA,IAAW,IAAA,KAAS,SAAA,GAAY,IAAA,GAAO,GAAG,IAAI,CAAA,OAAA,CAAA;AACvD;;;ACrHO,IAAM,iBAAA,GAAoB,wBAAA;AAE1B,IAAM,kBAAA,GAAqB,mBAAA;AAC3B,IAAM,qBAAA,GAAwB,EAAA;AA6B9B,IAAM,sBAAA,GAAyB,6BAAA;AAE/B,IAAM,iBAAA,GAAoB,mBAAA;AAG1B,IAAM,uBAAA,GAA0B,oCAAA;AAGhC,IAAM,qBAAA,GAAwB,yBAAA;AAE9B,IAAM,iBAAA,GAAoB,MAAA;AAC1B,IAAM,oBAAA,GAAuB,WAAA;AAE7B,IAAM,gBAAgB,CAAC,SAAA,KAA8B,CAAA,EAAG,iBAAiB,GAAG,SAAS,CAAA,CAAA;AACrF,IAAM,gBAAA,GAAmB,CAAC,SAAA,KAC/B,CAAA,EAAG,iBAAiB,CAAA,EAAG,SAAS,GAAG,oBAAoB,CAAA,CAAA;AAElD,IAAM,0BAAA,GAA6B,CAAC,MAAA,EAAQ,OAAO,CAAA;AAGnD,IAAM,6CAA6B,IAAI,GAAA,CAAI,CAAC,gBAAA,EAAkB,eAAe,CAAC,CAAA;AAE9E,IAAM,WAAA,GAAc,4BAAA;AAQpB,IAAM,4BAA4B,IAAA,GAAO,IAAA;AAGzC,IAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA;AAOzD,IAAM,qBAAA,uBAA4B,GAAA,CAAI,CAAC,UAAU,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAC,CAAA;;;ACzE5E,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAG5C,WAAA,CACE,SACS,IAAA,EACT;AACA,IAAA,KAAA,CAAM,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAO,KAAK,OAAO,CAAA;AAFnC,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAGX;AAAA,EAPkB,IAAA,GAAO,oBAAA;AAQ3B,CAAA;AAEO,IAAM,mBAAA,GAAN,cAAkC,KAAA,CAAM;AAAA,EAG7C,WAAA,CACE,SACS,QAAA,EACT;AACA,IAAA,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,EAAiB,QAAQ,CAAA,CAAA,CAAG,CAAA;AAFnC,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAGX;AAAA,EAPkB,IAAA,GAAO,qBAAA;AAQ3B,CAAA;;;ACpBO,IAAM,cAAc,CAAC,GAAA,EAAK,MAAM,GAAA,EAAK,IAAA,EAAM,KAAK,IAAI,CAAA;AAoBpD,SAAS,aAAA,CAAc,WAAsB,KAAA,EAAwC;AAC1F,EAAA,KAAA,CAAM,SAAS,CAAA;AACf,EAAA,IAAI,SAAA,CAAU,IAAA,KAAS,KAAA,IAAS,SAAA,CAAU,SAAS,IAAA,EAAM;AACvD,IAAA,KAAA,MAAW,OAAA,IAAW,SAAA,CAAU,QAAA,EAAU,aAAA,CAAc,SAAS,KAAK,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,UAAU,IAAA,KAAS,KAAA,EAAO,aAAA,CAAc,SAAA,CAAU,SAAS,KAAK,CAAA;AACtE;AAEO,SAAS,kBAAkB,SAAA,EAAiC;AACjE,EAAA,MAAM,WAAsB,EAAC;AAC7B,EAAA,aAAA,CAAc,SAAA,EAAW,CAAC,IAAA,KAAS;AACjC,IAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW,QAAA,CAAS,KAAK,IAAA,CAAK,IAAA,EAAM,KAAK,KAAK,CAAA;AAAA,EAClE,CAAC,CAAA;AACD,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,kBAAkB,SAAA,EAAgC;AAChE,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,SAAS,CAAA,CAAE,OAAA;AAAA,IAAQ,CAAC,YAClD,OAAA,CAAQ,IAAA,KAAS,WAAW,CAAC,OAAA,CAAQ,IAAI,CAAA,GAAI;AAAC,GAChD;AACA,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B;AAEO,SAAS,uBAAuB,SAAA,EAAgC;AACrE,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,aAAA,CAAc,SAAA,EAAW,CAAC,IAAA,KAAS;AACjC,IAAA,IAAI,KAAK,IAAA,KAAS,YAAA,EAAc,IAAA,CAAK,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,EACpD,CAAC,CAAA;AACD,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1B;ACzCO,IAAM,gBAAA,GAAmBA,MAC7B,MAAA,EAAO,CACP,IAAI,qBAAqB,CAAA,CACzB,KAAA,CAAM,kBAAA,EAAoB,8CAA8C,CAAA;AAEpE,IAAM,kBAAkBA,KAAA,CAC5B,MAAA,EAAO,CACP,KAAA,CAAM,mBAAmB,sEAAsE,CAAA;AAG3F,IAAM,oBAAA,GAAuBA,KAAA,CACjC,MAAA,EAAO,CACP,MAAA;AAAA,EACC,CAAC,UAAU,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,IAAK,uBAAA,CAAwB,KAAK,KAAK,CAAA;AAAA,EAC/E;AACF,CAAA;AAEK,IAAM,oBAAA,GAAuB,CAAC,SAAA,KAA+B,SAAA,CAAU,SAAS,GAAG,CAAA;;;ACtBnF,IAAM,YAAA,GAAe;AAAA,EAC1B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAIO,IAAM,gBAAA,GAAmBA,KAAAA,CAAE,IAAA,CAAK,YAAY,CAAA;AAEnD,IAAM,iBAAA,GAAqE;AAAA,EACzE,mBAAA,EAAqB,CAAC,MAAM,CAAA;AAAA,EAC5B,OAAA,EAAS,CAAC,aAAA,EAAe,MAAM;AACjC,CAAA;AAEA,IAAM,YAAA,GAAe,+BAAA;AAQd,IAAM,iBAAA,GAAoB,CAAC,KAAA,EAAsB,IAAA,KACtD,OAAO,KAAA,KAAU,QAAA,KAAa,iBAAA,CAAkB,KAAK,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,IAAK,KAAA,CAAA;AAgB5E,SAAS,YAAA,CAAa,OAAsB,IAAA,EAAiC;AAC3E,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW,OAAO,SAAS,SAAA,GAAY,IAAA,GAAO,wCAAwC,IAAI,CAAA,CAAA,CAAA;AAC/G,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI,CAAC,CAAC,SAAA,EAAW,QAAA,EAAU,WAAW,QAAQ,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9D,MAAA,OAAO,wCAAwC,IAAI,CAAA,CAAA,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,CAAC,SAAA,EAAW,QAAQ,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,EAAG;AACxC,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG,OAAO,qBAAqB,IAAI,CAAA,oBAAA,CAAA;AAC9D,MAAA,IAAI,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,EAAG;AAChC,QAAA,OAAO,qBAAqB,IAAI,CAAA,6EAAA,CAAA;AAAA,MAClC;AAAA,IACF;AAIA,IAAA,IAAI,SAAS,SAAA,IAAa,IAAA,CAAK,IAAI,KAAK,CAAA,GAAI,OAAO,gBAAA,EAAkB;AACnE,MAAA,OAAO,4HAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,YAAA,GAAe,kBAAkB,KAAK,CAAA;AAC5C,EAAA,IAAI,YAAA,EAAc,OAAO,YAAA,CAAa,QAAA,CAAS,IAAI,IAAI,IAAA,GAAO,CAAA,SAAA,EAAY,KAAK,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,CAAA;AAK7G,EAAA,OAAO,IAAA;AACT;AAEO,IAAM,YAAA,GAAeA,MACzB,YAAA,CAAa;AAAA,EACZ,IAAA,EAAM,gBAAA;AAAA,EACN,WAAA,EAAaA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,EAAGA,KAAAA,CAAE,MAAA,IAAUA,KAAAA,CAAE,OAAA,EAAS,CAAC,EAAE,QAAA,EAAS;AAAA,EACjE,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAc,iBAAiB,QAAA,EAAS;AAAA,EACxC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,UAAA,EAAYA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA;AAC1B,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC5B,EAAA,IAAI,MAAA,CAAO,YAAY,MAAA,EAAW;AAChC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,OAAA,EAAS,OAAO,IAAI,CAAA;AACtD,IAAA,IAAI,KAAA,EAAO,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EAC/E;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,QAAA,EAAU;AACzC,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,2CAA2C,IAAA,EAAM,CAAC,UAAU,CAAA,EAAG,CAAA;AAAA,EACzG;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,UAAA,EAAY;AAC3C,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,6CAA6C,IAAA,EAAM,CAAC,YAAY,CAAA,EAAG,CAAA;AAAA,EAC7G;AACA,EAAA,IAAI,OAAO,IAAA,IAAQ,CAAC,aAAa,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAG;AAClD,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,+CAA+C,IAAA,EAAM,CAAC,MAAM,CAAA,EAAG,CAAA;AAAA,EACzG;AACF,CAAC,CAAA;AAEI,SAAS,UAAU,IAAA,EAAuD;AAC/E,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACpC,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,EAAE,QAAQ,KAAA,CAAM,CAAC,GAAa,IAAA,EAAM,KAAA,CAAM,CAAC,CAAA,EAAY;AAChE;;;ACrGA,IAAM,QAAA,mBAAW,IAAI,GAAA,CAAI,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,YAAY,CAAC,CAAA;AAC7F,IAAM,gBAAA,GAAmB,sBAAA;AACzB,IAAM,gBAAA,GAAmB,QAAA;AACzB,IAAM,eAAA,GAAkB,aAAA;AACxB,IAAM,cAAA,GAAiB,gBAAA;AAEvB,SAAS,SAAS,MAAA,EAAyB;AACzC,EAAA,MAAM,SAAkB,EAAC;AACzB,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,OAAO,QAAA,GAAW,OAAO,MAAA,EAAQ;AAC/B,IAAA,MAAM,IAAA,GAAO,OAAO,QAAQ,CAAA;AAE5B,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAG;AACnB,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACrD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAU,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACrD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,SAAS,KAAA,EAAO,IAAA,EAAM,UAAU,CAAA;AACpD,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,UAAA,CAAW,QAAQ,QAAQ,CAAA;AAClD,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,UAAU,CAAA;AAC/C,MAAA,QAAA,GAAW,GAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,gBAAA,CAAiB,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAC,CAAA;AAC7D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,QAAQ,QAAA,CAAS,CAAC,MAAM,IAAA,GAAO,IAAA,GAAO,SAAS,CAAC,CAAA;AACtD,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAO,UAAU,CAAA;AACjD,MAAA,QAAA,IAAY,QAAA,CAAS,CAAC,CAAA,CAAE,MAAA;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,QAAQ,CAAC,CAAA;AACzD,IAAA,IAAI,MAAA,IAAU,CAAC,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1C,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,MAAA,CAAO,CAAC,CAAA,EAAG,QAAA,EAAU,CAAA;AAC1D,MAAA,QAAA,IAAY,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,MAAA,IAAI,GAAA,GAAM,QAAA;AACV,MAAA,OAAO,GAAA,GAAM,OAAO,MAAA,IAAU,eAAA,CAAgB,KAAK,MAAA,CAAO,GAAG,CAAW,CAAA,EAAG,GAAA,IAAO,CAAA;AAClF,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,GAAG,CAAA,EAAG,QAAA,EAAU,CAAA;AAChF,MAAA,QAAA,GAAW,GAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,sBAAA,EAAyB,IAAI,KAAK,QAAQ,CAAA;AAAA,EAC1E;AAEA,EAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,OAAO,EAAA,EAAI,QAAA,EAAU,MAAA,CAAO,MAAA,EAAQ,CAAA;AAC/D,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,QAAgB,KAAA,EAA+C;AACjF,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,WAAW,KAAA,GAAQ,CAAA;AACvB,EAAA,OAAO,QAAA,GAAW,OAAO,MAAA,EAAQ;AAC/B,IAAA,MAAM,IAAA,GAAO,OAAO,QAAQ,CAAA;AAC5B,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,KAAA,IAAS,IAAA;AACT,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,GAAW,CAAC,CAAA,KAAM,GAAA,EAAK;AAChC,MAAA,KAAA,IAAS,GAAA;AACT,MAAA,QAAA,IAAY,CAAA;AACZ,MAAA;AAAA,IACF;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,QAAA,GAAW,CAAA,EAAE;AAAA,EACpC;AACA,EAAA,MAAM,IAAI,mBAAA,CAAoB,6BAAA,EAA+B,KAAK,CAAA;AACpE;AAEA,IAAM,SAAN,MAAa;AAAA,EAGX,YAA6B,MAAA,EAAiB;AAAjB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAkB;AAAA,EAFvC,KAAA,GAAQ,CAAA;AAAA,EAIhB,KAAA,GAAmB;AACjB,IAAA,MAAM,SAAA,GAAY,KAAK,OAAA,EAAQ;AAC/B,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,mBAAmB,CAAA;AACtC,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEQ,OAAA,GAAqB;AAC3B,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,QAAA,EAAU,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,aAAa,IAAI,CAAA,WAAY,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AAC7D,IAAA,OAAO,QAAA,CAAS,WAAW,CAAA,GAAK,QAAA,CAAS,CAAC,CAAA,GAAkB,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,EACrF;AAAA,EAEQ,QAAA,GAAsB;AAC5B,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,QAAA,EAAU,CAAA;AACjC,IAAA,OAAO,IAAA,CAAK,aAAa,KAAK,CAAA,WAAY,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AAC9D,IAAA,OAAO,QAAA,CAAS,WAAW,CAAA,GAAK,QAAA,CAAS,CAAC,CAAA,GAAkB,EAAE,IAAA,EAAM,KAAA,EAAO,QAAA,EAAS;AAAA,EACtF;AAAA,EAEQ,QAAA,GAAsB;AAC5B,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,IAAA,CAAK,QAAA,EAAS,EAAE;AAC7E,IAAA,OAAO,KAAK,YAAA,EAAa;AAAA,EAC3B;AAAA,EAEQ,YAAA,GAA0B;AAChC,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,IAAA,KAAS,QAAA,EAAU;AACjC,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,EAAQ;AAC3B,MAAA,IAAA,CAAK,MAAA,CAAO,UAAU,KAAK,CAAA;AAC3B,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA,EAAG;AAClC,MAAA,MAAM,UAAA,GAAa,KAAK,eAAA,EAAgB;AACxC,MAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAAK;AACvB,MAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,QAAA,MAAM,IAAI,mBAAA,CAAoB,kEAAA,EAAoE,IAAA,CAAK,QAAQ,CAAA;AAAA,MACjH;AACA,MAAA,OAAO,UAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,EAC9B;AAAA,EAEQ,eAAA,GAA6B;AACnC,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,YAAY,CAAA;AAC/C,IAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,GAAG,CAAA,EAAG;AACrC,MAAA,MAAM,IAAI,oBAAoB,CAAA,wBAAA,EAA2B,GAAG,KAAK,IAAA,CAAK,IAAA,GAAO,QAAQ,CAAA;AAAA,IACvF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,YAAA,EAAc,GAAA,EAAI;AAAA,EACnC;AAAA,EAEQ,eAAA,GAA6B;AACnC,IAAA,MAAM,IAAA,GAAO,KAAK,YAAA,EAAa;AAC/B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY,uBAAuB,CAAA;AAChE,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,QAAA,CAAS,KAAkB,CAAA,EAAG;AACtD,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,sBAAA,EAAyB,SAAS,KAAK,CAAA,CAAA,CAAA,EAAK,SAAS,QAAQ,CAAA;AAAA,IAC7F;AACA,IAAA,MAAM,KAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,QAAA,CAAS,KAAA,EAAoB,MAAM,KAAA,EAAM;AAAA,EACzE;AAAA,EAEQ,YAAA,GAAwB;AAC9B,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AAExB,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,MAAM,KAAA,EAAM;AAAA,IAC/C;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,IAAA,CAAK,OAAA,EAAQ;AACb,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAGhC,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAM,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,EAAI;AACxF,QAAA,MAAM,IAAI,mBAAA;AAAA,UACR,CAAA,iBAAA,EAAoB,MAAM,KAAK,CAAA,4DAAA,CAAA;AAAA,UAC/B,KAAA,CAAM;AAAA,SACR;AAAA,MACF;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAM;AAAA,IAClC;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,MAAA,MAAM,IAAI,oBAAoB,CAAA,0BAAA,EAA6B,KAAA,CAAM,SAAS,KAAK,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,IACpG;AAEA,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,IAAI,KAAA,CAAM,KAAA,KAAU,MAAA,IAAU,KAAA,CAAM,UAAU,OAAA,EAAS;AACrD,MAAA,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,KAAA,CAAM,UAAU,MAAA,EAAO;AAAA,IAC1D;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,SAAA,EAAW,OAAO,IAAA,EAAK;AAClE,IAAA,IAAI,KAAA,CAAM,UAAU,OAAA,EAAS;AAC3B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC1C,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,GAAG,CAAA,EAAG;AAChC,QAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,mBAAA,EAAsB,GAAG,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,MAC5E;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAI;AAAA,IAC9B;AACA,IAAA,IAAI,KAAA,CAAM,UAAU,YAAA,EAAc;AAChC,MAAA,MAAM,IAAI,mBAAA,CAAoB,kEAAA,EAAoE,KAAA,CAAM,QAAQ,CAAA;AAAA,IAClH;AACA,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,IAAK,CAAC,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;AACtE,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,0BAAA,EAA6B,MAAM,KAAK,CAAA,CAAA,CAAA,EAAK,MAAM,QAAQ,CAAA;AAAA,IAC3F;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAM;AAAA,EAC7C;AAAA,EAEQ,kBAAkB,EAAA,EAAoC;AAC5D,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,UAAA,EAAa,EAAE,CAAA,CAAE,CAAA;AACvC,IAAA,MAAM,WAAW,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,gBAAA,EAAmB,EAAE,CAAA,KAAA,CAAO,CAAA;AACnE,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,UAAA,EAAa,EAAE,CAAA,IAAA,CAAM,CAAA;AAC3C,IAAA,OAAO,QAAA,CAAS,KAAA;AAAA,EAClB;AAAA,EAEQ,IAAA,GAAc;AACpB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEQ,YAAY,OAAA,EAA0B;AAC5C,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,OAAO,KAAA,CAAM,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,KAAA,KAAU,OAAA;AAAA,EACxD;AAAA,EAEQ,aAAa,OAAA,EAA0B;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,OAAO,GAAG,OAAO,KAAA;AACvC,IAAA,IAAA,CAAK,OAAA,EAAQ;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,OAAA,GAAiB;AACvB,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,CAAA;AACxC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,MAAA,CAAO,MAAiB,WAAA,EAA4B;AAC1D,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAA,EAAK;AACxB,IAAA,IAAI,KAAA,CAAM,SAAS,IAAA,EAAM;AACvB,MAAA,MAAM,IAAI,mBAAA,CAAoB,CAAA,SAAA,EAAY,WAAW,CAAA,OAAA,EAAU,MAAM,KAAA,IAAS,KAAK,CAAA,CAAA,CAAA,EAAK,KAAA,CAAM,QAAQ,CAAA;AAAA,IACxG;AACA,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACtB;AACF,CAAA;AAEO,SAAS,eAAe,MAAA,EAAiC;AAC9D,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,QAAS,IAAI,mBAAA,CAAoB,mBAAmB,CAAC,CAAA;AAC5E,EAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,GAAA,EAAK,IAAI,MAAA,CAAO,QAAA,CAAS,OAAO,CAAC,CAAA,CAAE,KAAA,EAAM,EAAE;AACvE;;;ACxPO,IAAM,wBAAwBA,KAAAA,CAClC,MAAA,GACA,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAyB;AAC3C,EAAA,IAAI;AACF,IAAA,OAAO,eAAe,MAAM,CAAA;AAAA,EAC9B,SAAS,KAAA,EAAO;AACd,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA;AAChG,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACF,CAAC,CAAA;;;ACPH,IAAM,qBAAA,GAAwB,+BAAA;AAK9B,IAAM,oBAAA,GAAuB,mBAAA;AAK7B,IAAM,iBAAA,GAAoB,gBAAA;AAM1B,IAAM,qBAAA,GAAwB,wBAAA;AAG9B,IAAM,yBAAA,GAA4B,qCAAA;AAGlC,IAAM,uBAAA,GAA0B,6BAAA;AAChC,IAAM,oBAAA,GAAuB,qDAAA;AAC7B,IAAM,mBAAA,GAAsB,2BAAA;AAC5B,IAAM,qBAAA,GAAwB,iBAAA;AAC9B,IAAM,mBAAA,GAAsB,SAAA;AAErB,IAAM,iBAAA,GAAoBA,MAAE,YAAA,CAAa;AAAA,EAC9C,IAAA,EAAM,gBAAA;AAAA,EACN,QAAA,EAAUA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC/B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC,CAAA;AAQD,IAAM,uBAAuBA,KAAAA,CAC1B,MAAA,GACA,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAwB;AAC1C,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AACrD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,GAAA,CAAI,SAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,oEAAoE,CAAA;AAC5G,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACA,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AACrD,EAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4BAA4B,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA,EAAK,CAAA;AACjF,IAAA,OAAOA,KAAAA,CAAE,KAAA;AAAA,EACX;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAK,EAAG,KAAA,EAAO,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,EAAY;AAC/E,CAAC,CAAA;AAEI,IAAM,aAAA,GAAgB,CAAC,QAAA,EAAU,QAAA,EAAU,QAAQ,CAAA;AAE1D,IAAM,WAAA,GAAcA,MAAE,YAAA,CAAa;AAAA,EACjC,MAAA,EAAQA,KAAAA,CAAE,IAAA,CAAK,aAAa,CAAA;AAAA,EAC5B,QAAA,EAAU,iBAAiB,QAAA;AAC7B,CAAC,CAAA;AAEM,IAAM,YAAA,GAAeA,MACzB,YAAA,CAAa;AAAA,EACZ,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,QAAA,EAAU,sBAAsB,QAAA,EAAS;AAAA,EACzC,QAAQA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,iBAAiB,EAAE,QAAA,EAAS;AAAA,EAC/D,SAAA,EAAWA,KAAAA,CAAE,KAAA,CAAM,oBAAoB,EAAE,QAAA,EAAS;AAAA;AAAA,EAElD,QAAA,EAAUA,MAAE,KAAA,CAAM,CAACA,MAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,EAAGA,KAAAA,CAAE,MAAMA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxE,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,gBAAgB,EAAE,QAAA,EAAS;AAAA,EAC/D,KAAA,EAAO,YAAY,QAAA;AACrB,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC5B,EAAA,MAAM,SAAS,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAC9C,EAAA,IAAI,MAAA,CAAO,YAAY,iBAAA,CAAkB,MAAA,CAAO,SAAS,GAAG,CAAA,CAAE,SAAS,CAAA,EAAG;AACxE,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,kEAAA;AAAA,MACT,IAAA,EAAM,CAAC,UAAU;AAAA,KAClB,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,cAAA,CAAe,MAAA,CAAO,QAAA,EAAU,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG,MAAA,CAAO,OAAA,KAAY,MAAS,CAAA,EAAG;AAClG,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,OAAO,IAAA,EAAM,CAAC,UAAU,CAAA,EAAG,CAAA;AAAA,EACrE;AAGA,EAAA,IAAI,MAAA,CAAO,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AAC9D,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4CAA4C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EACzG;AACA,EAAA,KAAA,MAAW,CAACC,QAAO,KAAK,CAAA,IAAA,CAAM,OAAO,SAAA,IAAa,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,EAAG;AACjC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,uCAAA,EAA0C,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA;AAAA,QAC9D,IAAA,EAAM,CAAC,WAAA,EAAaA,MAAK;AAAA,OAC1B,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAC,CAAA;AAII,SAAS,mBAAmBC,IAAAA,EAAuB;AACxD,EAAA,MAAM,cAAA,GAAiBA,IAAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAA;AAC9D,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,cAAA,CAAe,QAAA,CAAS,mBAAmB,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,CAAC,CAAW,CAAA;AACjG,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B;AAGO,SAAS,uBAAuB,QAAA,EAAgD;AACrF,EAAA,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,QAAQ,CAAA,EAAG,GAAA,CAAI,CAAC,SAAA,KAAc,SAAA,CAAU,MAAM,CAAA;AAC9F;AAEA,SAAS,cAAA,CACP,QAAA,EACA,cAAA,EACA,UAAA,EACU;AACV,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,UAAA,GAAa,uBAAuB,QAAQ,CAAA;AAClD,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAWD,MAAAA,KAAU;AAEvC,IAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAA;AACpE,IAAA,MAAM,KAAK,UAAA,CAAW,MAAA,GAAS,IAAI,CAAA,YAAA,EAAeA,MAAAA,GAAQ,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACjE,IAAA,IAAI,CAAC,sBAAsB,IAAA,CAAK,SAAS,GAAG,MAAA,CAAO,IAAA,CAAK,CAAA,0CAAA,EAA6C,EAAE,CAAA,CAAE,CAAA;AACzG,IAAA,IAAI,cAAA,CAAe,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,CAAA,8CAAA,EAAiD,EAAE,CAAA,CAAE,CAAA;AACxH,IAAA,IAAI,mBAAA,CAAoB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,sCAAA,EAAyC,EAAE,CAAA,CAAE,CAAA;AACvG,IAAA,IAAI,oBAAA,CAAqB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,2CAAA,EAA8C,EAAE,CAAA,CAAE,CAAA;AAC7G,IAAA,IAAI,qBAAA,CAAsB,KAAK,cAAc,CAAA,SAAU,IAAA,CAAK,CAAA,gDAAA,EAA8C,EAAE,CAAA,CAAE,CAAA;AAE9G,IAAA,IAAI,cAAA,CAAe,SAAS,GAAG,CAAA,SAAU,IAAA,CAAK,CAAA,+CAAA,EAAkD,EAAE,CAAA,CAAE,CAAA;AACpG,IAAA,IAAI,wBAAwB,IAAA,CAAK,cAAA,CAAe,QAAQ,yBAAA,EAA2B,EAAE,CAAC,CAAA,EAAG;AACvF,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,+EAAA,EAA6E,EAAE,CAAA,CAAE,CAAA;AAAA,IAC/F;AAGA,IAAA,IAAI,iBAAA,CAAkB,KAAK,cAAc,CAAA,IAAK,EAAE,UAAA,IAAcA,MAAAA,KAAU,UAAA,CAAW,MAAA,GAAS,CAAA,CAAA,EAAI;AAC9F,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,UAAA,GACI,CAAA,kDAAA,EAAqD,EAAE,CAAA,CAAA,GACvD,qEAAqE,EAAE,CAAA;AAAA,OAC7E;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA;AAC7B,EAAA,IAAI,UAAA,IAAc,IAAA,IAAQ,CAAC,iBAAA,CAAkB,IAAA,CAAK,KAAK,OAAA,CAAQ,qBAAA,EAAuB,IAAI,CAAC,CAAA,EAAG;AAC5F,IAAA,MAAA,CAAO,KAAK,yFAAyF,CAAA;AAAA,EACvG;AACA,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAC,CAAA;AACvG,EAAA,IAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,0CAA0C,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACxG,EAAA,OAAO,MAAA;AACT;;;AChKA,IAAM,cAAA,GAAgE;AAAA,EACpE,MAAA,EAAQ,kBAAA;AAAA,EACR,WAAA,EAAa;AACf,CAAA;AAEO,IAAM,WAAA,GAAc,CAAC,IAAA,KAA6B,cAAA,CAAe,IAAI,CAAA,IAAK,IAAA;;;ACP1E,IAAM,cAAA,GAAiB,oBAAA;AAGvB,IAAM,sBAAA,GAAyB,cAAA;AAE/B,IAAM,eAAA,GAAkB,CAAC,IAAA,KAAyB,CAAA,CAAA,EAAI,KAAK,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAEhF,IAAM,YAAA,GAAe,CAAC,KAAA,KAA0B,CAAA,CAAA,EAAI,MAAM,UAAA,CAAW,GAAA,EAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAGtF,IAAM,aAAA,GAAgB,2BAA2B,cAAc,CAAA,oBAAA,CAAA;AAExD,IAAM,eAAA,GAAkB,CAAC,GAAA,KAAwB,CAAA,CAAA,EAAI,aAAa,CAAA,KAAA,EAAQ,YAAA,CAAa,GAAG,CAAC,CAAA,CAAA,CAAA;AAG3F,IAAM,oBAAA,GAAuB,CAAC,GAAA,KACnC,CAAA,SAAA,EAAY,aAAa,QAAQ,sBAAsB,CAAA,IAAA,EAAO,YAAA,CAAa,GAAG,CAAC,CAAA,QAAA,CAAA;;;ACZjF,IAAM,eAAA,GAAuD;AAAA,EAC3D,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM,IAAA;AAAA,EACN,GAAA,EAAK,GAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAKA,SAAS,cAAA,CAAe,OAAA,EAAkB,KAAA,EAAgB,WAAA,EAA4C;AACpG,EAAA,IAAI,QAAQ,IAAA,KAAS,QAAA,EAAU,OAAO,eAAA,CAAgB,QAAQ,IAAI,CAAA;AAClE,EAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAC5B,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,OAAA,CAAQ,GAAG,CAAA;AAI9C,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA,KAAS,WAAW,WAAA,GAAc,KAAA,CAAM,IAAI,CAAA,GAAI,MAAA;AACzE,IAAA,OAAO,UAAA,IAAc,eAAe,MAAA,GAAS,CAAA,CAAA,EAAI,UAAU,CAAA,GAAA,EAAM,WAAA,CAAY,UAAU,CAAC,CAAA,CAAA,GAAK,UAAA;AAAA,EAC/F;AACA,EAAA,MAAM,EAAE,OAAM,GAAI,OAAA;AAClB,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,MAAA;AAC3B,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,aAAa,KAAK,CAAA;AACxD,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,iBAAA,CAAkB,EAAA,EAAe,IAAA,EAAe,KAAA,EAAgB,WAAA,EAA4C;AACnH,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,KAAS,SAAA,IAAa,KAAK,KAAA,KAAU,IAAA,GAAO,KAAA,GAAQ,KAAA,CAAM,IAAA,KAAS,SAAA,IAAa,KAAA,CAAM,KAAA,KAAU,OAAO,IAAA,GAAO,IAAA;AACpI,EAAA,IAAI,QAAA,KAAa,EAAA,KAAO,GAAA,IAAO,EAAA,KAAO,IAAA,CAAA,EAAO;AAC3C,IAAA,OAAO,CAAA,EAAG,cAAA,CAAe,QAAA,EAAU,QAAA,EAAU,WAAW,CAAC,CAAA,GAAA,EAAM,EAAA,KAAO,IAAA,GAAO,MAAA,GAAS,EAAE,CAAA,KAAA,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,CAAA,EAAG,cAAA,CAAe,IAAA,EAAM,KAAA,EAAO,WAAW,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,EAAE,CAAC,CAAA,CAAA,EAAI,cAAA,CAAe,KAAA,EAAO,IAAA,EAAM,WAAW,CAAC,CAAA,CAAA;AACvH;AAGO,SAAS,gBAAA,CAAiB,WAAsB,WAAA,EAA4C;AACjG,EAAA,QAAQ,UAAU,IAAA;AAAM,IACtB,KAAK,KAAA;AAAA,IACL,KAAK,IAAA,EAAM;AACT,MAAA,MAAM,SAAS,SAAA,CAAU,QAAA,CAAS,GAAA,CAAI,CAAC,YAAY,gBAAA,CAAiB,OAAA,EAAS,WAAW,CAAC,EAAE,IAAA,CAAK,CAAA,CAAA,EAAI,UAAU,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,CAAG,CAAA;AACnI,MAAA,OAAO,IAAI,MAAM,CAAA,CAAA,CAAA;AAAA,IACnB;AAAA,IACA,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,KAAA,EAAQ,gBAAA,CAAiB,SAAA,CAAU,OAAA,EAAS,WAAW,CAAC,CAAA,CAAA,CAAA;AAAA,IACjE,KAAK,SAAA;AACH,MAAA,OAAO,CAAA,CAAA,EAAI,kBAAkB,SAAA,CAAU,EAAA,EAAI,UAAU,IAAA,EAAM,SAAA,CAAU,KAAA,EAAO,WAAW,CAAC,CAAA,CAAA,CAAA;AAAA,IAC1F,KAAK,YAAA;AACH,MAAA,OAAO,CAAA,CAAA,EAAI,oBAAA,CAAqB,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA;AAEpD;;;ACvCA,IAAME,sBAAAA,GAAwB,iBAAA;AAM9B,IAAM,aAAA,GACJ,mHAAA;AACF,IAAM,iBAAA,GAAoB,6BAAA;CASqC;AAAA,EAC7D,IAAA,EAAMH,MAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACzC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACxC,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACzC,MAAA,EAAQA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,QAAO,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EACxC,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,CAACA,KAAAA,CAAE,SAAQ,EAAGA,KAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,EAC1C,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAOA,MAAE,OAAA;AACX;AAuBO,IAAM,gBAAA,GAAmB,CAAC,MAAA,KAAuC,MAAA,CAAO,KAAK,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA;AAGhG,IAAM,cAAA,GAAiB,CAAC,IAAA,KAAyB,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAU1D,SAAS,uBAAA,CACd,MAAA,EACA,WAAA,GAAwC,cAAA,EAC9B;AACV,EAAA,OAAO,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,KAAc,gBAAA,CAAiB,SAAA,EAAW,WAAW,CAAC,CAAA;AAC5G;AAEA,SAAS,gBAAA,CAAiBE,MAAa,WAAA,EAA+C;AACpF,EAAA,MAAM,QAAA,GAAWA,KAAI,OAAA,CAAQ,aAAA,EAAe,CAAC,KAAA,EAAO,QAAA,EAAmB,eAAwB,SAAA,KAAuB;AACpH,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,IAAI,CAAC,iBAAA,CAAkB,IAAA,CAAK,QAAQ,CAAA,QAAS,IAAI,kBAAA,CAAmB,CAAA,+BAAA,EAAkC,KAAK,CAAA,CAAE,CAAA;AAC7G,MAAA,OAAO,gBAAgB,QAAQ,CAAA;AAAA,IACjC;AACA,IAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,MAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,aAAa,CAAA,EAAG;AAC/C,QAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,oCAAA,EAAuC,KAAK,CAAA,CAAE,CAAA;AAAA,MAC7E;AACA,MAAA,OAAO,qBAAqB,aAAa,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,SAAA,KAAc,MAAA,EAAW,OAAO,WAAA,CAAY,SAAS,CAAA;AACzD,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AAID,EAAA,IAAI,kBAAkB,IAAA,CAAK,QAAA,CAAS,QAAQC,sBAAAA,EAAuB,IAAI,CAAC,CAAA,EAAG;AACzE,IAAA,MAAM,IAAI,mBAAmB,mEAAmE,CAAA;AAAA,EAClG;AACA,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,sBAAsB,MAAA,EAAyC;AAC7E,EAAA,OAAO,OAAO,QAAA,GAAW,gBAAA,CAAiB,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AACnE;AAGO,SAAS,8BAA8B,MAAA,EAAoC;AAChF,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,SAAA,IAAa,sBAAA,CAAuB,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC/D,IAAA,KAAA,MAAW,KAAA,IAAS,SAAA,CAAU,QAAA,CAAS,aAAa,CAAA,EAAG;AACrD,MAAA,IAAI,KAAA,CAAM,CAAC,CAAA,KAAM,MAAA,OAAgB,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IAChD;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;;;AC3GO,IAAM,+BAAA,GAAkC,OAAA;AACxC,IAAM,gCAAA,GAAmC,OAAA;AAGzC,IAAM,kBAAA,GAAqB,CAAC,UAAA,KAA+B,CAAA,OAAA,EAAU,UAAU,CAAA,CAAA;AAWtF,SAAS,gBAAA,CAAiB,SAAmD,aAAA,EAA+B;AAC1G,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,CAAK,OAAO,EAAE,GAAA,CAAI,eAAe,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACtE,EAAA,OAAO,CAAA,uBAAA,EAA0B,aAAa,CAAA,SAAA,EAAY,UAAU,CAAA,mBAAA,CAAA;AACtE;AAOA,IAAM,aAAa,CAAC,UAAA,KAClB,UAAA,CAAW,MAAA,CACR,QAAQ,CAAC,KAAA,KAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,OAAA,IAAW,EAAE,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,MAAM,OAAO,EAAE,IAAA,EAAM,MAAA,EAAO,CAAE,CAAC,CAAA,CAClG,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAezC,SAAS,yBAAyB,UAAA,EAA2C;AAClF,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACjD,EAAA,OAAO,CAAC,sBAAA,CAAuB,MAAM,GAAG,GAAG,UAAA,CAAW,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,EAAE,IAAA,EAAM,QAAO,KAAM,oBAAA,CAAqB,YAAY,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA;AACjJ;AAUO,SAAS,oBAAoB,UAAA,EAA2C;AAC7E,EAAA,MAAM,OAAA,GAAU,WAAW,UAAU,CAAA;AACrC,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,yBAAA,EAA4B,eAAA,CAAgB,cAAc,UAAA,CAAW,SAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AACtG,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,MAAA,EAAO,IAAK,OAAA,EAAS;AACtC,IAAA,MAAM,KAAA,GAAQ,iBAAiB,MAAM,CAAA;AACrC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,GAAS,CAAA,GAAI,KAAK,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU,WAAA,CAAY,OAAO,MAAA,CAAQ,KAAK,EAAG,IAAI,CAAC,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACzH,IAAA,MAAM,QAAA,GAAW,uBAAA,CAAwB,MAAA,EAAQ,CAAC,KAAA,KAAU,CAAA,CAAA,EAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAC,CAAA,CAAE,CAAA;AAC1F,IAAA,QAAA,CAAS,OAAA,CAAQ,CAACD,IAAAA,EAAKD,MAAAA,KAAU;AAI/B,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAWA,MAAAA,KAAU,QAAA,CAAS,MAAA,GAAS,CAAA,GAAI,gBAAA,CAAiB,MAAA,CAAO,OAAA,EAASC,IAAG,CAAA,GAAIA,IAAAA;AAC1G,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,QAAA,EAAW,eAAA,CAAgB,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAID,MAAK,CAAA,CAAE,CAAC,CAAA,EAAG,SAAS,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE,CAAA;AAAA,IACtG,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,UAAA;AACT;AAOA,SAAS,uBAAuB,MAAA,EAAwB;AACtD,EAAA,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAA,EAQe,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAA,CAAA;AAM5C;AAEA,SAAS,oBAAA,CAAqB,UAAA,EAAiC,IAAA,EAAc,MAAA,EAAoC;AAC/G,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,aAAA,CAAc,UAAA,CAAW,SAAS,CAAC,CAAA;AAClE,EAAA,MAAM,EAAA,GAAK,GAAG,MAAM,CAAA,CAAA,EAAI,gBAAgB,kBAAA,CAAmB,IAAI,CAAC,CAAC,CAAA,CAAA;AACjE,EAAA,MAAM,KAAA,GAAQ,iBAAiB,MAAM,CAAA;AACrC,EAAA,MAAM,SAAA,GAAY,MACf,GAAA,CAAI,CAAC,cAAc,CAAA,EAAG,eAAA,CAAgB,cAAA,CAAe,SAAS,CAAC,CAAC,IAAI,WAAA,CAAY,MAAA,CAAO,OAAQ,SAAS,CAAA,CAAG,IAAI,CAAC,CAAA,CAAE,CAAA,CAClH,IAAA,CAAK,IAAI,CAAA;AACZ,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAC,cAAc,WAAA,CAAY,MAAA,CAAO,MAAA,CAAQ,SAAS,CAAA,CAAG,IAAI,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AACjG,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,gBAAA,CAAiB,UAAA,CAAW,SAAS,CAAC,CAAA;AAInE,EAAA,MAAM,UAAA,GAAa,wBAAwB,MAAM,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAA,KAAc,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAG,CAAA;AAC5E,EAAA,MAAM,SAAS,MAAA,CAAO,OAAA;AAAA;AAAA,IAElB,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA,cAAA,EACxB,MAAA,CAAO,QAAQ,MAAA,CAAO,OAAO,EACpC,GAAA,CAAI,CAAC,CAAC,MAAA,EAAQ,IAAI,CAAA,KAAM,GAAG,eAAA,CAAgB,MAAM,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,IAAI,CAAC,CAAA,CAAE,CAAA,CACzE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAAA;AAAA,kBAAA,EAGC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxB,CAAC,eAAe,UAAA,EAAY,IAAA,EAAM,MAAM,CAAA,EAAG,GAAG,SAAS,CAAA,eAAA,EAAkB,gBAAA,CAAiB,OAAO,OAAA,EAAS,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA,YAAA;AAAA;AAAA;AAAA,IAI1I,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,EAAI,SAAS,CAAA;AAAA;AAAA;AAAA;AAAA,kBAAA,EAIpB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxB,CAAC,cAAA,CAAe,UAAA,EAAY,IAAA,EAAM,MAAM,GAAG,GAAG,OAAA,EAAS,CAAA,EAAA,EAAK,IAAI,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,YAAA;AAAA,GAAA;AAS/F,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,CAAA,uBAAA,EAA0B,EAAE,CAAA,CAAA,EAAI,QAAQ,CAAA,aAAA,CAAA;AAAA,IACxC,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAA,EAAI,QAAQ,QAAQ,IAAI,CAAA;AAAA,GACzD;AACF;AAGA,SAAS,cAAA,CAAe,UAAA,EAAiC,IAAA,EAAc,MAAA,EAAkC;AACvG,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,MAAM,QAAA,GAAW,sBAAsB,MAAM,CAAA;AAC7C,EAAA,IAAI,QAAA,EAAU;AAGZ,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,aAAa,QAAQ,CAAA,MAAA,CAAA;AAAA,MACrB,CAAA,4BAAA,EAA+B,IAAI,CAAA,4DAAA,EAA+D,YAAA,CAAa,+BAA+B,CAAC,CAAA,CAAA,CAAA;AAAA,MAC/I,CAAA,SAAA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,SAAA,IAAa,EAAC,EAAG;AAC1C,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,KAAI,GAAI,sBAAA,CAAuB,YAAY,KAAK,CAAA;AACvE,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,cAAA,CAAe,KAAA,CAAM,KAAK,CAAC,CAAA;AAIvD,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,KAAA,EAAQ,GAAG,CAAA,2CAAA,EAA8C,eAAA,CAAgB,MAAM,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA,OAAA,EAAU,eAAA,CAAgB,GAAG,CAAC,MAAM,GAAG,CAAA,gBAAA,CAAA;AAAA,MACjJ,CAAA,0CAAA,EAA6C,MAAM,KAAK,CAAA,SAAA,EAAY,MAAM,KAAK,CAAA,kBAAA,EAAqB,YAAA,CAAa,gCAAgC,CAAC,CAAA,CAAA,CAAA;AAAA,MAClJ,CAAA,SAAA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,sBAAA,CACP,YACA,KAAA,EACgD;AAChD,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAC7B,IAAA,MAAM,CAAC,MAAA,EAAQ,KAAK,IAAI,KAAA,CAAM,KAAA,CAAM,MAAM,GAAG,CAAA;AAC7C,IAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,GAAA,EAAK,IAAA,EAAK;AAAA,EACpC;AACA,EAAA,MAAM,MAAA,GAAS,WAAW,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,KAAU,KAAA,CAAM,KAAK,CAAA;AAC5E,EAAA,MAAM,MAAM,MAAA,IAAU,MAAA,CAAO,QAAQ,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,MAAM,MAAM,MAAA,CAAO,WAAW,IAAI,CAAC,CAAA;AACvG,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,GAAA,EAAK;AAGnB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,yBAAA,EAA4B,KAAA,CAAM,KAAK,CAAA,yCAAA,CAA2C,CAAA;AAAA,EACjH;AACA,EAAA,OAAO,EAAE,QAAQ,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,GAAA,EAAI;AAChF;AChNA,IAAM,UAAA,GAAaD,MAAE,YAAA,CAAa;AAAA,EAChC,EAAA,EAAI,oBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,OAAA,EAASA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAC1B,CAAC,CAAA;AAID,IAAM,WAAA,GAAcA,MACjB,KAAA,CAAM;AAAA,EACLA,KAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAC/BA,MAAE,YAAA,CAAa;AAAA,IACb,SAASA,KAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,IACxC,MAAA,EAAQA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,IAC7B,IAAA,EAAM,iBAAiB,QAAA;AAAS,GACjC;AACH,CAAC,CAAA,CACA,SAAA,CAAU,CAACC,MAAAA,KAAW,KAAA,CAAM,OAAA,CAAQA,MAAK,CAAA,GAAI,EAAE,OAAA,EAASA,MAAAA,EAAM,GAAIA,MAAM,CAAA;AAE3E,IAAM,cAAA,GAAiBD,MAAE,YAAA,CAAa;AAAA,EACpC,IAAA,EAAM,sBAAsB,QAAA,EAAS;AAAA,EACrC,KAAA,EAAO,sBAAsB,QAAA;AAC/B,CAAC,CAAA;AAEM,IAAM,eAAA,GAAkBA,MAC5B,YAAA,CAAa;AAAA,EACZ,SAAA,EAAW,eAAA;AAAA,EACX,KAAA,EAAO,gBAAA;AAAA,EACP,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,YAAY,EAAE,QAAA,EAAS;AAAA,EAC3D,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,MAAM,qBAAA,EAAuB,0CAA0C,EAAE,QAAA,EAAS;AAAA,EACrG,OAAOA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,UAAU,EAAE,QAAA,EAAS;AAAA,EACvD,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,WAAW,EAAE,QAAA,EAAS;AAAA,EACvC,QAAA,EAAU,eAAe,QAAA,EAAS;AAAA,EAClC,SAASA,KAAAA,CAAE,MAAA,CAAO,gBAAA,EAAkB,YAAY,EAAE,QAAA;AACpD,CAAC,CAAA,CACA,WAAA,CAAY,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3B,EAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,EAAG;AACzC,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,CAAA,0BAAA,CAAA,EAA8B,IAAA,EAAM,CAAC,OAAO,GAAG,CAAA;AAAA,EACxG;AACA,EAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACnD,IAAA,IAAI,qBAAA,CAAsB,GAAA,CAAI,IAAI,CAAA,EAAG;AACnC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,WAAW,IAAI,CAAA,yHAAA,CAAA;AAAA,QACxB,IAAA,EAAM,CAAC,SAAA,EAAW,IAAI;AAAA,OACvB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,mBAAA,CAAoB,KAAA,EAAO,GAAG,CAAA;AAAA,OAC3C,mBAAA,CAAoB,OAAO,GAAG,CAAA;AACnC,EAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AACxB,EAAA,qBAAA,CAAsB,OAAO,GAAG,CAAA;AAChC,EAAA,0BAAA,CAA2B,OAAO,GAAG,CAAA;AACvC,CAAC,CAAA;AAOI,IAAM,SAAA,GAAY,CAAC,KAAA,EAAe,UAAA,KACvC,UAAA,CAAW,IAAA,IAAQ,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,EAAI,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAGzD,IAAM,aAAa,CAAC,KAAA,EAAe,WAA2B,CAAA,EAAG,KAAK,IAAI,MAAM,CAAA,CAAA;AAGhF,IAAM,iBAAiB,CAAC,KAAA,EAAe,SAAyB,CAAA,GAAA,EAAM,KAAK,IAAI,IAAI,CAAA,CAAA;AAI1F,SAAS,mBAAA,CAAoB,OAAkB,GAAA,EAAsB;AACnE,EAAA,MAAM,SAAA,GAA8C;AAAA,IAClD,CAAC,WAAW,8DAA8D,CAAA;AAAA,IAC1E,CAAC,WAAW,sDAAsD,CAAA;AAAA,IAClE,CAAC,WAAW,yDAAyD;AAAA,GACvE;AACA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,SAAA,EAAW;AACxC,IAAA,IAAI,KAAA,CAAM,KAAK,CAAA,KAAM,MAAA,MAAe,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,CAAC,KAAK,GAAG,CAAA;AAAA,EACzF;AACA,EAAA,IAAI,KAAA,CAAM,UAAU,KAAA,EAAO;AACzB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,6BAAA,EAA+B,IAAA,EAAM,CAAC,UAAA,EAAY,OAAO,CAAA,EAAG,CAAA;AAAA,EACtG;AACF;AAEA,SAAS,eAAA,CACP,OAAA,EACA,KAAA,EACA,GAAA,EACM;AACN,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoB;AAC9C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,IAAI,CAAA,EAAG,YAAA;AACnC,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,IAAI,WAAA,KAAgB,IAAA,IAAQ,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,EAAG;AACvD,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,uDAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,cAAc;AAAA,OACvC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA;AAC7C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,cAAA,EAAiB,WAAW,CAAA,yBAAA,EAA4B,OAAO,CAAA,CAAA,CAAA;AAAA,QACxE,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,cAAc;AAAA,OACvC,CAAA;AAAA,IACH;AACA,IAAA,aAAA,CAAc,GAAA,CAAI,aAAa,IAAI,CAAA;AAAA,EACrC;AACF;AAEA,SAAS,mBAAA,CAAoB,OAAkB,GAAA,EAAsB;AACnE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACjC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,4CAA4C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AACvG,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,CAAC,SAAS,OAAA,CAAQ,IAAI,GAAG,WAAW,CAAA;AACrE,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,0CAA0C,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAAA,EACvG;AAEA,EAAA,eAAA,CAAgB,OAAA,EAAS,OAAO,GAAG,CAAA;AACnC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAI,CAAA;AAC3B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACpD,IAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,EAAM,MAAA,KAAW,IAAA,EAAM;AACxC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,kDAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,MAAM;AAAA,OAC/B,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,IAAA,EAAM;AACrC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,SAAS,CAAA,aAAA,EAAgB,IAAA,CAAK,IAAI,CAAA,gCAAA,EAAmC,OAAO,IAAI,CAAA,CAAA,CAAA;AAAA,QAChF,IAAA,EAAM,CAAC,SAAA,EAAW,IAAA,EAAM,MAAM;AAAA,OAC/B,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,UAAUC,MAAK,CAAA,IAAA,CAAM,MAAM,OAAA,IAAW,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,IAAI,IAAI,IAAIA,MAAAA,CAAM,OAAO,EAAE,IAAA,KAASA,MAAAA,CAAM,QAAQ,MAAA,EAAQ;AACxD,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,qCAAA;AAAA,QACT,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,OAC3B,CAAA;AAAA,IACH;AACA,IAAA,KAAA,MAAW,MAAA,IAAUA,OAAM,OAAA,EAAS;AAClC,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,oCAAoC,MAAM,CAAA,CAAA,CAAA;AAAA,UACnD,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,SAC3B,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,aAAA,CAAc,OAAkB,GAAA,EAAsB;AAC7D,EAAA,MAAM,cAAc,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AACnD,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,IAAA,IAAI,CAAC,MAAM,MAAA,IAAU,CAAC,YAAY,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA,EAAG;AACnD,MAAA,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA,gCAAA,EAAmC,IAAA,CAAK,EAAE,CAAA,CAAA,CAAA,EAAK,MAAM,CAAC,OAAA,EAAS,IAAA,EAAM,IAAI,GAAG,CAAA;AAAA,IACtH;AACA,IAAA,IAAI,KAAK,OAAA,IAAW,IAAA,CAAK,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACzC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,sFAAA;AAAA,QACT,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,SAAS;AAAA,OAChC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,KAAA,CAAM,MAAA,EAAQ;AAChC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,gFAAA;AAAA,QACT,IAAA,EAAM,CAAC,OAAA,EAAS,IAAA,EAAM,SAAS;AAAA,OAChC,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAQA,SAAS,0BAAA,CAA2B,OAAkB,GAAA,EAAsB;AAC1E,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AACpD,EAAA,IAAI,CAAC,KAAA,CAAM,MAAA,IAAU,WAAA,CAAY,SAAS,qBAAA,EAAuB;AAC/D,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,CAAA,uDAAA,EAAqD,WAAW,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,sBAAA,CAAA;AAAA,MACtH,IAAA,EAAM,CAAC,OAAO;AAAA,KACf,CAAA;AAAA,EACH;AACA,EAAA,KAAA,MAAW,CAAC,UAAUA,MAAK,CAAA,IAAA,CAAM,MAAM,OAAA,IAAW,EAAC,EAAG,OAAA,EAAQ,EAAG;AAC/D,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,KAAA,EAAOA,MAAK,CAAA;AACzC,IAAA,IAAI,IAAA,CAAK,SAAS,qBAAA,EAAuB;AACvC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,oBAAA,EAAuB,IAAI,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,yDAAA,CAAA;AAAA,QACjF,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,OAC3B,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AACnD,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,UAAA,CAAW,MAAA,GAAS,qBAAA,EAAuB;AAC7D,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,0BAAA,EAA6B,UAAU,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,4DAAA,CAAA;AAAA,QAC7F,IAAA,EAAM,CAAC,OAAA,EAAS,IAAI;AAAA,OACrB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAEnD,IAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA,CAAA;AAC7B,IAAA,IAAI,MAAA,CAAO,SAAS,qBAAA,EAAuB;AACzC,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,8BAAA,EAAiC,MAAM,CAAA,qBAAA,EAAwB,qBAAqB,CAAA,qDAAA,CAAA;AAAA,QAC7F,IAAA,EAAM,CAAC,SAAA,EAAW,IAAI;AAAA,OACvB,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAGA,IAAM,WAAA,GAA4G;AAAA,EAChH,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,UAAA;AAAA,EACb,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEO,IAAM,eAAA,GAAkB,CAAC,IAAA,KAA6B,WAAA,CAAY,IAAI,CAAA;AAE7E,SAAS,qBAAA,CAAsB,OAAkB,GAAA,EAAsB;AACrE,EAAA,IAAI,MAAM,MAAA,EAAQ;AAClB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACvC,EAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,MAAA,EAAQ,OAAO,CAAA,EAAY;AAC7C,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,QAAA,GAAW,IAAI,CAAA;AACvC,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,KAAA,MAAW,MAAA,IAAU,iBAAA,CAAkB,SAAA,CAAU,GAAG,CAAA,EAAG;AACrD,MAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA,EAAG;AACjC,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,qCAAqC,MAAM,CAAA,CAAA,CAAA;AAAA,UACpD,IAAA,EAAM,CAAC,UAAA,EAAY,IAAI;AAAA,SACxB,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,aAAA,CAAc,SAAA,CAAU,GAAA,EAAK,CAAC,IAAA,KAAS;AACrC,MAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC7B,MAAA,MAAM,QAAQ,mBAAA,CAAoB,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,OAAO,OAAO,CAAA;AAChE,MAAA,IAAI,KAAA,EAAO,GAAA,CAAI,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,CAAC,UAAA,EAAY,IAAI,GAAG,CAAA;AAAA,IACtF,CAAC,CAAA;AAAA,EACH;AACF;AAOA,SAAS,mBAAA,CACP,IAAA,EACA,KAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,UAAU,CAAC,OAAA,KACf,OAAA,CAAQ,IAAA,KAAS,WAAY,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,GAAI,YAAY,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,CAAG,IAAI,IAAI,IAAA,GAAQ,IAAA;AAE1G,EAAA,IAAI,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,KAAA,CAAM,SAAS,QAAA,EAAU;AACrD,IAAA,MAAM,SAAA,GAAY,QAAQ,IAAI,CAAA;AAC9B,IAAA,MAAM,UAAA,GAAa,QAAQ,KAAK,CAAA;AAChC,IAAA,IAAI,SAAA,IAAa,UAAA,IAAc,SAAA,KAAc,UAAA,EAAY;AACvD,MAAA,OAAO,oBAAoB,IAAA,CAAK,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAK,IAAI,CAAA,CAAG,IAAI,CAAA,QAAA,EAAW,MAAM,IAAI,CAAA,GAAA,EAAM,QAAQ,KAAA,CAAM,IAAI,EAAG,IAAI,CAAA,2BAAA,CAAA;AAAA,IACxH;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,KAAK,IAAA,KAAS,QAAA,GAAW,OAAO,KAAA,CAAM,IAAA,KAAS,WAAW,KAAA,GAAQ,IAAA;AACjF,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,KAAS,SAAA,GAAY,OAAO,KAAA,CAAM,IAAA,KAAS,YAAY,KAAA,GAAQ,IAAA;AACpF,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,WAAW,OAAA,CAAQ,KAAA,KAAU,MAAM,OAAO,IAAA;AAC1D,EAAA,MAAM,WAAA,GAAc,QAAQ,MAAM,CAAA;AAClC,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAKzB,EAAA,IAAI,OAAO,OAAA,CAAQ,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,OAAO,OAAA,CAAQ,KAAA,KAAU,WAAW,SAAA,GAAY,SAAA;AACrE,EAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,IAAA,OAAO,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAI,CAAA,GAAA,EAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,CAAG,IAAI,CAAA,SAAA,EAAY,OAAO,OAAA,CAAQ,KAAK,CAAA,kCAAA,CAAA;AAAA,EACxG;AACA,EAAA,OAAO,IAAA;AACT;;;ACrUO,IAAM,yBAAA,GAA4B,CAAC,QAAA,EAAU,QAAA,EAAU,UAAU,QAAQ,CAAA;AAMhF,IAAM,kBAAkB,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,UAAU,OAAO,CAAA;AAc/D,SAAS,mBAAmB,UAAA,EAA2C;AAC5E,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,aAAA,CAAc,UAAA,CAAW,SAAS,CAAC,CAAA;AAClE,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,gBAAA,CAAiB,UAAA,CAAW,SAAS,CAAC,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,aAAa,UAAU,CAAA;AAEtC,EAAA,MAAM,QAAQ,MAAA,CAAO,GAAA;AAAA,IACnB,CAAC,UAAU,CAAA,YAAA,EAAe,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,CAAA,yBAAA;AAAA,GAClE;AACA,EAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,CAAC,UAAU,gBAAA,CAAiB,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC1E,EAAA,MAAM,SAAS,MAAA,CAAO,GAAA;AAAA,IACpB,CAAC,KAAA,KACC,CAAA,MAAA,EAAS,yBAAA,CAA0B,KAAK,IAAI,CAAC,CAAA,IAAA,EAAO,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,OAAO,IAAI,CAAA;AAAA,GACzG;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,EAAO,GAAG,QAAA,EAAU,CAAA,sBAAA,EAAyB,MAAM,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,GAAG,MAAM,CAAA;AACxF;AAOO,SAAS,oBAAA,CAAqB,YAAoB,MAAA,EAAqC;AAC5F,EAAA,MAAM,MAAA,GAAS,gBAAgB,UAAU,CAAA;AACzC,EAAA,OAAO,MAAA,CAAO,OAAA;AAAA,IAAQ,CAAC,UACrB,eAAA,CAAgB,GAAA;AAAA,MACd,CAAC,MAAA,KAAW,CAAA,sBAAA,EAAyB,eAAA,CAAgB,WAAiB,KAAA,EAAO,MAAM,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA;AAAA;AAC9H,GACF;AACF;AAEA,SAAS,gBAAA,CAAiB,QAAgB,KAAA,EAA4B;AACpE,EAAA,MAAM,YAAY,CAAA,EAAG,MAAM,IAAI,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAC3D,EAAA,MAAMG,WAAAA,GAAa,CAAC,MAAA,KAAmB,eAAA,CAAgB,WAAiB,KAAA,CAAM,KAAA,EAAO,MAAM,CAAC,CAAA;AAC5F,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,GAAA,CAAI,CAAC,MAAA,KAAW,CAAA,sBAAA,EAAyBA,WAAAA,CAAW,MAAM,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,CAAE,CAAA;AAChH,EAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAAA,IACzB,OAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,MAAM,MAAM,CAAA,KAAM,CAAC,IAAA,EAAM,MAAA,CAAO,IAAI,CAAC;AAAA,GACjF;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,EAAU,IAAA;AAC7B,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,cAAA,EAAiBA,WAAAA,CAAW,MAAM,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,mBAAA,EAAsB,gBAAA,CAAiB,IAAA,CAAK,GAAA,EAAK,WAAW,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACrI;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,EAAU,KAAA;AAC9B,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,KAAA,CAAM,GAAA,EAAK,WAAW,CAAA;AACzD,IAAA,UAAA,CAAW,IAAA,CAAK,iBAAiBA,WAAAA,CAAW,QAAQ,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAA,CAAG,CAAA;AAC5G,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,CAAA,cAAA,EAAiBA,YAAW,QAAQ,CAAC,OAAO,SAAS,CAAA,mBAAA,EAAsB,SAAS,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAA;AAAA,KAChH;AACA,IAAA,UAAA,CAAW,IAAA,CAAK,iBAAiBA,WAAAA,CAAW,QAAQ,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EACzG;AACA,EAAA,OAAO,UAAA;AACT;AAEO,IAAM,YAAA,GAAe,CAAC,UAAA,KAC3B,UAAA,CAAW,MAAA,CAAO,OAAO,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,MAAM,CAAA;ACzDnD,IAAM,SAAA,GAAyD;AAAA,EAC7D,IAAA,EAAM,CAAC,IAAA,KAASC,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,IAAA,EAAM,CAAC,IAAA,KAASC,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,OAAA,EAAS,CAAC,IAAA,KAASC,cAAA,CAAQ,IAAI,CAAA;AAAA;AAAA;AAAA,EAG/B,MAAA,EAAQ,CAAC,IAAA,KAASC,aAAA,CAAO,MAAM,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EACjD,OAAA,EAAS,CAAC,IAAA,KAASC,cAAA,CAAQ,IAAI,CAAA;AAAA,EAC/B,MAAA,EAAQ,CAAC,IAAA,KAASC,sBAAA,CAAgB,IAAI,CAAA;AAAA,EACtC,OAAA,EAAS,CAAC,IAAA,KAASC,cAAA,CAAQ,IAAI,CAAA;AAAA,EAC/B,WAAA,EAAa,CAAC,IAAA,KAASC,gBAAA,CAAU,MAAM,EAAE,YAAA,EAAc,MAAM,CAAA;AAAA,EAC7D,IAAA,EAAM,CAAC,IAAA,KAASC,WAAA,CAAK,IAAI,CAAA;AAAA,EACzB,KAAA,EAAO,CAAC,IAAA,KAASC,YAAA,CAAM,IAAI;AAC7B,CAAA;AAEO,SAAS,WAAA,CAAY,MAAc,UAAA,EAAuC;AAC/E,EAAA,IAAI,MAAA,GAAS,SAAA,CAAU,UAAA,CAAW,IAAI,EAAE,IAAI,CAAA;AAC5C,EAAA,IAAI,UAAA,CAAW,WAAA,EAAa,MAAA,GAAS,MAAA,CAAO,UAAA,EAAW;AACvD,EAAA,IAAI,UAAA,CAAW,aAAa,KAAA,IAAS,CAAC,WAAW,WAAA,EAAa,MAAA,GAAS,OAAO,OAAA,EAAQ;AACtF,EAAA,IAAI,WAAW,MAAA,IAAU,CAAC,WAAW,WAAA,EAAa,MAAA,GAAS,OAAO,MAAA,EAAO;AACzE,EAAA,IAAI,UAAA,CAAW,YAAY,MAAA,EAAW;AACpC,IAAA,MAAM,QAAQ,UAAA,CAAW,OAAA;AAGzB,IAAA,MAAA,GAAS,MAAA,CAAO,OAAA;AAAA,MACd,OAAO,KAAA,KAAU,QAAA,IAAY,iBAAA,CAAkB,KAAA,EAAO,UAAA,CAAW,IAAI,CAAA,GAAIZ,cAAA,CAAI,GAAA,CAAI,KAAK,CAAA,GAAI;AAAA,KAC5F;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;AClCA,IAAM,iBAAA,GAAoB,SAAA;AAQnB,SAAS,qBAAqB,UAAA,EAAkD;AACrF,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACrD,EAAA,MAAM,MAAA,GAASa,gBAAS,UAAU,CAAA;AAClC,EAAA,MAAM,OAAA,GAAmC,EAAE,CAAC,iBAAiB,GAAG,MAAA,EAAO;AACvE,EAAA,MAAM,SAAoD,EAAC;AAC3D,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqC;AAEvD,EAAA,KAAA,MAAW,KAAA,IAAS,mBAAA,CAAoB,YAAA,CAAa,UAAU,CAAC,CAAA,EAAG;AACjE,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,MAAA,EAAQ,KAAA,EAAO,KAAK,CAAA;AACpD,IAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,YAAuC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA;AAGvB,IAAA,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,YAAA;AAAA,EACxB;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAW;AACvC;AAEA,SAAS,UAAA,CACP,MAAA,EACA,KAAA,EACA,KAAA,EACA;AACA,EAAA,MAAM,UAAU,MAAA,CAAO,WAAA;AAAA,IACrB,OAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,EAAE,EAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,MAAM,CAAC,IAAA,EAAM,YAAY,IAAA,EAAM,MAAM,CAAC,CAAC;AAAA,GAC/F;AAEA,EAAA,MAAM,eAAe,MAAA,CAAO,KAAA,CAAM,MAAM,KAAA,EAAO,OAAA,EAAkB,CAAC,IAAA,KAAkC;AAAA,IAClG,GAAG,YAAA,CAAa,KAAA,EAAO,IAAI,CAAA;AAAA,IAC3B,GAAG,gBAAA,CAAiB,KAAA,EAAO,IAAA,EAAM,KAAK;AAAA,GACvC,CAAA;AAGD,EAAA,OAAO,aAAa,SAAA,EAAU;AAChC;AAEA,SAAS,YAAA,CAAa,OAAkB,IAAA,EAA+B;AACrE,EAAA,OAAA,CAAQ,MAAM,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,UAAA,KAAe;AAC/C,IAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,KAAA,EAAO,UAAU,CAAA;AAC9C,IAAA,MAAM,UAAU,UAAA,CAAW,MAAA,GAASC,mBAAY,IAAI,CAAA,GAAIf,aAAM,IAAI,CAAA;AAClE,IAAA,MAAM,OAAA,GAAU,WAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,IAAA,CAAK,MAAM,CAAC,CAAA;AAC/D,IAAA,OAAO,OAAA,CAAQ,EAAA,CAAG,GAAI,OAA+B,CAAA;AAAA,EACvD,CAAC,CAAA;AACH;AAEA,SAAS,gBAAA,CACP,KAAA,EACA,IAAA,EACA,KAAA,EACA;AACA,EAAA,OAAO,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,CACpC,OAAO,CAAC,GAAG,IAAI,CAAA,KAAM,KAAK,OAAO,CAAA,CACjC,IAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AAGrB,IAAA,MAAM,MAAA,GAAS,KAAK,EAAA,KAAO,KAAA,CAAM,QAAQ,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACjE,IAAA,MAAM,YAAA,GAAe,MAAA,IAAU,oBAAA,CAAqB,MAAM,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,YAAA,EAAc;AAC5B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,eAAA,EAAkB,IAAI,CAAA,MAAA,EAAS,MAAM,KAAK,CAAA,uBAAA,EAA0B,IAAA,CAAK,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,IAC7G;AACA,IAAA,OAAOgB,iBAAA,CAAW;AAAA,MAChB,IAAA,EAAM,cAAA,CAAe,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,MACtC,OAAA,EAAS,CAAC,IAAA,CAAK,IAAA,CAAK,EAAE,CAAC,CAAA;AAAA,MACvB,cAAA,EAAgB,CAAC,YAAY;AAAA,KAC9B,CAAA;AAAA,EACH,CAAC,CAAA;AACL;AAEA,SAAS,qBAAqB,MAAA,EAA0C;AACtE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA;AAAA,IACpC,CAAC,KAAA,KAAU,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,SAAA,IAAc;AAAA,GAC1E;AACA,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAY,OAAgC,OAAO,CAAA;AAC1E;AAGA,SAAS,oBAAoB,MAAA,EAA2C;AACtE,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AACrE,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAE/B,EAAA,OAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,QAAQ,CAAC,GAAG,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAA,MAAO,CAAC,KAAA,KAC5C,eAAA,CAAgB,KAAK,CAAA,CAAE,MAAM,CAAC,MAAA,KAAW,MAAA,CAAO,GAAA,CAAI,MAAM,CAAA,IAAK,CAAC,SAAA,CAAU,GAAA,CAAI,MAAM,CAAC;AAAA,KACvF;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,mCAAA,EAAsC,CAAC,GAAG,SAAA,CAAU,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACvG;AACA,IAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA,MAAA,CAAO,GAAA,CAAI,MAAM,KAAK,CAAA;AACtB,MAAA,SAAA,CAAU,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,IAC9B;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,eAAA,GAAkB,CAAC,KAAA,KACvB,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,CAE5B,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,OAAA,IAAW,CAAC,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA,IAAK,IAAA,CAAK,EAAA,KAAO,KAAA,CAAM,KAAK,CAAA,CAC1F,GAAA,CAAI,CAAC,IAAA,KAAS,KAAK,EAAE,CAAA;;;ACtGnB,SAAS,gBAAA,CAAiB,YAAiCC,WAAAA,EAAwC;AACxG,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAW,GAAI,qBAAqB,UAAU,CAAA;AAC/D,EAAA,OAAOC,uBAAA,CAAoB,OAAA,EAASD,WAAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAC9D;AAEO,IAAM,aAAA,GAAgB,CAAC,SAAA,KAC5BC,uBAAA,CAAoB,EAAC,EAAG,MAAA,EAAW,CAAC,aAAA,CAAc,SAAS,CAAC,CAAC,CAAA;AAE/D,IAAM,wBAAA,GAA4BA,uBAAA,CAAoB,EAAE,CAAA,CAA0B,OAAA;AAS3E,SAAS,kBAAkB,QAAA,EAAgD;AAChF,EAAA,MAAM,QAAA,GAAWC,iBAAa,QAAmC,CAAA;AACjE,EAAA,MAAM,UAAW,QAAA,CAAmC,OAAA;AACpD,EAAA,IAAI,YAAY,wBAAA,EAA0B;AACxC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,iBAAA,EAAoB,MAAA,CAAO,OAAO,CAAC,qDAAqD,wBAAwB,CAAA,uCAAA;AAAA,KAClH;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,cAAA,CAAe,UAA6B,OAAA,EAA+C;AACzG,EAAA,qBAAA,CAAsB,UAAU,OAAO,CAAA;AACvC,EAAA,OAAOC,qBAAA,CAAkB,UAAmB,OAAgB,CAAA;AAC9D;AAUA,SAAS,qBAAA,CAAsB,UAA6B,OAAA,EAAkC;AAC5F,EAAA,MAAM,cAAA,GAAiB,SAAS,QAAQ,CAAA;AACxC,EAAA,MAAM,aAAA,GAAgB,SAAS,OAAO,CAAA;AAEtC,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAG,cAAA,CAAe,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1F,EAAA,MAAM,WAAA,GAAc,CAAC,GAAG,aAAA,CAAc,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,cAAA,CAAe,GAAA,CAAI,IAAI,CAAC,CAAA;AACxF,EAAA,IAAI,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,gCAAA,EAAmC,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,eAAA,EAAkB,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,yEAAA;AAAA,KACrG;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,eAAe,CAAA,IAAK,cAAA,EAAgB;AACpD,IAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,eAAe,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,cAAA,CAAe,GAAA,CAAI,MAAM,CAAC,CAAA;AACnF,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,cAAc,CAAA,CAAE,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,eAAA,CAAgB,GAAA,CAAI,MAAM,CAAC,CAAA;AACjF,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,mBAAA,EAAsB,IAAI,CAAA,oBAAA,EAAuB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,eAAA,EAAkB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,mHAAA;AAAA,OACvG;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SAAS,QAAA,EAAuD;AACvE,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,IAAI,GAAA;AAAA,IACT,MAAA,CAAO,OAAO,MAAM,CAAA,CAAE,IAAI,CAAC,KAAA,KAAU,CAAC,CAAA,EAAG,KAAA,CAAM,MAAM,IAAI,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,KAAA,CAAM,OAAO,CAAC,CAAC,CAAC;AAAA,GAC7G;AACF;AAeO,SAAS,mBAAA,CAAoB,UAA6B,UAAA,EAAiD;AAChH,EAAA,MAAM,QAAA,GAAW,gBAAgB,QAAQ,CAAA;AACzC,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AACrD,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB,CAAA,EAAG,eAAA,CAAgB,UAAU,CAAC,CAAA,CAAA,EAAI,eAAA,CAAgB,KAAK,CAAC,CAAA,CAAA;AAE7F,EAAA,KAAA,MAAW,KAAA,IAAS,YAAA,CAAa,UAAU,CAAA,EAAG;AAC5C,IAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,QAAA,EAAU,UAAA,EAAY,MAAM,KAAK,CAAA;AACjE,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAChE,MAAA,IAAI,OAAO,YAAA,EAAc;AACvB,QAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA;AAChE,QAAA,IAAI,cAAA,IAAkB,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,EAAG;AAIjD,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,IAAI,KAAA,CAAM,KAAK,IAAI,IAAI,CAAA,yBAAA,EAA4B,OAAO,YAAY,CAAA,+FAAA;AAAA,WACxE;AAAA,QACF;AACA,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,UAAA,CAAW,IAAA;AAAA,YACT,CAAA,YAAA,EAAe,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,CAAA,eAAA,EAAkB,eAAA,CAAgB,MAAA,CAAO,YAAY,CAAC,CAAA,IAAA,EAAO,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,WACzH;AACA,UAAA,OAAO,aAAA,CAAc,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA;AAChD,UAAA,aAAA,CAAc,QAAQ,IAAI,CAAA,GAAI,EAAE,GAAG,gBAAgB,IAAA,EAAK;AAAA,QAC1D,CAAA,MAAA,IAAW,CAAC,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA,EAAG;AAKvC,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,IAAI,KAAA,CAAM,KAAK,IAAI,IAAI,CAAA,yBAAA,EAA4B,OAAO,YAAY,CAAA,mFAAA;AAAA,WACxE;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA,GAAO,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,GAAI,IAAA;AACpD,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,OAAA,GAAU,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AAC1C,QAAA,MAAM,UAAA,GAAa,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AAC1C,QAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,UAAA,EAAY;AAC1C,UAAA,UAAA,CAAW,IAAA;AAAA,YACT,eAAe,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,iBAAiB,eAAA,CAAgB,IAAI,CAAC,CAAA,MAAA,EAAS,UAAU,CAAA,OAAA,EAAU,eAAA,CAAgB,IAAI,CAAC,KAAK,UAAU,CAAA;AAAA,WAC9I;AACA,UAAA,OAAA,CAAQ,IAAA,GAAO,UAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,YAAY,QAAA,EAAS;AAChC;AAEA,SAAS,SAAA,CAAU,QAAA,EAA6B,MAAA,EAAgB,KAAA,EAA0C;AACxG,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,KAAK,CAAA;AAC9F;AAGO,SAAS,kBAAA,CAAmB,UAA6B,MAAA,EAA0B;AACxF,EAAA,MAAM,MAAA,GAAU,QAAA,CAAwD,MAAA,IAAU,EAAC;AACnF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CACxB,OAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,MAAM,CAAA,CACzC,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAC9B;;;AC3IA,eAAsB,aAAA,CAAc;AAAA,EAClC,UAAA;AAAA,EACA;AACF,CAAA,EAG8B;AAC5B,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,UAAA,CAAW,SAAS,CAAA;AAGjD,EAAA,MAAM,WAAW,gBAAA,GAAmB,iBAAA,CAAkB,gBAAgB,CAAA,GAAI,aAAA,CAAc,WAAW,SAAS,CAAA;AAC5G,EAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,QAAA,EAAU,UAAU,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,UAAA,EAAY,UAAA,CAAW,QAAQ,CAAC,CAAA;AAClE,EAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAAe,KAAA,CAAM,UAAU,QAAQ,CAAA;AAGzD,EAAA,MAAM,cAAc,oBAAA,CAAqB,MAAA,EAAQ,kBAAA,CAAmB,QAAA,EAAU,MAAM,CAAC,CAAA;AAErF,EAAA,MAAM,UAAA,GAAkC;AAAA,IACtC,GAAG,WAAA,CAAY,GAAA,CAAI,CAACnB,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IAChE,GAAG,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,MAAA,EAAiB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IACjE,GAAG,GAAA,CAAI,GAAA,CAAI,CAACA,UAAS,EAAE,IAAA,EAAM,KAAA,EAAgB,GAAA,EAAKA,IAAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,EAAE,GAAE,CAAE,CAAA;AAAA,IAC7E,GAAG,kBAAA,CAAmB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA;AAAA;AAAA;AAAA,IAInF,GAAG,mBAAA,CAAoB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE,CAAA;AAAA,IACpF,GAAG,wBAAA,CAAyB,UAAU,CAAA,CAAE,GAAA,CAAI,CAACA,IAAAA,MAAS,EAAE,IAAA,EAAM,UAAA,EAAqB,GAAA,EAAAA,IAAAA,EAAI,CAAE;AAAA,GAC3F;AACA,EAAA,OAAO,EAAE,SAAA,EAAW,UAAA,CAAW,SAAA,EAAW,MAAA,EAAQ,YAAY,QAAA,EAAS;AACzE;AAGO,IAAM,mBAAmB,CAAC,UAAA,KAC/B,aAAA,CAAc,EAAE,YAAY,CAAA;AAE9B,IAAM,UAAA,GAAa,CAAC,QAAA,KACjB,QAAA,CAA6B,EAAA;ACnEzB,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC5E,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACpE,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,CAC5D,MAAA,CAAO,CAAC,GAAG,UAAU,CAAA,KAAM,UAAA,KAAe,MAAS,CAAA,CACnD,IAAA,CAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,KAAO,CAAA,GAAI,IAAI,EAAA,GAAK,CAAE,EACnC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,UAAU,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,GAAG,CAAC,IAAI,UAAA,CAAW,UAAU,CAAC,CAAA,CAAE,CAAA;AAChF,EAAA,OAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAC9B;AAGA,SAAS,YAAY,KAAA,EAA2B;AAC9C,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,IAAA;AAC1B,EAAA,IAAI,KAAA,CAAM,QAAQ,KAAK,CAAA,SAAU,KAAA,CAAM,MAAA,KAAW,IAAI,IAAA,GAAQ,KAAA;AAC9D,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,MAAA,CAAO,KAAK,KAAK,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACzE,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,eAAe,KAAA,EAA6B;AACnD,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,WAAA,EAAa,MAAM,WAAA,IAAe,IAAA;AAAA,IAClC,OAAA,EAAU,MAAM,OAAA,IAAW,IAAA;AAAA,IAC3B,MAAA,EAAQ,MAAM,MAAA,IAAU,IAAA;AAAA,IACxB,KAAA,EAAO,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AAAA,IAC9B,OAAA,EAAS,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAAA,IAClC,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,KAAA,CAAM,QAAA,EAAU,IAAA,EAAM,MAAA,IAAU,IAAA;AAAA,MACtC,KAAA,EAAO,KAAA,CAAM,QAAA,EAAU,KAAA,EAAO,MAAA,IAAU;AAAA,KAC1C;AAAA,IACA,OAAA,EAAS,WAAA;AAAA,MACP,MAAA,CAAO,WAAA;AAAA,QACL,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AAAA,UAC1D,IAAA;AAAA,UACA;AAAA,YACE,WAAA,EAAa,OAAO,WAAA,IAAe,IAAA;AAAA,YACnC,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,MAAA,IAAU,IAAA;AAAA,YACrC,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA;AAAA,YACjC,SAAA,EAAW,YAAY,MAAA,CAAO,SAAA,EAAW,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,YACrE,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,YACnC,KAAA,EAAQ,OAAO,KAAA,IAAS;AAAA;AAC1B,SACD;AAAA;AACH;AACF,GACF;AACF;AASA,SAAS,sBAAsB,YAAA,EAAgD;AAC7E,EAAA,MAAM,EAAE,WAAA,EAAa,YAAA,EAAc,QAAA,KAAa,YAAA,CAAa,KAAA;AAC7D,EAAA,MAAM,OAAA,GACJ,MAAA,CAAO,IAAA,CAAK,WAAW,EAAE,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,KAAW,CAAA,IAAK,YAAA,CAAa,KAAK,MAAA,KAAW,CAAA;AAC9G,EAAA,IAAI,SAAS,OAAO,IAAA;AAGpB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,aAAa,MAAA,CAAO,WAAA;AAAA,QAClB,MAAA,CAAO,QAAQ,WAAW,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM;AAAA,UAC9C,GAAA;AAAA,UACA;AAAA,YACE,GAAI,IAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,GAAA,CAAI,WAAA,EAAY,GAAI,EAAC;AAAA,YACxE,SAAS,GAAA,CAAI,OAAA;AAAA,YACb,UAAU,CAAC,GAAG,GAAA,CAAI,QAAQ,EAAE,IAAA,EAAK;AAAA,YACjC,QAAQ,CAAC,GAAG,GAAA,CAAI,MAAM,EAAE,IAAA;AAAK;AAC/B,SACD;AAAA,OACH;AAAA,MACA,cAAc,MAAA,CAAO,WAAA;AAAA,QACnB,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM;AAAA,UAC3C,GAAA;AAAA,UACA,GAAA,CAAI,gBAAgB,MAAA,GAAY,EAAE,aAAa,GAAA,CAAI,WAAA,KAAgB;AAAC,SACrE;AAAA;AACH,KACF;AAAA,IACA,MAAM,CAAC,GAAG,YAAA,CAAa,IAAI,EAAE,IAAA;AAAK,GACpC;AACF;AAEO,SAAS,uBAAuB,UAAA,EAA4C;AACjF,EAAA,OAAO;AAAA,IACL,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,YAAA,EAAc,qBAAA,CAAsB,UAAA,CAAW,YAAY,CAAA;AAAA,IAC3D,MAAA,EAAQ,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,cAAc;AAAA,GAC9C;AACF;AAEO,SAAS,sBAAsB,UAAA,EAAyC;AAC7E,EAAA,OAAOoB,iBAAA,CAAW,QAAQ,CAAA,CACvB,MAAA,CAAO,WAAW,CAAA,CAClB,MAAA,CAAO,UAAA,CAAW,sBAAA,CAAuB,UAAU,CAAC,CAAC,CAAA,CACrD,OAAO,KAAK,CAAA;AACjB;ACzFO,IAAM,kBAAA,GAAqB,cAAA;AAElC,IAAM,mBAAA,GAAsBtB,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,KAAA;AAAA,EACpD,kBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,2BAAA,GAA8B,EAAA;AACpC,IAAM,4BAAA,GAA+B,GAAA;AAErC,IAAM,qCAAA,GAAwCA,MAAE,MAAA,CAAO;AAAA,EACrD,aAAaA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA;AACnC,CAAC,CAAA;AAED,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EAC1C,aAAaA,KAAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,OAAA,EAASA,KAAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,KAAK,CAAA;AAAA;AAAA,EAElC,UAAUA,KAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA,EAEjD,QAAQA,KAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,EAAE;AACjD,CAAC,CAAA;AAWM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE7C,WAAA,EAAaA,MAAE,MAAA,CAAO,mBAAA,EAAqB,0BAA0B,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA;AAAA,EAEjF,YAAA,EAAcA,MAAE,MAAA,CAAO,mBAAA,EAAqB,qCAAqC,CAAA,CAAE,OAAA,CAAQ,EAAE;AAC/F,CAAC,CAAA,CAAE,WAAA,CAAY,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC7B,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAC9C,EAAA,MAAM,iBAAiB,IAAI,GAAA,CAAI,OAAO,IAAA,CAAK,KAAA,CAAM,YAAY,CAAC,CAAA;AAE9D,EAAA,IAAI,QAAA,CAAS,SAAS,2BAAA,EAA6B;AACjD,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,WAAW,2BAA2B,CAAA,6BAAA,CAAA;AAAA,MAC/C,IAAA,EAAM,CAAC,aAAa;AAAA,KACrB,CAAA;AAAA,EACH;AACA,EAAA,IAAI,cAAA,CAAe,OAAO,4BAAA,EAA8B;AACtD,IAAA,GAAA,CAAI,QAAA,CAAS;AAAA,MACX,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,WAAW,4BAA4B,CAAA,yBAAA,CAAA;AAAA,MAChD,IAAA,EAAM,CAAC,cAAc;AAAA,KACtB,CAAA;AAAA,EACH;AAIA,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA,EAAG;AAC3B,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,QAAQ,GAAG,CAAA,6CAAA,CAAA;AAAA,QACpB,IAAA,EAAM,CAAC,aAAA,EAAe,GAAG;AAAA,OAC1B,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,QAAQ,CAAA;AACnC,EAAA,KAAA,MAAW,CAAC,SAAS,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,EAAG;AACrE,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,IAAA,KAAA,MAAW,SAAA,IAAa,WAAW,QAAA,EAAU;AAC3C,MAAA,IAAI,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA,EAAG;AAC/B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,SAAA,EAAY,SAAS,CAAA,4BAAA,CAAA;AAAA,UAC9C,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,UAAU;AAAA,SAC1C,CAAA;AAAA,MACH;AACA,MAAA,YAAA,CAAa,IAAI,SAAS,CAAA;AAC1B,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,SAAS,CAAA,EAAG;AAC9B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,yBAAA,EAA4B,SAAS,CAAA,CAAA,CAAA;AAAA,UAC9D,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,UAAU;AAAA,SAC1C,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,IAAA,KAAA,MAAW,OAAA,IAAW,WAAW,MAAA,EAAQ;AACvC,MAAA,IAAI,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA,EAAG;AAC3B,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,SAAA,EAAY,OAAO,CAAA,0BAAA,CAAA;AAAA,UAC5C,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,QAAQ;AAAA,SACxC,CAAA;AAAA,MACH;AACA,MAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AACtB,MAAA,IAAI,CAAC,cAAA,CAAe,GAAA,CAAI,OAAO,CAAA,EAAG;AAChC,QAAA,GAAA,CAAI,QAAA,CAAS;AAAA,UACX,IAAA,EAAM,QAAA;AAAA,UACN,OAAA,EAAS,CAAA,MAAA,EAAS,OAAO,CAAA,6BAAA,EAAgC,OAAO,CAAA,CAAA,CAAA;AAAA,UAChE,IAAA,EAAM,CAAC,aAAA,EAAe,OAAA,EAAS,QAAQ;AAAA,SACxC,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAKA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAiC;AACnD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAa,IAAA,KAAoC;AAC9D,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA,KAAM,QAAQ,OAAO,IAAA;AACtC,IAAA,IAAI,KAAA,CAAM,IAAI,GAAG,CAAA,KAAM,YAAY,OAAO,CAAC,GAAG,IAAA,EAAM,GAAG,CAAA;AACvD,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,UAAU,CAAA;AACzB,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,WAAA,CAAY,GAAG,CAAA;AACxC,IAAA,KAAA,MAAW,SAAA,IAAa,UAAA,EAAY,QAAA,IAAY,EAAC,EAAG;AAClD,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,SAAS,CAAA,EAAG;AAChC,MAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,EAAW,CAAC,GAAG,IAAA,EAAM,GAAG,CAAC,CAAA;AAC7C,MAAA,IAAI,OAAO,OAAO,KAAA;AAAA,IACpB;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,MAAM,CAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,EAAS,EAAE,CAAA;AAC/B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,GAAA,CAAI,QAAA,CAAS;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,wBAAA,EAA2B,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAAA,QACtD,IAAA,EAAM,CAAC,aAAa;AAAA,OACrB,CAAA;AACD,MAAA;AAAA,IACF;AAAA,EACF;AACF,CAAC,CAAA;AAmBM,IAAM,wBAAA,GAA2B,wBAAA;AAExC,IAAM,mBAAA,GAAsB,GAAA;AAErB,IAAM,uBAAuBA,KAAAA,CACjC,KAAA;AAAA,EACCA,KAAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,KAAA;AAAA,IACxB,wBAAA;AAAA,IACA;AAAA;AAEJ,CAAA,CACC,GAAA,CAAI,mBAAmB,CAAA,CACvB,OAAA,CAAQ,EAAE,CAAA;AAQN,SAAS,mBAAmB,GAAA,EAAkC;AACnE,EAAA,OAAO,IAAI,UAAA,CAAW,MAAM,IACxB,EAAE,KAAA,EAAO,OAAO,GAAA,EAAK,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,EAAE,GAC9C,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAK,GAAA,EAAI;AAChC;AAOO,SAAS,sBAAA,CAAuB;AAAA,EACrC,IAAA;AAAA,EACA;AACF,CAAA,EAGa;AACX,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,KAAA,EAAO,WAAA,IAAe,EAAE,CAAC,CAAA;AAC9D,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,IAAA,CAAK,IAAI,GAAG,CAAA,SAAU,IAAA,CAAK,CAAA,KAAA,EAAQ,GAAG,CAAA,0BAAA,CAA4B,CAAA;AACtE,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,MAAM,MAAA,GAAS,mBAAmB,GAAG,CAAA;AACrC,IAAA,IAAI,OAAO,KAAA,KAAU,MAAA,IAAU,SAAS,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,EAAG;AACvD,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,GAAG,CAAA,iDAAA,CAA8C,CAAA;AAAA,IACvE;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;AC7MA,IAAM,kBAAA,GAA4C,EAAE,KAAA,EAAO,EAAE,WAAA,EAAa,EAAC,EAAG,YAAA,EAAc,EAAC,EAAE,EAAG,IAAA,EAAM,EAAC,EAAE;AAGpG,SAAS,uBAAuB,YAAA,EAAkD;AACvF,EAAA,uBAAO,IAAI,GAAA,CAAY,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,YAAY,CAAA,EAAG,GAAG,YAAA,CAAa,IAAI,CAAC,CAAA;AAChG;AAOO,SAAS,wBAAA,CACd,OACA,MAAA,EACqB;AACrB,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,mBAAmB,4BAA4B,CAAA;AAEjF,EAAA,MAAM,SAAA,GAAa,KAAA,CAAM,CAAC,CAAA,CAAqB,KAAA,CAAM,SAAA;AACrD,EAAA,IAAI,MAAA,IAAU,MAAA,CAAO,SAAA,KAAc,SAAA,EAAW;AAC5C,IAAA,MAAM,IAAI,mBAAmB,CAAA,WAAA,EAAc,MAAA,CAAO,SAAS,CAAA,kBAAA,EAAqB,SAAS,KAAK,gBAAgB,CAAA;AAAA,EAChH;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,IAAI,KAAA,CAAM,cAAc,SAAA,EAAW;AACjC,MAAA,MAAM,IAAI,mBAAmB,CAAA,WAAA,EAAc,KAAA,CAAM,SAAS,CAAA,kBAAA,EAAqB,SAAS,KAAK,IAAI,CAAA;AAAA,IACnG;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AACrC,IAAA,IAAI,QAAA,EAAU,MAAM,IAAI,kBAAA,CAAmB,CAAA,OAAA,EAAU,MAAM,KAAK,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AAC3G,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,IAAI,CAAA;AAAA,EAC5B;AAIA,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACnD,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACrC,MAAA,IAAI,QAAA,QAAgB,IAAI,kBAAA,CAAmB,WAAW,IAAI,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AACrG,MAAA,WAAA,CAAY,GAAA,CAAI,MAAM,IAAI,CAAA;AAAA,IAC5B;AAAA,EACF;AAEA,EAAA,MAAM,eAAsC,MAAA,EAAQ,YAAA,GAChD,EAAE,KAAA,EAAO,OAAO,YAAA,CAAa,KAAA,IAAS,kBAAA,CAAmB,KAAA,EAAO,MAAM,MAAA,CAAO,YAAA,CAAa,IAAA,IAAQ,IAAG,GACrG,kBAAA;AACJ,EAAA,MAAM,SAAA,GAAY,uBAAuB,EAAE,IAAA,EAAM,aAAa,IAAA,EAAM,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,CAAA;AAC/F,EAAA,IAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,mBAAmB,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG,gBAAgB,CAAA;AAC7F,EAAA,MAAM,SAAS,KAAA,CAAM,GAAA,CAAI,CAAC,EAAE,KAAA,OAAY,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,MAAM,aAAA,CAAc,CAAA,CAAE,KAAK,CAAC,CAAA;AAC5F,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,KAAA,EAAO,KAAK,CAAC,CAAC,CAAA;AAClE,EAAA,kBAAA,CAAmB,OAAO,MAAM,CAAA;AAChC,EAAA,uBAAA,CAAwB,OAAO,MAAM,CAAA;AACrC,EAAA,kBAAA,CAAmB,KAAK,CAAA;AACxB,EAAA,sBAAA,CAAuB,KAAA,EAAO,sBAAA,CAAuB,YAAY,CAAC,CAAA;AAClE,EAAA,OAAO,EAAE,SAAA,EAAW,WAAA,EAAa,QAAQ,WAAA,IAAe,IAAA,EAAM,cAAc,MAAA,EAAO;AACrF;AAQA,SAAS,uBAAA,CAAwB,OAAkC,MAAA,EAA8C;AAC/G,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACtE,MAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,SAAA,IAAa,EAAC,EAAG;AAC1C,QAAA,IAAI,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AAC/B,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA;AACrC,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,MAAM,IAAI,mBAAmB,CAAA,QAAA,EAAW,UAAU,sCAAsC,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AAAA,QAC9G;AACA,QAAA,IAAI,OAAO,MAAA,EAAQ;AAIjB,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,CAAA,QAAA,EAAW,UAAU,CAAA,kCAAA,EAAqC,KAAA,CAAM,KAAK,CAAA,iDAAA,CAAA;AAAA,YACrE;AAAA,WACF;AAAA,QACF;AACA,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,GAAS,KAAA,CAAM,KAAK,CAAA,EAAG,IAAA;AAChD,QAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,WAAW,CAAA;AAChG,QAAA,IAAI,SAAA,IAAa,oBAAoB,eAAA,CAAgB,SAAS,MAAM,eAAA,CAAgB,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC1G,UAAA,MAAM,IAAI,kBAAA;AAAA,YACR,CAAA,QAAA,EAAW,UAAU,CAAA,aAAA,EAAgB,KAAA,CAAM,KAAK,CAAA,GAAA,EAAM,SAAS,CAAA,WAAA,EAAc,KAAA,CAAM,KAAK,CAAA,uBAAA,EAA0B,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAAA,YACvI;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAOA,SAAS,mBAAmB,KAAA,EAAwC;AAKlE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AACrC,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,EAAc,KAAA,EAAe,IAAA,KAAiB;AAC3D,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAC9B,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,IAAI,mBAAmB,CAAA,eAAA,EAAkB,IAAI,MAAM,KAAK,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,IACnG;AACA,IAAA,IAAA,CAAK,IAAI,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACrC,CAAA;AAEA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,CAAM,MAAM,KAAA,EAAO,CAAA,OAAA,EAAU,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AAAA,EACnD;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,IAAI,MAAM,MAAA,EAAQ;AAClB,IAAA,KAAA,CAAM,CAAA,EAAG,MAAM,KAAK,CAAA,KAAA,CAAA,EAAS,kCAAkC,KAAA,CAAM,KAAK,KAAK,IAAI,CAAA;AACnF,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AAChE,MAAA,IAAI,MAAA,CAAO,MAAA,IAAU,CAAC,MAAA,CAAO,WAAA,EAAa;AACxC,QAAA,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,OAAA,CAAA,EAAW,CAAA,+BAAA,EAAkC,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA;AAAA,MACvG;AAAA,IACF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,UAAA,IAAc,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG;AAC5C,MAAA,KAAA,CAAM,SAAA,CAAU,MAAM,KAAA,EAAO,UAAU,GAAG,CAAA,UAAA,EAAa,KAAA,CAAM,KAAK,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA;AAAA,IAC7E;AAAA,EACF;AACF;AAEA,SAAS,kBAAA,CAAmB,OAAkC,MAAA,EAA8C;AAC1G,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,MAAA,CAAO,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA,EAAG;AAC5D,MAAA,IAAI,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA,EAAG;AACnC,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACjC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,mBAAmB,CAAA,MAAA,EAAS,IAAI,+BAA+B,IAAA,CAAK,EAAE,KAAK,IAAI,CAAA;AAAA,MAC3F;AACA,MAAA,IAAI,IAAA,CAAK,OAAA,IAAW,MAAA,CAAO,MAAA,EAAQ;AACjC,QAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,MAAA,EAAS,IAAI,sDAAsD,IAAI,CAAA;AAAA,MACtG;AAMA,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,EAAE,CAAA,EAAG,IAAA;AAC7C,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,WAAW,CAAA;AAChG,MAAA,IAAI,UAAA,IAAc,oBAAoB,eAAA,CAAgB,UAAU,MAAM,eAAA,CAAgB,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAC5G,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,CAAA,MAAA,EAAS,IAAI,CAAA,mBAAA,EAAsB,IAAA,CAAK,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,MAAA,EAAS,IAAA,CAAK,EAAE,CAAA,QAAA,EAAW,gBAAA,CAAiB,IAAI,CAAA,YAAA,CAAA;AAAA,UAC5G;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AASA,SAAS,sBAAA,CAAuB,OAAkC,QAAA,EAAqC;AACrG,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAA,EAAM,IAAK,KAAA,EAAO;AACnC,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,GAAI,KAAA,CAAM,QAAA,EAAU,IAAA,GAAO,sBAAA,CAAuB,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,GAAI,EAAC;AAAA,MAC9E,GAAI,KAAA,CAAM,QAAA,EAAU,KAAA,GAAQ,sBAAA,CAAuB,MAAM,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,GAAI,EAAC;AAAA,MAChF,GAAG,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AAAA,QACxD,GAAI,OAAO,QAAA,GAAW,sBAAA,CAAuB,OAAO,QAAA,CAAS,GAAG,IAAI,EAAC;AAAA,QACrE,GAAG,8BAA8B,MAAM;AAAA,OACxC;AAAA,KACH;AACA,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACtB,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,eAAe,GAAG,CAAA,6GAAA,CAAA;AAAA,UAClB;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;ACrMO,IAAM,qBAAA,GAAwBA,MAAE,YAAA,CAAa;AAAA,EAClD,SAAA,EAAW,eAAA;AAAA,EACX,WAAA,EAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,YAAA,EAAcA,MACX,YAAA,CAAa;AAAA,IACZ,KAAA,EAAO,uBAAuB,QAAA,EAAS;AAAA,IACvC,IAAA,EAAM,qBAAqB,QAAA;AAAS,GACrC,EACA,QAAA;AACL,CAAC,CAAA;;;ACNM,SAAS,cAAA,CAAe,MAAc,QAAA,EAAkC;AAC7E,EAAA,MAAM,SAAS,eAAA,CAAgB,SAAA,CAAU,SAAA,CAAU,IAAA,EAAM,QAAQ,CAAC,CAAA;AAClE,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,MAAM,IAAI,mBAAmB,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAG,IAAI,CAAA;AAClF,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,IAAA,EAAK;AACpC;AAYO,SAAS,uBAAuB,OAAA,EAA2D;AAChG,EAAA,IAAI,MAAA;AACJ,EAAA,MAAM,SAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,0BAAA,CAA2B,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AAC/C,MAAA,IAAI,QAAQ,MAAM,IAAI,kBAAA,CAAmB,iCAAA,EAAmC,OAAO,IAAI,CAAA;AACvF,MAAA,MAAM,MAAA,GAAS,sBAAsB,SAAA,CAAU,SAAA,CAAU,OAAO,IAAA,EAAM,MAAA,CAAO,QAAQ,CAAC,CAAA;AACtF,MAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,MAAM,IAAI,kBAAA,CAAmB,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA;AACzF,MAAA,MAAA,GAAS,MAAA,CAAO,IAAA;AAChB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,KAAK,cAAA,CAAe,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,wBAAA,CAAyB,QAAQ,MAAM,CAAA;AAChD;AAEA,eAAsB,wBAAwB,GAAA,EAAuC;AACnF,EAAA,MAAM,KAAA,GAAQ,MAAM,mBAAA,CAAoB,GAAG,CAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,kBAAA,CAAmB,CAAA,GAAA,EAAM,0BAAA,CAA2B,IAAA,CAAK,GAAG,CAAC,CAAA,UAAA,EAAa,GAAG,CAAA,CAAE,CAAA;AAEjH,EAAA,MAAM,UAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,WAAW,MAAMuB,iBAAA,CAASC,UAAK,GAAA,EAAK,IAAI,GAAG,MAAM,CAAA;AACvD,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,QAAA,EAAU,MAAM,IAAI,yBAAA,EAA2B;AACnE,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,4CAAA,EAA+C,yBAAyB,UAAU,IAAI,CAAA;AAAA,IACrH;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,UAAU,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,UAAA,GAAa,uBAAuB,OAAO,CAAA;AACjD,EAAA,OAAO,EAAE,UAAA,EAAY,WAAA,EAAa,qBAAA,CAAsB,UAAU,GAAG,KAAA,EAAM;AAC7E;AAEA,SAAS,SAAA,CAAU,MAAc,QAAA,EAA2B;AAC1D,EAAA,IAAI;AACF,IAAA,OAAOC,YAAS,QAAQ,CAAA;AAAA,EAC1B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,kBAAA,CAAmB,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,gBAAgB,IAAI,CAAA;AAAA,EAC5F;AACF;AAEA,IAAM,gBAAA,GAAmB,CAAC,IAAA,KACxB,0BAAA,CAA2B,IAAA,CAAK,CAAC,SAAA,KAAcC,YAAA,CAAQ,IAAI,CAAA,KAAM,SAAS,CAAA;AAE5E,eAAe,oBAAoB,GAAA,EAAgC;AACjE,EAAA,MAAM,UAAU,MAAMC,gBAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC1D,EAAA,OAAO,QACJ,MAAA,CAAO,CAAC,UAAU,KAAA,CAAM,MAAA,MAAY,gBAAA,CAAiB,KAAA,CAAM,IAAI,CAAC,EAChE,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,IAAI,EACzB,IAAA,EAAK;AACV;AAEA,SAAS,aAAa,KAAA,EAA2B;AAC/C,EAAA,OAAO,KAAA,CAAM,OACV,GAAA,CAAI,CAAC,UAAW,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG,KAAA,CAAM,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,KAAK,KAAA,CAAM,OAAQ,CAAA,CACpG,IAAA,CAAK,IAAI,CAAA;AACd;AC1EO,IAAM,kBAAA,GAAqB,YAAA;AAClC,IAAM,YAAA,GAAe,MAAA;AACrB,IAAM,gBAAA,GAAmB,cAAA;AAEzB,IAAM,kBAAA,GAAqB3B,MAAE,MAAA,CAAO;AAAA,EAClC,SAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACnC,IAAA,EAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACtB,YAAA,EAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA;AAAA,EAElC,uBAAuBA,KAAAA,CAAE,MAAA,GAAS,MAAA,CAAO,EAAE,EAAE,QAAA,EAAS;AAAA,EACtD,QAAA,EAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA;AAAA,EAE9B,iBAAA,EAAmBA,KAAAA,CAAE,MAAA,EAAO,CAAE,OAAO,EAAE,CAAA;AAAA,EACvC,WAAA,EAAaA,MAAE,OAAA;AACjB,CAAC,CAAA;AAED,IAAM,aAAA,GAAgBA,MAAE,MAAA,CAAO;AAAA,EAC7B,OAAA,EAASA,KAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,SAAA,EAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC3B,OAAA,EAASA,KAAAA,CAAE,KAAA,CAAM,kBAAkB;AACrC,CAAC,CAAA;AAWM,IAAM,YAAA,GAAe,CAAC,SAAA,MAAyC,EAAE,SAAS,CAAA,EAAG,SAAA,EAAW,OAAA,EAAS,EAAC,EAAE,CAAA;AAE3G,eAAsB,sBAAA,CAAuB,KAAa,SAAA,EAAgD;AACxG,EAAA,MAAM,WAAA,GAAcwB,SAAAA,CAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,gBAAgB,CAAA;AAChF,EAAA,MAAM,GAAA,GAAM,MAAMD,iBAAAA,CAAS,WAAA,EAAa,MAAM,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAChE,EAAA,IAAI,GAAA,KAAQ,MAAM,OAAO,EAAE,SAAS,YAAA,CAAa,SAAS,CAAA,EAAG,WAAA,EAAa,MAAA,EAAU;AAEpF,EAAA,MAAM,SAAS,aAAA,CAAc,SAAA,CAAU,SAAA,CAAU,WAAA,EAAa,GAAG,CAAC,CAAA;AAClE,EAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,2BAAA,EAA8B,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA,IAAW,YAAY,CAAA,CAAA,EAAI,WAAW,CAAA;AAAA,EAC3H;AACA,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,SAAA,KAAc,SAAA,EAAW;AACvC,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,wCAAA,EAA2C,MAAA,CAAO,IAAA,CAAK,SAAS,uBAAuB,SAAS,CAAA,CAAA,CAAA;AAAA,MAChG;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,CAAC,OAAOtB,MAAAA,KAAU;AAC5C,IAAA,IAAI,KAAA,CAAM,OAAA,KAAYA,MAAAA,GAAQ,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,2DAAA,EAA8D,KAAA,CAAM,IAAI,KAAK,WAAW,CAAA;AAAA,IACvH;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,GAAG,EAAE,CAAA;AACrC,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,CAAO,IAAA,EAAM,WAAA,EAAa,GAAA,GAAM,MAAM,YAAA,CAAa,GAAA,EAAK,GAAA,CAAI,OAAO,CAAA,GAAI,MAAA,EAAU;AACrG;AAEA,eAAsB,gBAAA,CAAiB,KAAa,OAAA,EAAkC;AACpF,EAAA,MAAM2B,MAAA,GAAOJ,UAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA;AACxF,EAAA,OAAOD,iBAAAA,CAASK,MAAA,EAAM,MAAM,CAAA,CAAE,MAAM,MAAM;AACxC,IAAA,MAAM,IAAI,kBAAA,CAAmB,4BAAA,EAA8BA,MAAI,CAAA;AAAA,EACjE,CAAC,CAAA;AACH;AAEA,eAAsB,YAAA,CAAa,KAAa,OAAA,EAA6C;AAC3F,EAAA,MAAMA,MAAA,GAAOJ,UAAK,GAAA,EAAK,kBAAA,EAAoB,cAAc,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA;AACxF,EAAA,OAAO,UAAUI,MAAA,EAAM,MAAM,gBAAA,CAAiB,GAAA,EAAK,OAAO,CAAC,CAAA;AAC7D;AAEA,eAAsB,gBAAA,CAAiB,KAAa,KAAA,EAAsC;AACxF,EAAA,MAAMA,SAAOJ,SAAAA,CAAK,GAAA,EAAK,oBAAoB,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,IAAA,CAAM,CAAA;AAC9D,EAAA,OAAOD,iBAAAA,CAASK,MAAA,EAAM,MAAM,CAAA,CAAE,MAAM,MAAM;AACxC,IAAA,MAAM,IAAI,kBAAA,CAAmB,wBAAA,EAA0BA,MAAI,CAAA;AAAA,EAC7D,CAAC,CAAA;AACH;AAEO,IAAM,UAAA,GAAa,CAACtB,KAAAA,KAAyBgB,iBAAAA,CAAW,QAAQ,EAAE,MAAA,CAAOhB,KAAI,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAE3F,IAAM,aAAA,GAAgB,CAAC,OAAA,EAAiB,WAAA,KAAgC,CAAA,EAAG,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAEnH,SAAS,kBAAA,CAAmB;AAAA,EACjC,IAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAKW;AACT,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,MAAM,IAAI,CAAA,CAAA;AAAA,IACV,iBAAiB,SAAS,CAAA,CAAA;AAAA,IAC1B,oBAAoB,WAAW,CAAA,CAAA;AAAA,IAC/B;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AACX,EAAA,OAAO,CAAC,MAAA,EAAQ,GAAG,IAAA,CAAK,UAAA,CAAW,IAAI,CAAC,SAAA,KAAc,CAAA,EAAG,SAAA,CAAU,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AAC7F;AAQA,eAAsB,cAAA,CAAe;AAAA,EACnC,GAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAM8B;AAC5B,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAA,CAAW,GAAA,EAAK,OAAA,IAAW,CAAA,IAAK,CAAA;AACtC,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,OAAA,EAAS,WAAW,CAAA;AAC/C,EAAA,MAAMJ,IAAAA,GAAM,kBAAA,CAAmB,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,OAAA,CAAQ,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,CAAA;AAElG,EAAA,MAAM,OAAA,GAAUsB,SAAAA,CAAK,GAAA,EAAK,kBAAA,EAAoB,YAAY,CAAA;AAC1D,EAAA,MAAMK,cAAA,CAAM,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACxC,EAAA,MAAM,YAAA,GAAe,GAAG,IAAA,CAAK,SAAA,CAAU,KAAK,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC;AAAA,CAAA;AAC9D,EAAA,MAAMC,kBAAA,CAAUN,UAAK,GAAA,EAAK,kBAAA,EAAoB,GAAG,IAAI,CAAA,IAAA,CAAM,GAAGtB,IAAG,CAAA;AACjE,EAAA,MAAM4B,kBAAA,CAAUN,UAAK,OAAA,EAAS,CAAA,EAAG,IAAI,OAAO,CAAC,CAAA,cAAA,CAAgB,CAAA,EAAG,YAAY,CAAA;AAE5E,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,GAAG,SAAA,CAAU,OAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACP,GAAG,UAAU,OAAA,CAAQ,OAAA;AAAA,MACrB;AAAA,QACE,OAAA;AAAA,QACA,IAAA;AAAA,QACA,YAAA,EAAc,WAAA;AAAA,QACd,qBAAA,EAAuB,KAAK,YAAA,IAAgB,IAAA;AAAA,QAC5C,QAAA,EAAU,WAAWtB,IAAG,CAAA;AAAA,QACxB,iBAAA,EAAmB,WAAW,YAAY,CAAA;AAAA,QAC1C;AAAA;AACF;AACF,GACF;AACA,EAAA,MAAM4B,kBAAA,CAAUN,SAAAA,CAAK,OAAA,EAAS,gBAAgB,CAAA,EAAG,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC;AAAA,CAAI,CAAA;AACxF,EAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,WAAA,EAAY;AACtC;AAEA,IAAM,GAAA,GAAM,CAAC,OAAA,KAA4B,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAExE,SAAS,SAAA,CAAU,MAAc,GAAA,EAAsB;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,kBAAA,CAAmB,gBAAA,EAAkB,IAAI,CAAA;AAAA,EACrD;AACF;;;ACjJA,eAAsB,yBAAA,CACpB,KACA,MAAA,EACoC;AACpC,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,0BAAA,EAA6B,IAAI,IAAI,CAAA,gEAAA,CAAA;AAAA,MACrC,GAAG,kBAAkB,CAAA,kBAAA;AAAA,KACvB;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,OAAA,GAAU,CAAA,GAAI,MAAM,aAAa,GAAA,EAAK,GAAA,CAAI,OAAA,GAAU,CAAC,CAAA,GAAI,MAAA;AACtF,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,YAAY,MAAA,CAAO,UAAA,EAAY,kBAAkB,CAAA;AACpF,EAAA,MAAM,cAAc,kBAAA,CAAmB;AAAA,IACrC,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAA,EAAW,OAAO,UAAA,CAAW,SAAA;AAAA,IAC7B,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACD,EAAA,IAAI,WAAA,KAAiB,MAAM,gBAAA,CAAiB,GAAA,EAAK,GAAG,CAAA,EAAI;AACtD,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,EAAG,IAAI,IAAI,CAAA,wFAAA,CAAA;AAAA,MACX;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,uBAAuB,GAAA,CAAI,qBAAA;AAAA,IAC3B,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,YAAY,IAAA,CAAK;AAAA,GACnB;AACF;AAwBA,eAAsB,uBAAA,CAAwB,KAAa,MAAA,EAAyD;AAClH,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,OAAA,GAAU,UAAU,OAAA,CAAQ,OAAA;AAClC,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,EAAA,CAAG,EAAE,CAAA;AACzB,EAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,CAAA,0BAAA,EAA6B,IAAI,IAAI,CAAA,gEAAA,CAAA;AAAA,MACrC,GAAG,kBAAkB,CAAA,kBAAA;AAAA,KACvB;AAAA,EACF;AACA,EAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC7B,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,aAAa,KAAA,CAAM,YAAA;AAAA,IACnB,qBAAqB,KAAA,CAAM;AAAA,GAC7B,CAAE,CAAA;AACJ;;;ACtGA,IAAM,WAAA,GAAc,qEAAA;AAUpB,IAAM,KAAA,GAA4D;AAAA,EAChE,EAAE,OAAA,EAAS,sBAAA,EAAwB,MAAA,EAAQ,iDAAA,EAAkD;AAAA,EAC7F,EAAE,OAAA,EAAS,qBAAA,EAAuB,MAAA,EAAQ,mCAAA,EAAoC;AAAA,EAC9E,EAAE,OAAA,EAAS,iBAAA,EAAmB,MAAA,EAAQ,mBAAA,EAAoB;AAAA,EAC1D,EAAE,OAAA,EAAS,oBAAA,EAAsB,MAAA,EAAQ,6BAAA,EAA8B;AAAA,EACvE;AAAA,IACE,OAAA,EAAS,WAAA;AAAA,IACT,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEO,SAAS,oBAAoB,UAAA,EAAkE;AACpG,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,IAAI,SAAA,CAAU,SAAS,KAAA,EAAO;AAC5B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,CAAC,EAAE,OAAA,EAAQ,KAAM,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AACpE,MAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,UAAU,GAAA,EAAK,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,IACpE,CAAA,MAAA,IAAW,UAAU,IAAA,KAAS,MAAA,IAAU,YAAY,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,EAAG;AACvE,MAAA,OAAA,CAAQ,KAAK,EAAE,GAAA,EAAK,UAAU,GAAA,EAAK,MAAA,EAAQ,qHAAgH,CAAA;AAAA,IAC7J;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;;;ACXA,eAAsB,YAAY,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,KAAI,EAAiC;AACrG,EAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,GAAG,CAAA;AAChD,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,GAAG,EAAE,CAAA;AAE3C,EAAA,IAAI,KAAA,SAAc,cAAA,CAAe,EAAE,KAAK,MAAA,EAAQ,SAAA,EAAW,GAAA,EAAK,GAAA,EAAK,CAAA;AAErE,EAAA,IAAI,GAAA,EAAK,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC5C,IAAA,GAAA,CAAI,CAAA,kBAAA,EAAgB,kBAAkB,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,oCAAA,CAAsC,CAAA;AACxF,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,UAAA,EAAY,OAAO,UAAA,EAAY,gBAAA,EAAkB,SAAA,CAAU,WAAA,EAAa,CAAA;AAC3G,EAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,IAAA,CAAK,UAAU,CAAA;AACvD,EAAA,IAAI,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,CAAC,gBAAA,EAAkB;AAC/C,IAAA,GAAA,CAAI,kEAA6D,CAAA;AACjE,IAAA,KAAA,MAAW,SAAA,IAAa,WAAA,EAAa,GAAA,CAAI,CAAA,EAAA,EAAK,SAAA,CAAU,SAAA,CAAU,GAAG,CAAC,CAAA,KAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,CAAE,CAAA;AAChG,IAAA,GAAA,CAAI,qJAAqJ,CAAA;AACzJ,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe;AAAA,IACnC,GAAA;AAAA,IACA,SAAA;AAAA,IACA,IAAA;AAAA,IACA,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,WAAA,EAAa,YAAY,MAAA,GAAS;AAAA,GACnC,CAAA;AACD,EAAA,GAAA;AAAA,IACE,CAAA,MAAA,EAAS,kBAAkB,CAAA,CAAA,EAAI,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAU,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,aAAA,CAAA,IACxE,OAAA,CAAQ,WAAA,GAAc,yDAAA,GAAuD,EAAA;AAAA,GAClF;AACA,EAAA,OAAO,CAAA;AACT;AAEA,eAAe,cAAA,CAAe;AAAA,EAC5B,GAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA,EAMoB;AAClB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,GAAA,CAAI,CAAA,6BAAA,EAAgC,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,0DAAA,CAAuD,CAAA;AACtH,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,IAAIN,WAAAA;AACJ,EAAA,IAAI,YAAA,GAA8B,IAAA;AAClC,EAAA,KAAA,MAAW,KAAA,IAAS,SAAA,CAAU,OAAA,CAAQ,OAAA,EAAS;AAC7C,IAAA,MAAMhB,IAAAA,GAAM,MAAM,gBAAA,CAAiB,GAAA,EAAK,KAAK,CAAA;AAC7C,IAAA,IAAI,UAAA,CAAWA,IAAG,CAAA,KAAM,KAAA,CAAM,QAAA,EAAU;AACtC,MAAA,GAAA,CAAI,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,uFAAA,CAAoF,CAAA;AAC3H,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,YAAA,GAAe,MAAM,gBAAA,CAAiB,GAAA,EAAK,MAAM,OAAO,CAAA;AAC9D,IAAA,IAAI,UAAA,CAAW,YAAY,CAAA,KAAM,KAAA,CAAM,iBAAA,EAAmB;AACxD,MAAA,GAAA,CAAI,CAAA,iBAAA,EAAoB,KAAA,CAAM,IAAI,CAAA,+GAAA,CAA4G,CAAA;AAC9I,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AACxC,IAAA,IAAI,KAAA,CAAM,OAAA,GAAU,CAAA,IAAK,QAAA,CAAS,WAAWgB,WAAAA,EAAY;AACvD,MAAA,GAAA,CAAI,CAAA,yBAAA,EAA4B,KAAA,CAAM,IAAI,CAAA,6DAAA,CAA0D,CAAA;AACpG,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,0BAA0B,YAAA,EAAc;AAChD,MAAA,GAAA,CAAI,CAAA,6BAAA,EAAgC,KAAA,CAAM,IAAI,CAAA,uEAAA,CAAoE,CAAA;AAClH,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAAA,cAAa,QAAA,CAAS,EAAA;AACtB,IAAA,YAAA,GAAe,KAAA,CAAM,YAAA;AAAA,EACvB;AAEA,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,CAAO,WAAA,EAAa;AAC3C,IAAA,GAAA,CAAI,CAAA,0BAAA,EAA6B,GAAA,CAAI,IAAI,CAAA,gEAAA,CAA6D,CAAA;AACtG,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,OAAA,GAAU,CAAA,GAAI,MAAM,aAAa,GAAA,EAAK,GAAA,CAAI,OAAA,GAAU,CAAC,CAAA,GAAI,MAAA;AACtF,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,EAAE,YAAY,MAAA,CAAO,UAAA,EAAY,kBAAkB,CAAA;AACpF,EAAA,MAAM,cAAc,kBAAA,CAAmB;AAAA,IACrC,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAA,EAAW,OAAO,UAAA,CAAW,SAAA;AAAA,IAC7B,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB;AAAA,GACD,CAAA;AACD,EAAA,IAAI,WAAA,KAAiB,MAAM,gBAAA,CAAiB,GAAA,EAAK,GAAG,CAAA,EAAI;AACtD,IAAA,GAAA,CAAI,CAAA,EAAG,kBAAkB,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,mFAAA,CAAgF,CAAA;AACrH,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,GAAA,CAAI,CAAA,0BAAA,EAAwB,UAAU,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,gBAAA,EAAmB,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AACzF,EAAA,OAAO,CAAA;AACT;AAEA,IAAM,SAAA,GAAY,CAAChB,IAAAA,KAAwBA,IAAAA,CAAI,MAAM,IAAI,CAAA,CAAE,CAAC,CAAA,IAAKA,IAAAA;;;ACxH1D,IAAM,YAAA,GAAe;AACrB,IAAM,SAAA,GAAY;AAEzB,IAAM,KAAA,GAAQ,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAad,IAAI,aAAA,GAAsC,IAAA;AAGnC,SAAS,iBAAiB,QAAA,EAA+B;AAC9D,EAAA,aAAA,GAAgB,QAAA;AAClB;AAEA,eAAe,YAAA,GAAuC;AACpD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,SAAS,GAAG,IAAA,EAAK;AAC7C,EAAA,IAAI,SAAS,OAAO,OAAA;AACpB,EAAA,OAAO,aAAA,GAAgB,eAAc,GAAI,IAAA;AAC3C;AAEA,IAAM,cAAA,GAAiB,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,CAAA;AAoBvB,eAAsB,OAAO,IAAA,EAA0C;AACrE,EAAA,MAAM,CAAC,OAAA,EAAS,GAAG,IAAI,CAAA,GAAI,IAAA;AAC3B,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,UAAU,OAAA,KAAY,QAAA,IAAY,YAAY,IAAA,EAAM;AAC9E,IAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AACjB,IAAA,OAAO,UAAU,CAAA,GAAI,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI;AACF,IAAA,QAAQ,OAAA;AAAS,MACf,KAAK,MAAA;AACH,QAAA,OAAO,MAAM,YAAY,IAAI,CAAA;AAAA,MAC/B,KAAK,UAAA;AACH,QAAA,OAAO,MAAM,gBAAgB,IAAI,CAAA;AAAA,MACnC,KAAK,MAAA;AACH,QAAA,OAAO,MAAM,YAAY,IAAI,CAAA;AAAA,MAC/B,KAAK,MAAA;AACH,QAAA,OAAO,MAAM,WAAA,CAAY;AAAA,UACvB,GAAA,EAAK,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA;AAAA,UACzB,gBAAA,EAAkB,IAAA,CAAK,QAAA,CAAS,qBAAqB,CAAA;AAAA,UACrD,KAAA,EAAO,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAAA,UAC9B,GAAA,EAAK,CAAC,IAAA,KAAS,OAAA,CAAQ,IAAI,IAAI;AAAA,SAChC,CAAA;AAAA,MACH,KAAK,OAAA;AACH,QAAA,OAAO,MAAM,aAAa,IAAI,CAAA;AAAA,MAChC;AACE,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAA;AAC3C,QAAA,OAAA,CAAQ,IAAI,KAAK,CAAA;AACjB,QAAA,OAAO,CAAA;AAAA;AACX,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,MAAM,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AAEA,eAAe,YAAY,IAAA,EAA0C;AACnE,EAAA,MAAM,GAAA,GAAM,WAAW,IAAI,CAAA;AAC3B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAA,CAAQ,MAAM,kCAAkC,CAAA;AAChD,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,MAAM2B,cAAAA,CAAM,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACpC,EAAA,MAAMC,kBAAAA,CAAUN,UAAK,GAAA,EAAK,eAAe,GAAG,cAAA,EAAgB,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAC1E,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,GAAG,CAAA,mFAAA,EAAiF,GAAG,CAAA,CAAE,CAAA;AACnH,EAAA,OAAO,CAAA;AACT;AAEA,eAAe,gBAAgB,IAAA,EAA0C;AACvE,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA;AAChC,EAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,GAAG,CAAA;AAGhD,EAAA,MAAM,gBAAA,CAAiB,OAAO,UAAU,CAAA;AACxC,EAAA,MAAM,UAAU,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,GAAQ,MAAA,CAAO,KAAK,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,QAAQ,CAAC,CAAA;AACpH,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,EAAA,EAAK,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,WAAA,EAAc,OAAO,CAAA,gBAAA,CAAkB,CAAA;AAC/H,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AAMhD,EAAA,MAAM,YAAY,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,SAAS,CAAA;AAC/E,EAAA,IAAI,SAAA,CAAU,OAAA,CAAQ,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AAC1C,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN,mEAA8D,kBAAkB,CAAA,2DAAA;AAAA,KAClF;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,WAAA,CAAY,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,OAAO,IAAA,EAAM,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAK,CAAA;AACpF;AAOA,eAAe,iBAAiB,GAAA,EAA+B;AAC7D,EAAA,OAAQ,MAAM,eAAA,CAAgB,CAAC,GAAG,CAAC,CAAA,KAAO,CAAA;AAC5C;AAEA,eAAe,YAAY,IAAA,EAA0C;AACnE,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA;AAChC,EAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,GAAG,CAAA;AAChD,EAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,MAAA,CAAO,UAAU,CAAA;AAEzD,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA,eAAA,EAAkB,MAAA,CAAO,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,OAAA,CAAI,CAAA;AAC5G,EAAA,KAAA,MAAW,aAAa,QAAA,CAAS,UAAA,UAAoB,GAAA,CAAI,CAAA,EAAG,UAAU,GAAG,CAAA;AAAA,CAAK,CAAA;AAE9E,EAAA,MAAM,WAAW,MAAM,kBAAA,CAAmB,OAAO,UAAA,CAAW,SAAA,EAAW,OAAO,WAAW,CAAA;AACzF,EAAA,IAAI,QAAA,CAAS,SAAS,SAAA,EAAW;AAC/B,IAAA,OAAA,CAAQ,IAAI,+EAA+E,CAAA;AAC3F,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,QAAA,CAAS,SAAS,SAAA,EAAW;AAE/B,IAAA,OAAA,CAAQ,IAAI,iGAA4F,CAAA;AACxG,IAAA,OAAO,CAAA;AAAA,EACT;AAIA,EAAA,MAAM,QAAQ,QAAA,CAAS,WAAA;AACvB,EAAA,MAAM,MAAA,GAAS,SAAS,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,EAAA,KAAO,QAAA,CAAS,eAAe,CAAA;AAC1F,EAAA,IAAI,SAAS,KAAA,CAAM,EAAA,KAAO,SAAS,eAAA,EAAiB,OAAA,CAAQ,IAAI,iDAAiD,CAAA;AAAA,OAAA,IACxG,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,gCAAA,EAAmC,KAAA,CAAM,MAAM,CAAA,aAAA,CAAe,CAAA;AAAA,OACrF,OAAA,CAAQ,GAAA,CAAI,CAAA,oCAAA,EAAuC,MAAA,GAAS,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAC7G,EAAA,OAAO,CAAA;AACT;AAEA,eAAe,aAAa,IAAA,EAA0C;AACpE,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA;AAChC,EAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,QAAA,CAAS,qBAAqB,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA;AAQxC,EAAA,IAAK,MAAM,WAAA,CAAY,EAAE,GAAA,EAAK,gBAAA,EAAkB,OAAO,KAAA,EAAO,GAAA,EAAK,CAAC,IAAA,KAAS,QAAQ,GAAA,CAAI,IAAI,GAAG,CAAA,KAAO,GAAG,OAAO,CAAA;AACjH,EAAA,IAAI,CAAE,MAAM,gBAAA,CAAiB,GAAG,GAAI,OAAO,CAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,MAAM,uBAAA,CAAwB,GAAG,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,OAAO,UAAA,CAAW,SAAA;AAQpC,EAAA,MAAM,GAAA,GAAM,MAAM,yBAAA,CAA0B,GAAA,EAAK,MAAM,CAAA;AACvD,EAAA,MAAM,SAAA,GAAY,GAAA,GAAM,EAAE,GAAG,GAAA,EAAK,KAAA,EAAO,MAAM,uBAAA,CAAwB,GAAA,EAAK,MAAM,CAAA,EAAE,GAAI,MAAA;AACxF,EAAA,MAAM,aAAa,MAAM,gBAAA;AAAA,IACvB,MAAA;AAAA,IACA,qBAAA;AAAA,IACA,EAAE,KAAA,EAAO,MAAM,mBAAA,CAAoB,KAAK,MAAA,CAAO,KAAK,CAAA,EAAG,GAAI,SAAA,GAAY,EAAE,SAAA,EAAU,GAAI,EAAC;AAAG,GAC7F;AACA,EAAA,OAAA,CAAQ,GAAA;AAAA,IAAA,CACL,UAAA,CAAW,OAAA,GACR,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,EAAI,UAAA,CAAW,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,GAC/D,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAA,EAAI,UAAA,CAAW,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,KACxE,SAAA,GAAY,CAAA,0BAAA,EAA6B,SAAA,CAAU,IAAI,CAAA,CAAA,GAAK,EAAA;AAAA,GACjE;AAKA,EAAA,IAAI,MAAA,EAAQ,OAAO,eAAA,CAAgB,EAAE,SAAA,EAAW,SAAA,EAAW,UAAA,CAAW,UAAA,EAAY,WAAA,EAAa,UAAA,CAAW,YAAA,EAAc,CAAA;AAExH,EAAA,MAAM,UAAU,MAAM,gBAAA,CASpB,MAAA,EAAQ,CAAA,oBAAA,EAAuB,SAAS,CAAA,MAAA,CAAA,EAAU;AAAA,IAClD,YAAY,UAAA,CAAW,UAAA;AAAA,IACvB,GAAI,gBAAA,GAAmB,EAAE,iBAAA,EAAmB,IAAA,KAAS;AAAC,GACvD,CAAA;AAED,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,MAAA,IAAU,SAAS,CAAA,8CAAA,CAAsC,CAAA;AAC5F,IAAA,MAAM,UAAU,MAAM,kBAAA,CAAmB,WAAW,UAAA,CAAW,YAAA,EAAc,QAAQ,MAAM,CAAA;AAC3F,IAAA,OAAO,OAAA,KAAY,CAAA,GAAI,mBAAA,CAAoB,GAAA,EAAK,MAAM,CAAA,GAAI,OAAA;AAAA,EAC5D;AACA,EAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,SAAS,CAAA,+CAAA,CAA4C,CAAA;AACpE,IAAA,OAAO,mBAAA,CAAoB,KAAK,MAAM,CAAA;AAAA,EACxC;AACA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,WAAW,SAAS,CAAA,UAAA,EAAa,QAAQ,OAAO,CAAA,EAAA,EAAK,QAAQ,mBAAmB,CAAA,aAAA,EAC3E,QAAQ,iBAAA,GAAoB,CAAA,GAAI,KAAK,OAAA,CAAQ,iBAAiB,aAAa,EAAE,CAAA,IAAA,EAAO,QAAQ,WAAW,CAAA,EAAA;AAAA,GAC9G;AACA,EAAA,OAAO,mBAAA,CAAoB,KAAK,MAAM,CAAA;AACxC;AAEA,IAAM,sBAAA,GAAyB,IAAA;AAS/B,eAAe,kBAAA,CACb,SAAA,EACA,WAAA,EACA,KAAA,EACiB;AACjB,EAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,EAAA,WAAS;AACP,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,sBAAsB,CAAC,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,QACR,MAAM,gBAAA;AAAA,MACJ,KAAA;AAAA,MACA,CAAA,oBAAA,EAAuB,SAAS,CAAA,WAAA,EAAc,KAAK,CAAA;AAAA,KACrD,GACA,IAAA;AAEJ,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,OAAA,KAAY,IAAA,EAAM;AAC/B,MAAA,IAAI,GAAA,CAAI,WAAW,UAAA,EAAY;AAC7B,QAAA,UAAA,GAAa,GAAA,CAAI,MAAA;AACjB,QAAA,OAAA,CAAQ,IAAI,CAAA,OAAA,EAAK,GAAA,CAAI,MAAA,CAAO,WAAA,EAAa,CAAA,CAAE,CAAA;AAAA,MAC7C;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,gBAAA,CAEhB,KAAA,EAAO,uBAAuB,SAAS,CAAA,MAAA,EAAS,WAAW,CAAA,CAAE,CAAA;AAChE,IAAA,MAAM,UAAU,IAAA,CAAK,YAAA;AAMrB,IAAA,IAAI,GAAA,EAAK,YAAY,QAAA,EAAU;AAC7B,MAAA,MAAM,MAAA,GAAS,SAAS,aAAA,IAAiB,oBAAA;AACzC,MAAA,OAAA,CAAQ,KAAA,CAAM,qBAAqB,GAAA,CAAI,MAAA,CAAO,aAAa,CAAA,GAAA,EAAM,MAAM,CAAA,CAAE,CAAA;AACzE,MAAA,IAAI,OAAA,EAAS,WAAW,UAAA,EAAY;AAClC,QAAA,OAAA,CAAQ,MAAM,oGAA+F,CAAA;AAAA,MAC/G;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,IAAI,GAAA,EAAK,OAAA,KAAY,WAAA,IAAe,OAAA,EAAS,WAAW,SAAA,EAAW;AACjE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,SAAS,CAAA,iCAAA,CAA8B,CAAA;AAC9D,MAAA,OAAO,CAAA;AAAA,IACT;AAGA,IAAA,IAAI,OAAA,EAAS,WAAW,QAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,cAAA,EAAiB,OAAA,CAAQ,aAAA,IAAiB,oBAAoB,CAAA,CAAE,CAAA;AAC9E,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACF;AAgBA,eAAe,eAAA,CAAgB;AAAA,EAC7B,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAIoB;AAClB,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,iBAEzB,MAAA,EAAQ,CAAA,oBAAA,EAAuB,SAAS,CAAA,KAAA,CAAA,EAAS,EAAE,UAAA,EAAY,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA;AAE7F,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,SAAS,CAAA,6DAAA,CAA0D,CAAA;AAClF,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,CAAU,WAAW,QAAA,EAAU;AACjC,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,sBAAA,EAAyB,SAAA,CAAU,MAAA,IAAU,SAAA,CAAU,SAAS,SAAS,CAAA,uEAAA;AAAA,KAC3E;AACA,IAAA,OAAO,gBAAA,CAAiB,WAAW,WAAW,CAAA;AAAA,EAChD;AAEA,EAAA,OAAO,eAAA,CAAgB,MAAM,cAAA,CAAe,SAAA,EAAW,WAAW,CAAC,CAAA;AACrE;AAEA,IAAM,0BAAA,GAA6B,IAAA;AAGnC,eAAe,gBAAA,CAAiB,WAAmB,WAAA,EAAsC;AACvF,EAAA,IAAI,UAAA,GAA4B,IAAA;AAChC,EAAA,WAAS;AACP,IAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,0BAA0B,CAAC,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,SAAA,EAAW,WAAW,CAAA;AAC1D,IAAA,IAAI,MAAA,KAAW,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,MAAA,KAAW,QAAA,CAAA,EAAW,OAAO,eAAA,CAAgB,MAAM,CAAA;AACvG,IAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,SAAA;AACjC,IAAA,IAAI,WAAW,UAAA,EAAY;AACzB,MAAA,UAAA,GAAa,MAAA;AACb,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,OAAA,EAAK,MAAM,CAAA,CAAE,CAAA;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,eAAe,cAAA,CAAe,WAAmB,WAAA,EAAsD;AACrG,EAAA,MAAM,OAAO,MAAM,gBAAA;AAAA,IACjB,KAAA;AAAA,IACA,CAAA,oBAAA,EAAuB,SAAS,CAAA,MAAA,EAAS,WAAW,CAAA;AAAA,GACtD;AACA,EAAA,OAAO,IAAA,CAAK,cAAc,SAAA,IAAa,IAAA;AACzC;AAEA,SAAS,gBAAgB,MAAA,EAAwC;AAC/D,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,MAAM,6EAAwE,CAAA;AACtF,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,wBAAA,EAAsB,MAAA,CAAO,mBAAA,IAAuB,CAAC,CAAA,gEAAA;AAAA,KACvD;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,kBAAA,EAAqB,MAAA,CAAO,MAAA,IAAU,oBAAoB,CAAA,CAAE,CAAA;AAC1E,EAAA,OAAO,CAAA;AACT;AASA,eAAe,mBAAA,CACb,KACA,MAAA,EACiB;AACjB,EAAA,MAAM,OAAA,GAAUA,SAAAA,CAAK,GAAA,EAAK,cAAc,CAAA;AACxC,EAAA,IAAI;AACF,IAAA,MAAMM,kBAAAA,CAAU,OAAA,EAAS,sBAAA,CAAuB,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EACpE,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA;AAAA,MACN,CAAA,gBAAA,EAAmB,OAAO,CAAA,EAAA,EAAK,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,kEAAA,EAAgE,GAAG,CAAA,2FAAA;AAAA,KAC1J;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAA,CAAQ,GAAA,CAAI,SAAS,OAAO,CAAA,EAAA,EAAK,OAAO,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA,UAAA,CAAY,CAAA;AAC5E,EAAA,OAAO,CAAA;AACT;AAEA,eAAe,mBAAA,CACb,KACA,KAAA,EACoD;AACpD,EAAA,MAAM,EAAE,QAAA,EAAAP,SAAAA,EAAS,GAAI,MAAM,OAAO,aAAkB,CAAA;AACpD,EAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,IACb,MAAM,GAAA,CAAI,OAAO,IAAA,MAAU,EAAE,MAAM,IAAA,EAAM,QAAA,EAAU,MAAMA,SAAAA,CAASC,UAAK,GAAA,EAAK,IAAI,CAAA,EAAG,MAAM,GAAE,CAAE;AAAA,GAC/F;AACF;AAEA,eAAe,UAAA,CACb,MAAA,EACA,IAAA,EACA,IAAA,EACA,OAAA,EACmB;AACnB,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,YAAY,GAAG,IAAA,EAAK;AAChD,EAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,EAAa;AACjC,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,8CAAyC,CAAA;AACvE,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,4CAAuC,CAAA;AAEnE,EAAA,MAAM,WAAW,MAAM,KAAA,CAAM,GAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,IAChD,MAAA;AAAA,IACA,SAAS,EAAE,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA,EAAI,gBAAgB,kBAAA,EAAmB;AAAA,IAChF,MAAM,IAAA,KAAS,MAAA,GAAY,MAAA,GAAY,IAAA,CAAK,UAAU,IAAI;AAAA,GAC3D,CAAA;AACD,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,OAAA,EAAS,UAAU,OAAO,IAAA;AACzD,EAAA,MAAM,UAAmB,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAC/D,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,MAAA,GACJ,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,QAAA,IAAY,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,GAAI,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,CAAA;AAClH,IAAA,MAAM,IAAI,MAAM,CAAA,EAAG,MAAM,IAAI,IAAI,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,OAAA;AACT;AAGA,eAAe,gBAAA,CAAoB,MAAA,EAAwB,IAAA,EAAc,IAAA,EAA4B;AACnG,EAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAc,MAAA,EAAQ,MAAM,IAAI,CAAA;AACrD,EAAA,IAAI,MAAA,KAAW,MAAM,MAAM,IAAI,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,oBAAA,CAAsB,CAAA;AAC5E,EAAA,OAAO,MAAA;AACT;AAkBA,eAAe,kBAAA,CAAmB,WAAmB,WAAA,EAA6C;AAChG,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,YAAY,GAAG,IAAA,EAAK,IAAK,CAAE,MAAM,YAAA,EAAa,EAAI,OAAO,EAAE,MAAM,SAAA,EAAU;AAE5F,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAIhB,KAAA,EAAO,uBAAuB,SAAS,CAAA,MAAA,EAAS,kBAAA,CAAmB,WAAW,CAAC,CAAA,CAAA,EAAI,MAAA,EAAW,EAAE,QAAA,EAAU,MAAM,CAAA;AACnH,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAE,MAAM,SAAA,EAAU;AACpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,eAAA,EAAiB,KAAK,SAAA,CAAU,iBAAA;AAAA,IAChC,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,WAAA,EAAa,KAAK,YAAA,IAAgB;AAAA,GACpC;AACF;AAEA,SAAS,WAAW,IAAA,EAA6C;AAC/D,EAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAI,CAAA;AACrB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AACrC,EAAA,IAAI,QAAA,KAAa,EAAA,EAAI,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA;AAC5C,EAAA,OAAO,IAAA,CAAK,KAAK,CAAC,GAAA,KAAQ,CAAC,GAAA,CAAI,UAAA,CAAW,GAAG,CAAC,CAAA;AAChD","file":"cli.cjs","sourcesContent":["import type { ActionDefinition } from '../schema/actions.js'\nimport type { ColumnDefinition, ColumnType } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\n\n/**\n * Wire types per column type — what a Data API row actually carries after\n * the driver + JSON serialization, not the Postgres type. Mirrors\n * engine/columns.ts: bigint arrives as a STRING (int8 exceeds JS number\n * precision, so the executor serializes it losslessly); numeric stays a\n * string (exact decimal); timestamptz serializes to an ISO string.\n */\nconst WIRE_TYPES: Readonly<Record<ColumnType, string>> = {\n uuid: 'string',\n text: 'string',\n integer: 'number',\n bigint: 'string',\n numeric: 'string',\n double: 'number',\n boolean: 'boolean',\n timestamptz: 'string',\n date: 'string',\n jsonb: 'unknown',\n}\n\n/**\n * Emit the `Tables` type for a namespace — the generic parameter for\n * `createOrmClient<…Tables>`. A `type` alias, deliberately not an\n * `interface`: object type literals carry the implicit index signature that\n * satisfies the client's `Record<string, Record<string, unknown>>`\n * constraint; interfaces don't. Derived from the definitions alone (no\n * database), so generation is deterministic and runs offline.\n */\nexport function generateNamespaceTypes(definition: NamespaceDefinition): string {\n const lines: string[] = [\n `// Generated by \\`seq-studio orm generate\\` from the '${definition.namespace}' definitions — do not edit.`,\n '',\n `export type ${typesInterfaceName(definition.namespace)} = {`,\n ]\n for (const table of definition.tables) {\n if (table.source) {\n // Synced tables reflect their gold source at apply — the definitions\n // don't declare columns, so the row type stays permissive until\n // reflected generation lands. Readable through the client today.\n lines.push(` /** Synced from ${table.source} — columns reflect the gold source. */`)\n lines.push(` ${table.table}: Record<string, unknown>`)\n continue\n }\n lines.push(` ${table.table}: {`)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n // Phase one of a column retirement: deprecated columns leave the typed\n // surface while the data stays, so consumers migrate before the drop.\n if (column.deprecated) continue\n lines.push(` ${name}: ${columnWireType(column)}`)\n }\n lines.push(' }')\n }\n lines.push('}', '')\n lines.push(...actionTypeLines(definition))\n return lines.join('\\n')\n}\n\n/**\n * Emit the `Actions` type for a namespace — the second generic parameter for\n * `createOrmClient<…Tables, …Actions>`, keying each action to its param and\n * result shapes. An action with `returns:` resolves to `{ rows: Row[] }`; a\n * count action to `{ rowsAffected: number }`. Derived from the definitions\n * alone, like the table types.\n */\nfunction actionTypeLines(definition: NamespaceDefinition): string[] {\n const actions = definition.tables.flatMap((table) => Object.entries(table.actions ?? {}))\n const lines = [`export type ${actionsInterfaceName(definition.namespace)} = {`]\n for (const [name, action] of actions.sort(([a], [b]) => a.localeCompare(b))) {\n lines.push(` ${name}: { params: ${actionParamsType(action)}; result: ${actionResultType(action)} }`)\n }\n lines.push('}', '')\n return lines\n}\n\nfunction actionParamsType(action: ActionDefinition): string {\n const entries = Object.entries(action.params ?? {})\n if (entries.length === 0) return 'Record<never, never>'\n const fields = entries.map(([name, param]) => {\n const base = WIRE_TYPES[param.type]\n return param.optional ? `${name}?: ${base} | null` : `${name}: ${base}`\n })\n return `{ ${fields.join('; ')} }`\n}\n\nfunction actionResultType(action: ActionDefinition): string {\n if (!action.returns) return '{ rowsAffected: number }'\n // A RETURNING column is nullable at runtime and `returns` records only the\n // type, so every field is `| null` (unknown jsonb already subsumes null).\n const columns = Object.entries(action.returns).map(([name, type]) => {\n const base = WIRE_TYPES[type]\n return base === 'unknown' ? `${name}: ${base}` : `${name}: ${base} | null`\n })\n return `{ rows: Array<{ ${columns.join('; ')} }> }`\n}\n\nexport function typesInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Tables`\n}\n\nexport function actionsInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Actions`\n}\n\nfunction pascalCase(namespace: string): string {\n return namespace\n .split('_')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction columnWireType(column: ColumnDefinition): string {\n const base = WIRE_TYPES[column.type]\n const notNull = column.primary_key === true || column.nullable === false\n return notNull || base === 'unknown' ? base : `${base} | null`\n}\n","/** Namespace names become Postgres identifiers (`orm_<ns>` schema, `orm_<ns>_consumer` role) — the tight grammar is a security control, not cosmetics. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * The Data API carries a delegated, attenuated data token on this header (not\n * `Authorization`, which stays the app-user/session bearer). One definition\n * shared by the client transport, the server's caller resolver, and the\n * function-invoke minter, so all three agree.\n */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/**\n * The SEPARATE header the invoke proxy uses to hand a managed function its\n * *service* data token — the escalation path. A function receives BOTH this and\n * `ORM_DATA_TOKEN_HEADER`; the default `createOrmClient` reads the user token,\n * the deliberately-named `createServiceOrmClient` reads THIS one. Two distinct\n * headers so reaching for the service identity is always an explicit act, never\n * an accidental default. Both are sent to the Data API on `ORM_DATA_TOKEN_HEADER`\n * — the server stays mode-agnostic and resolves whatever sub the token carries.\n */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, or an org pin's `org/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$/\n\n/** Synced reflected sources are restricted to the gold layer. */\nexport const SYNCED_SOURCE_PATTERN = /^gold\\.[a-z][a-z0-9_]*$/\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * The one size guard the package owns: a per-file byte cap where the loader\n * reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","export const COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type CompareOp = (typeof COMPARE_OPS)[number]\n\nexport type Operand =\n | { kind: 'column'; name: string }\n | { kind: 'claim'; key: string }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type Predicate =\n | { kind: 'and'; operands: readonly Predicate[] }\n | { kind: 'or'; operands: readonly Predicate[] }\n | { kind: 'not'; operand: Predicate }\n | { kind: 'compare'; op: CompareOp; left: Operand; right: Operand }\n | { kind: 'capability'; key: string }\n\nexport interface ParsedPredicate {\n readonly source: string\n readonly ast: Predicate\n}\n\nexport function walkPredicate(predicate: Predicate, visit: (node: Predicate) => void): void {\n visit(predicate)\n if (predicate.kind === 'and' || predicate.kind === 'or') {\n for (const operand of predicate.operands) walkPredicate(operand, visit)\n }\n if (predicate.kind === 'not') walkPredicate(predicate.operand, visit)\n}\n\nexport function predicateOperands(predicate: Predicate): Operand[] {\n const operands: Operand[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'compare') operands.push(node.left, node.right)\n })\n return operands\n}\n\nexport function referencedColumns(predicate: Predicate): string[] {\n const names = predicateOperands(predicate).flatMap((operand) =>\n operand.kind === 'column' ? [operand.name] : [],\n )\n return [...new Set(names)]\n}\n\nexport function referencedCapabilities(predicate: Predicate): string[] {\n const keys: string[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'capability') keys.push(node.key)\n })\n return [...new Set(keys)]\n}\n","import { z } from 'zod'\nimport {\n IDENTIFIER_PATTERN,\n MAX_IDENTIFIER_LENGTH,\n NAMESPACE_PATTERN,\n QUALIFIED_TABLE_PATTERN,\n} from '../constants.js'\n\nexport const identifierSchema = z\n .string()\n .max(MAX_IDENTIFIER_LENGTH)\n .regex(IDENTIFIER_PATTERN, 'must be a lowercase identifier (a-z, 0-9, _)')\n\nexport const namespaceSchema = z\n .string()\n .regex(NAMESPACE_PATTERN, 'must be lowercase, start with a letter, and be at most 41 characters')\n\n/** `<table>` for a table in the same namespace, `<schema>.<table>` for anything else. */\nexport const tableReferenceSchema = z\n .string()\n .refine(\n (value) => IDENTIFIER_PATTERN.test(value) || QUALIFIED_TABLE_PATTERN.test(value),\n 'must be a table name or a schema-qualified table reference',\n )\n\nexport const isQualifiedReference = (reference: string): boolean => reference.includes('.')\n","import { z } from 'zod'\nimport { identifierSchema } from './identifiers.js'\n\nexport const COLUMN_TYPES = [\n 'uuid',\n 'text',\n 'integer',\n 'bigint',\n 'numeric',\n 'double',\n 'boolean',\n 'timestamptz',\n 'date',\n 'jsonb',\n] as const\n\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nexport const columnTypeSchema = z.enum(COLUMN_TYPES)\n\nconst FUNCTION_DEFAULTS: Readonly<Record<string, readonly ColumnType[]>> = {\n 'gen_random_uuid()': ['uuid'],\n 'now()': ['timestamptz', 'date'],\n}\n\nconst CAST_PATTERN = /^([a-z][a-z0-9_]*)::([a-z]+)$/\n\n/**\n * True when the default is one of the allowlisted SQL function calls for its\n * type — the ONLY defaults the engine may emit as raw SQL. Everything else\n * is a literal value; in particular a text default that happens to end in\n * `()` is data, never code.\n */\nexport const isFunctionDefault = (value: ColumnDefault, type: ColumnType): boolean =>\n typeof value === 'string' && (FUNCTION_DEFAULTS[value]?.includes(type) ?? false)\n\nexport type ColumnDefault = string | number | boolean\n\nexport interface ColumnDefinition {\n readonly type: ColumnType\n readonly primary_key?: boolean\n readonly nullable?: boolean\n readonly unique?: boolean\n readonly default?: ColumnDefault\n readonly description?: string\n readonly renamed_from?: string\n readonly cast?: string\n readonly deprecated?: boolean\n}\n\nfunction defaultIssue(value: ColumnDefault, type: ColumnType): string | null {\n if (typeof value === 'boolean') return type === 'boolean' ? null : `boolean default is invalid for type '${type}'`\n if (typeof value === 'number') {\n if (!['integer', 'bigint', 'numeric', 'double'].includes(type)) {\n return `numeric default is invalid for type '${type}'`\n }\n if (['integer', 'bigint'].includes(type)) {\n if (!Number.isInteger(value)) return `default for type '${type}' must be an integer`\n if (!Number.isSafeInteger(value)) {\n return `default for type '${type}' exceeds the safe integer range — YAML numbers lose precision past 2^53`\n }\n }\n // `numeric` is exact-precision in Postgres but this value already went\n // through a JS float — past 2^53 it may not be what was written. Quote\n // it as a string to keep exact precision. (`double` IS a float; fine.)\n if (type === 'numeric' && Math.abs(value) > Number.MAX_SAFE_INTEGER) {\n return \"numeric default exceeds the safe float range — write it as a string (e.g. '9007199254740993') to keep exact precision\"\n }\n return null\n }\n // The exact allowlisted function names always validate against their\n // types — `now()` on a text column is a misdeclared type, not a literal.\n const allowedTypes = FUNCTION_DEFAULTS[value]\n if (allowedTypes) return allowedTypes.includes(type) ? null : `default '${value}' is invalid for type '${type}'`\n // Any other string default is a quoted literal — including strings ending\n // in `()`, which are data, never code. Whether the literal parses is the\n // column input function's call at apply; string grammars (uuid forms,\n // numeric notations, date formats) are never mirrored client-side.\n return null\n}\n\nexport const columnSchema = z\n .strictObject({\n type: columnTypeSchema,\n primary_key: z.boolean().optional(),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n description: z.string().optional(),\n renamed_from: identifierSchema.optional(),\n cast: z.string().optional(),\n deprecated: z.boolean().optional(),\n })\n .superRefine((column, ctx) => {\n if (column.default !== undefined) {\n const issue = defaultIssue(column.default, column.type)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['default'] })\n }\n if (column.primary_key && column.nullable) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be nullable', path: ['nullable'] })\n }\n if (column.primary_key && column.deprecated) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be deprecated', path: ['deprecated'] })\n }\n if (column.cast && !CAST_PATTERN.test(column.cast)) {\n ctx.addIssue({ code: 'custom', message: \"cast must have the shape '<column>::<type>'\", path: ['cast'] })\n }\n })\n\nexport function castParts(cast: string): { column: string; type: string } | null {\n const match = CAST_PATTERN.exec(cast)\n if (!match) return null\n return { column: match[1] as string, type: match[2] as string }\n}\n","import { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN, IDENTIFIER_PATTERN } from '../constants.js'\nimport { PredicateParseError } from '../errors.js'\nimport { COMPARE_OPS, type CompareOp, type Operand, type ParsedPredicate, type Predicate } from './ast.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-z_]/\nconst IDENTIFIER_CHAR = /[a-z0-9_.-]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PredicateParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PredicateParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): Predicate {\n const predicate = this.parseOr()\n this.expect('end', 'end of expression')\n return predicate\n }\n\n private parseOr(): Predicate {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'or', operands }\n }\n\n private parseAnd(): Predicate {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'and', operands }\n }\n\n private parseNot(): Predicate {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): Predicate {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('capability')) {\n const capability = this.parseCapability()\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', next.position)\n }\n return capability\n }\n return this.parseComparison()\n }\n\n private parseCapability(): Predicate {\n this.advance()\n const key = this.parseCallArgument('capability')\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid capability key '${key}'`, this.peek().position)\n }\n return { kind: 'capability', key }\n }\n\n private parseComparison(): Predicate {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!COMPARE_OPS.includes(operator.value as CompareOp)) {\n throw new PredicateParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as CompareOp, left, right }\n }\n\n private parseOperand(): Operand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PredicateParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PredicateParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n this.advance()\n if (token.value === 'true' || token.value === 'false') {\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') return { kind: 'literal', value: null }\n if (token.value === 'claim') {\n const key = this.parseCallArgument('claim')\n if (!CLAIM_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid claim key '${key}'`, token.position)\n }\n return { kind: 'claim', key }\n }\n if (token.value === 'capability') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', token.position)\n }\n if (KEYWORDS.has(token.value) || !IDENTIFIER_PATTERN.test(token.value)) {\n throw new PredicateParseError(`invalid column reference '${token.value}'`, token.position)\n }\n return { kind: 'column', name: token.value }\n }\n\n private parseCallArgument(fn: 'claim' | 'capability'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PredicateParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePredicate(source: string): ParsedPredicate {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PredicateParseError('empty predicate', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","import { z } from 'zod'\nimport { parsePredicate } from '../predicate/parse.js'\nimport type { ParsedPredicate } from '../predicate/ast.js'\n\nexport const parsedPredicateSchema = z\n .string()\n .transform((source, ctx): ParsedPredicate => {\n try {\n return parsePredicate(source)\n } catch (error) {\n ctx.addIssue({ code: 'custom', message: error instanceof Error ? error.message : String(error) })\n return z.NEVER\n }\n })\n","import { z } from 'zod'\nimport { referencedColumns } from '../predicate/ast.js'\nimport { columnTypeSchema } from './columns.js'\nimport { identifierSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst EXECUTES_VERB_PATTERN = /^\\s*(insert|update|delete)\\b/i\n// Dollar-quoting ($tag$…$tag$) isn't handled by the claim/param scanner (it\n// masks single-quoted literals only), so a `:param` or claim()-like text\n// inside one would be silently rewritten. Reject it — app action SQL never\n// needs it.\nconst DOLLAR_QUOTE_PATTERN = /\\$[a-zA-Z0-9_]*\\$/\n// RETURNING is how a `returns:` action populates its declared rows — so it's\n// required when returns is declared and rejected otherwise (an action without\n// returns reports rows_affected only, and a stray RETURNING would just buffer\n// discarded rows).\nconst RETURNING_PATTERN = /\\breturning\\b/i\n// Escape strings (E'…') use backslash escaping the quoted-literal scanner\n// doesn't model — in E'can\\'t :body' the \\' ends the match early and :body is\n// mis-rewritten as a bind placeholder. On string-masked text a surviving\n// `E'`/`e'` can only be an escape-string introducer (every standard literal is\n// already masked away), so reject it there. App action SQL never needs them.\nconst ESCAPE_STRING_PATTERN = /(?<![a-zA-Z0-9_])[Ee]'/\n// A valid claim()/capability() call, once its argument literal is masked to\n// '' — used to strip the good calls so any leftover bare call is malformed.\nconst MASKED_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\(\\s*''\\s*\\)/g\n// Any claim()/capability( that survives masking + stripping is malformed\n// (unquoted arg, wrong arity) — it would compile-throw at invoke as a 500.\nconst BARE_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\nconst EXISTS_ENTRY_PATTERN = /^exists\\(\\s*'([^']+)'\\s*,\\s*([a-z][a-z0-9_]*)\\s*\\)$/\nconst NAMED_PARAM_PATTERN = /(?<!:):([a-z][a-z0-9_]*)/g\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\nconst SQL_COMMENT_PATTERN = /--|\\/\\*/\n\nexport const actionParamSchema = z.strictObject({\n type: columnTypeSchema,\n optional: z.boolean().optional(),\n description: z.string().optional(),\n})\n\nexport interface ValidatesEntry {\n readonly source: string\n readonly table: string\n readonly param: string\n}\n\nconst validatesEntrySchema = z\n .string()\n .transform((source, ctx): ValidatesEntry => {\n const match = EXISTS_ENTRY_PATTERN.exec(source.trim())\n if (!match) {\n ctx.addIssue({ code: 'custom', message: \"validates entries must have the shape exists('<table>', <param>)\" })\n return z.NEVER\n }\n const table = tableReferenceSchema.safeParse(match[1])\n if (!table.success) {\n ctx.addIssue({ code: 'custom', message: `invalid table reference '${match[1]}'` })\n return z.NEVER\n }\n return { source: source.trim(), table: table.data, param: match[2] as string }\n })\n\nexport const AUDIT_ACTIONS = ['create', 'update', 'delete'] as const\n\nconst auditSchema = z.strictObject({\n action: z.enum(AUDIT_ACTIONS),\n resource: identifierSchema.optional(),\n})\n\nexport const actionSchema = z\n .strictObject({\n description: z.string().optional(),\n requires: parsedPredicateSchema.optional(),\n params: z.record(identifierSchema, actionParamSchema).optional(),\n validates: z.array(validatesEntrySchema).optional(),\n // One statement, or an ordered list run atomically in the action function.\n executes: z.union([z.string().min(1), z.array(z.string().min(1)).min(1)]),\n // Declares the columns the action's RETURNING yields. Present → the\n // function returns those rows (typed in the client); absent → the action\n // reports rows_affected only. The column names/types must match the\n // RETURNING list, which Postgres enforces at CREATE FUNCTION.\n returns: z.record(identifierSchema, columnTypeSchema).optional(),\n audit: auditSchema.optional(),\n })\n .superRefine((action, ctx) => {\n const params = Object.keys(action.params ?? {})\n if (action.requires && referencedColumns(action.requires.ast).length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: 'requires may reference claims and capabilities only, not columns',\n path: ['requires'],\n })\n }\n for (const issue of executesIssues(action.executes, new Set(params), action.returns !== undefined)) {\n ctx.addIssue({ code: 'custom', message: issue, path: ['executes'] })\n }\n // An empty `returns: {}` would compile to `RETURNS TABLE()` — invalid SQL —\n // and slip through as \"has returns\"; require at least one declared column.\n if (action.returns && Object.keys(action.returns).length === 0) {\n ctx.addIssue({ code: 'custom', message: 'returns must declare at least one column', path: ['returns'] })\n }\n for (const [index, entry] of (action.validates ?? []).entries()) {\n if (!params.includes(entry.param)) {\n ctx.addIssue({\n code: 'custom',\n message: `validates references undeclared param '${entry.param}'`,\n path: ['validates', index],\n })\n }\n }\n })\n\nexport type ActionDefinition = z.output<typeof actionSchema>\n\nexport function extractNamedParams(sql: string): string[] {\n const withoutStrings = sql.replace(QUOTED_STRING_PATTERN, \"''\")\n const names = [...withoutStrings.matchAll(NAMED_PARAM_PATTERN)].map((match) => match[1] as string)\n return [...new Set(names)]\n}\n\n/** One statement, or the ordered list — normalized to trimmed strings. */\nexport function actionStatementSources(executes: string | readonly string[]): string[] {\n return (Array.isArray(executes) ? executes : [executes]).map((statement) => statement.trim())\n}\n\nfunction executesIssues(\n executes: string | readonly string[],\n declaredParams: ReadonlySet<string>,\n hasReturns: boolean,\n): string[] {\n const issues: string[] = []\n const statements = actionStatementSources(executes)\n statements.forEach((statement, index) => {\n // Literal-stripped form so `;`/`--`/RETURNING inside a quoted value isn't a false hit.\n const withoutStrings = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n const at = statements.length > 1 ? ` (statement ${index + 1})` : ''\n if (!EXECUTES_VERB_PATTERN.test(statement)) issues.push(`executes must be INSERT, UPDATE, or DELETE${at}`)\n if (withoutStrings.replace(/;\\s*$/, '').includes(';')) issues.push(`each executes entry must be a single statement${at}`)\n if (SQL_COMMENT_PATTERN.test(withoutStrings)) issues.push(`executes must not contain SQL comments${at}`)\n if (DOLLAR_QUOTE_PATTERN.test(withoutStrings)) issues.push(`executes must not use dollar-quoted strings${at}`)\n if (ESCAPE_STRING_PATTERN.test(withoutStrings)) issues.push(`executes must not use escape strings (E'…')${at}`)\n // A double-quoted identifier hides `:param` from the compiler's literal scanner.\n if (withoutStrings.includes('\"')) issues.push(`executes must not use double-quoted identifiers${at}`)\n if (BARE_CLAIM_CALL_PATTERN.test(withoutStrings.replace(MASKED_CLAIM_CALL_PATTERN, ''))) {\n issues.push(`executes has a malformed claim()/capability() call — use e.g. claim('sub')${at}`)\n }\n // RETURNING populates the returns rows, so it belongs on the last statement\n // only, and only when returns is declared.\n if (RETURNING_PATTERN.test(withoutStrings) && !(hasReturns && index === statements.length - 1)) {\n issues.push(\n hasReturns\n ? `only the last executes statement may use RETURNING${at}`\n : `executes must not use RETURNING unless the action declares returns${at}`,\n )\n }\n })\n const last = statements.at(-1)\n if (hasReturns && last && !RETURNING_PATTERN.test(last.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n issues.push('the last executes statement must use RETURNING to populate the declared returns columns')\n }\n const undeclared = extractNamedParams(statements.join('\\n')).filter((name) => !declaredParams.has(name))\n if (undeclared.length > 0) issues.push(`executes references undeclared params: ${undeclared.join(', ')}`)\n return issues\n}\n","import type { ColumnType } from '../schema/columns.js'\n\n/** Definition-surface aliases → Postgres type names as drizzle-kit snapshots them. */\nconst SQL_TYPE_NAMES: Readonly<Partial<Record<ColumnType, string>>> = {\n double: 'double precision',\n timestamptz: 'timestamp with time zone',\n}\n\nexport const sqlTypeName = (type: ColumnType): string => SQL_TYPE_NAMES[type] ?? type\n","/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nexport const capabilityExpression = (key: string): string =>\n `coalesce(${CLAIMS_SOURCE} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import type { ColumnType } from '../schema/columns.js'\nimport type { CompareOp, Operand, Predicate } from '../predicate/ast.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport { capabilityExpression, claimExpression, quoteIdentifier, quoteLiteral } from './sql.js'\n\nconst SQL_COMPARE_OPS: Readonly<Record<CompareOp, string>> = {\n '=': '=',\n '!=': '<>',\n '<': '<',\n '<=': '<=',\n '>': '>',\n '>=': '>=',\n}\n\n/** Column name → declared type, so claim comparisons can cast to the column's side. */\nexport type PredicateColumnTypes = Readonly<Record<string, ColumnType>>\n\nfunction compileOperand(operand: Operand, other: Operand, columnTypes?: PredicateColumnTypes): string {\n if (operand.kind === 'column') return quoteIdentifier(operand.name)\n if (operand.kind === 'claim') {\n const expression = claimExpression(operand.key)\n // Claims extract as text; comparing against a typed column (uuid = text\n // has no operator) needs the claim cast to the column's declared type. A\n // NULL claim stays NULL through the cast, so the policy still fails closed.\n const columnType = other.kind === 'column' ? columnTypes?.[other.name] : undefined\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n const { value } = operand\n if (value === null) return 'NULL'\n if (typeof value === 'string') return quoteLiteral(value)\n return String(value)\n}\n\nfunction compileComparison(op: CompareOp, left: Operand, right: Operand, columnTypes?: PredicateColumnTypes): string {\n const nullSide = left.kind === 'literal' && left.value === null ? right : right.kind === 'literal' && right.value === null ? left : null\n if (nullSide && (op === '=' || op === '!=')) {\n return `${compileOperand(nullSide, nullSide, columnTypes)} IS${op === '!=' ? ' NOT' : ''} NULL`\n }\n return `${compileOperand(left, right, columnTypes)} ${SQL_COMPARE_OPS[op]} ${compileOperand(right, left, columnTypes)}`\n}\n\n/** Predicate AST → a parenthesized SQL boolean expression. Never interpolates raw policy text. */\nexport function compilePredicate(predicate: Predicate, columnTypes?: PredicateColumnTypes): string {\n switch (predicate.kind) {\n case 'and':\n case 'or': {\n const joined = predicate.operands.map((operand) => compilePredicate(operand, columnTypes)).join(` ${predicate.kind.toUpperCase()} `)\n return `(${joined})`\n }\n case 'not':\n return `(NOT ${compilePredicate(predicate.operand, columnTypes)})`\n case 'compare':\n return `(${compileComparison(predicate.op, predicate.left, predicate.right, columnTypes)})`\n case 'capability':\n return `(${capabilityExpression(predicate.key)})`\n }\n}\n","import { z } from 'zod'\nimport { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { actionStatementSources, type ActionDefinition } from '../schema/actions.js'\nimport type { ColumnType } from '../schema/columns.js'\nimport { compilePredicate } from './predicates.js'\nimport { capabilityExpression, claimExpression } from './sql.js'\n\n/**\n * Action definitions → the pure pieces the apply-time function generator and\n * the executor need: a zod schema for the request params, the executes body\n * with `claim()`/`capability()` rewritten to the compiled claims expressions\n * and each `:param` rewritten to its plpgsql argument name, the declared\n * param order, and the compiled `requires` gate. Raw action text never reaches\n * SQL unrewritten.\n */\n\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\n/**\n * One scan, leftmost-wins: a claim/capability call (whose argument is itself a\n * quoted literal) matches before the bare-literal alternative, while a literal\n * that merely CONTAINS call-looking text is consumed whole and left verbatim.\n */\nconst TOKEN_PATTERN =\n /\\bclaim\\(\\s*'((?:[^']|'')*)'\\s*\\)|\\bcapability\\(\\s*'((?:[^']|'')*)'\\s*\\)|'(?:[^']|'')*'|(?<!:):([a-z][a-z0-9_]*)/g\nconst BARE_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\n\n/**\n * Param schemas are a SHAPE contract for the JSON body, never value grammars\n * — values reach Postgres as bind parameters and the column's input function\n * is the authority (a bad uuid/number/date fails there as the caller's 400).\n * Every scalar also accepts its string form so exact bigint/numeric values\n * survive JSON's float bottleneck.\n */\nconst PARAM_SCHEMAS: Readonly<Record<ColumnType, z.ZodType>> = {\n uuid: z.string(),\n text: z.string(),\n integer: z.union([z.number(), z.string()]),\n bigint: z.union([z.number(), z.string()]),\n numeric: z.union([z.number(), z.string()]),\n double: z.union([z.number(), z.string()]),\n boolean: z.union([z.boolean(), z.string()]),\n timestamptz: z.string(),\n date: z.string(),\n jsonb: z.unknown(),\n}\n\nexport function buildActionParamsSchema(action: ActionDefinition): z.ZodType<Record<string, unknown>> {\n const shape: Record<string, z.ZodType> = {}\n const entries = Object.entries(action.params ?? {})\n for (const [name, param] of entries) {\n // Optional → nullish so an explicit JSON null (a nullable FK cleared to\n // NULL) is accepted, not just an omitted key.\n shape[name] = param.optional ? PARAM_SCHEMAS[param.type].nullish() : PARAM_SCHEMAS[param.type]\n }\n return z.strictObject(shape).superRefine((obj, ctx) => {\n // jsonb's z.unknown() treats an absent key as valid, so a REQUIRED jsonb\n // param could be omitted and bound as SQL NULL — enforce presence here\n // (every other required scalar's schema already rejects undefined).\n for (const [name, param] of entries) {\n if (!param.optional && param.type === 'jsonb' && (obj as Record<string, unknown>)[name] === undefined) {\n ctx.addIssue({ code: 'custom', message: 'Required', path: [name] })\n }\n }\n }) as z.ZodType<Record<string, unknown>>\n}\n\n/** Declared param names in signature order — the function's arg order and the executor's positional-call order. */\nexport const actionParamOrder = (action: ActionDefinition): string[] => Object.keys(action.params ?? {})\n\n/** The plpgsql argument name for a declared param — prefixed so it can never collide with a column of the same name inside the executes body. */\nexport const actionParamArg = (name: string): string => `p_${name}`\n\n/**\n * Compile an action's `executes` (one statement or the ordered list) into the\n * statements of its Postgres function body: `claim('x')`/`capability('k')`\n * become the compiled fail-closed claims expressions (the same SQL policies\n * use), and each `:param` becomes its `p_<name>` plpgsql argument — quoted\n * literals pass through verbatim. A call shape outside the grammar (bad quoting,\n * wrong args) fails loudly here; the build also rejects it in `executesIssues`.\n */\nexport function compileActionStatements(\n action: ActionDefinition,\n renderParam: (name: string) => string = actionParamArg,\n): string[] {\n return actionStatementSources(action.executes).map((statement) => compileStatement(statement, renderParam))\n}\n\nfunction compileStatement(sql: string, renderParam: (name: string) => string): string {\n const compiled = sql.replace(TOKEN_PATTERN, (token, claimKey?: string, capabilityKey?: string, paramName?: string) => {\n if (claimKey !== undefined) {\n if (!CLAIM_KEY_PATTERN.test(claimKey)) throw new OrmDefinitionError(`invalid claim key in executes: ${token}`)\n return claimExpression(claimKey)\n }\n if (capabilityKey !== undefined) {\n if (!CAPABILITY_KEY_PATTERN.test(capabilityKey)) {\n throw new OrmDefinitionError(`invalid capability key in executes: ${token}`)\n }\n return capabilityExpression(capabilityKey)\n }\n if (paramName !== undefined) return renderParam(paramName)\n return token\n })\n\n // Literals are masked first so text inside them stays inert; a surviving\n // call shape is malformed (valid calls were rewritten away).\n if (BARE_CALL_PATTERN.test(compiled.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n throw new OrmDefinitionError('executes contains a claim()/capability() call outside the grammar')\n }\n return compiled\n}\n\n/** Compiled `requires` gate — a SQL boolean over the transaction claims, or null when unguarded. */\nexport function compileActionRequires(action: ActionDefinition): string | null {\n return action.requires ? compilePredicate(action.requires.ast) : null\n}\n\n/** Capability keys referenced across the executes statements (same scan the rewrite uses). */\nexport function referencedExecuteCapabilities(action: ActionDefinition): string[] {\n const keys: string[] = []\n for (const statement of actionStatementSources(action.executes)) {\n for (const match of statement.matchAll(TOKEN_PATTERN)) {\n if (match[2] !== undefined) keys.push(match[2])\n }\n }\n return keys\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport {\n actionParamArg,\n actionParamOrder,\n compileActionRequires,\n compileActionStatements,\n} from '../compiler/actions.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { ActionDefinition, ValidatesEntry } from '../schema/actions.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * SQLSTATEs the action function raises for the two application-level denials\n * that Postgres has no native code for. Custom 5-char classes (unused by\n * Postgres) so the executor maps them precisely: requires → 403, validates →\n * 422. RLS `WITH CHECK`, constraints, and bad values keep their native codes.\n */\nexport const ACTION_REQUIRES_DENIED_SQLSTATE = 'ORMRQ'\nexport const ACTION_VALIDATES_FAILED_SQLSTATE = 'ORMVL'\n\n/** Internal function name for a declared action — the `action_` prefix is what the reconcile sweep drops. */\nexport const actionFunctionName = (actionName: string): string => `action_${actionName}`\n\n/**\n * A returns action's final statement, re-projected into the declared `returns`\n * order by column name. `RETURN QUERY` binds the row's columns to the RETURNS\n * TABLE out-params positionally, so trusting the author's RETURNING order would\n * mislabel columns; wrapping in a CTE and selecting the declared names binds by\n * name instead — order-independent, and works with an explicit RETURNING list or\n * `RETURNING *`. PREPARE runs this same form so a declared column the RETURNING\n * doesn't produce fails the apply.\n */\nfunction returnProjection(returns: NonNullable<ActionDefinition['returns']>, lastStatement: string): string {\n const projection = Object.keys(returns).map(quoteIdentifier).join(', ')\n return `WITH orm_returning AS (${lastStatement}) SELECT ${projection} FROM orm_returning`\n}\n\ninterface NamedAction {\n readonly name: string\n readonly action: ActionDefinition\n}\n\nconst allActions = (definition: NamespaceDefinition): NamedAction[] =>\n definition.tables\n .flatMap((table) => Object.entries(table.actions ?? {}).map(([name, action]) => ({ name, action })))\n .sort((a, b) => a.name.localeCompare(b.name))\n\n/**\n * Every declared action becomes a `SECURITY INVOKER` Postgres function, so the\n * apply-time `CREATE FUNCTION` is where Postgres validates the SQL (with\n * `check_function_bodies` on, a bad column/table reference fails the apply and\n * the action never goes live) and the invoke path is a single `SELECT fn(...)`\n * under the consumer role — no client-side statement rewriting at call time.\n *\n * Actions carry no data and are absent from the drizzle snapshot, so instead\n * of diffing them we reconcile: a leading sweep drops every `action_*` function\n * in the schema (clearing removed/renamed/retyped ones — a signature change\n * can't `CREATE OR REPLACE`), then each current action is created fresh. Runs\n * last in the plan because the bodies reference tables the earlier DDL creates.\n */\nexport function actionFunctionStatements(definition: NamespaceDefinition): string[] {\n const schema = ormSchemaName(definition.namespace)\n return [dropAllActionFunctions(schema), ...allActions(definition).flatMap(({ name, action }) => createActionFunction(definition, name, action))]\n}\n\n/**\n * PREPARE each action's executes at apply so Postgres parses and plans it\n * against the live schema — catching unknown columns/tables/types that a\n * plpgsql function body does NOT check at CREATE (it defers to first invoke).\n * A failed PREPARE aborts the apply, so a broken action never goes live. Runs\n * on the migration connection with the namespace on search_path; the prepared\n * statements die with that connection, so no DEALLOCATE is needed.\n */\nexport function actionPrepareChecks(definition: NamespaceDefinition): string[] {\n const actions = allActions(definition)\n if (actions.length === 0) return []\n const statements = [`SET LOCAL search_path TO ${quoteIdentifier(ormSchemaName(definition.namespace))}`]\n for (const { name, action } of actions) {\n const order = actionParamOrder(action)\n const signature = order.length > 0 ? ` (${order.map((param) => sqlTypeName(action.params![param]!.type)).join(', ')})` : ''\n const compiled = compileActionStatements(action, (param) => `$${order.indexOf(param) + 1}`)\n compiled.forEach((sql, index) => {\n // The last statement of a returns action is prepared through the same\n // re-projection the function uses, so a declared column its RETURNING\n // omits fails here at apply, not at first invoke.\n const checked = action.returns && index === compiled.length - 1 ? returnProjection(action.returns, sql) : sql\n statements.push(`PREPARE ${quoteIdentifier(`orm_check_${name}_${index}`)}${signature} AS ${checked}`)\n })\n }\n return statements\n}\n\n/**\n * Drop every `action_*` function in the namespace schema before recreating the\n * current set. The schema holds only ORM-created objects, so the prefix match\n * is exact enough; `\\_` escapes the underscore so it can't widen to `actionX`.\n */\nfunction dropAllActionFunctions(schema: string): string {\n return `DO $orm_reconcile_actions$\nDECLARE\n r record;\nBEGIN\n FOR r IN\n SELECT p.oid::regprocedure AS sig\n FROM pg_catalog.pg_proc p\n JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\n WHERE n.nspname = ${quoteLiteral(schema)} AND p.proname LIKE 'action\\\\_%'\n LOOP\n EXECUTE 'DROP FUNCTION ' || r.sig;\n END LOOP;\nEND\n$orm_reconcile_actions$`\n}\n\nfunction createActionFunction(definition: NamespaceDefinition, name: string, action: ActionDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const fn = `${schema}.${quoteIdentifier(actionFunctionName(name))}`\n const order = actionParamOrder(action)\n const signature = order\n .map((paramName) => `${quoteIdentifier(actionParamArg(paramName))} ${sqlTypeName(action.params![paramName]!.type)}`)\n .join(', ')\n const argTypes = order.map((paramName) => sqlTypeName(action.params![paramName]!.type)).join(', ')\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n\n // The executes statements run in order; the last one carries the result —\n // its RETURNING for a returns action, its ROW_COUNT for a count action.\n const statements = compileActionStatements(action)\n const last = statements[statements.length - 1] as string\n const leading = statements.slice(0, -1).map((statement) => ` ${statement};`)\n const create = action.returns\n ? // RETURNS TABLE + RETURN QUERY over the declared-order re-projection.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS TABLE(${Object.entries(action.returns)\n .map(([column, type]) => `${quoteIdentifier(column)} ${sqlTypeName(type)}`)\n .join(', ')})\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\n-- RETURNS TABLE names OUT params (id, …) that collide with the re-projection's\n-- columns; resolve unqualified names to the column.\n#variable_conflict use_column\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` RETURN QUERY ${returnProjection(action.returns, last)};`].filter(Boolean).join('\\n')}\nEND\n$orm_action$`\n : // No returns: report the last statement's affected count.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS bigint\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\nDECLARE\n v_count bigint;\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` ${last};`].filter(Boolean).join('\\n')}\n GET DIAGNOSTICS v_count = ROW_COUNT;\n RETURN v_count;\nEND\n$orm_action$`\n\n // Least privilege: only the namespace consumer role (what the executor\n // SET LOCAL ROLEs into) may invoke; the body still runs INVOKER, so RLS\n // and WITH CHECK bind it exactly as a direct statement would.\n return [\n create,\n `REVOKE ALL ON FUNCTION ${fn}(${argTypes}) FROM PUBLIC`,\n `GRANT EXECUTE ON FUNCTION ${fn}(${argTypes}) TO ${role}`,\n ]\n}\n\n/** The requires gate + validates probes that precede the mutation, in that order. */\nfunction functionGuards(definition: NamespaceDefinition, name: string, action: ActionDefinition): string {\n const lines: string[] = []\n\n const requires = compileActionRequires(action)\n if (requires) {\n // An unauthorized caller must be rejected before any validates probe can\n // leak valid-vs-invalid ids.\n lines.push(\n ` IF NOT (${requires}) THEN`,\n ` RAISE EXCEPTION 'action ${name} requires a grant the caller does not hold' USING ERRCODE = ${quoteLiteral(ACTION_REQUIRES_DENIED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n for (const entry of action.validates ?? []) {\n const { schema, table, key } = resolveValidatesTarget(definition, entry)\n const arg = quoteIdentifier(actionParamArg(entry.param))\n // Omitted/null optional params skip the check; FOR SHARE holds the row so\n // the soft link can't dangle before commit. RLS scopes the probe to what\n // the caller may see — the FK-like semantic, no cross-row oracle.\n lines.push(\n ` IF ${arg} IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${quoteIdentifier(schema)}.${quoteIdentifier(table)} WHERE ${quoteIdentifier(key)} = ${arg} FOR SHARE) THEN`,\n ` RAISE EXCEPTION 'validates failed: no ${entry.table} row for ${entry.param}' USING ERRCODE = ${quoteLiteral(ACTION_VALIDATES_FAILED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n return lines.join('\\n')\n}\n\nfunction resolveValidatesTarget(\n definition: NamespaceDefinition,\n entry: ValidatesEntry,\n): { schema: string; table: string; key: string } {\n if (entry.table.includes('.')) {\n const [schema, table] = entry.table.split('.') as [string, string]\n return { schema, table, key: 'id' }\n }\n const target = definition.tables.find((table) => table.table === entry.table)\n const key = target && Object.entries(target.columns ?? {}).find(([, column]) => column.primary_key)?.[0]\n if (!target || !key) {\n // buildNamespaceDefinition already rejects unknown and synced targets, so\n // this is a belt for a target reachable only through a direct compile.\n throw new OrmDefinitionError(`action validates target '${entry.table}' is not a local table with a primary key`)\n }\n return { schema: ormSchemaName(definition.namespace), table: entry.table, key }\n}\n","import { z } from 'zod'\nimport {\n MAX_IDENTIFIER_LENGTH,\n RESERVED_COLUMN_NAMES,\n RESERVED_TABLE_NAMES,\n SYNCED_SOURCE_PATTERN,\n} from '../constants.js'\nimport { referencedColumns, walkPredicate, type Operand } from '../predicate/ast.js'\nimport { actionSchema } from './actions.js'\nimport { castParts, columnSchema, type ColumnType } from './columns.js'\nimport { identifierSchema, namespaceSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst linkSchema = z.strictObject({\n to: tableReferenceSchema,\n on: identifierSchema,\n enforce: z.boolean().optional(),\n description: z.string().optional(),\n})\n\n// No column-count or index-count caps — Postgres's own INDEX_MAX_KEYS is the\n// authority and CREATE INDEX fails loudly past it.\nconst indexSchema = z\n .union([\n z.array(identifierSchema).min(1),\n z.strictObject({\n columns: z.array(identifierSchema).min(1),\n unique: z.boolean().optional(),\n name: identifierSchema.optional(),\n }),\n ])\n .transform((index) => (Array.isArray(index) ? { columns: index } : index))\n\nconst policiesSchema = z.strictObject({\n read: parsedPredicateSchema.optional(),\n write: parsedPredicateSchema.optional(),\n})\n\nexport const tableFileSchema = z\n .strictObject({\n namespace: namespaceSchema,\n table: identifierSchema,\n description: z.string().optional(),\n columns: z.record(identifierSchema, columnSchema).optional(),\n source: z.string().regex(SYNCED_SOURCE_PATTERN, 'source must reference a gold-layer table').optional(),\n links: z.record(identifierSchema, linkSchema).optional(),\n indexes: z.array(indexSchema).optional(),\n policies: policiesSchema.optional(),\n actions: z.record(identifierSchema, actionSchema).optional(),\n })\n .superRefine((table, ctx) => {\n if (RESERVED_TABLE_NAMES.has(table.table)) {\n ctx.addIssue({ code: 'custom', message: `'${table.table}' is a reserved table name`, path: ['table'] })\n }\n for (const name of Object.keys(table.columns ?? {})) {\n if (RESERVED_COLUMN_NAMES.has(name)) {\n ctx.addIssue({\n code: 'custom',\n message: `column '${name}' collides with the Data API's reserved query parameters (select, order, limit, offset) — it could never be filtered`,\n path: ['columns', name],\n })\n }\n }\n if (table.source) validateSyncedTable(table, ctx)\n else validateColumnTable(table, ctx)\n validateLinks(table, ctx)\n validatePolicyColumns(table, ctx)\n validateDerivedNameLengths(table, ctx)\n })\n\nexport type TableFile = z.output<typeof tableFileSchema>\nexport type LinkDefinition = z.output<typeof linkSchema>\nexport type IndexDefinition = z.output<typeof indexSchema>\n\n/** The physical index name — explicit, or derived from table + columns. One formula for the builder and the namespace-wide uniqueness check. */\nexport const indexName = (table: string, definition: IndexDefinition): string =>\n definition.name ?? `ix_${table}_${definition.columns.join('_')}`\n\n/** Row-policy name the security pass owns per table — `<table>_<suffix>`. One formula for the emitter and the load-time length check. */\nexport const policyName = (table: string, suffix: string): string => `${table}_${suffix}`\n\n/** Enforced-link FK constraint name — one formula for the engine builder and the load-time length check. */\nexport const foreignKeyName = (table: string, link: string): string => `fk_${table}_${link}`\n\ntype RefineCtx = { addIssue: (issue: { code: 'custom'; message: string; path?: (string | number)[] }) => void }\n\nfunction validateSyncedTable(table: TableFile, ctx: RefineCtx): void {\n const forbidden: Array<[keyof TableFile, string]> = [\n ['columns', 'synced tables reflect their source; columns are not declared'],\n ['actions', 'synced tables are read-only; actions are not allowed'],\n ['indexes', 'synced tables are system-owned; indexes are not allowed'],\n ]\n for (const [field, message] of forbidden) {\n if (table[field] !== undefined) ctx.addIssue({ code: 'custom', message, path: [field] })\n }\n if (table.policies?.write) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'write'] })\n }\n}\n\nfunction validateRenames(\n columns: NonNullable<TableFile['columns']>,\n names: readonly string[],\n ctx: RefineCtx,\n): void {\n const renameSources = new Map<string, string>()\n for (const name of names) {\n const renamedFrom = columns[name]?.renamed_from\n if (!renamedFrom) continue\n if (renamedFrom === name || names.includes(renamedFrom)) {\n ctx.addIssue({\n code: 'custom',\n message: 'renamed_from must name a column that no longer exists',\n path: ['columns', name, 'renamed_from'],\n })\n }\n // Two columns claiming the same source would make the rename migration ambiguous.\n const claimed = renameSources.get(renamedFrom)\n if (claimed) {\n ctx.addIssue({\n code: 'custom',\n message: `renamed_from '${renamedFrom}' is already claimed by '${claimed}'`,\n path: ['columns', name, 'renamed_from'],\n })\n }\n renameSources.set(renamedFrom, name)\n }\n}\n\nfunction validateColumnTable(table: TableFile, ctx: RefineCtx): void {\n const columns = table.columns ?? {}\n const names = Object.keys(columns)\n if (names.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'a table must declare columns or a source', path: ['columns'] })\n return\n }\n\n const primaryKeys = names.filter((name) => columns[name]?.primary_key)\n if (primaryKeys.length !== 1) {\n ctx.addIssue({ code: 'custom', message: 'exactly one column must be primary_key', path: ['columns'] })\n }\n\n validateRenames(columns, names, ctx)\n for (const name of names) {\n const column = columns[name]\n if (!column) continue\n const cast = column.cast ? castParts(column.cast) : null\n if (column.cast && cast?.column !== name) {\n ctx.addIssue({\n code: 'custom',\n message: 'cast must reference the column it is declared on',\n path: ['columns', name, 'cast'],\n })\n }\n if (cast && cast.type !== column.type) {\n ctx.addIssue({\n code: 'custom',\n message: `cast target '${cast.type}' must match the declared type '${column.type}'`,\n path: ['columns', name, 'cast'],\n })\n }\n }\n\n for (const [position, index] of (table.indexes ?? []).entries()) {\n if (new Set(index.columns).size !== index.columns.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'index names a column more than once',\n path: ['indexes', position],\n })\n }\n for (const column of index.columns) {\n if (!names.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `index references unknown column '${column}'`,\n path: ['indexes', position],\n })\n }\n }\n }\n}\n\nfunction validateLinks(table: TableFile, ctx: RefineCtx): void {\n const columnNames = Object.keys(table.columns ?? {})\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (!table.source && !columnNames.includes(link.on)) {\n ctx.addIssue({ code: 'custom', message: `link references unknown column '${link.on}'`, path: ['links', name, 'on'] })\n }\n if (link.enforce && link.to.includes('.')) {\n ctx.addIssue({\n code: 'custom',\n message: 'enforce is only valid for links inside the namespace; cross-boundary links stay soft',\n path: ['links', name, 'enforce'],\n })\n }\n if (link.enforce && table.source) {\n ctx.addIssue({\n code: 'custom',\n message: 'a synced table cannot enforce foreign keys — its DDL is owned by the sync',\n path: ['links', name, 'enforce'],\n })\n }\n }\n}\n\n/**\n * Postgres silently truncates identifiers past 63 bytes, so an over-long\n * derived name would collide or drift from what the engine thinks it created.\n * Fail at load instead. Explicit names are already capped by identifierSchema;\n * only the derived formulas can overflow.\n */\nfunction validateDerivedNameLengths(table: TableFile, ctx: RefineCtx): void {\n const worstPolicy = policyName(table.table, 'insert')\n if (!table.source && worstPolicy.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `table name is too long — the derived policy name '${worstPolicy}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit`,\n path: ['table'],\n })\n }\n for (const [position, index] of (table.indexes ?? []).entries()) {\n const name = indexName(table.table, index)\n if (name.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived index name '${name}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — set a shorter explicit name`,\n path: ['indexes', position],\n })\n }\n }\n for (const [name, link] of Object.entries(table.links ?? {})) {\n const constraint = foreignKeyName(table.table, name)\n if (link.enforce && constraint.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived foreign-key name '${constraint}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the link or table name`,\n path: ['links', name],\n })\n }\n }\n for (const name of Object.keys(table.actions ?? {})) {\n // Each action compiles to an `action_<name>` Postgres function.\n const fnName = `action_${name}`\n if (fnName.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived action function name '${fnName}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the action name`,\n path: ['actions', name],\n })\n }\n }\n}\n\n/** Comparability groups — Postgres compares freely within a group, errors across them. One helper shared with link/param checks. */\nconst TYPE_GROUPS: Readonly<Record<ColumnType, 'numeric' | 'text' | 'uuid' | 'temporal' | 'boolean' | 'jsonb'>> = {\n integer: 'numeric',\n bigint: 'numeric',\n numeric: 'numeric',\n double: 'numeric',\n text: 'text',\n uuid: 'uuid',\n date: 'temporal',\n timestamptz: 'temporal',\n boolean: 'boolean',\n jsonb: 'jsonb',\n}\n\nexport const columnTypeGroup = (type: ColumnType): string => TYPE_GROUPS[type]\n\nfunction validatePolicyColumns(table: TableFile, ctx: RefineCtx): void {\n if (table.source) return\n const columns = table.columns ?? {}\n const columnNames = Object.keys(columns)\n for (const kind of ['read', 'write'] as const) {\n const predicate = table.policies?.[kind]\n if (!predicate) continue\n for (const column of referencedColumns(predicate.ast)) {\n if (!columnNames.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `policy references unknown column '${column}'`,\n path: ['policies', kind],\n })\n }\n }\n walkPredicate(predicate.ast, (node) => {\n if (node.kind !== 'compare') return\n const issue = comparisonTypeIssue(node.left, node.right, columns)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['policies', kind] })\n })\n }\n}\n\n/**\n * A comparison that can never type-check in Postgres fails at load, not at\n * CREATE POLICY. Claims are exempt — the compiler casts them to the column's\n * declared type — and NULL literals compile to IS [NOT] NULL.\n */\nfunction comparisonTypeIssue(\n left: Operand,\n right: Operand,\n columns: NonNullable<TableFile['columns']>,\n): string | null {\n const groupOf = (operand: Operand): string | null =>\n operand.kind === 'column' ? (columns[operand.name] ? TYPE_GROUPS[columns[operand.name]!.type] : null) : null\n\n if (left.kind === 'column' && right.kind === 'column') {\n const leftGroup = groupOf(left)\n const rightGroup = groupOf(right)\n if (leftGroup && rightGroup && leftGroup !== rightGroup) {\n return `policy compares '${left.name}' (${columns[left.name]!.type}) with '${right.name}' (${columns[right.name]!.type}) — incomparable types`\n }\n return null\n }\n\n const column = left.kind === 'column' ? left : right.kind === 'column' ? right : null\n const literal = left.kind === 'literal' ? left : right.kind === 'literal' ? right : null\n if (!column || !literal || literal.value === null) return null\n const columnGroup = groupOf(column)\n if (!columnGroup) return null\n // Quoted literals are unknown-typed and coerce through the column's input\n // function, whose grammar is richer than any client-side mirror ('+1',\n // '.5', 'NaN', PG16 digit separators, uuid brace forms, boolean prefixes).\n // A malformed value fails loudly at apply — never falsely rejected here.\n if (typeof literal.value === 'string') return null\n const literalGroup = typeof literal.value === 'number' ? 'numeric' : 'boolean'\n if (literalGroup !== columnGroup) {\n return `policy compares '${column.name}' (${columns[column.name]!.type}) with a ${typeof literal.value} literal — incomparable types`\n }\n return null\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport { compilePredicate } from '../compiler/predicates.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { policyName as derivePolicyName, type TableFile } from '../schema/table.js'\n\nexport const CONSUMER_TABLE_PRIVILEGES = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] as const\n\n/**\n * Policy names we own per table. `write` is the legacy single-policy name —\n * dropped on every apply so pre-split schemas converge.\n */\nconst POLICY_SUFFIXES = ['read', 'insert', 'update', 'delete', 'write'] as const\n\n/**\n * The security statements the kit never sees — FORCE row security (so\n * policies bind the table owner too), the row policies themselves, and the\n * grants that let the Data API's consumer role reach the namespace.\n *\n * Policies deliberately bypass drizzle-kit's diff: its API resolves\n * create+drop pairs interactively (fatal in a service), and they are cheap\n * and fully determined by the definition — so every apply drops and\n * recreates them. Writes compile to command-scoped policies, never FOR ALL:\n * permissive policies OR together, so an all-commands policy would let\n * write-capable callers SELECT rows the read policy hides.\n */\nexport function securityStatements(definition: NamespaceDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n const tables = columnTables(definition)\n\n const force = tables.map(\n (table) => `ALTER TABLE ${schema}.${quoteIdentifier(table.table)} FORCE ROW LEVEL SECURITY`,\n )\n const policies = tables.flatMap((table) => policyStatements(schema, table))\n const grants = tables.map(\n (table) =>\n `GRANT ${CONSUMER_TABLE_PRIVILEGES.join(', ')} ON ${schema}.${quoteIdentifier(table.table)} TO ${role}`,\n )\n return [...force, ...policies, `GRANT USAGE ON SCHEMA ${schema} TO ${role}`, ...grants]\n}\n\n/**\n * Drop every owned policy on the given (already existing) tables. Runs before\n * hints and DDL so a column referenced by an installed policy can be cast or\n * dropped — Postgres refuses to alter a column a live policy depends on.\n */\nexport function policyDropStatements(schemaName: string, tables: readonly string[]): string[] {\n const schema = quoteIdentifier(schemaName)\n return tables.flatMap((table) =>\n POLICY_SUFFIXES.map(\n (suffix) => `DROP POLICY IF EXISTS ${quoteIdentifier(derivePolicyName(table, suffix))} ON ${schema}.${quoteIdentifier(table)}`,\n ),\n )\n}\n\nfunction policyStatements(schema: string, table: TableFile): string[] {\n const qualified = `${schema}.${quoteIdentifier(table.table)}`\n const policyName = (suffix: string) => quoteIdentifier(derivePolicyName(table.table, suffix))\n const statements = POLICY_SUFFIXES.map((suffix) => `DROP POLICY IF EXISTS ${policyName(suffix)} ON ${qualified}`)\n const columnTypes = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.type]),\n )\n\n const read = table.policies?.read\n if (read) {\n statements.push(`CREATE POLICY ${policyName('read')} ON ${qualified} FOR SELECT USING (${compilePredicate(read.ast, columnTypes)})`)\n }\n const write = table.policies?.write\n if (write) {\n const predicate = compilePredicate(write.ast, columnTypes)\n statements.push(`CREATE POLICY ${policyName('insert')} ON ${qualified} FOR INSERT WITH CHECK (${predicate})`)\n statements.push(\n `CREATE POLICY ${policyName('update')} ON ${qualified} FOR UPDATE USING (${predicate}) WITH CHECK (${predicate})`,\n )\n statements.push(`CREATE POLICY ${policyName('delete')} ON ${qualified} FOR DELETE USING (${predicate})`)\n }\n return statements\n}\n\nexport const columnTables = (definition: NamespaceDefinition): TableFile[] =>\n definition.tables.filter((table) => !table.source)\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n date,\n doublePrecision,\n integer,\n jsonb,\n numeric,\n text,\n timestamp,\n uuid,\n} from 'drizzle-orm/pg-core'\nimport { isFunctionDefault, type ColumnDefinition, type ColumnType } from '../schema/columns.js'\n\ntype ColumnFactory = (name: string) => ColumnBuilder\n\ninterface ColumnBuilder {\n primaryKey(): ColumnBuilder\n notNull(): ColumnBuilder\n unique(): ColumnBuilder\n default(value: unknown): ColumnBuilder\n}\n\nconst FACTORIES: Readonly<Record<ColumnType, ColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\n // Mode 'bigint' keeps int8 lossless — mode 'number' silently rounds past\n // 2^53. The read executor serializes BigInt to string for JSON.\n bigint: (name) => bigint(name, { mode: 'bigint' }),\n numeric: (name) => numeric(name),\n double: (name) => doublePrecision(name),\n boolean: (name) => boolean(name),\n timestamptz: (name) => timestamp(name, { withTimezone: true }),\n date: (name) => date(name),\n jsonb: (name) => jsonb(name),\n}\n\nexport function buildColumn(name: string, definition: ColumnDefinition): unknown {\n let column = FACTORIES[definition.type](name)\n if (definition.primary_key) column = column.primaryKey()\n if (definition.nullable === false && !definition.primary_key) column = column.notNull()\n if (definition.unique && !definition.primary_key) column = column.unique()\n if (definition.default !== undefined) {\n const value = definition.default\n // Only the schema's exact function allowlist becomes raw SQL — a text\n // literal that happens to end in parentheses is data, never code.\n column = column.default(\n typeof value === 'string' && isFunctionDefault(value, definition.type) ? sql.raw(value) : value,\n )\n }\n return column\n}\n","import { foreignKey, index, pgSchema, uniqueIndex, type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isQualifiedReference } from '../schema/identifiers.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport { buildColumn } from './columns.js'\nimport { columnTables } from './security.js'\n\nexport interface DrizzleEntities {\n /** The in-memory schema bag drizzle-kit snapshots (`generateDrizzleJson(imports)`). */\n readonly imports: Record<string, unknown>\n /** Tables by definition name — the typed handles query execution uses. */\n readonly tables: Record<string, PgTableWithColumns<never>>\n readonly schemaName: string\n}\n\n/** Table names share the imports bag with the schema entity — keep the schema key un-collidable ('$' can't appear in an identifier). */\nconst SCHEMA_IMPORT_KEY = '$schema'\n\n/**\n * Definitions → runtime Drizzle entities. Tables build in dependency order so\n * enforced links can reference their target's built column; policies attach in\n * the table's extras with predicates compiled from the parsed AST — raw policy\n * text never reaches SQL. Tables without policies stay RLS-enabled: default deny.\n */\nexport function buildDrizzleEntities(definition: NamespaceDefinition): DrizzleEntities {\n const schemaName = ormSchemaName(definition.namespace)\n const schema = pgSchema(schemaName)\n const imports: Record<string, unknown> = { [SCHEMA_IMPORT_KEY]: schema }\n const tables: Record<string, PgTableWithColumns<never>> = {}\n const built = new Map<string, Record<string, unknown>>()\n\n for (const table of sortByEnforcedLinks(columnTables(definition))) {\n const drizzleTable = buildTable(schema, table, built)\n built.set(table.table, drizzleTable as Record<string, unknown>)\n imports[table.table] = drizzleTable\n // enableRLS() returns Omit<..., 'enableRLS'>, which no longer overlaps\n // the columns generic — the double cast is the drizzle-typed escape hatch.\n tables[table.table] = drizzleTable as unknown as PgTableWithColumns<never>\n }\n return { imports, tables, schemaName }\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: TableFile,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n const columns = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, buildColumn(name, column)]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildIndexes(table, self),\n ...buildForeignKeys(table, self, built),\n ])\n // Every table is RLS-enabled; the policies themselves are emitted by the\n // security pass (never through the kit diff — see security.ts).\n return drizzleTable.enableRLS()\n}\n\nfunction buildIndexes(table: TableFile, self: Record<string, unknown>) {\n return (table.indexes ?? []).map((definition) => {\n const name = indexName(table.table, definition)\n const factory = definition.unique ? uniqueIndex(name) : index(name)\n const columns = definition.columns.map((column) => self[column])\n return factory.on(...(columns as [never, ...never[]]))\n })\n}\n\nfunction buildForeignKeys(\n table: TableFile,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n return Object.entries(table.links ?? {})\n .filter(([, link]) => link.enforce)\n .map(([name, link]) => {\n // A self-referential link (parent_id hierarchy) resolves against the\n // table's own columns — it is never in `built` while being built.\n const target = link.to === table.table ? self : built.get(link.to)\n const targetColumn = target && findPrimaryKeyColumn(target)\n if (!target || !targetColumn) {\n throw new OrmDefinitionError(`enforced link '${name}' on '${table.table}' has no built target '${link.to}'`)\n }\n return foreignKey({\n name: foreignKeyName(table.table, name),\n columns: [self[link.on]] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n })\n}\n\nfunction findPrimaryKeyColumn(target: Record<string, unknown>): unknown {\n const columns = Object.values(target).filter(\n (value) => value !== null && typeof value === 'object' && 'primary' in (value as object),\n )\n return columns.find((column) => (column as { primary: boolean }).primary)\n}\n\n/** Targets of enforced links build first; cycles are a definition error. */\nfunction sortByEnforcedLinks(tables: readonly TableFile[]): TableFile[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: TableFile[] = []\n const placed = new Set<string>()\n\n while (remaining.size > 0) {\n const ready = [...remaining.values()].filter((table) =>\n enforcedTargets(table).every((target) => placed.has(target) || !remaining.has(target)),\n )\n if (ready.length === 0) {\n throw new OrmDefinitionError(`enforced links form a cycle among: ${[...remaining.keys()].join(', ')}`)\n }\n for (const table of ready) {\n sorted.push(table)\n placed.add(table.table)\n remaining.delete(table.table)\n }\n }\n return sorted\n}\n\nconst enforcedTargets = (table: TableFile): string[] =>\n Object.values(table.links ?? {})\n // A self-target is not an ordering dependency — the FK builds inline.\n .filter((link) => link.enforce && !isQualifiedReference(link.to) && link.to !== table.table)\n .map((link) => link.to)\n","import { generateDrizzleJson, generateMigration, upPgSnapshot } from 'drizzle-kit/api'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport { castParts } from '../schema/columns.js'\nimport { sqlTypeName } from './types.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\nimport { columnTables } from './security.js'\n\n/** drizzle-kit's serialized schema — the diff/replay artifact the registry stores. */\nexport type NamespaceSnapshot = ReturnType<typeof generateDrizzleJson>\n\ninterface SnapshotColumn {\n name: string\n type: string\n [key: string]: unknown\n}\n\ninterface SnapshotTable {\n name: string\n schema: string\n columns: Record<string, SnapshotColumn>\n [key: string]: unknown\n}\n\nexport function generateSnapshot(definition: NamespaceDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n return generateDrizzleJson(imports, previousId, [schemaName])\n}\n\nexport const emptySnapshot = (namespace: string): NamespaceSnapshot =>\n generateDrizzleJson({}, undefined, [ormSchemaName(namespace)])\n\nconst CURRENT_SNAPSHOT_VERSION = (generateDrizzleJson({}) as { version: string }).version\n\n/**\n * Persisted snapshots (registry version rows, committed migrations/meta)\n * outlive drizzle-kit upgrades. `upPgSnapshot` migrates older snapshot\n * formats to the kit's current one; a snapshot that still isn't current\n * after upgrading came from a NEWER kit than this one — fail loudly rather\n * than let the diff silently misread it.\n */\nexport function normalizeSnapshot(snapshot: NamespaceSnapshot): NamespaceSnapshot {\n const upgraded = upPgSnapshot(snapshot as Record<string, unknown>) as NamespaceSnapshot\n const version = (upgraded as { version?: unknown }).version\n if (version !== CURRENT_SNAPSHOT_VERSION) {\n throw new OrmDefinitionError(\n `snapshot format '${String(version)}' is not supported by this drizzle-kit (expected '${CURRENT_SNAPSHOT_VERSION}') — upgrade @sequenceholdings/orm`,\n )\n }\n return upgraded\n}\n\nexport function diffStatements(previous: NamespaceSnapshot, current: NamespaceSnapshot): Promise<string[]> {\n assertUnambiguousDiff(previous, current)\n return generateMigration(previous as never, current as never)\n}\n\n/**\n * drizzle-kit resolves a simultaneous add + drop by PROMPTING (\"did you\n * rename X to Y?\") — interactive hanji UI that hangs a terminal and throws\n * an opaque TTY error everywhere else. Renames are declared in the YAML\n * (`renamed_from`, applied as hints before the diff), so any add+drop pair\n * reaching the kit is either an undeclared rename or two changes bundled\n * into one — refuse both with an actionable message.\n */\nfunction assertUnambiguousDiff(previous: NamespaceSnapshot, current: NamespaceSnapshot): void {\n const previousTables = tablesOf(previous)\n const currentTables = tablesOf(current)\n\n const removedTables = [...previousTables.keys()].filter((name) => !currentTables.has(name))\n const addedTables = [...currentTables.keys()].filter((name) => !previousTables.has(name))\n if (removedTables.length > 0 && addedTables.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff: table(s) added (${addedTables.join(', ')}) and removed (${removedTables.join(', ')}) in the same change — ship the add and the drop as separate changes`,\n )\n }\n\n for (const [name, previousColumns] of previousTables) {\n const currentColumns = currentTables.get(name)\n if (!currentColumns) continue\n const removed = [...previousColumns].filter((column) => !currentColumns.has(column))\n const added = [...currentColumns].filter((column) => !previousColumns.has(column))\n if (removed.length > 0 && added.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff on '${name}': column(s) added (${added.join(', ')}) and removed (${removed.join(', ')}) in the same change — declare \\`renamed_from\\` for a rename, or ship the add and the drop as separate changes`,\n )\n }\n }\n}\n\nfunction tablesOf(snapshot: NamespaceSnapshot): Map<string, Set<string>> {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return new Map(\n Object.values(tables).map((table) => [`${table.schema}.${table.name}`, new Set(Object.keys(table.columns))]),\n )\n}\n\nexport interface MigrationHints {\n /** ALTER RENAME / ALTER TYPE USING statements to run before the kit diff. */\n readonly statements: string[]\n /** Previous snapshot rewritten so the kit diff never sees the rename/cast. */\n readonly adjusted: NamespaceSnapshot\n}\n\n/**\n * Renames and casts are declared in the YAML, never inferred: we emit the\n * statement ourselves and rewrite the previous snapshot to match, so\n * drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service).\n */\nexport function applyMigrationHints(previous: NamespaceSnapshot, definition: NamespaceDefinition): MigrationHints {\n const adjusted = structuredClone(previous) as NamespaceSnapshot\n const statements: string[] = []\n const schemaName = ormSchemaName(definition.namespace)\n const qualified = (table: string) => `${quoteIdentifier(schemaName)}.${quoteIdentifier(table)}`\n\n for (const table of columnTables(definition)) {\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.renamed_from) {\n const previousColumn = snapshotTable.columns[column.renamed_from]\n if (previousColumn && snapshotTable.columns[name]) {\n // Both live: silently ignoring the hint would hand drizzle-kit the\n // source column as a plain drop — data loss the declaration was\n // meant to prevent.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but both columns exist in the previous schema — a rename cannot overwrite a live column`,\n )\n }\n if (previousColumn) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} RENAME COLUMN ${quoteIdentifier(column.renamed_from)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamed_from]\n snapshotTable.columns[name] = { ...previousColumn, name }\n } else if (!snapshotTable.columns[name]) {\n // Neither the declared source nor the destination exists in the\n // previous schema: a typo'd or stale renamed_from. Falling through\n // would hand drizzle-kit a drop/add diff — the exact ambiguity the\n // declaration exists to prevent — so fail with the declaration.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but the previous schema has neither column — check the declared source name`,\n )\n }\n }\n\n const cast = column.cast ? castParts(column.cast) : null\n if (cast) {\n const current = snapshotTable.columns[name]\n const targetType = sqlTypeName(column.type)\n if (current && current.type !== targetType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${targetType} USING ${quoteIdentifier(name)}::${targetType}`,\n )\n current.type = targetType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\nfunction findTable(snapshot: NamespaceSnapshot, schema: string, table: string): SnapshotTable | undefined {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables).find((entry) => entry.schema === schema && entry.name === table)\n}\n\n/** Names of the tables a snapshot holds for one schema — the tables that exist before this plan runs. */\nexport function snapshotTableNames(snapshot: NamespaceSnapshot, schema: string): string[] {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables)\n .filter((entry) => entry.schema === schema)\n .map((entry) => entry.name)\n}\n","import { ormSchemaName } from '../constants.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { actionFunctionStatements, actionPrepareChecks } from './actions.js'\nimport { policyDropStatements, securityStatements } from './security.js'\nimport {\n applyMigrationHints,\n diffStatements,\n emptySnapshot,\n generateSnapshot,\n normalizeSnapshot,\n snapshotTableNames,\n type NamespaceSnapshot,\n} from './snapshot.js'\n\nexport const STATEMENT_KINDS = ['hint', 'ddl', 'security', 'function'] as const\nexport type StatementKind = (typeof STATEMENT_KINDS)[number]\n\nexport interface CompiledStatement {\n readonly kind: StatementKind\n readonly sql: string\n}\n\nexport interface PlannedMigration {\n readonly namespace: string\n readonly schema: string\n readonly statements: readonly CompiledStatement[]\n /** Snapshot of the desired state — persisted by the registry, previous input to the next plan. */\n readonly snapshot: NamespaceSnapshot\n}\n\n/**\n * Desired definition + the previously applied snapshot → ordered statements.\n * The owned policies on pre-existing tables drop first (Postgres refuses to\n * alter or drop a column a live policy depends on), hints (declared\n * renames/casts) rewrite the previous snapshot, drizzle-kit diffs the\n * remainder, and the owned security statements (FORCE RLS, recreated\n * policies, consumer grants) close every migration.\n */\nexport async function planMigration({\n definition,\n previousSnapshot,\n}: {\n definition: NamespaceDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(definition.namespace)\n // Stored snapshots may predate this kit — normalize (and fail loudly on\n // a newer-than-us format) before anything diffs against them.\n const previous = previousSnapshot ? normalizeSnapshot(previousSnapshot) : emptySnapshot(definition.namespace)\n const hints = applyMigrationHints(previous, definition)\n const snapshot = generateSnapshot(definition, previousId(previous))\n const ddl = await diffStatements(hints.adjusted, snapshot)\n // Only tables the previous snapshot holds exist in the database — DROP\n // POLICY IF EXISTS still errors when the table itself is missing.\n const policyDrops = policyDropStatements(schema, snapshotTableNames(previous, schema))\n\n const statements: CompiledStatement[] = [\n ...policyDrops.map((sql) => ({ kind: 'security' as const, sql })),\n ...hints.statements.map((sql) => ({ kind: 'hint' as const, sql })),\n ...ddl.map((sql) => ({ kind: 'ddl' as const, sql: sql.replace(/;\\s*$/, '') })),\n ...securityStatements(definition).map((sql) => ({ kind: 'security' as const, sql })),\n // PREPARE each action's executes first (plpgsql bodies don't check columns\n // at CREATE), then create the functions. Both reference the tables the DDL\n // above creates, so they close the plan.\n ...actionPrepareChecks(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ...actionFunctionStatements(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ]\n return { namespace: definition.namespace, schema, statements, snapshot }\n}\n\n/** Full-create plan (empty previous snapshot) — what `plan` prints and first apply runs. */\nexport const compileNamespace = (definition: NamespaceDefinition): Promise<PlannedMigration> =>\n planMigration({ definition })\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined =>\n (snapshot as { id?: string }).id\n\nexport { isOwnedStatement, pendingKitStatements } from './converge.js'\nexport { buildDrizzleEntities } from './tables.js'\nexport type { DrizzleEntities } from './tables.js'\nexport {\n ACTION_REQUIRES_DENIED_SQLSTATE,\n ACTION_VALIDATES_FAILED_SQLSTATE,\n actionFunctionName,\n actionFunctionStatements,\n actionPrepareChecks,\n} from './actions.js'\nexport { securityStatements } from './security.js'\nexport { applyMigrationHints, diffStatements, emptySnapshot, generateSnapshot, normalizeSnapshot } from './snapshot.js'\nexport type { NamespaceSnapshot } from './snapshot.js'\nexport { sqlTypeName } from './types.js'\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n },\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n Object.entries(definitions).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n Object.entries(declared).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","/**\n * Custom Roles & Capabilities manifest grammar — the `capabilities.roles`\n * block and the `capabilities.uses` pin set. This is a VERBATIM mirror of the\n * platform's canonical grammar so an ORM namespace declares roles/capabilities\n * the exact same way an artifact or managed function does; apply feeds it to\n * the shared `reconcileHostRegistryOnActivation` reconciler untouched.\n *\n * Canonical sources — keep the grammar in sync by hand (schema shape, key\n * regexes, limits, and superRefine rules). The behavioral guards in\n * definitions.test.ts exercise this copy (inherit cycle, unknown grant,\n * pin-names-role, key collision) so a drifted rule fails there:\n * atlas/src/server/services/custom-roles/manifest-block.ts (server)\n * shared/services/artifact-studio/src/manifest-custom-roles.ts (CLI)\n */\nimport { z } from 'zod'\n\n/**\n * Key grammar for roles and capabilities. Deliberately excludes `_` so the\n * FGA object id `custom_role:<host>__<key>` can use `__` as an unambiguous\n * delimiter.\n */\nexport const CUSTOM_ROLE_KEY_RE = /^[a-z0-9-]+$/\n\nconst customRoleKeySchema = z.string().min(1).max(64).regex(\n CUSTOM_ROLE_KEY_RE,\n 'Role and capability keys must match [a-z0-9-]+',\n)\n\nconst MAX_CUSTOM_ROLE_DEFINITIONS = 50\nconst MAX_CUSTOM_ROLE_CAPABILITIES = 100\n\nconst customRoleCapabilityDeclarationSchema = z.object({\n description: z.string().max(500).optional(),\n})\n\nconst customRoleDefinitionSchema = z.object({\n description: z.string().max(500).optional(),\n /**\n * Grants this role to the host's entire runtime audience. Resolved at the\n * app layer at claim time — every caller who passes the host floor\n * (`end_user`) holds the default roles; no tuple is written for it.\n */\n default: z.boolean().default(false),\n /** Role keys whose grants this role also receives (privilege waterfall). */\n inherits: z.array(customRoleKeySchema).default([]),\n /** Capability keys this role grants directly. */\n grants: z.array(customRoleKeySchema).default([]),\n})\n\n/**\n * Manifest-declared custom roles & capabilities. Roles and capabilities are\n * both `custom_role` FGA objects; deploy reconciliation turns this block into\n * the structural waterfall edges (role→capability / senior→junior `assignee`\n * userset tuples) — nothing else. The host floor is enforced app-layer at the\n * resolution points, never in the model. Runtime grants (user/group/org →\n * role) are NEVER declared here — they are written through host-admin-gated\n * endpoints.\n */\nexport const customRolesBlockSchema = z.object({\n /** Roles grantable to principals, keyed by role key. */\n definitions: z.record(customRoleKeySchema, customRoleDefinitionSchema).default({}),\n /** Leaf capability keys the host's code checks, keyed by capability key. */\n capabilities: z.record(customRoleKeySchema, customRoleCapabilityDeclarationSchema).default({}),\n}).superRefine((block, ctx) => {\n const roleKeys = Object.keys(block.definitions)\n const capabilityKeys = new Set(Object.keys(block.capabilities))\n\n if (roleKeys.length > MAX_CUSTOM_ROLE_DEFINITIONS) {\n ctx.addIssue({\n code: 'custom',\n message: `At most ${MAX_CUSTOM_ROLE_DEFINITIONS} role definitions are allowed`,\n path: ['definitions'],\n })\n }\n if (capabilityKeys.size > MAX_CUSTOM_ROLE_CAPABILITIES) {\n ctx.addIssue({\n code: 'custom',\n message: `At most ${MAX_CUSTOM_ROLE_CAPABILITIES} capabilities are allowed`,\n path: ['capabilities'],\n })\n }\n\n // Roles and capabilities share one FGA object namespace on the host —\n // a key present in both would collapse two objects into one.\n for (const key of roleKeys) {\n if (capabilityKeys.has(key)) {\n ctx.addIssue({\n code: 'custom',\n message: `Key \"${key}\" is declared as both a role and a capability`,\n path: ['definitions', key],\n })\n }\n }\n\n const roleKeySet = new Set(roleKeys)\n for (const [roleKey, definition] of Object.entries(block.definitions)) {\n const seenInherits = new Set<string>()\n for (const inherited of definition.inherits) {\n if (seenInherits.has(inherited)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" lists \"${inherited}\" in inherits more than once`,\n path: ['definitions', roleKey, 'inherits'],\n })\n }\n seenInherits.add(inherited)\n if (!roleKeySet.has(inherited)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" inherits unknown role \"${inherited}\"`,\n path: ['definitions', roleKey, 'inherits'],\n })\n }\n }\n const seenGrants = new Set<string>()\n for (const granted of definition.grants) {\n if (seenGrants.has(granted)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" lists \"${granted}\" in grants more than once`,\n path: ['definitions', roleKey, 'grants'],\n })\n }\n seenGrants.add(granted)\n if (!capabilityKeys.has(granted)) {\n ctx.addIssue({\n code: 'custom',\n message: `Role \"${roleKey}\" grants unknown capability \"${granted}\"`,\n path: ['definitions', roleKey, 'grants'],\n })\n }\n }\n }\n\n // The inherits graph must be a DAG: a cycle would make the FGA waterfall\n // walk self-referential. DFS with tri-color marking; report the first\n // cycle found.\n const state = new Map<string, 'visiting' | 'done'>()\n const visit = (key: string, path: string[]): string[] | null => {\n if (state.get(key) === 'done') return null\n if (state.get(key) === 'visiting') return [...path, key]\n state.set(key, 'visiting')\n const definition = block.definitions[key]\n for (const inherited of definition?.inherits ?? []) {\n if (!roleKeySet.has(inherited)) continue\n const cycle = visit(inherited, [...path, key])\n if (cycle) return cycle\n }\n state.set(key, 'done')\n return null\n }\n for (const roleKey of roleKeys) {\n const cycle = visit(roleKey, [])\n if (cycle) {\n ctx.addIssue({\n code: 'custom',\n message: `Role inheritance cycle: ${cycle.join(' -> ')}`,\n path: ['definitions'],\n })\n break\n }\n }\n})\n\nexport type CustomRolesBlock = z.infer<typeof customRolesBlockSchema>\n\n/** True when the block declares at least one role or capability. */\nexport function customRolesDeclared(block: CustomRolesBlock | null | undefined): boolean {\n if (!block) return false\n return Object.keys(block.definitions).length > 0 || Object.keys(block.capabilities).length > 0\n}\n\n/**\n * Capability pins — the `capabilities.uses` attachment set. A pin references a\n * REGISTRY capability the host's code checks: `org/<key>` for an org-scoped\n * capability (must already exist — hosts never create org entities), or a bare\n * `<key>` for a host-scoped one (declared in this block's\n * `capabilities.roles.capabilities` record, or already published to the host's\n * registry scope). Roles are never pinned — composition and grants are live\n * runtime configuration owned by the registry.\n */\nexport const CUSTOM_CAPABILITY_PIN_RE = /^(?:org\\/)?[a-z0-9-]+$/\n\nconst MAX_CAPABILITY_PINS = 100\n\nexport const capabilityPinsSchema = z\n .array(\n z.string().min(1).max(68).regex(\n CUSTOM_CAPABILITY_PIN_RE,\n 'Pins must be \"org/<key>\" or a bare \"<key>\" matching [a-z0-9-]+',\n ),\n )\n .max(MAX_CAPABILITY_PINS)\n .default([])\n\nexport interface ParsedCapabilityPin {\n scope: 'org' | 'host'\n key: string\n}\n\n/** Split a pin into its scope and key. Assumes the pin grammar validated. */\nexport function parseCapabilityPin(pin: string): ParsedCapabilityPin {\n return pin.startsWith('org/')\n ? { scope: 'org', key: pin.slice('org/'.length) }\n : { scope: 'host', key: pin }\n}\n\n/**\n * Cross-field pin validation (the `uses` array and the roles block are\n * siblings under `capabilities`). Purely structural — registry existence\n * checks are server-side, at activation, where atomicity lives.\n */\nexport function validateCapabilityPins({\n uses,\n roles,\n}: {\n uses: readonly string[]\n roles: CustomRolesBlock | null | undefined\n}): string[] {\n const errors: string[] = []\n const seen = new Set<string>()\n const roleKeys = new Set(Object.keys(roles?.definitions ?? {}))\n for (const pin of uses) {\n if (seen.has(pin)) errors.push(`Pin \"${pin}\" is listed more than once`)\n seen.add(pin)\n const parsed = parseCapabilityPin(pin)\n if (parsed.scope === 'host' && roleKeys.has(parsed.key)) {\n errors.push(`Pin \"${pin}\" references a role — roles are never pinned`)\n }\n }\n return errors\n}\n","import { referencedExecuteCapabilities } from '../compiler/actions.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { referencedCapabilities } from '../predicate/ast.js'\nimport { validateCapabilityPins, type CustomRolesBlock } from './custom-roles-block.js'\nimport { isQualifiedReference } from './identifiers.js'\nimport type { NamespaceConfig } from './namespace-config.js'\nimport { columnTypeGroup, indexName, type TableFile } from './table.js'\n\n/**\n * The namespace's Custom Roles manifest block — the platform grammar, verbatim\n * (see custom-roles-block.ts). `roles` declares capabilities + roles (grants,\n * inherits); `uses` attaches existing capabilities. Reconciled into the Custom\n * Roles attachment set at apply, so it's grantable and enters claim resolution.\n */\nexport interface NamespaceCapabilities {\n readonly roles: CustomRolesBlock\n readonly uses: readonly string[]\n}\n\nexport interface NamespaceDefinition {\n readonly namespace: string\n readonly description: string | null\n readonly capabilities: NamespaceCapabilities\n readonly tables: readonly TableFile[]\n}\n\nconst EMPTY_CAPABILITIES: NamespaceCapabilities = { roles: { definitions: {}, capabilities: {} }, uses: [] }\n\n/** The capability claim keys the block declares — bare declarations plus every attach. */\nexport function declaredCapabilityKeys(capabilities: NamespaceCapabilities): Set<string> {\n return new Set<string>([...Object.keys(capabilities.roles.capabilities), ...capabilities.uses])\n}\n\nexport interface DefinitionFile {\n readonly file: string\n readonly table: TableFile\n}\n\nexport function buildNamespaceDefinition(\n files: readonly DefinitionFile[],\n config?: NamespaceConfig,\n): NamespaceDefinition {\n if (files.length === 0) throw new OrmDefinitionError('no table definitions found')\n\n const namespace = (files[0] as DefinitionFile).table.namespace\n if (config && config.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${config.namespace}' conflicts with '${namespace}'`, 'namespace.yaml')\n }\n for (const { file, table } of files) {\n if (table.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${table.namespace}' conflicts with '${namespace}'`, file)\n }\n }\n\n const seen = new Map<string, string>()\n for (const { file, table } of files) {\n const existing = seen.get(table.table)\n if (existing) throw new OrmDefinitionError(`table '${table.table}' is already defined in ${existing}`, file)\n seen.set(table.table, file)\n }\n\n // Actions are addressed namespace-wide (/actions/<name>) — a name must\n // resolve to exactly one action regardless of which table file declared it.\n const actionsSeen = new Map<string, string>()\n for (const { file, table } of files) {\n for (const name of Object.keys(table.actions ?? {})) {\n const existing = actionsSeen.get(name)\n if (existing) throw new OrmDefinitionError(`action '${name}' is already defined in ${existing}`, file)\n actionsSeen.set(name, file)\n }\n }\n\n const capabilities: NamespaceCapabilities = config?.capabilities\n ? { roles: config.capabilities.roles ?? EMPTY_CAPABILITIES.roles, uses: config.capabilities.uses ?? [] }\n : EMPTY_CAPABILITIES\n const pinIssues = validateCapabilityPins({ uses: capabilities.uses, roles: capabilities.roles })\n if (pinIssues.length > 0) throw new OrmDefinitionError(pinIssues.join('; '), 'namespace.yaml')\n const tables = files.map(({ table }) => table).sort((a, b) => a.table.localeCompare(b.table))\n const byName = new Map(tables.map((table) => [table.table, table]))\n validateLocalLinks(files, byName)\n validateActionValidates(files, byName)\n validateIndexNames(files)\n validateCapabilityRefs(files, declaredCapabilityKeys(capabilities))\n return { namespace, description: config?.description ?? null, capabilities, tables }\n}\n\n/**\n * A `validates: exists('<table>', <param>)` entry only resolves at execute\n * time against a real local table — an unknown target (or a param that can\n * never match the target's primary key) is an action that can never pass,\n * so fail at build like links do. Qualified references stay soft.\n */\nfunction validateActionValidates(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [actionName, action] of Object.entries(table.actions ?? {})) {\n for (const entry of action.validates ?? []) {\n if (entry.table.includes('.')) continue\n const target = byName.get(entry.table)\n if (!target) {\n throw new OrmDefinitionError(`action '${actionName}' validates against unknown table '${entry.table}'`, file)\n }\n if (target.source) {\n // Synced tables reflect their gold source and declare no primary\n // key, so the runtime exists() check has no key to resolve — it\n // would 422 every call. Reject at build rather than fail at run.\n throw new OrmDefinitionError(\n `action '${actionName}' validates against synced table '${entry.table}' — synced tables can't be validates targets`,\n file,\n )\n }\n const paramType = action.params?.[entry.param]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (paramType && targetPrimaryKey && columnTypeGroup(paramType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `action '${actionName}' validates '${entry.param}' (${paramType}) against '${entry.table}' whose primary key is ${targetPrimaryKey.type}`,\n file,\n )\n }\n }\n }\n }\n}\n\n/**\n * Postgres index names are schema-scoped, not table-scoped — two tables in\n * one namespace declaring (or deriving) the same index name would build fine\n * and then fail on the second CREATE INDEX at apply. Reject at load instead.\n */\nfunction validateIndexNames(files: readonly DefinitionFile[]): void {\n // Everything here shares one pg_class relation namespace in the orm schema:\n // tables, declared indexes, and the indexes Postgres creates implicitly for\n // primary-key (`<table>_pkey`) and unique-column (`<table>_<col>_unique`)\n // constraints. Seed them all so any collision fails at load, not at apply.\n const seen = new Map<string, string>()\n const claim = (name: string, label: string, file: string) => {\n const existing = seen.get(name)\n if (existing) {\n throw new OrmDefinitionError(`relation name '${name}' (${label}) collides with ${existing}`, file)\n }\n seen.set(name, `${label} (${file})`)\n }\n\n for (const { file, table } of files) {\n claim(table.table, `table '${table.table}'`, file)\n }\n for (const { file, table } of files) {\n if (table.source) continue\n claim(`${table.table}_pkey`, `implicit primary-key index of '${table.table}'`, file)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.unique && !column.primary_key) {\n claim(`${table.table}_${name}_unique`, `implicit unique constraint of '${table.table}.${name}'`, file)\n }\n }\n }\n for (const { file, table } of files) {\n for (const definition of table.indexes ?? []) {\n claim(indexName(table.table, definition), `index on '${table.table}'`, file)\n }\n }\n}\n\nfunction validateLocalLinks(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (isQualifiedReference(link.to)) continue\n const target = byName.get(link.to)\n if (!target) {\n throw new OrmDefinitionError(`link '${name}' references unknown table '${link.to}'`, file)\n }\n if (link.enforce && target.source) {\n throw new OrmDefinitionError(`link '${name}' cannot enforce a foreign key onto a synced table`, file)\n }\n // Soft links join at query time — a type mismatch with the target's\n // primary key can never match a row, so it fails at load like an\n // enforced one would fail at ALTER. Synced targets reflect their\n // source (no declared pk) and stay unchecked.\n // Group comparability, not exact equality — int4 = int8 joins fine.\n const sourceType = table.columns?.[link.on]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (sourceType && targetPrimaryKey && columnTypeGroup(sourceType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `link '${name}' can never join: '${link.on}' is ${sourceType} but '${link.to}' has a ${targetPrimaryKey.type} primary key`,\n file,\n )\n }\n }\n }\n}\n\n/**\n * A capability reference only resolves at claim time if the namespace DECLARES\n * it — a capability that's neither declared (`capabilities.roles.capabilities`)\n * nor attached (`capabilities.uses`) never enters the attachment set, so it's\n * neither grantable in Custom Roles nor present in any caller's claims. An\n * undeclared reference is a policy that can never pass — fail at build.\n */\nfunction validateCapabilityRefs(files: readonly DefinitionFile[], declared: ReadonlySet<string>): void {\n for (const { file, table } of files) {\n const referenced = [\n ...(table.policies?.read ? referencedCapabilities(table.policies.read.ast) : []),\n ...(table.policies?.write ? referencedCapabilities(table.policies.write.ast) : []),\n ...Object.values(table.actions ?? {}).flatMap((action) => [\n ...(action.requires ? referencedCapabilities(action.requires.ast) : []),\n ...referencedExecuteCapabilities(action),\n ]),\n ]\n for (const key of referenced) {\n if (!declared.has(key)) {\n throw new OrmDefinitionError(\n `capability('${key}') is not declared — add it under capabilities.roles.capabilities or capabilities.uses in namespace.yaml`,\n file,\n )\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { capabilityPinsSchema, customRolesBlockSchema } from './custom-roles-block.js'\nimport { namespaceSchema } from './identifiers.js'\n\n/**\n * The reserved `namespace.yaml` — namespace-level settings beside the table\n * files. `capabilities` is the platform's Custom Roles manifest block, authored\n * exactly as an artifact or managed function authors it:\n * - `capabilities.roles.capabilities` declares namespace-scoped capabilities\n * (published on the namespace's registry scope + pinned at apply),\n * - `capabilities.roles.definitions` declares roles (grants + inherits) that\n * bundle those capabilities,\n * - `capabilities.uses` attaches EXISTING capabilities — `org/<key>` for an\n * org capability (namespaces never create org entities), or a bare `<key>`\n * already published on the namespace scope.\n * Apply feeds this block straight to the shared attachment reconciler, so the\n * capabilities are grantable in Custom Roles and enter claim resolution.\n */\nexport const namespaceConfigSchema = z.strictObject({\n namespace: namespaceSchema,\n description: z.string().optional(),\n capabilities: z\n .strictObject({\n roles: customRolesBlockSchema.optional(),\n uses: capabilityPinsSchema.optional(),\n })\n .optional(),\n})\n\nexport type NamespaceConfig = z.output<typeof namespaceConfigSchema>\n","import { readdir, readFile } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { load as loadYaml } from 'js-yaml'\nimport { z } from 'zod'\nimport {\n DEFINITION_FILE_EXTENSIONS,\n MAX_DEFINITION_FILE_BYTES,\n NAMESPACE_CONFIG_FILENAMES,\n} from './constants.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { computeDefinitionHash } from './hash.js'\nimport { buildNamespaceDefinition, type DefinitionFile, type NamespaceDefinition } from './schema/namespace.js'\nimport { namespaceConfigSchema, type NamespaceConfig } from './schema/namespace-config.js'\nimport { tableFileSchema } from './schema/table.js'\n\nexport interface LoadedNamespace {\n readonly definition: NamespaceDefinition\n readonly contentHash: string\n readonly files: readonly string[]\n}\n\nexport function parseTableFile(file: string, contents: string): DefinitionFile {\n const parsed = tableFileSchema.safeParse(parseYaml(file, contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), file)\n return { file, table: parsed.data }\n}\n\nexport interface DefinitionSource {\n readonly path: string\n readonly contents: string\n}\n\n/**\n * Raw sources → validated definition, splitting the reserved namespace\n * config file from the table files. The one parse path for the loader and\n * the registry, so a local directory and an uploaded bundle can't diverge.\n */\nexport function parseDefinitionSources(sources: readonly DefinitionSource[]): NamespaceDefinition {\n let config: NamespaceConfig | undefined\n const tables: DefinitionFile[] = []\n for (const source of sources) {\n if (NAMESPACE_CONFIG_FILENAMES.has(source.path)) {\n if (config) throw new OrmDefinitionError('duplicate namespace config file', source.path)\n const parsed = namespaceConfigSchema.safeParse(parseYaml(source.path, source.contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), source.path)\n config = parsed.data\n continue\n }\n tables.push(parseTableFile(source.path, source.contents))\n }\n return buildNamespaceDefinition(tables, config)\n}\n\nexport async function loadNamespaceDefinition(dir: string): Promise<LoadedNamespace> {\n const files = await listDefinitionFiles(dir)\n if (files.length === 0) throw new OrmDefinitionError(`no ${DEFINITION_FILE_EXTENSIONS.join('/')} files in ${dir}`)\n\n const sources: DefinitionSource[] = []\n for (const file of files) {\n const contents = await readFile(join(dir, file), 'utf8')\n if (Buffer.byteLength(contents, 'utf8') > MAX_DEFINITION_FILE_BYTES) {\n throw new OrmDefinitionError(`exceeds the maximum definition file size of ${MAX_DEFINITION_FILE_BYTES} bytes`, file)\n }\n sources.push({ path: file, contents })\n }\n\n const definition = parseDefinitionSources(sources)\n return { definition, contentHash: computeDefinitionHash(definition), files }\n}\n\nfunction parseYaml(file: string, contents: string): unknown {\n try {\n return loadYaml(contents)\n } catch (error) {\n throw new OrmDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file)\n }\n}\n\nconst isDefinitionFile = (name: string): boolean =>\n DEFINITION_FILE_EXTENSIONS.some((extension) => extname(name) === extension)\n\nasync function listDefinitionFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true })\n return entries\n .filter((entry) => entry.isFile() && isDefinitionFile(entry.name))\n .map((entry) => entry.name)\n .sort()\n}\n\nfunction formatIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { z } from 'zod'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\n\n/**\n * The committed migration workspace inside a definitions directory:\n *\n * <dir>/migrations/NNNN_<hash12>.sql reviewable statements\n * <dir>/migrations/meta/NNNN.snapshot.json desired-state snapshot after NNNN\n * <dir>/migrations/meta/journal.json ordered index with checksums\n *\n * `orm diff` appends to it; `orm diff --check` (the CI gate) verifies it\n * matches the definitions with no database and no credentials. Everything\n * here is deterministic from (previous snapshot, definition) so the gate\n * can regenerate and byte-compare.\n */\nexport const MIGRATIONS_DIRNAME = 'migrations'\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\n\nconst journalEntrySchema = z.object({\n ordinal: z.number().int().positive(),\n name: z.string().min(1),\n content_hash: z.string().length(64),\n /** Definitions hash the migration was diffed FROM — null on the first. Replay checks an environment sits at this base. */\n previous_content_hash: z.string().length(64).nullable(),\n checksum: z.string().length(64),\n /** sha256 of the snapshot FILE — the next diff builds on this snapshot, so a hand-edit must fail `--check` too. */\n snapshot_checksum: z.string().length(64),\n destructive: z.boolean(),\n})\n\nconst journalSchema = z.object({\n version: z.literal(1),\n namespace: z.string().min(1),\n entries: z.array(journalEntrySchema),\n})\n\nexport type MigrationJournal = z.infer<typeof journalSchema>\nexport type JournalEntry = z.infer<typeof journalEntrySchema>\n\nexport interface MigrationWorkspace {\n readonly journal: MigrationJournal\n /** Snapshot at the journal tip — the previous input for the next diff. */\n readonly tipSnapshot: NamespaceSnapshot | undefined\n}\n\nexport const emptyJournal = (namespace: string): MigrationJournal => ({ version: 1, namespace, entries: [] })\n\nexport async function readMigrationWorkspace(dir: string, namespace: string): Promise<MigrationWorkspace> {\n const journalPath = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, JOURNAL_FILENAME)\n const raw = await readFile(journalPath, 'utf8').catch(() => null)\n if (raw === null) return { journal: emptyJournal(namespace), tipSnapshot: undefined }\n\n const parsed = journalSchema.safeParse(parseJson(journalPath, raw))\n if (!parsed.success) {\n throw new OrmDefinitionError(`invalid migration journal: ${parsed.error.issues[0]?.message ?? 'unreadable'}`, journalPath)\n }\n if (parsed.data.namespace !== namespace) {\n throw new OrmDefinitionError(\n `migration journal belongs to namespace '${parsed.data.namespace}', definitions are '${namespace}'`,\n journalPath,\n )\n }\n parsed.data.entries.forEach((entry, index) => {\n if (entry.ordinal !== index + 1) {\n throw new OrmDefinitionError(`migration journal entries must be contiguous from 1 (found ${entry.name})`, journalPath)\n }\n })\n\n const tip = parsed.data.entries.at(-1)\n return { journal: parsed.data, tipSnapshot: tip ? await readSnapshot(dir, tip.ordinal) : undefined }\n}\n\nexport async function readSnapshotText(dir: string, ordinal: number): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration snapshot', path)\n })\n}\n\nexport async function readSnapshot(dir: string, ordinal: number): Promise<NamespaceSnapshot> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return parseJson(path, await readSnapshotText(dir, ordinal)) as NamespaceSnapshot\n}\n\nexport async function readMigrationSql(dir: string, entry: JournalEntry): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, `${entry.name}.sql`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration file', path)\n })\n}\n\nexport const checksumOf = (text: string): string => createHash('sha256').update(text).digest('hex')\n\nexport const migrationName = (ordinal: number, contentHash: string): string => `${pad(ordinal)}_${contentHash.slice(0, 12)}`\n\nexport function renderMigrationSql({\n name,\n namespace,\n contentHash,\n plan,\n}: {\n name: string\n namespace: string\n contentHash: string\n plan: PlannedMigration\n}): string {\n const header = [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${contentHash}`,\n '-- generated by `seq-studio orm diff` — review and commit, do not edit',\n ].join('\\n')\n return [header, ...plan.statements.map((statement) => `${statement.sql};`)].join('\\n\\n') + '\\n'\n}\n\nexport interface WrittenMigration {\n readonly name: string\n readonly ordinal: number\n readonly destructive: boolean\n}\n\nexport async function writeMigration({\n dir,\n workspace,\n plan,\n contentHash,\n destructive,\n}: {\n dir: string\n workspace: MigrationWorkspace\n plan: PlannedMigration\n contentHash: string\n destructive: boolean\n}): Promise<WrittenMigration> {\n const tip = workspace.journal.entries.at(-1)\n const ordinal = (tip?.ordinal ?? 0) + 1\n const name = migrationName(ordinal, contentHash)\n const sql = renderMigrationSql({ name, namespace: workspace.journal.namespace, contentHash, plan })\n\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n const snapshotText = `${JSON.stringify(plan.snapshot, null, 2)}\\n`\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${name}.sql`), sql)\n await writeFile(join(metaDir, `${pad(ordinal)}.snapshot.json`), snapshotText)\n\n const journal: MigrationJournal = {\n ...workspace.journal,\n entries: [\n ...workspace.journal.entries,\n {\n ordinal,\n name,\n content_hash: contentHash,\n previous_content_hash: tip?.content_hash ?? null,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive,\n },\n ],\n }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n return { name, ordinal, destructive }\n}\n\nconst pad = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\nfunction parseJson(path: string, raw: string): unknown {\n try {\n return JSON.parse(raw) as unknown\n } catch {\n throw new OrmDefinitionError('not valid JSON', path)\n }\n}\n","import { planMigration, type CompiledStatement } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { LoadedNamespace } from '../loader.js'\nimport {\n MIGRATIONS_DIRNAME,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n renderMigrationSql,\n} from './workspace.js'\n\n/**\n * The reviewed migration a registration carries: replay-only environments\n * (production, banksouth) execute nothing that doesn't match one of these.\n * Statements are recomputed at load and verified to reproduce the committed\n * file byte-for-byte, so the payload can never drift from what review saw.\n */\nexport interface CommittedMigration {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n}\n\n/**\n * Load the workspace tip as a registration payload. Returns null when there\n * is no workspace (dev-loop registrations stay migration-less); throws when\n * a workspace exists but is stale or drifted — a half-true artifact is worse\n * than none.\n */\nexport async function loadCommittedTipMigration(\n dir: string,\n loaded: LoadedNamespace,\n): Promise<CommittedMigration | null> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return null\n\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n }\n}\n\n/**\n * One link in the committed history: a migration's content hash and the hash it\n * was diffed FROM. This is an ancestry record, NOT executable SQL — a\n * registration carries the whole chain so a replay-only environment can prove\n * that its active version is a reviewed ancestor of the target (and thus that a\n * direct catch-up diff is in-lineage) even over migrations that were never\n * registered there (batched deploys, skipped releases). The catch-up apply then\n * runs the engine's own direct diff, never any SQL from this chain.\n */\nexport interface CommittedChainEntry {\n readonly name: string\n readonly contentHash: string\n readonly previousContentHash: string | null\n}\n\n/**\n * The committed hash chain for a definitions directory, oldest-first, taken from\n * the journal (already integrity-checked by `orm validate` / `diff --check`).\n * The tip must match the loaded definitions — a registration carries this so\n * replay-only environments can verify catch-up ancestry without those\n * intervening versions being registered. Empty when there is no workspace.\n */\nexport async function loadCommittedMigrations(dir: string, loaded: LoadedNamespace): Promise<CommittedChainEntry[]> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const entries = workspace.journal.entries\n const tip = entries.at(-1)\n if (!tip) return []\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n return entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n }))\n}\n","import type { CompiledStatement } from '../engine/index.js'\n\nexport interface DestructiveStatement {\n readonly sql: string\n readonly reason: string\n}\n\n/** A column type change — `SET DATA TYPE` / `TYPE`. Data-losing in general (numeric→integer rounds, a narrowing text cast truncates). */\nconst TYPE_CHANGE = /\\bALTER\\s+COLUMN\\s+\"?[a-z_][a-z0-9_]*\"?\\s+(?:SET\\s+DATA\\s+)?TYPE\\b/i\n\n/**\n * Statements that lose data if they run. `ddl` statements match the rules\n * below; `security` statements are a drop-and-recreate of policies by design\n * and always safe. Of the `hint` statements (the declared rename/cast\n * rewrites), a RENAME never loses data, but a declared `cast:` is still a type\n * change that can — declaring HOW to convert is not the same as consenting to\n * the data loss, so a cast hint stays gated on `--allow-destructive` too.\n */\nconst RULES: ReadonlyArray<{ pattern: RegExp; reason: string }> = [\n { pattern: /^\\s*DROP\\s+SCHEMA\\b/i, reason: 'drops the namespace schema and everything in it' },\n { pattern: /^\\s*DROP\\s+TABLE\\b/i, reason: 'drops a table and all of its rows' },\n { pattern: /^\\s*TRUNCATE\\b/i, reason: 'deletes every row' },\n { pattern: /\\bDROP\\s+COLUMN\\b/i, reason: 'drops a column and its data' },\n {\n pattern: TYPE_CHANGE,\n reason: \"changes a column type without a declared cast (add `cast: '<column>::<type>'` to make the conversion explicit)\",\n },\n]\n\nexport function classifyDestructive(statements: readonly CompiledStatement[]): DestructiveStatement[] {\n const flagged: DestructiveStatement[] = []\n for (const statement of statements) {\n if (statement.kind === 'ddl') {\n const rule = RULES.find(({ pattern }) => pattern.test(statement.sql))\n if (rule) flagged.push({ sql: statement.sql, reason: rule.reason })\n } else if (statement.kind === 'hint' && TYPE_CHANGE.test(statement.sql)) {\n flagged.push({ sql: statement.sql, reason: 'a declared cast changes a column type and can lose data (numeric→integer rounds, a narrowing cast truncates)' })\n }\n }\n return flagged\n}\n","import { planMigration } from '../engine/index.js'\nimport { loadNamespaceDefinition } from '../loader.js'\nimport { classifyDestructive } from './classify.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n} from './workspace.js'\n\nexport interface DiffOptions {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * `orm diff` — append the next committed migration for a definitions\n * directory, diffed against the workspace's tip snapshot. `--check` is the\n * CI gate: no database, no credentials — verify checksums, the snapshot\n * chain, that the definitions match the journal tip, and that regenerating\n * the tip reproduces the committed file byte-for-byte.\n */\nexport async function diffCommand({ dir, allowDestructive, check, log }: DiffOptions): Promise<number> {\n const loaded = await loadNamespaceDefinition(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (check) return checkWorkspace({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.contentHash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\"retire columns in two phases (`deprecated: true` first, drop later), declare type changes as `cast:`, or re-run with --allow-destructive to consent\")\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.contentHash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\nasync function checkWorkspace({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>\n workspace: Awaited<ReturnType<typeof readMigrationWorkspace>>\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n if (!tip) {\n log(`no committed migrations for '${loaded.definition.namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.contentHash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n","import { mkdir, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { generateNamespaceTypes } from './codegen/types.js'\nimport { compileNamespace } from './engine/index.js'\nimport { loadNamespaceDefinition } from './loader.js'\nimport { loadCommittedMigrations, loadCommittedTipMigration } from './migrations/committed.js'\nimport { diffCommand } from './migrations/diff.js'\nimport { MIGRATIONS_DIRNAME, readMigrationWorkspace } from './migrations/workspace.js'\n\n/** Set by the seq-studio delegate; direct users export them. */\nexport const BASE_URL_ENV = 'SEQUENCE_ORM_BASE_URL'\nexport const TOKEN_ENV = 'SEQUENCE_ORM_TOKEN'\n\nconst USAGE = `usage:\n seq-studio orm init <dir> scaffold a namespace directory\n seq-studio orm validate [dir] parse + validate definitions and verify committed migrations are in sync\n seq-studio orm plan [dir] -e <env> offline dry run: compile definitions and diff against the registry (no database, no writes)\n seq-studio orm apply [dir] -e <env> author the migration, register, apply, and refresh types.gen.ts (the everyday command)\n seq-studio orm apply --dry-run -e <env> rehearse the migration on a copy of the environment's real data, then discard it (no real apply)\n seq-studio orm diff [dir] write/verify the committed migration standalone (--check is the offline CI gate; --allow-destructive consents)\n\n A namespace directory holds one <table>.yaml per table (see the scaffold).\n Authenticate with: seqapi login\n`\n\ntype TokenProvider = () => Promise<string | null>\nlet tokenProvider: TokenProvider | null = null\n\n/** Hand the CLI a refreshing token source (used by the seq-studio delegate). */\nexport function setTokenProvider(provider: TokenProvider): void {\n tokenProvider = provider\n}\n\nasync function resolveToken(): Promise<string | null> {\n const fromEnv = process.env[TOKEN_ENV]?.trim()\n if (fromEnv) return fromEnv\n return tokenProvider ? tokenProvider() : null\n}\n\nconst SCAFFOLD_TABLE = `namespace: my_namespace\ntable: my_table\ndescription: Describe what one row is.\n\ncolumns:\n id:\n type: uuid\n primary_key: true\n default: gen_random_uuid()\n name:\n type: text\n nullable: false\n created_at:\n type: timestamptz\n default: now()\n\npolicies:\n read: claim('org') = 'my_org'\n`\n\nexport async function runCli(argv: readonly string[]): Promise<number> {\n const [command, ...rest] = argv\n if (!command || command === 'help' || command === '--help' || command === '-h') {\n console.log(USAGE)\n return command ? 0 : 1\n }\n\n try {\n switch (command) {\n case 'init':\n return await initCommand(rest)\n case 'validate':\n return await validateCommand(rest)\n case 'plan':\n return await planCommand(rest)\n case 'diff':\n return await diffCommand({\n dir: positional(rest) ?? '.',\n allowDestructive: rest.includes('--allow-destructive'),\n check: rest.includes('--check'),\n log: (line) => console.log(line),\n })\n case 'apply':\n return await applyCommand(rest)\n default:\n console.error(`unknown command: ${command}`)\n console.log(USAGE)\n return 1\n }\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n return 1\n }\n}\n\nasync function initCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest)\n if (!dir) {\n console.error('init requires a target directory')\n return 1\n }\n await mkdir(dir, { recursive: true })\n await writeFile(join(dir, 'my_table.yaml'), SCAFFOLD_TABLE, { flag: 'wx' })\n console.log(`scaffolded ${dir}/my_table.yaml — rename the file and namespace, then: seq-studio orm validate ${dir}`)\n return 0\n}\n\nasync function validateCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const loaded = await loadNamespaceDefinition(dir)\n // Compile too, so action functions (claims grammar, validates targets,\n // RETURNING/returns) are checked here — not just at plan/apply.\n await compileNamespace(loaded.definition)\n const actions = loaded.definition.tables.reduce((total, table) => total + Object.keys(table.actions ?? {}).length, 0)\n console.log(`namespace ${loaded.definition.namespace}: ${loaded.definition.tables.length} table(s), ${actions} action(s) valid`)\n console.log(`content hash ${loaded.contentHash}`)\n\n // A definitions edit without a regenerated migration is the most common\n // way to drift — when a committed-migration workspace exists, validate\n // runs the same offline gate as `orm diff --check` (checksums, snapshot\n // chain, tip regenerates byte-for-byte from these definitions).\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n if (workspace.journal.entries.length === 0) {\n console.error(\n `missing committed migrations — every namespace carries its ${MIGRATIONS_DIRNAME}/ ledger; run \\`seq-studio orm diff\\` and commit the result`,\n )\n return 1\n }\n return diffCommand({ dir, allowDestructive: false, check: true, log: console.log })\n}\n\n/**\n * Every server-touching command validates first — the same gate as\n * `orm validate` (definitions parse + the committed ledger is in sync), so\n * an apply can never register content whose migration was never generated.\n */\nasync function requireValidated(dir: string): Promise<boolean> {\n return (await validateCommand([dir])) === 0\n}\n\nasync function planCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const loaded = await loadNamespaceDefinition(dir)\n const compiled = await compileNamespace(loaded.definition)\n\n console.log(`-- namespace ${loaded.definition.namespace} (content hash ${loaded.contentHash.slice(0, 12)}…)`)\n for (const statement of compiled.statements) console.log(`${statement.sql};\\n`)\n\n const registry = await fetchRegistryState(loaded.definition.namespace, loaded.contentHash)\n if (registry.kind === 'offline') {\n console.log('-- registry: pass -e <env> (and seqapi login) to compare against a deployment')\n return 0\n }\n if (registry.kind === 'missing') {\n // The route deliberately 404s for unauthorized reads too (no existence oracle).\n console.log('-- registry: namespace not registered (or you lack read access) — a first apply creates it')\n return 0\n }\n\n // hash_version is the server's exact lookup — the versions list is a\n // recent-history window and must never answer \"is this hash registered?\".\n const match = registry.hashVersion\n const active = registry.versions.find((version) => version.id === registry.activeVersionId)\n if (match && match.id === registry.activeVersionId) console.log('-- registry: this content is the ACTIVE version')\n else if (match) console.log(`-- registry: registered (status ${match.status}), not active`)\n else console.log(`-- registry: new content (active is ${active ? active.content_hash.slice(0, 12) : 'none'})`)\n return 0\n}\n\nasync function applyCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const allowDestructive = rest.includes('--allow-destructive')\n const dryRun = rest.includes('--dry-run')\n\n // Author the committed migration AS PART OF applying: generate and write the\n // next migration under <dir>/migrations/ — a no-op when the ledger tip already\n // matches the definitions. The everyday loop is one command (edit YAML →\n // apply), and the file that lands is exactly what CI's offline `diff --check`\n // verifies. Data-losing DDL still needs --allow-destructive; diffCommand\n // refuses to author it otherwise.\n if ((await diffCommand({ dir, allowDestructive, check: false, log: (line) => console.log(line) })) !== 0) return 1\n if (!(await requireValidated(dir))) return 1\n const loaded = await loadNamespaceDefinition(dir)\n const namespace = loaded.definition.namespace\n\n // A committed workspace rides along so replay-only environments can verify\n // the apply against the reviewed migration. The FULL committed chain rides\n // with it too (the tip plus its whole ancestry) so a replay-only environment\n // lagging by more than one migration can catch up from the registry alone —\n // the intervening migrations need never have been registered there. Dev loops\n // without a workspace register definitions alone.\n const tip = await loadCommittedTipMigration(dir, loaded)\n const migration = tip ? { ...tip, chain: await loadCommittedMigrations(dir, loaded) } : undefined\n const registered = await apiRequestStrict<{ version_id: string; content_hash: string; created: boolean }>(\n 'POST',\n '/api/orm/namespaces',\n { files: await readDefinitionFiles(dir, loaded.files), ...(migration ? { migration } : {}) },\n )\n console.log(\n (registered.created\n ? `registered ${namespace}@${registered.content_hash.slice(0, 12)}`\n : `already registered ${namespace}@${registered.content_hash.slice(0, 12)}`) +\n (migration ? ` with committed migration ${migration.name}` : ''),\n )\n\n // --dry-run stops here: rehearse the plan on a copy-on-write fork of this\n // environment's real data and report, WITHOUT the real apply. (The offline,\n // no-database preview is `orm plan`; this is the \"survives the data\" check.)\n if (dryRun) return dryRunRehearsal({ namespace, versionId: registered.version_id, contentHash: registered.content_hash })\n\n const applied = await apiRequestStrict<\n | {\n ordinal: number | null\n statements_executed: number\n statements_healed: number\n already_active: boolean\n duration_ms: number\n }\n | { status: 'queued'; version_id: string; run_id: string | null; already_active?: false }\n >('POST', `/api/orm/namespaces/${namespace}/apply`, {\n version_id: registered.version_id,\n ...(allowDestructive ? { allow_destructive: true } : {}),\n })\n\n if ('status' in applied) {\n console.log(`queued (run ${applied.run_id ?? 'unknown'}) — waiting for the apply to finish…`)\n const verdict = await waitForQueuedApply(namespace, registered.content_hash, applied.run_id)\n return verdict === 0 ? writeGeneratedTypes(dir, loaded) : verdict\n }\n if (applied.already_active) {\n console.log(`${namespace} is already active at this version — no-op`)\n return writeGeneratedTypes(dir, loaded)\n }\n console.log(\n `applied ${namespace}: ledger #${applied.ordinal}, ${applied.statements_executed} statement(s)` +\n `${applied.statements_healed > 0 ? ` (${applied.statements_healed} healed)` : ''} in ${applied.duration_ms}ms`,\n )\n return writeGeneratedTypes(dir, loaded)\n}\n\nconst APPLY_POLL_INTERVAL_MS = 2_500\n\n/**\n * Poll THE RUN for the verdict — the version's durable status can't answer\n * \"did my run finish\" (a re-apply of a previously failed version reads\n * 'failed' before the run starts). On a verdict, the version's exact `hash`\n * lookup supplies the human detail. No overall deadline — DDL on a large\n * namespace takes as long as it takes; interrupt with Ctrl-C.\n */\nasync function waitForQueuedApply(\n namespace: string,\n contentHash: string,\n runId: string | null,\n): Promise<number> {\n let lastStatus: string | null = null\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, APPLY_POLL_INTERVAL_MS))\n const run = runId\n ? await apiRequestStrict<{ status: string; verdict: 'succeeded' | 'failed' | null }>(\n 'GET',\n `/api/orm/namespaces/${namespace}/apply?run=${runId}`,\n )\n : null\n\n if (run && run.verdict === null) {\n if (run.status !== lastStatus) {\n lastStatus = run.status\n console.log(`… ${run.status.toLowerCase()}`)\n }\n continue\n }\n\n const body = await apiRequestStrict<{\n hash_version: { status: string; status_detail: string | null } | null\n }>('GET', `/api/orm/namespaces/${namespace}?hash=${contentHash}`)\n const version = body.hash_version\n\n // THE RUN VERDICT IS AUTHORITATIVE — check failure FIRST. A rejected apply\n // (e.g. destructive without consent) that targeted an already-applied\n // version leaves that version's durable status 'applied', so ordering the\n // success check first would report a failed run as success.\n if (run?.verdict === 'failed') {\n const detail = version?.status_detail ?? 'no detail recorded'\n console.error(`apply failed (run ${run.status.toLowerCase()}): ${detail}`)\n if (version?.status === 'applying') {\n console.error('re-run `seq-studio orm apply` — the retry heals the committed DDL and reconciles the registry')\n }\n return 1\n }\n if (run?.verdict === 'succeeded' || version?.status === 'applied') {\n console.log(`applied ${namespace} — the version is now active`)\n return 0\n }\n // No run id to poll (older server response) — fall back to the version's\n // terminal statuses alone.\n if (version?.status === 'failed') {\n console.error(`apply failed: ${version.status_detail ?? 'no detail recorded'}`)\n return 1\n }\n }\n}\n\ninterface RehearsalRecord {\n status: string\n detail: string | null\n statements_executed: number | null\n statements_pending: number | null\n}\n\n/**\n * `orm apply --dry-run`: rehearse the registered version on a copy-on-write\n * fork of this environment's real data and report — the fork is discarded, so\n * nothing real changes. Deployed environments run it async on the Trigger\n * worker (a branch fork takes minutes); local dev runs it inline. Exit 0 only\n * when the rehearsal converged.\n */\nasync function dryRunRehearsal({\n namespace,\n versionId,\n contentHash,\n}: {\n namespace: string\n versionId: string\n contentHash: string\n}): Promise<number> {\n const { rehearsal } = await apiRequestStrict<{\n rehearsal: { status: string; run_id?: string | null; runId?: string | null } | null\n }>('POST', `/api/orm/namespaces/${namespace}/diff`, { version_id: versionId, rehearse: true })\n\n if (!rehearsal) {\n console.log(`${namespace} is already active at this version — nothing to rehearse`)\n return 0\n }\n if (rehearsal.status === 'queued') {\n console.log(\n `rehearsal queued (run ${rehearsal.run_id ?? rehearsal.runId ?? 'unknown'}) — forking a copy of the data (this can take a few minutes)…`,\n )\n return waitForRehearsal(namespace, contentHash)\n }\n // Ran inline — read the durable record for the full statement counts.\n return reportRehearsal(await fetchRehearsal(namespace, contentHash))\n}\n\nconst REHEARSAL_POLL_INTERVAL_MS = 2_500\n\n/** Poll the version's durable rehearsal record until it reaches a terminal verdict. */\nasync function waitForRehearsal(namespace: string, contentHash: string): Promise<number> {\n let lastStatus: string | null = null\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, REHEARSAL_POLL_INTERVAL_MS))\n const record = await fetchRehearsal(namespace, contentHash)\n if (record && (record.status === 'passed' || record.status === 'failed')) return reportRehearsal(record)\n const status = record?.status ?? 'pending'\n if (status !== lastStatus) {\n lastStatus = status\n console.log(`… ${status}`)\n }\n }\n}\n\nasync function fetchRehearsal(namespace: string, contentHash: string): Promise<RehearsalRecord | null> {\n const body = await apiRequestStrict<{ hash_version: { rehearsal: RehearsalRecord | null } | null }>(\n 'GET',\n `/api/orm/namespaces/${namespace}?hash=${contentHash}`,\n )\n return body.hash_version?.rehearsal ?? null\n}\n\nfunction reportRehearsal(record: RehearsalRecord | null): number {\n if (!record) {\n console.error('rehearsal produced no record — re-run `seq-studio orm apply --dry-run`')\n return 1\n }\n if (record.status === 'passed') {\n console.log(\n `rehearsal passed — ${record.statements_executed ?? 0} statement(s) ran on a copy of the data and the schema converged`,\n )\n return 0\n }\n console.error(`rehearsal failed: ${record.detail ?? 'no detail recorded'}`)\n return 1\n}\n\n/**\n * Types regenerate on every successful apply — the same definitions that\n * shaped the live schema shape the client, so they can't drift apart. There\n * is deliberately no separate generate command: one verb owns the whole\n * loop. A write failure exits 1 with the state spelled out: the APPLY has\n * already succeeded.\n */\nasync function writeGeneratedTypes(\n dir: string,\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>,\n): Promise<number> {\n const outPath = join(dir, 'types.gen.ts')\n try {\n await writeFile(outPath, generateNamespaceTypes(loaded.definition))\n } catch (error) {\n console.error(\n `could not write ${outPath}: ${error instanceof Error ? error.message : String(error)} — the apply itself succeeded; re-run \\`seq-studio orm apply ${dir}\\` to refresh the types (it is a no-op on the already-active version and rewrites the file)`,\n )\n return 1\n }\n console.log(`wrote ${outPath} (${loaded.definition.tables.length} table(s))`)\n return 0\n}\n\nasync function readDefinitionFiles(\n dir: string,\n files: readonly string[],\n): Promise<Array<{ path: string; contents: string }>> {\n const { readFile } = await import('node:fs/promises')\n return Promise.all(\n files.map(async (file) => ({ path: file, contents: await readFile(join(dir, file), 'utf8') })),\n )\n}\n\nasync function apiRequest<T>(\n method: 'GET' | 'POST',\n path: string,\n body?: unknown,\n options?: { allow404?: boolean },\n): Promise<T | null> {\n const baseUrl = process.env[BASE_URL_ENV]?.trim()\n const token = await resolveToken()\n if (!baseUrl) throw new Error('no environment resolved — pass -e <env>')\n if (!token) throw new Error('not authenticated — run: seqapi login')\n\n const response = await fetch(`${baseUrl}${path}`, {\n method,\n headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n if (response.status === 404 && options?.allow404) return null\n const payload: unknown = await response.json().catch(() => null)\n if (!response.ok) {\n const detail =\n payload && typeof payload === 'object' && 'detail' in payload ? String(payload.detail) : `HTTP ${response.status}`\n throw new Error(`${method} ${path} failed: ${detail}`)\n }\n return payload as T\n}\n\n/** apiRequest that treats 404 as a hard error (the default for mutations). */\nasync function apiRequestStrict<T>(method: 'GET' | 'POST', path: string, body?: unknown): Promise<T> {\n const result = await apiRequest<T>(method, path, body)\n if (result === null) throw new Error(`${method} ${path} returned no payload`)\n return result\n}\n\ninterface RegistryVersion {\n readonly id: string\n readonly content_hash: string\n readonly status: string\n}\n\ntype RegistryState =\n | { kind: 'offline' }\n | { kind: 'missing' }\n | {\n kind: 'found'\n activeVersionId: string | null\n versions: readonly RegistryVersion[]\n hashVersion: RegistryVersion | null\n }\n\nasync function fetchRegistryState(namespace: string, contentHash: string): Promise<RegistryState> {\n if (!process.env[BASE_URL_ENV]?.trim() || !(await resolveToken())) return { kind: 'offline' }\n\n const body = await apiRequest<{\n namespace: { active_version_id: string | null }\n versions: RegistryVersion[]\n hash_version: RegistryVersion | null\n }>('GET', `/api/orm/namespaces/${namespace}?hash=${encodeURIComponent(contentHash)}`, undefined, { allow404: true })\n if (!body) return { kind: 'missing' }\n return {\n kind: 'found',\n activeVersionId: body.namespace.active_version_id,\n versions: body.versions,\n hashVersion: body.hash_version ?? null,\n }\n}\n\nfunction positional(rest: readonly string[]): string | undefined {\n const args = [...rest]\n const envIndex = args.indexOf('--env')\n if (envIndex !== -1) args.splice(envIndex, 2)\n return args.find((arg) => !arg.startsWith('-'))\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/authoring/columns.ts","../src/errors.ts","../src/canonical/v2.ts","../src/constants.ts","../src/hash.ts","../src/authoring/registry.ts","../src/authoring/table.ts","../src/authoring/namespace.ts","../src/authoring/load.ts","../src/codegen-gql/errors.ts","../src/codegen-gql/manifest.ts","../src/sdl/naming.ts","../src/codegen-gql/type-policies.ts","../src/ir/index.ts","../src/predicate-v2/ast.ts","../src/predicate-v2/errors.ts","../src/predicate-v2/parse.ts","../src/predicate-v2/compile.ts","../src/compiler-gql/diagnostics.ts","../src/compiler-gql/pred-utils.ts","../src/compiler-gql/inject.ts","../src/compiler-gql/naming.ts","../src/compiler-gql/context.ts","../src/compiler-gql/flatten.ts","../src/compiler-gql/hash.ts","../src/compiler-gql/lower.ts","../src/compiler-gql/parse.ts","../src/compiler-gql/restrict.ts","../src/compiler-gql/artifact.ts","../src/codegen/types.ts","../src/compiler/sql.ts","../src/schema/identifiers.ts","../src/schema/columns.ts","../src/predicate/ast.ts","../src/predicate/parse.ts","../src/schema/predicates.ts","../src/schema/actions.ts","../src/schema/table.ts","../src/engine/types.ts","../src/engine/columns.ts","../src/compiler/predicates.ts","../src/engine/security.ts","../src/engine/tables.ts","../src/engine/snapshot.ts","../src/engine/canonical2.ts","../src/compiler/actions.ts","../src/engine/actions.ts","../src/engine/index.ts","../src/schema/namespace.ts","../src/schema/namespace-config.ts","../src/loader.ts","../src/migrations/classify.ts","../src/migrations/workspace.ts","../src/migrations/committed.ts","../src/migrations/diff.ts","../src/migrations/from-yaml.ts","../src/migrations/v2.ts","../src/sdl/generate.ts","../src/cli.ts"],"names":["z","t","createHash","index","fail","realpath","join","stat","jiti","createJiti","readdir","require","createRequire","sep","identifier","seen","primaryKey","Kind","inlined","print","numeric","buildSchema","parseGraphql","validate","scalar","valueFromASTUntyped","pascalCase","COLUMN_TYPES","columnTypeSchema","KEYWORDS","OPERATOR_PATTERN","IDENTIFIER_START","IDENTIFIER_CHAR","NUMBER_PATTERN","tokenize","readString","Parser","sql","uuid","text","integer","bigint","doublePrecision","boolean","timestamp","date","jsonb","policyName","pgSchema","uniqueIndex","foreignKey","previousId","generateDrizzleJson","upPgSnapshot","generateMigration","FACTORIES","SCHEMA_IMPORT_KEY","sortByEnforcedLinks","buildTable","primaryKeyColumns","buildIndexes","buildForeignKeys","enforcedTargets","findTable","QUOTED_STRING_PATTERN","compileNamespace","validateCapabilityPins","customRolesBlockSchema","capabilityPinsSchema","readFile","loadYaml","extname","path","mkdir","writeFile","GRAPHQL_NAME_RE","basename","resolve","dirname","fileURLToPath","pathToFileURL","META_DIRNAME","JOURNAL_FILENAME","firstLine","rm","pad","columnTables"],"mappings":"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","file":"cli.cjs","sourcesContent":["/**\n * Fluent column builders for the v2 authoring surface — `t.uuid()`,\n * `t.text().notNull().unique()`, `t.enum(status).default('open')`, …\n *\n * Builders carry plain serializable state and produce `CanonicalColumn` data\n * (canonical definition v2). They never touch Drizzle: the server builds\n * Drizzle entities from canonical JSON, consumer TypeScript never runs\n * server-side (plan §2).\n *\n * Cross-copy safety: the jiti loader evaluates its own transpiled copy of\n * this module, so identification uses the `kind` brand — never `instanceof`.\n */\nimport type { CanonicalColumn, ColumnType } from '../canonical/v2.js'\n\nexport const COLUMN_BRAND = 'seq-column' as const\nexport const ENUM_BRAND = 'seq-enum' as const\n\n/** A namespace-level Postgres enum, created with `defineEnum` (table.ts). */\nexport interface EnumRef {\n readonly kind: typeof ENUM_BRAND\n readonly name: string\n readonly values: readonly string[]\n}\n\nexport function isEnumRef(value: unknown): value is EnumRef {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === ENUM_BRAND\n}\n\n/** The allowlisted SQL default functions — `.default('now()')` maps here, not to a literal. */\nexport const COLUMN_DEFAULT_FNS = ['gen_random_uuid()', 'now()'] as const\nexport type ColumnDefaultFn = (typeof COLUMN_DEFAULT_FNS)[number]\n\nexport type ColumnDefaultLiteral = string | number | boolean | null\n\nexport type ColumnTypeSpec = ColumnType | { readonly enum: string }\n\n/** `authorSub` → `author_sub`, `authorURLPath` → `author_url_path`. */\nexport function deriveColumnName(propertyName: string): string {\n return propertyName\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .toLowerCase()\n}\n\ninterface ColumnState {\n type: ColumnTypeSpec\n columnName: string | undefined\n primaryKey: boolean\n notNull: boolean\n unique: boolean\n hasDefault: boolean\n defaultValue: ColumnDefaultLiteral | undefined\n defaultFn: ColumnDefaultFn | undefined\n description: string | undefined\n renamedFrom: string | undefined\n cast: string | undefined\n deprecated: boolean\n}\n\nexport class ColumnBuilder {\n readonly kind = COLUMN_BRAND\n\n private readonly state: ColumnState\n\n constructor(type: ColumnTypeSpec, columnName?: string) {\n this.state = {\n type,\n columnName,\n primaryKey: false,\n notNull: false,\n unique: false,\n hasDefault: false,\n defaultValue: undefined,\n defaultFn: undefined,\n description: undefined,\n renamedFrom: undefined,\n cast: undefined,\n deprecated: false,\n }\n }\n\n /** Marks this column as (part of) the primary key. Implies NOT NULL. */\n primaryKey(): this {\n this.state.primaryKey = true\n return this\n }\n\n notNull(): this {\n this.state.notNull = true\n return this\n }\n\n unique(): this {\n this.state.unique = true\n return this\n }\n\n /**\n * Column default: a literal, or one of the allowlisted SQL functions\n * (`'gen_random_uuid()'` / `'now()'`), which serialize as `defaultFn`.\n */\n default(value: ColumnDefaultLiteral): this {\n if (value === 'gen_random_uuid()' || value === 'now()') {\n this.state.defaultFn = value\n this.state.hasDefault = false\n this.state.defaultValue = undefined\n return this\n }\n this.state.hasDefault = true\n this.state.defaultValue = value\n this.state.defaultFn = undefined\n return this\n }\n\n description(text: string): this {\n this.state.description = text\n return this\n }\n\n /** Migration rename hint: the previous Postgres column name. */\n renamedFrom(previousColumnName: string): this {\n this.state.renamedFrom = previousColumnName\n return this\n }\n\n /** Migration cast hint: the `USING` SQL applied when this column changes type. */\n cast(usingSql: string): this {\n this.state.cast = usingSql\n return this\n }\n\n /** Emits `@deprecated` in the generated SDL; the column stays queryable. */\n deprecated(): this {\n this.state.deprecated = true\n return this\n }\n\n /** Whether `.primaryKey()` was called — collected into the table-level PK. */\n get isPrimaryKey(): boolean {\n return this.state.primaryKey\n }\n\n /** The enum name when this is an enum column, else undefined. */\n get enumName(): string | undefined {\n return typeof this.state.type === 'object' ? this.state.type.enum : undefined\n }\n\n /** Postgres column name: explicit override, else snake_case of the property name. */\n columnNameFor(propertyName: string): string {\n return this.state.columnName ?? deriveColumnName(propertyName)\n }\n\n /** Serialize to a canonical v2 column. Validation happens in serializeNamespace. */\n toCanonicalColumn(propertyName: string): CanonicalColumn {\n const column: CanonicalColumn = {\n name: propertyName,\n columnName: this.columnNameFor(propertyName),\n type: typeof this.state.type === 'object' ? { enum: this.state.type.enum } : this.state.type,\n nullable: !(this.state.notNull || this.state.primaryKey),\n unique: this.state.unique,\n deprecated: this.state.deprecated,\n }\n if (this.state.hasDefault) column.default = this.state.defaultValue ?? null\n if (this.state.defaultFn !== undefined) column.defaultFn = this.state.defaultFn\n if (this.state.description !== undefined) column.description = this.state.description\n if (this.state.renamedFrom !== undefined) column.renamedFrom = this.state.renamedFrom\n if (this.state.cast !== undefined) column.cast = this.state.cast\n return column\n }\n}\n\nexport function isColumnBuilder(value: unknown): value is ColumnBuilder {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === COLUMN_BRAND\n}\n\nconst scalar =\n (type: ColumnType) =>\n (columnName?: string): ColumnBuilder =>\n new ColumnBuilder(type, columnName)\n\n/**\n * The column-type factory. The optional argument overrides the derived\n * snake_case Postgres column name: `t.text('legacy_name')`.\n */\nexport const t = {\n uuid: scalar('uuid'),\n text: scalar('text'),\n integer: scalar('integer'),\n bigint: scalar('bigint'),\n numeric: scalar('numeric'),\n double: scalar('double'),\n boolean: scalar('boolean'),\n timestamptz: scalar('timestamptz'),\n date: scalar('date'),\n jsonb: scalar('jsonb'),\n enum: (ref: EnumRef, columnName?: string): ColumnBuilder => new ColumnBuilder({ enum: ref.name }, columnName),\n} as const\n","export class OrmDefinitionError extends Error {\n override readonly name = 'OrmDefinitionError'\n\n constructor(\n message: string,\n readonly file?: string,\n ) {\n super(file ? `${file}: ${message}` : message)\n }\n}\n\nexport class PredicateParseError extends Error {\n override readonly name = 'PredicateParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n","/**\n * Canonical namespace definition v2 — the data-only JSON a consumer's\n * TypeScript schema serializes to. This is v2's equivalent of the v1 YAML\n * `NamespaceDefinition`: the CLI's jiti loader produces it, the content hash\n * is computed over it, the server re-validates it (consumer TS never runs\n * server-side), and the SDL generator / GraphQL compiler / migration engine\n * all consume it.\n *\n * FROZEN CONTRACT (week 1): downstream tracks build against these shapes.\n * Additive evolution only; `definition_format` discriminates on the wire.\n */\nimport { z } from 'zod'\n\nexport const CANONICAL_FORMAT = 2 as const\n\n/** Identifier grammar shared with v1 (`^[a-z][a-z0-9_]*$`, ≤63 bytes). */\nexport const IDENTIFIER_RE = /^[a-z][a-z0-9_]*$/\nconst identifier = z.string().min(1).max(63).regex(IDENTIFIER_RE)\n\n/** The 10 v1 column types, unchanged in v2. */\nexport const COLUMN_TYPES = [\n 'uuid', 'text', 'integer', 'bigint', 'numeric', 'double',\n 'boolean', 'timestamptz', 'date', 'jsonb',\n] as const\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nconst columnTypeSchema = z.enum(COLUMN_TYPES)\n\n/** Enum columns reference a namespace-level `defineEnum` by name. */\nexport const canonicalEnumSchema = z.object({\n name: identifier,\n values: z.array(z.string().min(1).max(63)).min(1).max(100),\n})\nexport type CanonicalEnum = z.infer<typeof canonicalEnumSchema>\n\nexport const canonicalColumnSchema = z.object({\n /** Property name in TS (camelCase); columnName is the Postgres name. */\n name: z.string().min(1).max(63),\n columnName: identifier,\n type: z.union([columnTypeSchema, z.object({ enum: identifier })]),\n nullable: z.boolean().default(true),\n unique: z.boolean().default(false),\n /** Literal default, or one of the allowlisted SQL functions. */\n default: z.union([z.string(), z.number(), z.boolean(), z.null()]).optional(),\n defaultFn: z.enum(['gen_random_uuid()', 'now()']).optional(),\n description: z.string().max(500).optional(),\n /** Migration hints — same semantics as v1. */\n renamedFrom: identifier.optional(),\n cast: z.string().max(200).optional(),\n deprecated: z.boolean().default(false),\n})\nexport type CanonicalColumn = z.infer<typeof canonicalColumnSchema>\n\nexport const canonicalLinkSchema = z.object({\n name: z.string().min(1).max(63),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n /** Target table name (namespace-local). Absent for toPlatformUser. */\n target: identifier.optional(),\n /** FK column on the owning side (toOne/toPlatformUser: on this table; toMany: on the target). */\n on: identifier,\n /** Referenced column on the target (default: target's PK / platform user `sub`). */\n references: identifier.optional(),\n /** enforce: true emits a real FK constraint (same-namespace toOne only). */\n enforce: z.boolean().default(false),\n description: z.string().max(500).optional(),\n})\nexport type CanonicalLink = z.infer<typeof canonicalLinkSchema>\n\nexport const canonicalIndexSchema = z.object({\n columns: z.array(identifier).min(1),\n unique: z.boolean().default(false),\n name: identifier.optional(),\n})\n\n/**\n * Policy expressions stay DSL SOURCE STRINGS in the canonical form — parsing\n * and claim-key validation happen in both CLI and server via the shared\n * predicate parser. Variants follow §4c permissive-union semantics.\n */\nexport const policyVariantSchema = z.object({\n /** Claims-only guard (capability()/role()/claim() comparisons — no columns). */\n when: z.string().min(1).max(1000),\n /** Exactly one of: allow-all bypass, or a row predicate. */\n allow: z.literal(true).optional(),\n policy: z.string().min(1).max(2000).optional(),\n}).refine((v) => (v.allow === true) !== (typeof v.policy === 'string'), {\n message: 'A variant declares exactly one of allow: true or policy',\n})\n\nexport const policyExpressionSchema = z.union([\n z.string().min(1).max(2000),\n z.object({\n default: z.string().min(1).max(2000),\n variants: z.array(policyVariantSchema).max(10).default([]),\n }),\n])\nexport type PolicyExpression = z.infer<typeof policyExpressionSchema>\n\nexport const canonicalPoliciesSchema = z.object({\n read: policyExpressionSchema.optional(),\n write: policyExpressionSchema.optional(),\n})\n\n/** Actions carry over from v1 as compiled named-SQL ops (plan: resolved OQ-1). */\nexport const canonicalActionSchema = z.object({\n name: identifier,\n requires: z.string().max(1000).optional(),\n params: z.record(z.string(), z.object({\n type: columnTypeSchema,\n nullable: z.boolean().default(false),\n })).default({}),\n executes: z.string().min(1).max(10_000),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']).default('rowsAffected'),\n audit: z.object({ action: z.string(), resource: z.string() }).optional(),\n})\n\nexport const canonicalTableSchema = z.object({\n table: identifier,\n description: z.string().max(2000).optional(),\n /** Table-level rename hint (new in v2). */\n renamedFrom: identifier.optional(),\n /** Synced/reflected read-only tables (`source: gold.*`) — v1 semantics. */\n source: z.string().regex(/^gold\\.[a-z][a-z0-9_]*$/).optional(),\n columns: z.array(canonicalColumnSchema).default([]),\n primaryKey: z.array(identifier).min(1).max(8).optional(),\n links: z.array(canonicalLinkSchema).default([]),\n indexes: z.array(canonicalIndexSchema).default([]),\n policies: canonicalPoliciesSchema.default({}),\n actions: z.array(canonicalActionSchema).default([]),\n})\nexport type CanonicalTable = z.infer<typeof canonicalTableSchema>\n\nexport const canonicalDefinitionSchema = z.object({\n definition_format: z.literal(CANONICAL_FORMAT),\n namespace: identifier.max(41),\n description: z.string().max(2000).optional(),\n enums: z.array(canonicalEnumSchema).default([]),\n tables: z.array(canonicalTableSchema).min(0).max(500),\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n capabilities: z.object({\n roles: z.unknown().optional(),\n uses: z.array(z.string()).default([]),\n }).default({ uses: [] }),\n})\nexport type CanonicalDefinition = z.infer<typeof canonicalDefinitionSchema>\n\n/**\n * Deterministic serialization discipline: tables sorted by name, columns in\n * declaration order (order is meaningful for DDL), links/indexes/actions\n * sorted by name, object keys emitted in schema order. `serializeNamespace`\n * (authoring layer) and the server-side re-validation both normalize through\n * this function before hashing so CLI and server hash identical bytes.\n */\nexport function normalizeCanonical(definition: CanonicalDefinition): CanonicalDefinition {\n const sortByName = <T extends { name: string }>(items: T[]): T[] =>\n [...items].sort((a, b) => a.name.localeCompare(b.name))\n return {\n ...definition,\n enums: sortByName(definition.enums),\n tables: [...definition.tables]\n .sort((a, b) => a.table.localeCompare(b.table))\n .map((t) => ({\n ...t,\n links: sortByName(t.links),\n indexes: [...t.indexes].sort((a, b) =>\n (a.name ?? a.columns.join('_')).localeCompare(b.name ?? b.columns.join('_'))),\n actions: sortByName(t.actions),\n })),\n }\n}\n","/** Namespace names become Postgres identifiers (`orm_<ns>` schema, `orm_<ns>_consumer` role) — the tight grammar is a security control, not cosmetics. */\nexport const NAMESPACE_PATTERN = /^[a-z][a-z0-9_]{0,40}$/\n\nexport const IDENTIFIER_PATTERN = /^[a-z][a-z0-9_]*$/\nexport const MAX_IDENTIFIER_LENGTH = 63\n\n/**\n * The Data API carries a delegated, attenuated data token on this header (not\n * `Authorization`, which stays the app-user/session bearer). One definition\n * shared by the client transport, the server's caller resolver, and the\n * function-invoke minter, so all three agree.\n */\nexport const ORM_DATA_TOKEN_HEADER = 'x-sequence-data-token'\n\n/**\n * The SEPARATE header the invoke proxy uses to hand a managed function its\n * *service* data token — the escalation path. A function receives BOTH this and\n * `ORM_DATA_TOKEN_HEADER`; the default `createOrmClient` reads the user token,\n * the deliberately-named `createServiceOrmClient` reads THIS one. Two distinct\n * headers so reaching for the service identity is always an explicit act, never\n * an accidental default. Both are sent to the Data API on `ORM_DATA_TOKEN_HEADER`\n * — the server stays mode-agnostic and resolves whatever sub the token carries.\n */\nexport const ORM_SERVICE_DATA_TOKEN_HEADER = 'x-sequence-data-token-service'\n\n/**\n * Custom Roles & Capabilities claim keys as policies reference them: a\n * host-scoped registry key, or an org pin's `org/<key>`. Matches the registry\n * key grammar EXACTLY (`[a-z0-9-]`, 1–64 chars, no `_` — the FGA object-id\n * delimiter) so any capability that's declarable/attachable in namespace.yaml\n * can also be referenced here — a stricter pattern would let a valid key\n * register yet fail at apply (e.g. `org/2fa`, a one-char or digit-led key).\n */\nexport const CAPABILITY_KEY_PATTERN = /^(?:org\\/)?[a-z0-9-]{1,64}$/\n\nexport const CLAIM_KEY_PATTERN = /^[a-z][a-z0-9_]*$/\n\n/** Qualified reference to a table outside the defining file: `<schema>.<table>`. */\nexport const QUALIFIED_TABLE_PATTERN = /^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$/\n\n/** Synced reflected sources are restricted to the gold layer. */\nexport const SYNCED_SOURCE_PATTERN = /^gold\\.[a-z][a-z0-9_]*$/\n\nexport const ORM_SCHEMA_PREFIX = 'orm_'\nexport const CONSUMER_ROLE_SUFFIX = '_consumer'\n\nexport const ormSchemaName = (namespace: string): string => `${ORM_SCHEMA_PREFIX}${namespace}`\nexport const consumerRoleName = (namespace: string): string =>\n `${ORM_SCHEMA_PREFIX}${namespace}${CONSUMER_ROLE_SUFFIX}`\n\nexport const DEFINITION_FILE_EXTENSIONS = ['.yml', '.yaml'] as const\n\n/** Reserved basenames for the namespace-level config file (description, org capability pins). */\nexport const NAMESPACE_CONFIG_FILENAMES = new Set(['namespace.yaml', 'namespace.yml'])\n\nexport const HASH_DOMAIN = 'sequence-orm-definitions\\0'\n\n/**\n * The one size guard the package owns: a per-file byte cap where the loader\n * reads untrusted YAML into memory — a real failure mode, not a product\n * limit. Counts of tables/indexes/params and policy/SQL lengths are\n * deliberately uncapped; Postgres enforces its own limits loudly at apply.\n */\nexport const MAX_DEFINITION_FILE_BYTES = 1024 * 1024\n\n/** `/api/data/<ns>/actions/…` and `/api/data/<ns>/query` share the table path segment. */\nexport const RESERVED_TABLE_NAMES = new Set(['actions', 'query'])\n\n/**\n * The Data API's query-string grammar owns these parameter names — a column\n * with one of them could never be filtered over the wire, so definitions\n * refuse it up front (\"validate rejects only what can never work\").\n */\nexport const RESERVED_COLUMN_NAMES = new Set(['select', 'order', 'limit', 'offset'])\n","import { createHash } from 'node:crypto'\nimport { HASH_DOMAIN } from './constants.js'\nimport type { NamespaceCapabilities, NamespaceDefinition } from './schema/namespace.js'\nimport type { TableFile } from './schema/table.js'\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\n\n/** `Object.entries` widens Zod record values to `unknown` under tsup's DTS check. */\ntype RoleDefinition = NonNullable<NamespaceCapabilities['roles']['definitions'][string]>\ntype CapabilityDeclaration = NonNullable<NamespaceCapabilities['roles']['capabilities'][string]>\n\n/** Key-sorted, undefined-skipped JSON — identical definitions hash identically regardless of YAML key order. */\nexport function stableJson(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableJson).join(',')}]`\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, entryValue]) => entryValue !== undefined)\n .sort(([a], [b]) => (a < b ? -1 : 1))\n .map(([key, entryValue]) => `${JSON.stringify(key)}:${stableJson(entryValue)}`)\n return `{${entries.join(',')}}`\n}\n\n/** Empty collections hash as omitted — `indexes: []` and no indexes are the same definition. */\nfunction emptyToNull(value: unknown): JsonValue {\n if (value == null) return null\n if (Array.isArray(value)) return value.length === 0 ? null : (value as JsonValue)\n if (typeof value === 'object' && Object.keys(value).length === 0) return null\n return value as JsonValue\n}\n\n/** Predicates hash by their source text; parsed ASTs are derived and excluded. */\nfunction canonicalTable(table: TableFile): JsonValue {\n return {\n table: table.table,\n description: table.description ?? null,\n columns: (table.columns ?? null) as JsonValue,\n source: table.source ?? null,\n links: emptyToNull(table.links),\n indexes: emptyToNull(table.indexes),\n policies: {\n read: table.policies?.read?.source ?? null,\n write: table.policies?.write?.source ?? null,\n },\n actions: emptyToNull(\n Object.fromEntries(\n Object.entries(table.actions ?? {}).map(([name, action]) => [\n name,\n {\n description: action.description ?? null,\n requires: action.requires?.source ?? null,\n params: emptyToNull(action.params),\n validates: emptyToNull(action.validates?.map((entry) => entry.source)),\n executes: action.executes,\n returns: emptyToNull(action.returns),\n audit: (action.audit ?? null) as JsonValue,\n },\n ]),\n ),\n ),\n }\n}\n\n/**\n * The capabilities block, canonicalized: record keys sort via stableJson, and\n * we sort every array (uses, each role's inherits/grants) so authoring order\n * never changes the hash. Absent optional descriptions are omitted, not null,\n * so the canonical block round-trips back through the manifest schema. An empty\n * block hashes as omitted — \"no capabilities\" and an empty block are the same.\n */\nfunction canonicalCapabilities(capabilities: NamespaceCapabilities): JsonValue {\n const { definitions, capabilities: declared } = capabilities.roles\n const isEmpty =\n Object.keys(definitions).length === 0 && Object.keys(declared).length === 0 && capabilities.uses.length === 0\n if (isEmpty) return null\n // JSON-safe by construction (omitted optionals are dropped by stableJson); the\n // conditional spreads defeat structural inference, so assert the JsonValue shape.\n return {\n roles: {\n definitions: Object.fromEntries(\n (Object.entries(definitions) as [string, RoleDefinition][]).map(([key, def]) => [\n key,\n {\n ...(def.description !== undefined ? { description: def.description } : {}),\n default: def.default,\n inherits: [...def.inherits].sort(),\n grants: [...def.grants].sort(),\n },\n ]),\n ),\n capabilities: Object.fromEntries(\n (Object.entries(declared) as [string, CapabilityDeclaration][]).map(([key, cap]) => [\n key,\n cap.description !== undefined ? { description: cap.description } : {},\n ]),\n ),\n },\n uses: [...capabilities.uses].sort(),\n } as JsonValue\n}\n\nexport function canonicalizeDefinition(definition: NamespaceDefinition): JsonValue {\n return {\n namespace: definition.namespace,\n description: definition.description,\n capabilities: canonicalCapabilities(definition.capabilities),\n tables: definition.tables.map(canonicalTable),\n }\n}\n\nexport function computeDefinitionHash(definition: NamespaceDefinition): string {\n return createHash('sha256')\n .update(HASH_DOMAIN)\n .update(stableJson(canonicalizeDefinition(definition)))\n .digest('hex')\n}\n","/**\n * Module-registry pattern for the authoring surface: `defineTable` /\n * `defineEnum` / `defineNamespace` register into the ACTIVE collection\n * context while `loadNamespaceFromDir` imports a consumer's files, so the\n * loader collects definitions without inspecting module exports.\n *\n * The context stack lives on `globalThis` under a `Symbol.for` key — NOT in\n * module scope — because the jiti loader evaluates its own transpiled copy of\n * this module when a consumer file imports '@sequenceholdings/orm'. Both\n * copies must observe the same registrations (the graphql-js dual-package\n * discipline), so everything registered is plain data identified by `kind`\n * brand strings, never `instanceof`.\n */\n\nexport interface AuthoringRegistration {\n readonly value: unknown\n readonly file: string | undefined\n}\n\nexport interface AuthoringContext {\n /** Set by the loader before importing each consumer file — error attribution. */\n currentFile: string | undefined\n readonly tables: AuthoringRegistration[]\n readonly enums: AuthoringRegistration[]\n readonly configs: AuthoringRegistration[]\n}\n\nconst CONTEXT_STACK_KEY = Symbol.for('sequence.orm.authoring.context-stack.v2')\n\nfunction contextStack(): AuthoringContext[] {\n const holder = globalThis as { [key: symbol]: unknown }\n const existing = holder[CONTEXT_STACK_KEY]\n if (Array.isArray(existing)) {\n // The slot is only ever written by this function with an AuthoringContext[];\n // the cast re-attaches the type the untyped global slot cannot carry.\n return existing as AuthoringContext[]\n }\n const created: AuthoringContext[] = []\n holder[CONTEXT_STACK_KEY] = created\n return created\n}\n\n/** Push a fresh collection context; every define* call registers into it until ended. */\nexport function beginAuthoringContext(): AuthoringContext {\n const context: AuthoringContext = { currentFile: undefined, tables: [], enums: [], configs: [] }\n contextStack().push(context)\n return context\n}\n\n/** Pop the context; throws if collection begin/end calls are mismatched (programmer error). */\nexport function endAuthoringContext(context: AuthoringContext): void {\n const stack = contextStack()\n const top = stack[stack.length - 1]\n if (top !== context) {\n throw new Error('endAuthoringContext: the given context is not the active one — begin/end calls are mismatched')\n }\n stack.pop()\n}\n\nexport function activeAuthoringContext(): AuthoringContext | undefined {\n const stack = contextStack()\n return stack[stack.length - 1]\n}\n\nfunction register(bucket: keyof Pick<AuthoringContext, 'tables' | 'enums' | 'configs'>, value: unknown): void {\n const context = activeAuthoringContext()\n if (!context) return\n context[bucket].push({ value, file: context.currentFile })\n}\n\nexport function registerTable(value: unknown): void {\n register('tables', value)\n}\n\nexport function registerEnum(value: unknown): void {\n register('enums', value)\n}\n\nexport function registerNamespaceConfig(value: unknown): void {\n register('configs', value)\n}\n","/**\n * `defineTable` / `defineSyncedTable` / `defineEnum` and the link factories\n * (`toOne` / `toMany` / `toPlatformUser`) — the consumer-facing table layer\n * of the v2 authoring surface.\n *\n * Tables are plain-data descriptors (`SeqTable`) carrying builder state;\n * `serializeNamespace` (namespace.ts) turns them into canonical definition\n * v2. Link targets accept lazy `() => table` thunks so mutually-referencing\n * tables can live in any file order (cycles resolve at serialize time).\n */\nimport { IDENTIFIER_PATTERN, MAX_IDENTIFIER_LENGTH, SYNCED_SOURCE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { ENUM_BRAND, isColumnBuilder, type ColumnBuilder, type EnumRef } from './columns.js'\nimport { activeAuthoringContext, registerEnum, registerTable } from './registry.js'\nimport type { ColumnType } from '../canonical/v2.js'\n\nexport const TABLE_BRAND = 'seq-table' as const\nexport const LINK_BRAND = 'seq-link' as const\n\n// ---------------------------------------------------------------------------\n// Links\n// ---------------------------------------------------------------------------\n\n/** A link target: the table itself, or a lazy thunk for forward/cyclic references. */\nexport type TableRef = SeqTable | (() => SeqTable)\n\nexport type LinkKind = 'toOne' | 'toMany' | 'toPlatformUser'\n\nexport interface SeqLink {\n readonly kind: typeof LINK_BRAND\n readonly linkKind: LinkKind\n /** Absent for toPlatformUser — the platform-users view needs no target. */\n readonly target: TableRef | undefined\n /** FK column (property or column name). toOne/toPlatformUser: on this table; toMany: on the target. */\n readonly on: string\n readonly references: string | undefined\n readonly enforce: boolean\n readonly description: string | undefined\n}\n\nexport interface ToOneOptions {\n on: string\n references?: string\n /** Emit a real FK constraint (same-namespace toOne only). */\n enforce?: boolean\n description?: string\n}\n\nexport interface ToManyOptions {\n on: string\n references?: string\n description?: string\n}\n\nexport interface ToPlatformUserOptions {\n /** Column on this table holding the platform user `sub` (or `references` override). */\n on: string\n references?: string\n description?: string\n}\n\nexport function toOne(target: TableRef, options: ToOneOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toOne',\n target,\n on: options.on,\n references: options.references,\n enforce: options.enforce ?? false,\n description: options.description,\n }\n}\n\nexport function toMany(target: TableRef, options: ToManyOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toMany',\n target,\n on: options.on,\n references: options.references,\n enforce: false,\n description: options.description,\n }\n}\n\n/** Link to the built-in read-only platform-users view (plan §4b) — no table definition needed. */\nexport function toPlatformUser(options: ToPlatformUserOptions): SeqLink {\n return {\n kind: LINK_BRAND,\n linkKind: 'toPlatformUser',\n target: undefined,\n on: options.on,\n references: options.references,\n enforce: false,\n description: options.description,\n }\n}\n\nexport function isSeqLink(value: unknown): value is SeqLink {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === LINK_BRAND\n}\n\n// ---------------------------------------------------------------------------\n// Policies / indexes / actions (authoring input shapes)\n// ---------------------------------------------------------------------------\n\nexport interface PolicyVariantInput {\n /** Claims-only guard: `capability('x')` / `role('y')` / claim comparisons. */\n when: string\n /** Exactly one of `allow: true` or `policy` (validated at serialize time). */\n allow?: true\n policy?: string\n}\n\nexport interface PolicyWithVariantsInput {\n default: string\n variants?: readonly PolicyVariantInput[]\n}\n\n/** A policy: a DSL source string, or a default + per-role/capability variants (§4c). */\nexport type PolicyInput = string | PolicyWithVariantsInput\n\nexport interface TablePoliciesInput {\n read?: PolicyInput\n write?: PolicyInput\n}\n\nexport interface IndexInput {\n /** Property names (camelCase) or Postgres column names. */\n columns: readonly string[]\n unique?: boolean\n name?: string\n}\n\nexport interface ActionParamInput {\n type: ColumnType\n nullable?: boolean\n}\n\nexport interface ActionInput {\n name: string\n requires?: string\n params?: Record<string, ActionParamInput>\n executes: string\n returns?: 'rows' | 'rowsAffected' | 'scalar'\n audit?: { action: string; resource: string }\n}\n\nexport interface TableConfig {\n description?: string\n /** Table-level migration rename hint (new in v2). */\n renamedFrom?: string\n /** Composite primary key: property names (or column names). Mutually exclusive with column-level `.primaryKey()`. */\n primaryKey?: readonly string[]\n indexes?: readonly IndexInput[]\n links?: Record<string, SeqLink>\n policies?: TablePoliciesInput\n actions?: readonly ActionInput[]\n}\n\n// ---------------------------------------------------------------------------\n// Tables\n// ---------------------------------------------------------------------------\n\nexport interface SeqTable {\n readonly kind: typeof TABLE_BRAND\n readonly tableName: string\n readonly columns: Readonly<Record<string, ColumnBuilder>>\n readonly config: TableConfig\n /** Synced reflected source (`gold.*`) — set only by defineSyncedTable. */\n readonly source: string | undefined\n /** Consumer file that defined the table (set when loaded via loadNamespaceFromDir). */\n readonly file: string | undefined\n}\n\nexport function isSeqTable(value: unknown): value is SeqTable {\n return typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === TABLE_BRAND\n}\n\nfunction assertIdentifier({ value, what, file }: { value: string; what: string; file: string | undefined }): void {\n if (!IDENTIFIER_PATTERN.test(value) || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `${what} \"${value}\" must match ${IDENTIFIER_PATTERN} and be at most ${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n}\n\nexport function defineTable(\n name: string,\n columns: Record<string, ColumnBuilder>,\n config: TableConfig = {},\n): SeqTable {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'table name', file })\n\n const entries = Object.entries(columns)\n if (entries.length === 0) {\n throw new OrmDefinitionError(`table \"${name}\" declares no columns`, file)\n }\n\n const seenColumnNames = new Map<string, string>()\n for (const [propertyName, builder] of entries) {\n if (!isColumnBuilder(builder)) {\n throw new OrmDefinitionError(\n `table \"${name}\": column \"${propertyName}\" is not a column builder — use the t.* factories (t.uuid(), t.text(), …)`,\n file,\n )\n }\n const columnName = builder.columnNameFor(propertyName)\n assertIdentifier({ value: columnName, what: `table \"${name}\": column \"${propertyName}\" column name`, file })\n const existing = seenColumnNames.get(columnName)\n if (existing !== undefined) {\n throw new OrmDefinitionError(\n `table \"${name}\": columns \"${existing}\" and \"${propertyName}\" both map to Postgres column \"${columnName}\"`,\n file,\n )\n }\n seenColumnNames.set(columnName, propertyName)\n }\n\n const table: SeqTable = { kind: TABLE_BRAND, tableName: name, columns, config, source: undefined, file }\n registerTable(table)\n return table\n}\n\nexport interface SyncedTableConfig {\n /** Reflected read-only source, restricted to the gold layer: `gold.<table>`. */\n source: string\n description?: string\n}\n\nexport function defineSyncedTable(name: string, config: SyncedTableConfig): SeqTable {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'table name', file })\n if (!SYNCED_SOURCE_PATTERN.test(config.source)) {\n throw new OrmDefinitionError(\n `synced table \"${name}\": source \"${config.source}\" must match ${SYNCED_SOURCE_PATTERN} (gold layer only)`,\n file,\n )\n }\n const table: SeqTable = {\n kind: TABLE_BRAND,\n tableName: name,\n columns: {},\n config: config.description !== undefined ? { description: config.description } : {},\n source: config.source,\n file,\n }\n registerTable(table)\n return table\n}\n\n// ---------------------------------------------------------------------------\n// Enums\n// ---------------------------------------------------------------------------\n\nexport function defineEnum(name: string, values: readonly string[]): EnumRef {\n const file = activeAuthoringContext()?.currentFile\n assertIdentifier({ value: name, what: 'enum name', file })\n if (values.length === 0 || values.length > 100) {\n throw new OrmDefinitionError(`enum \"${name}\" must declare between 1 and 100 values`, file)\n }\n const seen = new Set<string>()\n for (const value of values) {\n if (value.length === 0 || value.length > MAX_IDENTIFIER_LENGTH) {\n throw new OrmDefinitionError(\n `enum \"${name}\": value ${JSON.stringify(value)} must be 1-${MAX_IDENTIFIER_LENGTH} characters`,\n file,\n )\n }\n if (seen.has(value)) {\n throw new OrmDefinitionError(`enum \"${name}\" declares duplicate value \"${value}\"`, file)\n }\n seen.add(value)\n }\n const ref: EnumRef = { kind: ENUM_BRAND, name, values: [...values] }\n registerEnum(ref)\n return ref\n}\n","/**\n * `defineNamespace` + `serializeNamespace` — the bridge from the authoring\n * surface to canonical definition v2. Serialization is deterministic\n * (`normalizeCanonical` ordering, zod defaults materialized) so the CLI and\n * the server hash identical bytes; `computeCanonicalHash` reuses the v1\n * canonical-hash helper (`stableJson` + HASH_DOMAIN) over the normalized\n * canonical JSON.\n *\n * Every definition-time validation error names the offending table (and the\n * consumer file when loaded via `loadNamespaceFromDir`).\n */\nimport { createHash } from 'node:crypto'\nimport { z } from 'zod'\nimport {\n CANONICAL_FORMAT,\n canonicalDefinitionSchema,\n canonicalLinkSchema,\n canonicalTableSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalTable,\n type PolicyExpression,\n} from '../canonical/v2.js'\nimport { HASH_DOMAIN, NAMESPACE_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { stableJson } from '../hash.js'\nimport { deriveColumnName, type EnumRef } from './columns.js'\nimport { registerNamespaceConfig, activeAuthoringContext } from './registry.js'\nimport { isSeqTable, type PolicyInput, type SeqLink, type SeqTable, type TableRef } from './table.js'\n\nexport const NAMESPACE_CONFIG_BRAND = 'seq-namespace-config' as const\n\nexport interface NamespaceCapabilitiesInput {\n /** Verbatim custom-roles grammar (@sequenceholdings/custom-roles-manifest). */\n roles?: unknown\n /** Org-level capability pins this namespace attaches to. */\n uses?: readonly string[]\n}\n\nexport interface NamespaceConfigInput {\n namespace: string\n description?: string\n capabilities?: NamespaceCapabilitiesInput\n}\n\nexport interface SeqNamespaceConfig {\n readonly kind: typeof NAMESPACE_CONFIG_BRAND\n readonly namespace: string\n readonly description: string | undefined\n readonly capabilities: NamespaceCapabilitiesInput\n readonly file: string | undefined\n}\n\nexport function isSeqNamespaceConfig(value: unknown): value is SeqNamespaceConfig {\n return (\n typeof value === 'object' && value !== null && (value as { kind?: unknown }).kind === NAMESPACE_CONFIG_BRAND\n )\n}\n\nexport function defineNamespace(input: NamespaceConfigInput): SeqNamespaceConfig {\n const file = activeAuthoringContext()?.currentFile\n if (!NAMESPACE_PATTERN.test(input.namespace)) {\n throw new OrmDefinitionError(`namespace \"${input.namespace}\" must match ${NAMESPACE_PATTERN}`, file)\n }\n const config: SeqNamespaceConfig = {\n kind: NAMESPACE_CONFIG_BRAND,\n namespace: input.namespace,\n description: input.description,\n capabilities: input.capabilities ?? {},\n file,\n }\n registerNamespaceConfig(config)\n return config\n}\n\n// ---------------------------------------------------------------------------\n// Serialization\n// ---------------------------------------------------------------------------\n\nexport interface SerializeNamespaceInput {\n config: SeqNamespaceConfig\n tables: readonly SeqTable[]\n enums?: readonly EnumRef[]\n}\n\n/**\n * Serialize the authored namespace to a validated, normalized\n * `CanonicalDefinition` (definition_format: 2). Throws `OrmDefinitionError`\n * naming the table/file on any inconsistency.\n */\nexport function serializeNamespace(input: SerializeNamespaceInput): CanonicalDefinition {\n const { config, tables } = input\n const enums = input.enums ?? []\n\n const tablesByName = new Map<string, SeqTable>()\n for (const table of tables) {\n const existing = tablesByName.get(table.tableName)\n if (existing) {\n throw new OrmDefinitionError(\n `duplicate table \"${table.tableName}\" (defined in ${describeFile(existing)} and ${describeFile(table)})`,\n table.file,\n )\n }\n tablesByName.set(table.tableName, table)\n }\n\n const enumsByName = new Map<string, EnumRef>()\n for (const ref of enums) {\n if (enumsByName.has(ref.name)) {\n throw new OrmDefinitionError(`duplicate enum \"${ref.name}\"`, config.file)\n }\n enumsByName.set(ref.name, ref)\n }\n\n const canonicalTables = tables.map((table) => buildCanonicalTable({ table, tablesByName, enumsByName }))\n const canonicalEnums: CanonicalEnum[] = [...enumsByName.values()].map((ref) => ({\n name: ref.name,\n values: [...ref.values],\n }))\n\n const candidate: z.input<typeof canonicalDefinitionSchema> = {\n definition_format: CANONICAL_FORMAT,\n namespace: config.namespace,\n enums: canonicalEnums,\n tables: canonicalTables,\n capabilities: {\n ...(config.capabilities.roles !== undefined ? { roles: config.capabilities.roles } : {}),\n uses: [...(config.capabilities.uses ?? [])],\n },\n }\n if (config.description !== undefined) candidate.description = config.description\n\n let parsed: CanonicalDefinition\n try {\n parsed = canonicalDefinitionSchema.parse(candidate)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new OrmDefinitionError(`namespace \"${config.namespace}\": ${formatZodIssues(error)}`, config.file)\n }\n throw error\n }\n return normalizeCanonical(parsed)\n}\n\n/** sha256 over the v1 hash domain + key-sorted JSON of the normalized canonical definition. */\nexport function computeCanonicalHash(definition: CanonicalDefinition): string {\n return createHash('sha256').update(HASH_DOMAIN).update(stableJson(definition)).digest('hex')\n}\n\n// ---------------------------------------------------------------------------\n// Per-table serialization\n// ---------------------------------------------------------------------------\n\ninterface TableBuildContext {\n table: SeqTable\n tablesByName: Map<string, SeqTable>\n enumsByName: Map<string, EnumRef>\n}\n\nfunction buildCanonicalTable({ table, tablesByName, enumsByName }: TableBuildContext): CanonicalTable {\n const candidate: z.input<typeof canonicalTableSchema> = {\n table: table.tableName,\n columns: [],\n links: [],\n indexes: [],\n policies: {},\n actions: [],\n }\n if (table.config.description !== undefined) candidate.description = table.config.description\n if (table.config.renamedFrom !== undefined) candidate.renamedFrom = table.config.renamedFrom\n if (table.source !== undefined) candidate.source = table.source\n\n // Columns — declaration order is meaningful for DDL.\n const columnLevelPk: string[] = []\n for (const [propertyName, builder] of Object.entries(table.columns)) {\n const column = builder.toCanonicalColumn(propertyName)\n const enumName = builder.enumName\n if (enumName !== undefined && !enumsByName.has(enumName)) {\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": column \"${propertyName}\" references enum \"${enumName}\" which is not passed to serializeNamespace — declare it with defineEnum and include it`,\n table.file,\n )\n }\n if (builder.isPrimaryKey) columnLevelPk.push(column.columnName)\n candidate.columns?.push(column)\n }\n\n // Primary key — column-level `.primaryKey()` or config-level composite, never both.\n if (table.config.primaryKey !== undefined) {\n if (columnLevelPk.length > 0) {\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": declare the primary key either with .primaryKey() on columns or with config.primaryKey — not both`,\n table.file,\n )\n }\n candidate.primaryKey = table.config.primaryKey.map((ref) =>\n resolveColumnRef({ table, ref, role: 'primaryKey' }),\n )\n } else if (columnLevelPk.length > 0) {\n candidate.primaryKey = columnLevelPk\n }\n\n // Indexes.\n for (const index of table.config.indexes ?? []) {\n const entry: { columns: string[]; unique?: boolean; name?: string } = {\n columns: index.columns.map((ref) => resolveColumnRef({ table, ref, role: 'index' })),\n }\n if (index.unique !== undefined) entry.unique = index.unique\n if (index.name !== undefined) entry.name = index.name\n candidate.indexes?.push(entry)\n }\n\n // Links.\n for (const [linkName, link] of Object.entries(table.config.links ?? {})) {\n candidate.links?.push(buildCanonicalLink({ table, linkName, link, tablesByName }))\n }\n\n // Policies — DSL source strings pass through; variants validated by the canonical schema.\n const policies: { read?: PolicyExpression; write?: PolicyExpression } = {}\n if (table.config.policies?.read !== undefined) policies.read = toCanonicalPolicy(table.config.policies.read)\n if (table.config.policies?.write !== undefined) policies.write = toCanonicalPolicy(table.config.policies.write)\n candidate.policies = policies\n\n // Actions.\n for (const action of table.config.actions ?? []) {\n candidate.actions?.push({\n name: action.name,\n ...(action.requires !== undefined ? { requires: action.requires } : {}),\n params: Object.fromEntries(\n Object.entries(action.params ?? {}).map(([name, param]) => [\n name,\n { type: param.type, nullable: param.nullable ?? false },\n ]),\n ),\n executes: action.executes,\n returns: action.returns ?? 'rowsAffected',\n ...(action.audit !== undefined ? { audit: action.audit } : {}),\n })\n }\n\n try {\n return canonicalTableSchema.parse(candidate)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new OrmDefinitionError(`table \"${table.tableName}\": ${formatZodIssues(error)}`, table.file)\n }\n throw error\n }\n}\n\nfunction buildCanonicalLink({\n table,\n linkName,\n link,\n tablesByName,\n}: {\n table: SeqTable\n linkName: string\n link: SeqLink\n tablesByName: Map<string, SeqTable>\n}): z.input<typeof canonicalLinkSchema> {\n const fail = (message: string): never => {\n throw new OrmDefinitionError(`table \"${table.tableName}\": link \"${linkName}\" ${message}`, table.file)\n }\n\n if (link.enforce && link.linkKind !== 'toOne') {\n return fail('sets enforce: true, which is only supported on toOne links')\n }\n\n if (link.linkKind === 'toPlatformUser') {\n if (link.target !== undefined) return fail('is toPlatformUser and must not declare a target table')\n return {\n name: linkName,\n kind: 'toPlatformUser',\n on: resolveColumnRef({ table, ref: link.on, role: `link \"${linkName}\" on` }),\n ...(link.references !== undefined ? { references: deriveColumnName(link.references) } : {}),\n enforce: false,\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n }\n\n const target = resolveTableRef({ ref: link.target, fail })\n if (!tablesByName.has(target.tableName)) {\n return fail(`targets table \"${target.tableName}\" which is not part of this namespace`)\n }\n\n // toOne: FK column lives on this table; toMany: on the target.\n const owningSide = link.linkKind === 'toOne' ? table : target\n return {\n name: linkName,\n kind: link.linkKind,\n target: target.tableName,\n on: resolveColumnRef({ table: owningSide, ref: link.on, role: `link \"${linkName}\" on` }),\n ...(link.references !== undefined\n ? { references: resolveColumnRef({ table: target, ref: link.references, role: `link \"${linkName}\" references` }) }\n : {}),\n enforce: link.enforce,\n ...(link.description !== undefined ? { description: link.description } : {}),\n }\n}\n\nfunction resolveTableRef({ ref, fail }: { ref: TableRef | undefined; fail: (message: string) => never }): SeqTable {\n if (ref === undefined) return fail('declares no target table')\n if (typeof ref !== 'function') return ref\n let resolved: unknown\n try {\n resolved = ref()\n } catch (error) {\n return fail(\n `target thunk threw (${error instanceof Error ? error.message : String(error)}) — lazy refs resolve at serialize time; make sure the target module ran`,\n )\n }\n if (!isSeqTable(resolved)) return fail('target thunk did not return a table defined with defineTable')\n return resolved\n}\n\n/**\n * Resolve a column reference that may be a TS property name (camelCase) or\n * an actual Postgres column name.\n */\nfunction resolveColumnRef({ table, ref, role }: { table: SeqTable; ref: string; role: string }): string {\n const direct = table.columns[ref]\n if (direct) return direct.columnNameFor(ref)\n for (const [propertyName, builder] of Object.entries(table.columns)) {\n if (builder.columnNameFor(propertyName) === ref) return ref\n }\n const known = Object.keys(table.columns).join(', ')\n throw new OrmDefinitionError(\n `table \"${table.tableName}\": ${role} references unknown column \"${ref}\" (known columns: ${known || 'none'})`,\n table.file,\n )\n}\n\nfunction toCanonicalPolicy(policy: PolicyInput): PolicyExpression {\n if (typeof policy === 'string') return policy\n return {\n default: policy.default,\n variants: (policy.variants ?? []).map((variant) => ({\n when: variant.when,\n ...(variant.allow === true ? { allow: true as const } : {}),\n ...(variant.policy !== undefined ? { policy: variant.policy } : {}),\n })),\n }\n}\n\nfunction describeFile(table: SeqTable): string {\n return table.file ?? '<unknown file>'\n}\n\nfunction formatZodIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","/**\n * `loadNamespaceFromDir` — the CLI-side loader that imports a consumer\n * namespace directory (`sequence.config.ts` + `schema/*.ts`) via jiti and\n * collects the `defineNamespace` / `defineTable` / `defineEnum`\n * registrations (module-registry pattern; see registry.ts).\n *\n * jiti caveats this file owns:\n * - jiti evaluates its OWN transpiled copy of '@sequenceholdings/orm' for\n * consumer imports; registrations still land in the shared globalThis\n * context (registry.ts).\n * - jiti populates the native CJS module cache, so files under the loaded\n * directory are PURGED from `require.cache` before each load — repeated\n * loads re-evaluate consumer modules (determinism checks, watch loops)\n * while intra-load imports still deduplicate (a schema file imported by a\n * sibling AND by the loader evaluates exactly once per load).\n */\nimport { createJiti } from 'jiti'\nimport { readdir, realpath, stat } from 'node:fs/promises'\nimport { createRequire } from 'node:module'\nimport { join, sep } from 'node:path'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { isEnumRef, type EnumRef } from './columns.js'\nimport {\n computeCanonicalHash,\n isSeqNamespaceConfig,\n serializeNamespace,\n type SeqNamespaceConfig,\n} from './namespace.js'\nimport { beginAuthoringContext, endAuthoringContext } from './registry.js'\nimport { isSeqTable, type SeqTable } from './table.js'\n\nexport const NAMESPACE_CONFIG_FILE = 'sequence.config.ts'\nexport const SCHEMA_DIR = 'schema'\n\nexport interface LoadNamespaceOptions {\n /**\n * Test/dev hook: absolute path that bare `'@sequenceholdings/orm'` imports\n * in consumer files resolve to (jiti alias). Leave unset in production —\n * the consumer's own installed package resolves naturally.\n */\n ormModulePath?: string\n}\n\nexport interface LoadedNamespaceV2 {\n readonly canonical: CanonicalDefinition\n readonly hash: string\n /** Relative paths of the files that were imported, config first. */\n readonly files: readonly string[]\n}\n\nexport async function loadNamespaceFromDir(\n dir: string,\n options: LoadNamespaceOptions = {},\n): Promise<LoadedNamespaceV2> {\n const root = await realpath(dir).catch(() => {\n throw new OrmDefinitionError(`namespace directory not found: ${dir}`)\n })\n\n const configPath = join(root, NAMESPACE_CONFIG_FILE)\n const configStat = await stat(configPath).catch(() => undefined)\n if (!configStat?.isFile()) {\n throw new OrmDefinitionError(`${NAMESPACE_CONFIG_FILE} not found in ${dir}`)\n }\n\n const schemaFiles = await listSchemaFiles(root)\n const files = [NAMESPACE_CONFIG_FILE, ...schemaFiles]\n\n purgeModuleCache(root)\n\n const jiti = createJiti(import.meta.url, {\n interopDefault: true,\n fsCache: false,\n ...(options.ormModulePath !== undefined\n ? { alias: { '@sequenceholdings/orm': options.ormModulePath } }\n : {}),\n })\n\n const context = beginAuthoringContext()\n try {\n for (const file of files) {\n context.currentFile = file\n try {\n await jiti.import(join(root, file))\n } catch (error) {\n // Cross-copy safe: the jiti copy's OrmDefinitionError is a different\n // class object, so match by name, never instanceof.\n if (error instanceof Error && error.name === 'OrmDefinitionError') throw error\n throw new OrmDefinitionError(\n `failed to load: ${error instanceof Error ? error.message : String(error)}`,\n file,\n )\n }\n }\n } finally {\n context.currentFile = undefined\n endAuthoringContext(context)\n }\n\n const configs: Array<{ value: SeqNamespaceConfig; file: string | undefined }> = []\n for (const entry of context.configs) {\n if (isSeqNamespaceConfig(entry.value)) configs.push({ value: entry.value, file: entry.file })\n }\n const configEntry = configs[0]\n if (!configEntry) {\n throw new OrmDefinitionError(\n 'no namespace config registered — sequence.config.ts must call defineNamespace(...) at import time',\n NAMESPACE_CONFIG_FILE,\n )\n }\n if (configs.length > 1) {\n const where = configs.map((entry) => entry.file ?? '<unknown file>').join(', ')\n throw new OrmDefinitionError(\n `defineNamespace called ${configs.length} times (${where}) — declare exactly one namespace config`,\n )\n }\n\n const tables: SeqTable[] = []\n for (const entry of context.tables) {\n if (isSeqTable(entry.value)) tables.push(entry.value)\n }\n if (tables.length === 0) {\n throw new OrmDefinitionError(\n `no tables registered — ${SCHEMA_DIR}/*.ts modules must call defineTable(...) at import time`,\n )\n }\n\n const enums: EnumRef[] = []\n for (const entry of context.enums) {\n if (isEnumRef(entry.value)) enums.push(entry.value)\n }\n\n const canonical = serializeNamespace({ config: configEntry.value, tables, enums })\n return { canonical, hash: computeCanonicalHash(canonical), files }\n}\n\nasync function listSchemaFiles(root: string): Promise<string[]> {\n const schemaDir = join(root, SCHEMA_DIR)\n const entries = await readdir(schemaDir, { withFileTypes: true }).catch(() => [])\n return entries\n .filter(\n (entry) =>\n entry.isFile() && entry.name.endsWith('.ts') && !entry.name.endsWith('.d.ts') && !entry.name.startsWith('.'),\n )\n .map((entry) => join(SCHEMA_DIR, entry.name))\n .sort()\n}\n\n/** Drop the directory's modules from the native CJS cache so a re-load re-evaluates them. */\nfunction purgeModuleCache(root: string): void {\n const require = createRequire(import.meta.url)\n const prefix = root.endsWith(sep) ? root : `${root}${sep}`\n for (const key of Object.keys(require.cache)) {\n if (key.startsWith(prefix)) delete require.cache[key]\n }\n}\n","/** Errors raised by the v2 client-codegen surface (manifest + generated sources). */\nexport class CodegenGqlError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'CodegenGqlError'\n }\n}\n","/**\n * `operations.manifest.json` (plan §7): the client-side registry of compiled\n * operations written by `orm generate` alongside `schema.graphql`. The Apollo\n * link / `executeOperation` resolve an operation NAME to its `opHash` here —\n * the wire carries only `{op: <hash>, variables}`, never document text.\n *\n * `opsHash` identifies the operation set (plan §6: document edits mint a new\n * ops hash, never a migration) and is computed over the sorted operation\n * entries, independent of input order.\n */\nimport { createHash } from 'node:crypto'\nimport { z } from 'zod'\nimport { stableJson } from '../hash.js'\nimport { CodegenGqlError } from './errors.js'\n\nexport const MANIFEST_VERSION = 1 as const\n\n/** Same grammar the IR contract enforces for `opHash` (frozen, plan §4). */\nconst OP_HASH_RE = /^sha256:[0-9a-f]{64}$/\nconst GRAPHQL_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]*$/\n\nexport const manifestRequiresSchema = z\n .object({\n capability: z.string().min(1).optional(),\n role: z.string().min(1).optional(),\n })\n .nullable()\n\nexport const manifestOperationSchema = z.object({\n hash: z.string().regex(OP_HASH_RE),\n kind: z.enum(['query', 'mutation', 'action']),\n requires: manifestRequiresSchema,\n})\n\nexport const operationsManifestSchema = z.object({\n manifestVersion: z.literal(MANIFEST_VERSION),\n schemaHash: z.string().min(1),\n opsHash: z.string().regex(OP_HASH_RE),\n operations: z.record(z.string().regex(GRAPHQL_NAME_RE), manifestOperationSchema),\n})\nexport type OperationsManifest = z.infer<typeof operationsManifestSchema>\nexport type ManifestOperation = z.infer<typeof manifestOperationSchema>\n\nexport interface ManifestOperationInput {\n /** Operation name as authored in the document (the registry identity). */\n name: string\n /** Compiled op hash (`sha256:<64 hex>` — the wire selector). */\n hash: string\n kind: 'query' | 'mutation' | 'action'\n /** `@requires` gate; absent/empty normalizes to null. */\n requires?: { capability?: string; role?: string } | null\n}\n\nexport function buildOperationsManifest({\n schemaHash,\n operations,\n}: {\n schemaHash: string\n operations: ManifestOperationInput[]\n}): OperationsManifest {\n if (schemaHash.length === 0) throw new CodegenGqlError('schemaHash must be a non-empty string.')\n\n const sorted = [...operations].sort((a, b) => a.name.localeCompare(b.name))\n const seen = new Set<string>()\n const entries = sorted.map((op) => {\n if (!GRAPHQL_NAME_RE.test(op.name)) {\n throw new CodegenGqlError(`Operation name \"${op.name}\" is not a valid GraphQL name.`)\n }\n if (seen.has(op.name)) {\n throw new CodegenGqlError(`Duplicate operation name \"${op.name}\" — operation names must be unique per namespace.`)\n }\n seen.add(op.name)\n if (!OP_HASH_RE.test(op.hash)) {\n throw new CodegenGqlError(`Operation \"${op.name}\" has malformed hash \"${op.hash}\" (expected sha256:<64 hex>).`)\n }\n return { name: op.name, hash: op.hash, kind: op.kind, requires: normalizeRequires(op.requires) }\n })\n\n const opsHash = `sha256:${createHash('sha256').update(stableJson(entries)).digest('hex')}`\n\n const operationsRecord: Record<string, ManifestOperation> = {}\n for (const entry of entries) {\n operationsRecord[entry.name] = { hash: entry.hash, kind: entry.kind, requires: entry.requires }\n }\n\n return {\n manifestVersion: MANIFEST_VERSION,\n schemaHash,\n opsHash,\n operations: operationsRecord,\n }\n}\n\nfunction normalizeRequires(\n requires: ManifestOperationInput['requires'],\n): { capability?: string; role?: string } | null {\n if (requires === undefined || requires === null) return null\n const normalized: { capability?: string; role?: string } = {}\n if (requires.capability !== undefined) normalized.capability = requires.capability\n if (requires.role !== undefined) normalized.role = requires.role\n return normalized.capability === undefined && normalized.role === undefined ? null : normalized\n}\n","/**\n * graphql-default (Hasura-style) camelCase naming for the v2 SDL generator.\n *\n * Verified against the bios marketplace corpus\n * (~/test/apps/marketplace/src/graphql, 871 ops):\n * - input types are singular PascalCase + suffix (`VideoClipBoolExp`,\n * `UserOrderBy`, `ProfileInsertInput`, `ThirdPartyIntegrationOnConflict`)\n * - roots keep the table's plurality camelCased (`videoClips`, `profileByPk`,\n * `profileAggregate`, `insertProfileOne`, `updateUserByPk`)\n * - order enum values: ASC / ASC_NULLS_FIRST / ... / DESC_NULLS_LAST\n * - SelectColumn / UpdateColumn enum values are camelCase field names\n * (`distinctOn: [role]`, `updateColumns: [sceneFile, buyerTagId]`)\n * - constraint enum values are raw Postgres constraint names\n * (`static_ad_pkey`, `audience_profile_id_name_key`)\n * - mutation args keep `_set` / `_append` / `_inc` underscores; everything\n * else camelCases (`pkColumns`, `updateColumns`, `distinctOn`,\n * `affectedRows`, `returning`)\n */\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\n/** `deal_comments` → `dealComments`. Preserves already-camelCase input. */\nexport function camelCase(name: string): string {\n const segments = name.split('_').filter((segment) => segment.length > 0)\n const first = segments[0]\n if (first === undefined) return name\n const head = first.charAt(0).toLowerCase() + first.slice(1)\n return head + segments.slice(1).map(capitalizeFirst).join('')\n}\n\n/** `deal_comments` → `DealComments`. */\nexport function pascalCase(name: string): string {\n return capitalizeFirst(camelCase(name))\n}\n\nfunction capitalizeFirst(segment: string): string {\n return segment.charAt(0).toUpperCase() + segment.slice(1)\n}\n\n/**\n * Deterministic English-ish singularization of one word. Intentional,\n * documented misses exist (`statuses` → `statuse`): a full inflection engine\n * would make generated names depend on a dictionary. Ambiguous table names\n * are resolved by renaming the table (or a future explicit `graphqlName`\n * annotation), never by changing these rules — they are part of the wire\n * contract once a namespace ships.\n */\nfunction singularizeWord(word: string): string {\n if (word.endsWith('ies') && word.length > 3) return `${word.slice(0, -3)}y`\n for (const suffix of ['sses', 'xes', 'ches', 'shes']) {\n if (word.endsWith(suffix)) return word.slice(0, -2)\n }\n if (word.endsWith('ss')) return word\n if (word.endsWith('s') && word.length > 1) return word.slice(0, -1)\n return word\n}\n\n/** GraphQL object type name: `deal_comments` → `DealComment` (last word singularized). */\nexport function typeName(table: string): string {\n const segments = table.split('_').filter((segment) => segment.length > 0)\n const last = segments[segments.length - 1]\n if (last === undefined) return pascalCase(table)\n return [...segments.slice(0, -1), singularizeWord(last)].map(capitalizeFirst).join('')\n}\n\n/** Column → GraphQL field name: `author_sub` → `authorSub`. */\nexport function fieldName(column: string): string {\n return camelCase(column)\n}\n\n/** Postgres enum name → GraphQL enum type name: `deal_status` → `DealStatus`. */\nexport function enumTypeName(name: string): string {\n return pascalCase(name)\n}\n\n/** GraphQL type → comparison input name: `String` → `StringComparisonExp`, `uuid` → `UuidComparisonExp`. */\nexport function comparisonExpName(gqlTypeName: string): string {\n return `${capitalizeFirst(gqlTypeName)}ComparisonExp`\n}\n\n/** Maps the 10 canonical column types onto GraphQL scalar names. */\nconst SCALAR_FOR_COLUMN_TYPE: Record<ColumnType, string> = {\n uuid: 'uuid',\n text: 'String',\n integer: 'Int',\n bigint: 'bigint',\n numeric: 'numeric',\n double: 'Float',\n boolean: 'Boolean',\n timestamptz: 'timestamptz',\n date: 'date',\n jsonb: 'jsonb',\n}\n\nexport function graphqlScalarFor(type: ColumnType): string {\n return SCALAR_FOR_COLUMN_TYPE[type]\n}\n\n/**\n * GraphQL scalar name → canonical column type: the exact inverse of\n * SCALAR_FOR_COLUMN_TYPE plus the `ID` builtin (accepted as text). This is\n * the map the compiler's restrict pass classifies variable types with, so a\n * variable declared with a lowercase custom scalar exactly as the SDL\n * declares it (`$id: uuid!`, `$before: timestamptz`) resolves to the right\n * ColumnType — capitalized spellings (`Uuid`) are NOT names this schema\n * declares and never classify.\n */\nconst COLUMN_TYPE_BY_SCALAR: ReadonlyMap<string, ColumnType> = new Map<string, ColumnType>([\n ['ID', 'text'],\n ...COLUMN_TYPES.map((type): [string, ColumnType] => [graphqlScalarFor(type), type]),\n])\n\nexport function columnTypeForScalar(scalarName: string): ColumnType | undefined {\n return COLUMN_TYPE_BY_SCALAR.get(scalarName)\n}\n\n/** Every GraphQL scalar name usable as a variable type — for diagnostics. */\nexport const VARIABLE_SCALAR_NAMES: readonly string[] = [...COLUMN_TYPE_BY_SCALAR.keys()]\n\n/** The custom scalars every generated schema declares (plan §3). */\nexport const CUSTOM_SCALARS = ['bigint', 'date', 'jsonb', 'numeric', 'timestamptz', 'uuid'] as const\n\n/** Column types eligible for sum/avg aggregates and `_inc` updates. */\nexport const NUMERICISH_COLUMN_TYPES: readonly ColumnType[] = ['integer', 'bigint', 'numeric', 'double']\n\nexport const ORDER_BY_ENUM = 'OrderBy'\nexport const ORDER_BY_ENUM_VALUES = [\n 'ASC',\n 'ASC_NULLS_FIRST',\n 'ASC_NULLS_LAST',\n 'DESC',\n 'DESC_NULLS_FIRST',\n 'DESC_NULLS_LAST',\n] as const\n\n/** The built-in read-only platform users entity (plan §4b). */\nexport const PLATFORM_USER_TYPENAME = 'PlatformUser'\n\n/** Every generated GraphQL name derived from one table name. */\nexport interface TableNames {\n typename: string\n selectRoot: string\n byPkRoot: string\n aggregateRoot: string\n insertRoot: string\n insertOneRoot: string\n updateRoot: string\n updateByPkRoot: string\n deleteRoot: string\n deleteByPkRoot: string\n boolExp: string\n orderBy: string\n selectColumn: string\n insertInput: string\n setInput: string\n appendInput: string\n incInput: string\n onConflict: string\n pkColumnsInput: string\n constraintEnum: string\n updateColumnEnum: string\n mutationResponse: string\n aggregate: string\n aggregateFields: string\n sumFields: string\n avgFields: string\n aggregateBoolExp: string\n aggregateBoolExpCount: string\n}\n\nexport function tableNames(table: string): TableNames {\n const root = camelCase(table)\n const rootPascal = pascalCase(table)\n const type = typeName(table)\n return {\n typename: type,\n selectRoot: root,\n byPkRoot: `${root}ByPk`,\n aggregateRoot: `${root}Aggregate`,\n insertRoot: `insert${rootPascal}`,\n insertOneRoot: `insert${rootPascal}One`,\n updateRoot: `update${rootPascal}`,\n updateByPkRoot: `update${rootPascal}ByPk`,\n deleteRoot: `delete${rootPascal}`,\n deleteByPkRoot: `delete${rootPascal}ByPk`,\n boolExp: `${type}BoolExp`,\n orderBy: `${type}OrderBy`,\n selectColumn: `${type}SelectColumn`,\n insertInput: `${type}InsertInput`,\n setInput: `${type}SetInput`,\n appendInput: `${type}AppendInput`,\n incInput: `${type}IncInput`,\n onConflict: `${type}OnConflict`,\n pkColumnsInput: `${type}PkColumnsInput`,\n constraintEnum: `${type}Constraint`,\n updateColumnEnum: `${type}UpdateColumn`,\n mutationResponse: `${type}MutationResponse`,\n aggregate: `${type}Aggregate`,\n aggregateFields: `${type}AggregateFields`,\n sumFields: `${type}SumFields`,\n avgFields: `${type}AvgFields`,\n aggregateBoolExp: `${type}AggregateBoolExp`,\n aggregateBoolExpCount: `${type}AggregateBoolExpCount`,\n }\n}\n","/**\n * `typePolicies.gen.ts` generation (plan §7): Apollo InMemoryCache key fields\n * derived from primary keys (composite included), so persisted-operation\n * responses normalize identically to the bios Apollo setup.\n */\nimport { canonicalDefinitionSchema, normalizeCanonical, type CanonicalDefinition } from '../canonical/v2.js'\nimport { PLATFORM_USER_TYPENAME, fieldName, tableNames } from '../sdl/naming.js'\nimport { CodegenGqlError } from './errors.js'\n\n/** Returns the TypeScript SOURCE of the consumer's `typePolicies.gen.ts`. */\nexport function generateTypePolicies(canonical: CanonicalDefinition): string {\n const def = normalizeCanonical(canonicalDefinitionSchema.parse(canonical))\n const entries: Array<{ typename: string; keyFields: string[] }> = []\n let hasPlatformUser = false\n\n for (const table of def.tables) {\n // Synced tables are excluded from the GraphQL surface (mirrors generateSdl).\n if (table.source !== undefined) continue\n if (table.links.some((link) => link.kind === 'toPlatformUser')) hasPlatformUser = true\n if (!table.primaryKey || table.primaryKey.length === 0) continue\n const keyFields = table.primaryKey.map((identifier) => {\n const column = table.columns.find((c) => c.columnName === identifier || c.name === identifier)\n if (!column) {\n throw new CodegenGqlError(`Primary key column \"${identifier}\" not found on table \"${table.table}\".`)\n }\n return fieldName(column.name)\n })\n entries.push({ typename: tableNames(table.table).typename, keyFields })\n }\n\n if (hasPlatformUser) entries.push({ typename: PLATFORM_USER_TYPENAME, keyFields: ['sub'] })\n entries.sort((a, b) => a.typename.localeCompare(b.typename))\n\n const body = entries\n .map((entry) => ` ${entry.typename}: { keyFields: [${entry.keyFields.map((key) => `'${key}'`).join(', ')}] },`)\n .join('\\n')\n\n return (\n '/* Generated by @sequenceholdings/orm — Apollo cache type policies. Do not edit. */\\n' +\n \"import type { TypePolicies } from '@apollo/client'\\n\\n\" +\n `export const typePolicies: TypePolicies = {\\n${body}\\n}\\n`\n )\n}\n","/**\n * Compiled-operation IR — THE frozen contract between the GraphQL compiler\n * (push time, CLI preview + canonical server compile) and the data-plane\n * executor (runtime). The artifact is inert, validated JSON: no generated\n * code ever crosses the registry (plan §4).\n *\n * Design invariants:\n * - Policies are BAKED IN at compile time: every table-touching node carries\n * its read policy AND-ed into `where` (or `writePolicy`/`insertCheck` for\n * mutation targets). Execution needs only (IR, claims, variables).\n * - §4f dynamic slots: a variable typed with a generated input type\n * (BoolExp/OrderBy/SelectColumn/InsertInput/SetInput/AppendInput/OnConflict)\n * marks a dynamic slot. The executor validates the runtime value against\n * the artifact's per-table whitelist metadata, lowers it to Drizzle, and\n * ANDs it with the baked policy — the policy is non-negotiable regardless\n * of what the client sends.\n * - `capability`/`role` predicate leaves resolve to booleans against the\n * caller's claims BEFORE execution, pruning dead branches per caller.\n * - Versioned via `irVersion` + `normalizeIr` (the normalizeSnapshot\n * pattern): executor upgrades decouple from artifact re-pushes.\n */\nimport { z } from 'zod'\nimport { COLUMN_TYPES, type ColumnType } from '../canonical/v2.js'\n\nexport const IR_VERSION = 1 as const\n\n// ---------------------------------------------------------------------------\n// Values & claims\n// ---------------------------------------------------------------------------\n\n/** The exact claim keys the platform stamps — mirrors claims.ts. */\nexport const CLAIMS_CONTRACT = {\n sub: 'string',\n org: 'string?',\n roles: 'string[]',\n capabilities: 'string[]',\n} as const\nexport type ClaimKey = 'sub' | 'org'\n\nconst scalarLiteral = z.union([z.string(), z.number(), z.boolean(), z.null()])\n\nexport const valueIrSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('literal'), value: z.union([scalarLiteral, z.array(scalarLiteral)]) }),\n z.object({ kind: z.literal('variable'), name: z.string() }),\n z.object({ kind: z.literal('claim'), key: z.enum(['sub', 'org']) }),\n])\nexport type ValueIr = z.infer<typeof valueIrSchema>\n\n// ---------------------------------------------------------------------------\n// Predicates\n// ---------------------------------------------------------------------------\n\nexport const CMP_OPS = [\n 'eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'in', 'nin',\n 'like', 'ilike', 'isNull', 'contains', 'hasKey',\n] as const\nexport type CmpOp = (typeof CMP_OPS)[number]\n\nexport type PredIr =\n | { kind: 'and'; operands: PredIr[] }\n | { kind: 'or'; operands: PredIr[] }\n | { kind: 'not'; operand: PredIr }\n | { kind: 'cmp'; op: CmpOp; column: string; value: ValueIr }\n /** EXISTS through a declared link; `where` runs against the target table. */\n | { kind: 'exists'; link: string; where: PredIr }\n /** Aggregation predicate (Hasura `rel_aggregate: { count: { predicate } }`). */\n | { kind: 'aggPredicate'; link: string; fn: 'count'; op: Exclude<CmpOp, 'in' | 'nin' | 'like' | 'ilike' | 'isNull' | 'contains' | 'hasKey'>; value: number; where?: PredIr }\n /** Boolean claims leaves — pre-resolved against claims before execution. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** §4f: a client-supplied BoolExp variable lands here, validated + lowered at runtime. */\n | { kind: 'dynamicFilter'; slot: string }\n | { kind: 'const'; value: boolean }\n\nexport const predIrSchema: z.ZodType<PredIr> = z.lazy(() =>\n z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('and'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('or'), operands: z.array(predIrSchema).min(1) }),\n z.object({ kind: z.literal('not'), operand: predIrSchema }),\n z.object({ kind: z.literal('cmp'), op: z.enum(CMP_OPS), column: z.string(), value: valueIrSchema }),\n z.object({ kind: z.literal('exists'), link: z.string(), where: predIrSchema }),\n z.object({\n kind: z.literal('aggPredicate'), link: z.string(), fn: z.literal('count'),\n op: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte']), value: z.number(),\n where: predIrSchema.optional(),\n }),\n z.object({ kind: z.literal('capability'), key: z.string() }),\n z.object({ kind: z.literal('role'), key: z.string() }),\n z.object({ kind: z.literal('dynamicFilter'), slot: z.string() }),\n z.object({ kind: z.literal('const'), value: z.boolean() }),\n ]),\n) as z.ZodType<PredIr>\n\n// ---------------------------------------------------------------------------\n// Ordering / paging\n// ---------------------------------------------------------------------------\n\nexport const orderIrSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('column'),\n column: z.string(),\n /** Order through a to-one link: `link` is set and `column` is on the target. */\n link: z.string().optional(),\n direction: z.enum(['asc', 'desc']),\n nulls: z.enum(['first', 'last']).optional(),\n }),\n /** §4f: `$orderBy: [FooOrderBy!]` variable — validated + lowered at runtime. */\n z.object({ kind: z.literal('dynamic'), slot: z.string() }),\n])\nexport type OrderIr = z.infer<typeof orderIrSchema>\n\nexport const limitIrSchema = z.object({\n /** Fixed value or a variable, clamped to [1, max]; absent → default. */\n variable: z.string().optional(),\n value: z.number().int().positive().optional(),\n default: z.number().int().positive(),\n max: z.number().int().positive(),\n})\nexport type LimitIr = z.infer<typeof limitIrSchema>\n\n// ---------------------------------------------------------------------------\n// Selections\n// ---------------------------------------------------------------------------\n\nexport interface SelectionIr {\n /** GraphQL type name for __typename synthesis + Apollo normalization. */\n typename: string\n columns: Array<{ alias: string; column: string }>\n relations: Array<{\n alias: string\n link: string\n selection: SelectionIr\n /** Fixed shape from the document; policy for the target table is ALSO\n * injected by the compiler into this `where` — never trust it absent. */\n where?: PredIr\n orderBy?: OrderIr[]\n limit?: LimitIr\n offset?: { variable?: string; value?: number }\n }>\n aggregates: Array<{\n alias: string\n /** Absent link = same-table aggregate (used by aggregate roots). */\n link?: string\n where?: PredIr\n count?: { columns?: string[]; distinct?: boolean }\n sum?: string[]\n avg?: string[]\n /** `nodes { }` selection inside an aggregate block. */\n nodes?: SelectionIr\n }>\n}\n\nconst selectionIrSchema: z.ZodType<SelectionIr> = z.lazy(() =>\n z.object({\n typename: z.string(),\n columns: z.array(z.object({ alias: z.string(), column: z.string() })),\n relations: z.array(z.object({\n alias: z.string(),\n link: z.string(),\n selection: selectionIrSchema,\n where: predIrSchema.optional(),\n orderBy: z.array(orderIrSchema).optional(),\n limit: limitIrSchema.optional(),\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n })),\n aggregates: z.array(z.object({\n alias: z.string(),\n link: z.string().optional(),\n where: predIrSchema.optional(),\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n })),\n }),\n) as z.ZodType<SelectionIr>\n\nexport { selectionIrSchema }\n\n// ---------------------------------------------------------------------------\n// Roots\n// ---------------------------------------------------------------------------\n\n/** `@include(if: $var)` / `@skip(if: $var)` on a root field. */\nconst includeIfSchema = z.object({ variable: z.string(), negated: z.boolean() })\n\nconst selectRootSchema = z.object({\n kind: z.literal('select'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n /** Composed at compile time: AND(policy, documentWhere?, dynamicFilter?). */\n where: predIrSchema,\n orderBy: z.array(orderIrSchema).default([]),\n distinctOn: z.union([z.array(z.string()), z.object({ slot: z.string() })]).optional(),\n limit: limitIrSchema,\n offset: z.object({ variable: z.string().optional(), value: z.number().int().optional() }).optional(),\n includeIf: includeIfSchema.optional(),\n})\n\nconst byPkRootSchema = z.object({\n kind: z.literal('byPk'),\n alias: z.string(),\n table: z.string(),\n selection: selectionIrSchema,\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).min(1),\n /** Policy predicate — ANDed with the PK match. */\n where: predIrSchema,\n includeIf: includeIfSchema.optional(),\n})\n\nconst aggregateRootSchema = z.object({\n kind: z.literal('aggregate'),\n alias: z.string(),\n table: z.string(),\n where: predIrSchema,\n count: z.object({ columns: z.array(z.string()).optional(), distinct: z.boolean().optional() }).optional(),\n sum: z.array(z.string()).optional(),\n avg: z.array(z.string()).optional(),\n nodes: selectionIrSchema.optional(),\n includeIf: includeIfSchema.optional(),\n})\n\n/** Column → value map for _set/_append/_inc, or a §4f whole-input slot. */\nconst writeValuesSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ entries: z.array(z.object({ column: z.string(), value: valueIrSchema })) }),\n])\n\nconst onConflictIrSchema = z.union([\n z.object({ slot: z.string() }),\n z.object({ constraint: z.string(), updateColumns: z.array(z.string()) }),\n])\n\nconst mutationRootSchema = z.object({\n kind: z.literal('mutation'),\n op: z.enum(['insert', 'insertOne', 'update', 'updateByPk', 'delete', 'deleteByPk']),\n alias: z.string(),\n table: z.string(),\n /** insert/insertOne: rows come from a slot ($object/$objects) or literals. */\n objects: z.union([\n z.object({ slot: z.string() }),\n z.object({ rows: z.array(z.array(z.object({ column: z.string(), value: valueIrSchema }))) }),\n ]).optional(),\n /** Server-pinned columns (e.g. author_sub ← claim('sub')) merged into every inserted row. */\n pinnedColumns: z.array(z.object({ column: z.string(), value: valueIrSchema })).default([]),\n onConflict: onConflictIrSchema.optional(),\n set: writeValuesSchema.optional(),\n append: writeValuesSchema.optional(),\n inc: writeValuesSchema.optional(),\n /** update/delete row filter: AND(writePolicy, documentWhere/pk, dynamicFilter?). */\n where: predIrSchema.optional(),\n pk: z.array(z.object({ column: z.string(), value: valueIrSchema })).optional(),\n /** WITH CHECK analogue evaluated against NEW row values (insert/update). */\n insertCheck: predIrSchema.optional(),\n returning: selectionIrSchema.nullable(),\n affectedRows: z.boolean().default(false),\n includeIf: includeIfSchema.optional(),\n})\n\nconst actionRootSchema = z.object({\n kind: z.literal('action'),\n alias: z.string(),\n name: z.string(),\n params: z.array(z.object({ name: z.string(), value: valueIrSchema })),\n returns: z.enum(['rows', 'rowsAffected', 'scalar']),\n})\n\nexport const rootIrSchema = z.discriminatedUnion('kind', [\n selectRootSchema, byPkRootSchema, aggregateRootSchema, mutationRootSchema, actionRootSchema,\n])\nexport type RootIr = z.infer<typeof rootIrSchema>\n\n// ---------------------------------------------------------------------------\n// Variables (§4f dynamic slots) & operations\n// ---------------------------------------------------------------------------\n\nexport const INPUT_REF_KINDS = [\n 'boolExp', 'orderBy', 'selectColumn', 'insertInput', 'setInput', 'appendInput', 'onConflict',\n] as const\nexport type InputRefKind = (typeof INPUT_REF_KINDS)[number]\n\n/**\n * A declared GraphQL variable default, persisted verbatim so an omitted\n * variable resolves to it instead of silently becoming NULL. Wrapped in an\n * object so an explicit `= null` stays distinguishable from \"no default\".\n * Only shapes `ValueIr` can carry are representable — the restrict pass\n * rejects anything else (including §4f slot defaults) at compile time.\n */\nexport const variableDefaultIrSchema = z.object({\n value: z.union([scalarLiteral, z.array(scalarLiteral)]),\n})\nexport type VariableDefaultIr = z.infer<typeof variableDefaultIrSchema>\n\nexport const variableIrSchema = z.object({\n name: z.string(),\n type: z.union([\n z.object({ kind: z.literal('scalar'), scalar: z.enum(COLUMN_TYPES) }),\n /** `values` is the declared membership whitelist — the executor validates against it. */\n z.object({ kind: z.literal('enum'), name: z.string(), values: z.array(z.string()).min(1) }),\n /** §4f dynamic slot: validated against `tables[table]` whitelists at runtime. */\n z.object({ kind: z.literal('inputRef'), input: z.enum(INPUT_REF_KINDS), table: z.string() }),\n ]),\n nullable: z.boolean(),\n list: z.boolean(),\n /** Absent = no default declared; see {@link variableDefaultIrSchema}. */\n defaultValue: variableDefaultIrSchema.optional(),\n})\nexport type VariableIr = z.infer<typeof variableIrSchema>\n\nexport const compiledOperationSchema = z.object({\n irVersion: z.literal(IR_VERSION),\n name: z.string(),\n opHash: z.string().regex(/^sha256:[0-9a-f]{64}$/),\n kind: z.enum(['query', 'mutation', 'action']),\n requires: z.object({\n capability: z.string().optional(),\n role: z.string().optional(),\n }).nullable(),\n variables: z.array(variableIrSchema),\n /** Every table the op touches — data-token scoping + audit. */\n tableSet: z.array(z.string()).min(1),\n roots: z.array(rootIrSchema).min(1),\n})\nexport type CompiledOperation = z.infer<typeof compiledOperationSchema>\n\n// ---------------------------------------------------------------------------\n// Artifact: per-table runtime metadata + the operation set\n// ---------------------------------------------------------------------------\n\n/**\n * Runtime whitelist metadata per table — everything the executor needs to\n * build Drizzle table objects, validate §4f dynamic inputs, and lower them.\n * Derived from the canonical definition at compile time.\n */\nexport const tableMetaIrSchema = z.object({\n table: z.string(),\n schema: z.string(),\n typename: z.string(),\n columns: z.array(z.object({\n name: z.string(),\n columnName: z.string(),\n type: z.union([z.enum(COLUMN_TYPES), z.object({ enum: z.string(), values: z.array(z.string()) })]),\n nullable: z.boolean(),\n })),\n primaryKey: z.array(z.string()).min(1),\n links: z.array(z.object({\n name: z.string(),\n kind: z.enum(['toOne', 'toMany', 'toPlatformUser']),\n target: z.string(),\n on: z.string(),\n references: z.string(),\n })),\n /** §4f whitelists: what dynamic inputs may reference. */\n filterable: z.array(z.string()),\n orderable: z.array(z.string()),\n insertable: z.array(z.string()),\n settable: z.array(z.string()),\n appendable: z.array(z.string()),\n constraints: z.array(z.object({ name: z.string(), columns: z.array(z.string()) })),\n /** Depth/node caps for dynamic filter trees on this table. */\n dynamicFilterMaxDepth: z.number().int().positive().default(6),\n dynamicFilterMaxNodes: z.number().int().positive().default(64),\n})\nexport type TableMetaIr = z.infer<typeof tableMetaIrSchema>\n\nexport const compiledArtifactSchema = z.object({\n irVersion: z.literal(IR_VERSION),\n namespace: z.string(),\n schemaHash: z.string(),\n opsHash: z.string(),\n tables: z.record(z.string(), tableMetaIrSchema),\n operations: z.record(z.string(), compiledOperationSchema),\n})\nexport type CompiledArtifact = z.infer<typeof compiledArtifactSchema>\n\n// ---------------------------------------------------------------------------\n// Versioning shim\n// ---------------------------------------------------------------------------\n\nexport class IrVersionError extends Error {\n constructor(found: unknown) {\n super(`Unsupported IR version ${String(found)} — this executor supports up to ${IR_VERSION}. ` +\n 'Upgrade @sequenceholdings/orm or re-push the namespace.')\n this.name = 'IrVersionError'\n }\n}\n\n/**\n * Validate + normalize a raw registry artifact (the normalizeSnapshot\n * pattern): future IR versions add upgrade branches here so executor\n * upgrades decouple from artifact re-pushes. Never trust registry jsonb —\n * the data plane calls this on every artifact load.\n */\nexport function normalizeIr(raw: unknown): CompiledArtifact {\n if (!raw || typeof raw !== 'object') throw new IrVersionError(undefined)\n const version = (raw as { irVersion?: unknown }).irVersion\n if (version !== IR_VERSION) throw new IrVersionError(version)\n return compiledArtifactSchema.parse(raw)\n}\n\n/** Index an artifact's operations by opHash (the wire selector). */\nexport function indexByHash(artifact: CompiledArtifact): Map<string, CompiledOperation> {\n const map = new Map<string, CompiledOperation>()\n for (const op of Object.values(artifact.operations)) map.set(op.opHash, op)\n return map\n}\n","import type { ClaimKey } from '../ir/index.js'\n\nexport const POLICY_COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type PolicyCompareOp = (typeof POLICY_COMPARE_OPS)[number]\n\nexport type PolicyOperand =\n /** A column reference, or a dotted to-one path ending in a column (`a.b.c`). */\n | { kind: 'path'; segments: readonly string[] }\n /** `claim('sub')` / `claim('org')` — the only claim() keys in CLAIMS_CONTRACT. */\n | { kind: 'claim'; key: ClaimKey }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type PolicyNode =\n | { kind: 'and'; operands: readonly PolicyNode[] }\n | { kind: 'or'; operands: readonly PolicyNode[] }\n | { kind: 'not'; operand: PolicyNode }\n | { kind: 'compare'; op: PolicyCompareOp; left: PolicyOperand; right: PolicyOperand }\n /** Boolean claims leaves — pre-resolved against the caller's claims at runtime. */\n | { kind: 'capability'; key: string }\n | { kind: 'role'; key: string }\n /** `exists(<link-path>, <pred>)` — the inner predicate runs against the final target. */\n | { kind: 'exists'; path: readonly string[]; where: PolicyNode }\n\nexport interface ParsedPolicy {\n readonly source: string\n readonly ast: PolicyNode\n}\n\nexport function walkPolicy(node: PolicyNode, visit: (node: PolicyNode) => void): void {\n visit(node)\n if (node.kind === 'and' || node.kind === 'or') {\n for (const operand of node.operands) walkPolicy(operand, visit)\n }\n if (node.kind === 'not') walkPolicy(node.operand, visit)\n if (node.kind === 'exists') walkPolicy(node.where, visit)\n}\n","/** Parse-time failure — bad token stream, malformed call, invalid claim key. */\nexport class PolicyParseError extends Error {\n override readonly name = 'PolicyParseError'\n\n constructor(\n message: string,\n readonly position: number,\n ) {\n super(`${message} (at position ${position})`)\n }\n}\n\nexport type PolicyCompileErrorCode =\n | 'unknown-table'\n | 'unknown-column'\n | 'unknown-link'\n | 'not-to-one'\n | 'link-depth-exceeded'\n | 'unsupported-comparison'\n | 'invalid-null-comparison'\n | 'when-not-claims-only'\n\n/**\n * Compile-time failure — the parsed policy references something the table\n * doesn't declare, or uses a shape the v2.0 IR cannot represent. Carries\n * `candidates` so the error can name what IS available.\n */\nexport class PolicyCompileError extends Error {\n override readonly name = 'PolicyCompileError'\n\n constructor(\n message: string,\n readonly code: PolicyCompileErrorCode,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n","/**\n * Policy DSL v2 parser — v1 grammar (and/or/not, comparisons, claim(),\n * capability()) extended with role('k'), dotted to-one paths (`a.b.c = …`),\n * and `exists(<link-path>, <pred>)`. Fresh implementation; the v1 parser at\n * ../predicate/parse.ts stays untouched for the YAML path.\n *\n * Claim keys are validated at parse time against CLAIMS_CONTRACT: only the\n * scalar keys (`sub`, `org`) are reachable via claim() — roles/capabilities\n * are arrays and must be tested with role()/capability(). This kills the\n * v1 silent-NULL class (`claim('team')` compiling to nothing).\n */\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport { CLAIMS_CONTRACT, type ClaimKey } from '../ir/index.js'\nimport { POLICY_COMPARE_OPS, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyParseError } from './errors.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'dot' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability', 'role', 'exists'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-zA-Z_]/\nconst IDENTIFIER_CHAR = /[a-zA-Z0-9_]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\n/** claim() reaches only the scalar contract keys; array-valued keys need role()/capability(). */\nconst SCALAR_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => !type.endsWith('[]'))\n .map(([key]) => key)\nconst ARRAY_CLAIM_KEYS = Object.entries(CLAIMS_CONTRACT)\n .filter(([, type]) => type.endsWith('[]'))\n .map(([key]) => key)\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === '.') {\n tokens.push({ kind: 'dot', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PolicyParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PolicyParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): PolicyNode {\n const node = this.parseOr()\n this.expect('end', 'end of expression')\n return node\n }\n\n private parseOr(): PolicyNode {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'or', operands }\n }\n\n private parseAnd(): PolicyNode {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as PolicyNode) : { kind: 'and', operands }\n }\n\n private parseNot(): PolicyNode {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): PolicyNode {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('capability') || this.peekKeyword('role')) {\n const fn = this.peek().value as 'capability' | 'role'\n const node = this.parseBooleanCall(fn)\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PolicyParseError(`${fn}() is boolean-valued and cannot appear in a comparison`, next.position)\n }\n return node\n }\n if (this.peekKeyword('exists')) return this.parseExists()\n return this.parseComparison()\n }\n\n private parseBooleanCall(fn: 'capability' | 'role'): PolicyNode {\n this.advance()\n const key = this.parseCallArgument(fn)\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PolicyParseError(`invalid ${fn} key '${key}'`, this.peek().position)\n }\n return { kind: fn, key }\n }\n\n private parseExists(): PolicyNode {\n this.advance()\n this.expect('lparen', \"'(' after exists\")\n const path = this.parsePath('a link path in exists(...)')\n this.expect('comma', \"',' between the exists link path and its predicate\")\n const where = this.parseOr()\n this.expect('rparen', \"')' closing exists(...)\")\n return { kind: 'exists', path, where }\n }\n\n private parseComparison(): PolicyNode {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!POLICY_COMPARE_OPS.includes(operator.value as PolicyCompareOp)) {\n throw new PolicyParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as PolicyCompareOp, left, right }\n }\n\n private parseOperand(): PolicyOperand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PolicyParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PolicyParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n if (token.value === 'true' || token.value === 'false') {\n this.advance()\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') {\n this.advance()\n return { kind: 'literal', value: null }\n }\n if (token.value === 'claim') {\n this.advance()\n const key = this.parseCallArgument('claim')\n return { kind: 'claim', key: this.validateClaimKey(key, token.position) }\n }\n if (token.value === 'capability' || token.value === 'role') {\n throw new PolicyParseError(`${token.value}() is boolean-valued and cannot appear in a comparison`, token.position)\n }\n return { kind: 'path', segments: this.parsePath('a column or link path') }\n }\n\n private validateClaimKey(key: string, position: number): ClaimKey {\n if (SCALAR_CLAIM_KEYS.includes(key)) return key as ClaimKey\n if (ARRAY_CLAIM_KEYS.includes(key)) {\n const fn = key === 'roles' ? \"role('…')\" : \"capability('…')\"\n throw new PolicyParseError(\n `claim('${key}') is not reachable — '${key}' is an array claim; use ${fn} instead`,\n position,\n )\n }\n throw new PolicyParseError(\n `unknown claim key '${key}' — valid claim() keys are: ${SCALAR_CLAIM_KEYS.map((k) => `'${k}'`).join(', ')}`,\n position,\n )\n }\n\n /** `ident(.ident)*` — first segment must not be a keyword; later segments may be (e.g. `author.role`). */\n private parsePath(description: string): string[] {\n const first = this.peek()\n if (first.kind !== 'identifier' || KEYWORDS.has(first.value)) {\n throw new PolicyParseError(`expected ${description}, got '${first.value || 'end'}'`, first.position)\n }\n this.advance()\n const segments = [first.value]\n while (this.peek().kind === 'dot') {\n this.advance()\n const segment = this.expect('identifier', 'a path segment after .')\n segments.push(segment.value)\n }\n return segments\n }\n\n private parseCallArgument(fn: 'claim' | 'capability' | 'role'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PolicyParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePolicy(source: string): ParsedPolicy {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PolicyParseError('empty policy expression', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","/**\n * Policy DSL v2 → PredIr compiler. Resolves column/link references against a\n * table resolver (TableMetaIr satisfies the shapes structurally), normalizes\n * everything to LOGICAL column names, and enforces the v2.0 representability\n * rules the frozen IR imposes:\n *\n * - dotted to-one paths (`deal.org = claim('org')`) lower to nested\n * `exists(link, …)` with the comparison innermost;\n * - total link-traversal depth (dotted hops + exists nesting) ≤ 3;\n * - a comparison must reference exactly ONE column side (column↔column and\n * claims↔literal comparisons have no PredIr shape in v2.0);\n * - `col = null` / `col != null` normalize to the isNull operator;\n * - variant `when` guards are claims-only: capability()/role() under\n * and/or/not. (claim() comparisons in `when` are not representable in the\n * v2.0 IR — a targeted error says so.)\n */\nimport type { PolicyExpression } from '../canonical/v2.js'\nimport type { ClaimKey, CmpOp, PredIr, ValueIr } from '../ir/index.js'\nimport { walkPolicy, type ParsedPolicy, type PolicyCompareOp, type PolicyNode, type PolicyOperand } from './ast.js'\nimport { PolicyCompileError } from './errors.js'\nimport { parsePolicy } from './parse.js'\n\nexport const POLICY_MAX_LINK_DEPTH = 3\n\nexport interface PolicyColumnInfo {\n readonly name: string\n readonly columnName: string\n}\n\nexport interface PolicyLinkInfo {\n readonly name: string\n readonly kind: 'toOne' | 'toMany' | 'toPlatformUser'\n readonly target: string\n}\n\nexport interface PolicyTableInfo {\n readonly columns: readonly PolicyColumnInfo[]\n readonly links: readonly PolicyLinkInfo[]\n}\n\n/** `{ tables }` keyed by table name — TableMetaIr's record is assignable. */\nexport interface PolicyResolver {\n readonly tables: Record<string, PolicyTableInfo>\n}\n\nconst CMP_BY_OP: Readonly<Record<PolicyCompareOp, CmpOp>> = {\n '=': 'eq',\n '!=': 'neq',\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n}\n\n/** Operator when the column lands on the left after flipping `literal op column`. */\nconst FLIPPED: Readonly<Record<PolicyCompareOp, PolicyCompareOp>> = {\n '=': '=',\n '!=': '!=',\n '<': '>',\n '<=': '>=',\n '>': '<',\n '>=': '<=',\n}\n\nfunction resolveTable(resolver: PolicyResolver, table: string): PolicyTableInfo {\n const info = resolver.tables[table]\n if (!info) {\n throw new PolicyCompileError(`unknown table '${table}'`, 'unknown-table', Object.keys(resolver.tables))\n }\n return info\n}\n\n/** Match by logical name OR Postgres column name; compile to the logical name. */\nfunction resolveColumn(info: PolicyTableInfo, ref: string): string | undefined {\n const column = info.columns.find((c) => c.name === ref || c.columnName === ref)\n return column?.name\n}\n\nfunction resolveLink(info: PolicyTableInfo, ref: string): PolicyLinkInfo | undefined {\n return info.links.find((l) => l.name === ref)\n}\n\nfunction columnCandidates(info: PolicyTableInfo): string[] {\n return [...info.columns.map((c) => c.name), ...info.links.map((l) => l.name)]\n}\n\ninterface CompileContext {\n readonly resolver: PolicyResolver\n readonly maxLinkDepth: number\n}\n\nclass PolicyCompiler {\n constructor(private readonly ctx: CompileContext) {}\n\n compile(node: PolicyNode, table: string, depth: number): PredIr {\n switch (node.kind) {\n case 'and':\n case 'or':\n return { kind: node.kind, operands: node.operands.map((operand) => this.compile(operand, table, depth)) }\n case 'not':\n return { kind: 'not', operand: this.compile(node.operand, table, depth) }\n case 'capability':\n return { kind: 'capability', key: node.key }\n case 'role':\n return { kind: 'role', key: node.key }\n case 'exists':\n return this.compileExists(node.path, node.where, table, depth)\n case 'compare':\n return this.compileCompare(node, table, depth)\n }\n }\n\n /** Traverse link path segments (any cardinality), then compile the inner predicate against the final target. */\n private compileExists(path: readonly string[], where: PolicyNode, table: string, depth: number): PredIr {\n const { links, finalTable } = this.resolveLinkPath(path, table, depth, { toOneOnly: false })\n let pred = this.compile(where, finalTable, depth + links.length)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n pred = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: pred }\n }\n return pred\n }\n\n private resolveLinkPath(\n path: readonly string[],\n table: string,\n depth: number,\n { toOneOnly }: { toOneOnly: boolean },\n ): { links: PolicyLinkInfo[]; finalTable: string } {\n const links: PolicyLinkInfo[] = []\n let current = table\n for (const segment of path) {\n const info = resolveTable(this.ctx.resolver, current)\n const link = resolveLink(info, segment)\n if (!link) {\n throw new PolicyCompileError(\n `unknown link '${segment}' on table '${current}'`,\n 'unknown-link',\n info.links.map((l) => l.name),\n )\n }\n if (toOneOnly && link.kind === 'toMany') {\n throw new PolicyCompileError(\n `dotted paths traverse to-one links only — '${segment}' on '${current}' is to-many; use exists(${path.join('.')}, …)`,\n 'not-to-one',\n )\n }\n links.push(link)\n current = link.target\n if (depth + links.length > this.ctx.maxLinkDepth) {\n throw new PolicyCompileError(\n `link traversal depth exceeds ${this.ctx.maxLinkDepth} (at '${segment}')`,\n 'link-depth-exceeded',\n )\n }\n }\n return { links, finalTable: current }\n }\n\n private compileCompare(\n node: Extract<PolicyNode, { kind: 'compare' }>,\n table: string,\n depth: number,\n ): PredIr {\n const leftIsPath = node.left.kind === 'path'\n const rightIsPath = node.right.kind === 'path'\n if (leftIsPath && rightIsPath) {\n throw new PolicyCompileError(\n 'column-to-column comparisons are not supported in v2.0 policies',\n 'unsupported-comparison',\n )\n }\n if (!leftIsPath && !rightIsPath) {\n throw new PolicyCompileError(\n 'a comparison must reference a column — claims-to-literal comparisons are not representable in v2.0; use capability() or role()',\n 'unsupported-comparison',\n )\n }\n\n const [pathSide, valueSide, op] = leftIsPath\n ? [node.left as Extract<PolicyOperand, { kind: 'path' }>, node.right, node.op]\n : [node.right as Extract<PolicyOperand, { kind: 'path' }>, node.left, FLIPPED[node.op]]\n\n const segments = pathSide.segments\n const linkSegments = segments.slice(0, -1)\n const columnRef = segments[segments.length - 1] as string\n const { links, finalTable } = this.resolveLinkPath(linkSegments, table, depth, { toOneOnly: true })\n\n const info = resolveTable(this.ctx.resolver, finalTable)\n const column = resolveColumn(info, columnRef)\n if (!column) {\n throw new PolicyCompileError(\n `unknown column '${columnRef}' on table '${finalTable}'`,\n 'unknown-column',\n columnCandidates(info),\n )\n }\n\n let cmp: PredIr = this.buildCmp(op, column, valueSide)\n for (let i = links.length - 1; i >= 0; i -= 1) {\n cmp = { kind: 'exists', link: (links[i] as PolicyLinkInfo).name, where: cmp }\n }\n return cmp\n }\n\n private buildCmp(op: PolicyCompareOp, column: string, valueSide: PolicyOperand): PredIr {\n if (valueSide.kind === 'literal' && valueSide.value === null) {\n if (op !== '=' && op !== '!=') {\n throw new PolicyCompileError(\n `null only supports = and != comparisons, got '${op}'`,\n 'invalid-null-comparison',\n )\n }\n return { kind: 'cmp', op: 'isNull', column, value: { kind: 'literal', value: op === '=' } }\n }\n const value: ValueIr =\n valueSide.kind === 'claim'\n ? { kind: 'claim', key: valueSide.key }\n : { kind: 'literal', value: (valueSide as Extract<PolicyOperand, { kind: 'literal' }>).value }\n return { kind: 'cmp', op: CMP_BY_OP[op], column, value }\n }\n}\n\nexport interface CompilePredicateInput {\n /** DSL source text, or an already-parsed policy. */\n expression: string | ParsedPolicy\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\nexport function compilePredicateV2({ expression, table, resolver, maxLinkDepth }: CompilePredicateInput): PredIr {\n const parsed = typeof expression === 'string' ? parsePolicy(expression) : expression\n const compiler = new PolicyCompiler({ resolver, maxLinkDepth: maxLinkDepth ?? POLICY_MAX_LINK_DEPTH })\n return compiler.compile(parsed.ast, table, 0)\n}\n\n/** Variant `when` guards may only test claims: capability()/role() under and/or/not. */\nexport function assertClaimsOnlyWhen(parsed: ParsedPolicy): void {\n walkPolicy(parsed.ast, (node) => {\n if (node.kind === 'compare') {\n const columnRef = [node.left, node.right].find((operand) => operand.kind === 'path')\n if (columnRef) {\n throw new PolicyCompileError(\n `variant 'when' guards are claims-only — column reference '${(columnRef as Extract<PolicyOperand, { kind: 'path' }>).segments.join('.')}' is not allowed`,\n 'when-not-claims-only',\n )\n }\n throw new PolicyCompileError(\n \"variant 'when' guards support capability() and role() checks only in v2.0\",\n 'when-not-claims-only',\n )\n }\n if (node.kind === 'exists') {\n throw new PolicyCompileError(\n \"variant 'when' guards are claims-only — exists() is not allowed\",\n 'when-not-claims-only',\n )\n }\n })\n}\n\nexport interface CompilePolicyInput {\n expression: PolicyExpression\n table: string\n resolver: PolicyResolver\n maxLinkDepth?: number\n}\n\n/**\n * Policy expression (string or `{default, variants}`) → one PredIr under §4c\n * permissive-union semantics:\n *\n * OR(default, …variants.map(v => AND(when, v.allow ? const(true) : policy)))\n *\n * Granting a role/capability only ever widens access; `allow: true`\n * short-circuits its branch to the guard alone.\n */\nexport function compilePolicy({ expression, table, resolver, maxLinkDepth }: CompilePolicyInput): PredIr {\n if (typeof expression === 'string') {\n return compilePredicateV2({ expression, table, resolver, maxLinkDepth })\n }\n\n const defaultPred = compilePredicateV2({ expression: expression.default, table, resolver, maxLinkDepth })\n if (expression.variants.length === 0) return defaultPred\n\n const branches = expression.variants.map((variant): PredIr => {\n const parsedWhen = parsePolicy(variant.when)\n assertClaimsOnlyWhen(parsedWhen)\n const when = compilePredicateV2({ expression: parsedWhen, table, resolver, maxLinkDepth })\n const grant: PredIr =\n variant.allow === true\n ? { kind: 'const', value: true }\n : compilePredicateV2({ expression: variant.policy as string, table, resolver, maxLinkDepth })\n return { kind: 'and', operands: [when, grant] }\n })\n\n return { kind: 'or', operands: [defaultPred, ...branches] }\n}\n","export type DiagnosticSeverity = 'error' | 'warning'\n\nexport interface CompilerDiagnostic {\n severity: DiagnosticSeverity\n /** Stable machine code, e.g. 'unknown-column', 'unsupported-variable-type'. */\n code: string\n message: string\n /** Source document path, when the diagnostic is document-scoped. */\n document?: string\n /** Operation name, when known. */\n operation?: string\n /** Table name, for canonical/policy-scoped diagnostics. */\n table?: string\n}\n\n/**\n * Thrown internally while compiling one operation; artifact assembly catches\n * it and records a diagnostic, so one broken document never hides the rest.\n */\nexport class DocumentCompileError extends Error {\n override readonly name = 'DocumentCompileError'\n\n constructor(\n message: string,\n readonly code: string,\n readonly candidates: readonly string[] = [],\n ) {\n super(candidates.length > 0 ? `${message} (candidates: ${candidates.join(', ')})` : message)\n }\n}\n\n/** Thrown by compileNamespace when any error-severity diagnostic was produced. */\nexport class NamespaceCompileError extends Error {\n override readonly name = 'NamespaceCompileError'\n\n constructor(readonly diagnostics: CompilerDiagnostic[]) {\n const errors = diagnostics.filter((d) => d.severity === 'error')\n super(\n `namespace compilation failed with ${errors.length} error${errors.length === 1 ? '' : 's'}:\\n` +\n errors.map((d) => ` - [${d.code}] ${d.message}`).join('\\n'),\n )\n }\n}\n","import type { PredIr } from '../ir/index.js'\n\nexport const CONST_TRUE: PredIr = { kind: 'const', value: true }\n\n/**\n * AND predicates together, dropping `const(true)` operands so a policy-less\n * table (or an absent document where) doesn't wrap everything in dead nodes.\n */\nexport function andPred(...preds: Array<PredIr | undefined>): PredIr {\n const operands = preds.filter(\n (pred): pred is PredIr => pred !== undefined && !(pred.kind === 'const' && pred.value),\n )\n if (operands.length === 0) return CONST_TRUE\n if (operands.length === 1) return operands[0] as PredIr\n return { kind: 'and', operands }\n}\n\nexport function walkPred(pred: PredIr, visit: (node: PredIr) => void): void {\n visit(pred)\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) walkPred(operand, visit)\n return\n case 'not':\n walkPred(pred.operand, visit)\n return\n case 'exists':\n walkPred(pred.where, visit)\n return\n case 'aggPredicate':\n if (pred.where) walkPred(pred.where, visit)\n return\n default:\n return\n }\n}\n\nexport function predContainsExists(pred: PredIr): boolean {\n let found = false\n walkPred(pred, (node) => {\n if (node.kind === 'exists' || node.kind === 'aggPredicate') found = true\n })\n return found\n}\n\n/** Structural containment: does `haystack` carry `needle` as a subtree? */\nexport function predContains(haystack: PredIr, needle: PredIr): boolean {\n const needleJson = JSON.stringify(needle)\n let found = false\n walkPred(haystack, (node) => {\n if (!found && JSON.stringify(node) === needleJson) found = true\n })\n return found\n}\n","/**\n * Inject pass — bake policies into the lowered IR so the artifact is\n * self-contained (plan §4 invariant: execution needs only IR + claims +\n * variables):\n *\n * - read policy AND-ed into every select/byPk/aggregate root `where`, every\n * relation subtree `where`, every aggregate `where`, and — via relation\n * subtrees — mutation `returning`;\n * - document-authored relationship predicates (exists/aggPredicate) get the\n * TARGET table's read policy injected too, so filtering through a link\n * can't become an existence oracle on rows the caller can't read;\n * - write policy AND-ed into update/delete row filters, and set as the\n * insert check for inserts (claims + inserted-values only in v2.0 — an\n * exists() write policy makes a table un-insertable, loudly);\n * - `col = claim(k)` AND-conjuncts of the write policy become pinned columns\n * merged into every inserted row (and excluded from insertable/settable).\n */\nimport type { ClaimKey, PredIr, RootIr, SelectionIr, ValueIr } from '../ir/index.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { andPred, predContainsExists } from './pred-utils.js'\n\nexport interface PinnedColumn {\n column: string\n claim: ClaimKey\n}\n\n/**\n * Pins come from `col = claim(k)` comparisons the write policy fixes for EVERY\n * caller, so the server can fill the column and drop it from the insert input.\n *\n * - `and` contributes the UNION of its operands' pins: each conjunct must hold.\n * - `or` contributes their INTERSECTION on (column, claim): a policy with\n * variants is a permissive union (§4c), so only a pin present — and pinned\n * to the same claim — in every arm is fixed regardless of which arm admits\n * the caller. Pinning from one arm alone would silently narrow the others\n * (a `deals-admin` variant that only constrains `org` would lose the ability\n * to insert on another author's behalf).\n * - everything else (not/exists/capability/role/const/dynamic) pins nothing.\n *\n * A column left unpinned is not unprotected: it stays in the insert input and\n * the same policy is enforced as the insert check, so a forged value is\n * rejected with POLICY_CHECK_FAILED. Pinning is about removing the column from\n * the client's reach, not about whether the rule is enforced.\n */\nexport function collectPinnedColumns(writePolicy: PredIr): PinnedColumn[] {\n const key = (pin: PinnedColumn): string => `${pin.column}\u0000${pin.claim}`\n\n const visit = (node: PredIr): PinnedColumn[] => {\n if (node.kind === 'and') {\n const merged: PinnedColumn[] = []\n const seen = new Set<string>()\n for (const operand of node.operands) {\n for (const pin of visit(operand)) {\n if (seen.has(key(pin))) continue\n seen.add(key(pin))\n merged.push(pin)\n }\n }\n return merged\n }\n if (node.kind === 'or') {\n const [first, ...rest] = node.operands\n if (first === undefined) return []\n let common = visit(first)\n for (const operand of rest) {\n const branch = new Set(visit(operand).map(key))\n common = common.filter((pin) => branch.has(key(pin)))\n if (common.length === 0) break\n }\n return common\n }\n if (node.kind === 'cmp' && node.op === 'eq' && node.value.kind === 'claim') {\n return [{ column: node.column, claim: node.value.key }]\n }\n return []\n }\n\n // One pin per column: a policy fixing the same column to two claims is\n // unsatisfiable anyway, and the first wins deterministically.\n const seen = new Set<string>()\n return visit(writePolicy).filter((pin) => {\n if (seen.has(pin.column)) return false\n seen.add(pin.column)\n return true\n })\n}\n\nclass PolicyInjector {\n constructor(private readonly ctx: CompileContext) {}\n\n read(table: string): PredIr {\n return this.ctx.readPolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n write(table: string): PredIr {\n return this.ctx.writePolicies.get(table) ?? { kind: 'const', value: true }\n }\n\n private linkTarget(table: string, link: string): string {\n const meta = this.ctx.tables[table]\n const resolved = meta?.links.find((l) => l.name === link)\n if (!resolved) throw new DocumentCompileError(`internal: unresolved link '${link}' on '${table}' during injection`, 'internal')\n return resolved.target\n }\n\n /**\n * Walk a DOCUMENT-authored predicate and AND the target read policy into\n * every relationship traversal. Policy predicates themselves never pass\n * through here — they are composed around the result, not rewritten.\n */\n injectDocPred(pred: PredIr, table: string): PredIr {\n switch (pred.kind) {\n case 'and':\n case 'or':\n return { kind: pred.kind, operands: pred.operands.map((operand) => this.injectDocPred(operand, table)) }\n case 'not':\n return { kind: 'not', operand: this.injectDocPred(pred.operand, table) }\n case 'exists': {\n const target = this.linkTarget(table, pred.link)\n return { kind: 'exists', link: pred.link, where: andPred(this.read(target), this.injectDocPred(pred.where, target)) }\n }\n case 'aggPredicate': {\n const target = this.linkTarget(table, pred.link)\n const where = andPred(this.read(target), pred.where ? this.injectDocPred(pred.where, target) : undefined)\n return { ...pred, where }\n }\n default:\n return pred\n }\n }\n\n injectSelection(selection: SelectionIr, table: string): SelectionIr {\n return {\n ...selection,\n relations: selection.relations.map((relation) => {\n const target = this.linkTarget(table, relation.link)\n return {\n ...relation,\n selection: this.injectSelection(relation.selection, target),\n where: andPred(this.read(target), relation.where ? this.injectDocPred(relation.where, target) : undefined),\n }\n }),\n aggregates: selection.aggregates.map((aggregate) => {\n const target = aggregate.link ? this.linkTarget(table, aggregate.link) : table\n return {\n ...aggregate,\n where: andPred(this.read(target), aggregate.where ? this.injectDocPred(aggregate.where, target) : undefined),\n ...(aggregate.nodes ? { nodes: this.injectSelection(aggregate.nodes, target) } : {}),\n }\n }),\n }\n }\n\n injectRoot(root: RootIr): RootIr {\n switch (root.kind) {\n case 'select':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'byPk':\n return {\n ...root,\n selection: this.injectSelection(root.selection, root.table),\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n }\n case 'aggregate':\n return {\n ...root,\n where: andPred(this.read(root.table), this.injectDocPred(root.where, root.table)),\n ...(root.nodes ? { nodes: this.injectSelection(root.nodes, root.table) } : {}),\n }\n case 'mutation':\n return this.injectMutation(root)\n case 'action':\n return root\n }\n }\n\n private injectMutation(root: Extract<RootIr, { kind: 'mutation' }>): RootIr {\n const table = root.table\n const writePolicy = this.write(table)\n const returning = root.returning ? this.injectSelection(root.returning, table) : root.returning\n\n if (root.op === 'insert' || root.op === 'insertOne') {\n if (predContainsExists(writePolicy)) {\n throw new DocumentCompileError(\n `table '${table}' cannot be inserted into: v2.0 insert checks are claims + inserted-values only, but its write policy traverses a link (exists)`,\n 'insert-check-unrepresentable',\n )\n }\n const pins = (this.ctx.pins.get(table) ?? []).map(\n (pin): { column: string; value: ValueIr } => ({ column: pin.column, value: { kind: 'claim', key: pin.claim } }),\n )\n // `insertCheck` on an INSERT root is the write policy VERBATIM, and the\n // executor relies on that: an `onConflict` DO UPDATE also evaluates it\n // against the conflicting existing row (the USING analogue update/delete\n // get from `where`). Narrowing it to a new-values-only subset here would\n // silently reopen upsert-over-a-hidden-row — add a separate field\n // instead. See orm-data-plane executor/mutations.ts buildInsertTask.\n return { ...root, pinnedColumns: pins, insertCheck: writePolicy, returning }\n }\n\n const where = andPred(writePolicy, root.where ? this.injectDocPred(root.where, table) : undefined)\n if (root.op === 'update' || root.op === 'updateByPk') {\n // WITH CHECK against NEW rows is representable only when the write\n // policy is claims + values (no link traversal) — same v2.0 rule as\n // inserts; exists-writes still enforce via the row filter above.\n const check = predContainsExists(writePolicy) ? {} : { insertCheck: writePolicy }\n return { ...root, where, ...check, returning }\n }\n return { ...root, where, returning }\n }\n}\n\n/** Every table an operation touches: roots, relations, aggregates, policy/document link traversals, dynamic slots. */\nfunction collectTableSet(roots: RootIr[], ctx: CompileContext): string[] {\n const tables = new Set<string>()\n const linkTarget = (table: string, link: string): string | undefined =>\n ctx.tables[table]?.links.find((l) => l.name === link)?.target\n\n // Context-aware walk: every link hop switches the table the NEXT hop\n // resolves against. (A visited-set shortcut here once skipped subtrees under\n // already-seen tables and under-collected the set — walk unconditionally.)\n const visitPred = (pred: PredIr, table: string): void => {\n switch (pred.kind) {\n case 'and':\n case 'or':\n for (const operand of pred.operands) visitPred(operand, table)\n return\n case 'not':\n visitPred(pred.operand, table)\n return\n case 'exists':\n case 'aggPredicate': {\n const target = linkTarget(table, pred.link)\n if (!target) return\n tables.add(target)\n if (pred.kind === 'exists') visitPred(pred.where, target)\n else if (pred.where) visitPred(pred.where, target)\n return\n }\n default:\n return\n }\n }\n\n const visitSelection = (selection: SelectionIr, table: string): void => {\n for (const relation of selection.relations) {\n const target = linkTarget(table, relation.link)\n if (!target) continue\n tables.add(target)\n if (relation.where) visitPred(relation.where, target)\n visitSelection(relation.selection, target)\n }\n for (const aggregate of selection.aggregates) {\n const target = aggregate.link ? linkTarget(table, aggregate.link) : table\n if (!target) continue\n tables.add(target)\n if (aggregate.where) visitPred(aggregate.where, target)\n if (aggregate.nodes) visitSelection(aggregate.nodes, target)\n }\n }\n\n for (const root of roots) {\n if (root.kind === 'action') continue\n tables.add(root.table)\n if (root.kind === 'select' || root.kind === 'byPk') {\n visitPred(root.where, root.table)\n visitSelection(root.selection, root.table)\n }\n if (root.kind === 'aggregate') {\n visitPred(root.where, root.table)\n if (root.nodes) visitSelection(root.nodes, root.table)\n }\n if (root.kind === 'mutation') {\n if (root.where) visitPred(root.where, root.table)\n if (root.insertCheck) visitPred(root.insertCheck, root.table)\n if (root.returning) visitSelection(root.returning, root.table)\n }\n }\n return [...tables].sort()\n}\n\nexport function injectPolicies({ roots, ctx }: { roots: RootIr[]; ctx: CompileContext }): { roots: RootIr[]; tableSet: string[] } {\n const injector = new PolicyInjector(ctx)\n const injected = roots.map((root) => injector.injectRoot(root))\n return { roots: injected, tableSet: collectTableSet(injected, ctx) }\n}\n","/**\n * Compiler-side naming — a thin adaptor over the CANONICAL naming authority,\n * `src/sdl/naming.ts`. Every type/input/enum/scalar/root name the compiler\n * resolves is derived from the same `tableNames`/`typeName` math the SDL\n * generator emits (singularized PascalCase types, lowercase custom scalars),\n * so the two surfaces can never skew. Pinned by\n * `test/compiler/naming-parity.test.ts`.\n */\nimport { INPUT_REF_KINDS, type InputRefKind } from '../ir/index.js'\nimport {\n PLATFORM_USER_TYPENAME,\n camelCase,\n enumTypeName,\n pascalCase,\n tableNames,\n typeName,\n type TableNames,\n} from '../sdl/naming.js'\n\n/**\n * Artifact/link key for the built-in platform-users entity (plan §4b). This\n * is the LOGICAL key (`artifact.tables['platformUsers']`, link targets) — the\n * SQL identity of the backing relation is `platform.users_directory` (see\n * `platformUserMeta` in context.ts).\n */\nexport const PLATFORM_USER_TABLE = 'platformUsers'\nexport { PLATFORM_USER_TYPENAME, camelCase, enumTypeName, pascalCase }\n\n/** GraphQL object type name for a table: `deal_comments` → `DealComment`. */\nexport function typeNameForTable(table: string): string {\n return table === PLATFORM_USER_TABLE ? PLATFORM_USER_TYPENAME : typeName(table)\n}\n\n/** Query-root field names for a table — the SDL generator's own root names. */\nexport function queryRootNames(table: string): { select: string; byPk: string; aggregate: string } {\n const names = tableNames(table)\n return { select: names.selectRoot, byPk: names.byPkRoot, aggregate: names.aggregateRoot }\n}\n\nexport type MutationOp = 'insert' | 'insertOne' | 'update' | 'updateByPk' | 'delete' | 'deleteByPk'\n\nexport function mutationRootNames(table: string): Record<MutationOp, string> {\n const names = tableNames(table)\n return {\n insert: names.insertRoot,\n insertOne: names.insertOneRoot,\n update: names.updateRoot,\n updateByPk: names.updateByPkRoot,\n delete: names.deleteRoot,\n deleteByPk: names.deleteByPkRoot,\n }\n}\n\n/** §4f dynamic-input kinds ↔ the generated input-type name suffixes. */\nconst INPUT_TYPE_SUFFIXES: ReadonlyArray<readonly [string, InputRefKind]> = [\n ['BoolExp', 'boolExp'],\n ['OrderBy', 'orderBy'],\n ['SelectColumn', 'selectColumn'],\n ['InsertInput', 'insertInput'],\n ['SetInput', 'setInput'],\n ['AppendInput', 'appendInput'],\n ['OnConflict', 'onConflict'],\n] as const\n\n/** Each §4f kind's field on the SDL generator's `TableNames` — the forward name source. */\nconst NAME_KEY_BY_KIND: Readonly<Record<InputRefKind, keyof TableNames>> = {\n boolExp: 'boolExp',\n orderBy: 'orderBy',\n selectColumn: 'selectColumn',\n insertInput: 'insertInput',\n setInput: 'setInput',\n appendInput: 'appendInput',\n onConflict: 'onConflict',\n}\n\n/** Generated input type name for a table, e.g. ('deals', 'boolExp') → 'DealBoolExp'. */\nexport function inputTypeName(table: string, kind: InputRefKind): string {\n return tableNames(table)[NAME_KEY_BY_KIND[kind]]\n}\n\n/**\n * Map a GraphQL input/enum type name back to `{ input, table }` via the naming\n * rules. Returns undefined when the name doesn't match a generated §4f type\n * for any known table.\n */\nexport function classifyInputType(\n name: string,\n tableByTypename: ReadonlyMap<string, string>,\n): { input: InputRefKind; table: string } | undefined {\n for (const [suffix, input] of INPUT_TYPE_SUFFIXES) {\n if (!name.endsWith(suffix) || name.length <= suffix.length) continue\n const table = tableByTypename.get(name.slice(0, -suffix.length))\n if (table !== undefined) return { input, table }\n }\n return undefined\n}\n\nexport { INPUT_REF_KINDS }\n","/**\n * Compile context — everything derived from the canonical definition that the\n * restrict/lower/inject passes need: per-table runtime metadata (TableMetaIr),\n * the root-field and input-type name indexes, and the compiled read/write\n * policies with their pinned columns.\n */\nimport {\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalDefinition,\n type CanonicalEnum,\n type CanonicalTable,\n} from '../canonical/v2.js'\nimport { ormSchemaName } from '../constants.js'\nimport type { ClaimKey, PredIr, TableMetaIr } from '../ir/index.js'\nimport { compilePolicy, PolicyCompileError, PolicyParseError } from '../predicate-v2/index.js'\nimport type { CompilerDiagnostic } from './diagnostics.js'\nimport { collectPinnedColumns, type PinnedColumn } from './inject.js'\nimport {\n enumTypeName,\n mutationRootNames,\n PLATFORM_USER_TABLE,\n PLATFORM_USER_TYPENAME,\n queryRootNames,\n typeNameForTable,\n type MutationOp,\n} from './naming.js'\nimport { CONST_TRUE } from './pred-utils.js'\n\nexport interface QueryRootInfo {\n kind: 'select' | 'byPk' | 'aggregate'\n table: string\n}\n\nexport interface MutationRootInfo {\n op: MutationOp\n table: string\n}\n\nexport interface CompileContext {\n namespace: string\n tables: Record<string, TableMetaIr>\n /** GraphQL object type name → table name. */\n tableByTypename: Map<string, string>\n queryRoots: Map<string, QueryRootInfo>\n mutationRoots: Map<string, MutationRootInfo>\n /** GraphQL enum type name → canonical enum (SelectColumn enums are NOT here). */\n enumsByTypeName: Map<string, CanonicalEnum>\n readPolicies: Map<string, PredIr>\n writePolicies: Map<string, PredIr>\n /** Per-table `col = claim(k)` write-policy pins (insert-merged, non-insertable). */\n pins: Map<string, PinnedColumn[]>\n}\n\n/**\n * §4b curated platform-users view — synthesized, never consumer-defined.\n *\n * The SQL identity (`schema`.\"`table`\" — what the executor's tableFrag\n * renders) is the hand-migrated view `platform.users_directory` (atlas\n * migration 0481_platform_users_view.sql), NOT the logical artifact key\n * `platformUsers` that links/tableSets/policies use. Must match\n * atlas/src/server/services/orm/platform-users.ts EXACTLY — import-sharing is\n * impossible across the package boundary, so the two are pinned by tests on\n * both sides (test/compiler/compile-namespace.test.ts §4b and atlas\n * platform-users.test.ts).\n */\nexport function platformUserMeta(): TableMetaIr {\n const columns = [\n // `sub` is the view's key (auth0_id, filtered NOT NULL in the view).\n { name: 'sub', columnName: 'sub', type: 'text', nullable: false },\n { name: 'email', columnName: 'email', type: 'text', nullable: true },\n { name: 'name', columnName: 'name', type: 'text', nullable: true },\n { name: 'organization', columnName: 'organization', type: 'text', nullable: true },\n { name: 'role', columnName: 'role', type: 'text', nullable: true },\n { name: 'managerId', columnName: 'manager_id', type: 'text', nullable: true },\n // NOT NULL DEFAULT true on chat.users, so non-null through the view.\n { name: 'accountEnabled', columnName: 'account_enabled', type: 'boolean', nullable: false },\n ] as const\n return {\n table: 'users_directory',\n schema: 'platform',\n typename: PLATFORM_USER_TYPENAME,\n columns: columns.map((c) => ({ ...c })),\n primaryKey: ['sub'],\n links: [],\n filterable: columns.map((c) => c.name),\n orderable: columns.map((c) => c.name),\n insertable: [],\n settable: [],\n appendable: [],\n constraints: [],\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n}\n\ninterface ColumnEntry {\n name: string\n columnName: string\n type: TableMetaIr['columns'][number]['type']\n nullable: boolean\n deprecated: boolean\n}\n\nfunction resolveColumnEntries(\n table: CanonicalTable,\n enums: Map<string, CanonicalEnum>,\n diagnostics: CompilerDiagnostic[],\n): ColumnEntry[] {\n return table.columns.map((column) => {\n let type: ColumnEntry['type']\n if (typeof column.type === 'string') {\n type = column.type\n } else {\n const enumDef = enums.get(column.type.enum)\n if (!enumDef) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-enum',\n message: `column '${column.name}' on table '${table.table}' references undeclared enum '${column.type.enum}'`,\n table: table.table,\n })\n type = 'text'\n } else {\n type = { enum: enumDef.name, values: [...enumDef.values] }\n }\n }\n return { name: column.name, columnName: column.columnName, type, nullable: column.nullable, deprecated: column.deprecated }\n })\n}\n\n/** Resolve a `on`/`references`/pk identifier (pg or logical) to the logical column name. */\nfunction logicalColumn(entries: ColumnEntry[], ref: string): string | undefined {\n return entries.find((c) => c.name === ref || c.columnName === ref)?.name\n}\n\nexport interface BuildContextResult {\n ctx: CompileContext\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function buildCompileContext(rawCanonical: CanonicalDefinition): BuildContextResult {\n const canonical = normalizeCanonical(canonicalDefinitionSchema.parse(rawCanonical))\n const diagnostics: CompilerDiagnostic[] = []\n const enums = new Map(canonical.enums.map((e) => [e.name, e]))\n\n const columnEntries = new Map<string, ColumnEntry[]>()\n const tables: Record<string, TableMetaIr> = {}\n const usesPlatformUsers = canonical.tables.some((t) => t.links.some((l) => l.kind === 'toPlatformUser'))\n const platformMeta = usesPlatformUsers ? platformUserMeta() : undefined\n if (platformMeta) tables[PLATFORM_USER_TABLE] = platformMeta\n\n // Pass 1: columns + primary keys (links need every table's pk resolved first).\n for (const table of canonical.tables) {\n const entries = resolveColumnEntries(table, enums, diagnostics)\n columnEntries.set(table.table, entries)\n\n const pkRefs = table.primaryKey ?? ['id']\n const primaryKey: string[] = []\n for (const ref of pkRefs) {\n const resolved = logicalColumn(entries, ref)\n if (!resolved) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-pk-column',\n message: `primary key column '${ref}' does not exist on table '${table.table}'`,\n table: table.table,\n })\n continue\n }\n primaryKey.push(resolved)\n }\n\n const active = entries.filter((c) => !c.deprecated)\n const constraints: TableMetaIr['constraints'] = []\n if (primaryKey.length > 0) constraints.push({ name: `${table.table}_pkey`, columns: [...primaryKey] })\n for (const column of table.columns) {\n if (column.unique) {\n const logical = logicalColumn(entries, column.columnName) as string\n constraints.push({ name: `${table.table}_${column.columnName}_key`, columns: [logical] })\n }\n }\n for (const index of table.indexes) {\n if (!index.unique) continue\n const logicalCols = index.columns.map((ref) => logicalColumn(entries, ref)).filter((c): c is string => !!c)\n constraints.push({ name: index.name ?? `${table.table}_${index.columns.join('_')}_key`, columns: logicalCols })\n }\n\n tables[table.table] = {\n table: table.table,\n schema: ormSchemaName(canonical.namespace),\n typename: typeNameForTable(table.table),\n columns: entries.map(({ deprecated: _deprecated, ...column }) => column),\n primaryKey: primaryKey.length > 0 ? primaryKey : ['id'],\n links: [],\n filterable: entries.map((c) => c.name),\n orderable: entries.filter((c) => c.type !== 'jsonb').map((c) => c.name),\n insertable: active.map((c) => c.name),\n settable: active.map((c) => c.name),\n appendable: active.filter((c) => c.type === 'jsonb').map((c) => c.name),\n constraints,\n dynamicFilterMaxDepth: 6,\n dynamicFilterMaxNodes: 64,\n }\n }\n\n // Pass 2: links (targets and on/references normalize to logical names).\n for (const table of canonical.tables) {\n const meta = tables[table.table] as TableMetaIr\n const entries = columnEntries.get(table.table) as ColumnEntry[]\n for (const link of table.links) {\n const targetName = link.kind === 'toPlatformUser' ? PLATFORM_USER_TABLE : (link.target as string | undefined)\n const target = targetName === undefined ? undefined : tables[targetName]\n if (!targetName || !target) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-target',\n message: `link '${link.name}' on table '${table.table}' targets unknown table '${targetName ?? '(none)'}'`,\n table: table.table,\n })\n continue\n }\n const targetEntries =\n targetName === PLATFORM_USER_TABLE\n ? target.columns.map((c) => ({ ...c, deprecated: false }))\n : (columnEntries.get(targetName) as ColumnEntry[])\n\n // toOne/toPlatformUser: `on` lives on this table, `references` on the target.\n // toMany: `on` is the FK on the target, `references` a column on this table.\n const onEntries = link.kind === 'toMany' ? targetEntries : entries\n const referencesEntries = link.kind === 'toMany' ? entries : targetEntries\n const on = logicalColumn(onEntries, link.on)\n const defaultReferences =\n link.kind === 'toPlatformUser' ? 'sub' : link.kind === 'toMany' ? meta.primaryKey[0] : target.primaryKey[0]\n const references = link.references\n ? logicalColumn(referencesEntries, link.references)\n : (defaultReferences as string)\n\n if (!on || !references) {\n diagnostics.push({\n severity: 'error',\n code: 'unknown-link-column',\n message: `link '${link.name}' on table '${table.table}' references unknown column '${!on ? link.on : link.references}'`,\n table: table.table,\n })\n continue\n }\n meta.links.push({ name: link.name, kind: link.kind, target: targetName, on, references })\n }\n }\n\n // Pass 3: policies (need links resolved), then pins, then whitelist finalization.\n const readPolicies = new Map<string, PredIr>()\n const writePolicies = new Map<string, PredIr>()\n const pins = new Map<string, PinnedColumn[]>()\n const resolver = { tables }\n for (const table of canonical.tables) {\n for (const [access, store] of [\n ['read', readPolicies],\n ['write', writePolicies],\n ] as const) {\n const expression = table.policies[access]\n if (expression === undefined) {\n store.set(table.table, CONST_TRUE)\n continue\n }\n try {\n store.set(table.table, compilePolicy({ expression, table: table.table, resolver }))\n } catch (error) {\n if (error instanceof PolicyCompileError || error instanceof PolicyParseError) {\n diagnostics.push({\n severity: 'error',\n code: error instanceof PolicyCompileError ? error.code : 'policy-parse-error',\n message: `${access} policy on table '${table.table}': ${error.message}`,\n table: table.table,\n })\n store.set(table.table, CONST_TRUE)\n continue\n }\n throw error\n }\n }\n\n const tablePins = collectPinnedColumns(writePolicies.get(table.table) as PredIr)\n pins.set(table.table, tablePins)\n const pinned = new Set(tablePins.map((pin) => pin.column))\n const meta = tables[table.table] as TableMetaIr\n meta.insertable = meta.insertable.filter((column) => !pinned.has(column))\n meta.settable = meta.settable.filter((column) => !pinned.has(column))\n }\n if (platformMeta) {\n readPolicies.set(PLATFORM_USER_TABLE, CONST_TRUE)\n writePolicies.set(PLATFORM_USER_TABLE, { kind: 'const', value: false })\n pins.set(PLATFORM_USER_TABLE, [])\n }\n\n // Keyed by the LOGICAL table key (the `tables` record key — what links,\n // tableSets, and §4f inputRefs carry), not meta.table: for platformUsers\n // the two differ (meta.table is the SQL identity `users_directory`).\n const tableByTypename = new Map(Object.entries(tables).map(([key, meta]) => [meta.typename, key]))\n const queryRoots = new Map<string, QueryRootInfo>()\n const mutationRoots = new Map<string, MutationRootInfo>()\n for (const table of canonical.tables) {\n const roots = queryRootNames(table.table)\n queryRoots.set(roots.select, { kind: 'select', table: table.table })\n queryRoots.set(roots.byPk, { kind: 'byPk', table: table.table })\n queryRoots.set(roots.aggregate, { kind: 'aggregate', table: table.table })\n if (table.source === undefined) {\n for (const [op, field] of Object.entries(mutationRootNames(table.table)) as Array<[MutationOp, string]>) {\n mutationRoots.set(field, { op, table: table.table })\n }\n }\n }\n\n const enumsByTypeName = new Map(canonical.enums.map((e) => [enumTypeName(e.name), e]))\n\n return {\n ctx: {\n namespace: canonical.namespace,\n tables,\n tableByTypename,\n queryRoots,\n mutationRoots,\n enumsByTypeName,\n readPolicies,\n writePolicies,\n pins,\n },\n diagnostics,\n }\n}\n\nexport type { PinnedColumn }\n","/**\n * Flatten pass — inline every fragment spread (and inline fragment) so the\n * lowering pass sees one plain selection tree. The bios corpus uses flat,\n * TS-interpolated fragments only; nested spreads still work here, but cycles\n * and directives-on-spreads are rejected.\n */\nimport { Kind, type FragmentDefinitionNode, type OperationDefinitionNode, type SelectionNode, type SelectionSetNode } from 'graphql'\nimport { DocumentCompileError } from './diagnostics.js'\n\nfunction flattenSelectionSet(\n selectionSet: SelectionSetNode,\n fragments: ReadonlyMap<string, FragmentDefinitionNode>,\n stack: readonly string[],\n): SelectionSetNode {\n const selections: SelectionNode[] = []\n for (const selection of selectionSet.selections) {\n if (selection.kind === Kind.FIELD) {\n selections.push(\n selection.selectionSet\n ? { ...selection, selectionSet: flattenSelectionSet(selection.selectionSet, fragments, stack) }\n : selection,\n )\n continue\n }\n if (selection.kind === Kind.FRAGMENT_SPREAD) {\n const name = selection.name.value\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError(`directives on fragment spread '...${name}' are not supported`, 'fragment-directive')\n }\n if (stack.includes(name)) {\n throw new DocumentCompileError(`fragment cycle detected through '${name}'`, 'fragment-cycle')\n }\n const fragment = fragments.get(name)\n if (!fragment) {\n // graphql validate catches this; kept as a hard guard for direct callers.\n throw new DocumentCompileError(`unknown fragment '${name}'`, 'unknown-fragment')\n }\n const inlined = flattenSelectionSet(fragment.selectionSet, fragments, [...stack, name])\n selections.push(...inlined.selections)\n continue\n }\n // Inline fragment: with no interfaces/unions in the SDL the type condition\n // always matches the enclosing type — splice its selections.\n if (selection.directives && selection.directives.length > 0) {\n throw new DocumentCompileError('directives on inline fragments are not supported', 'fragment-directive')\n }\n const inlined = flattenSelectionSet(selection.selectionSet, fragments, stack)\n selections.push(...inlined.selections)\n }\n return { ...selectionSet, selections }\n}\n\nexport function flattenOperation({\n operation,\n fragments,\n}: {\n operation: OperationDefinitionNode\n fragments: ReadonlyMap<string, FragmentDefinitionNode>\n}): OperationDefinitionNode {\n return { ...operation, selectionSet: flattenSelectionSet(operation.selectionSet, fragments, []) }\n}\n","/**\n * Operation + operation-set hashing. The op hash is the wire selector\n * (`{op: <hash>, variables}`) — it must be stable across formatting-only\n * edits (parse → print canonicalizes whitespace) and must CHANGE whenever\n * the schema or the compiler's lowering semantics change, so a stale client\n * can never select an artifact compiled under different rules.\n */\nimport { createHash } from 'node:crypto'\nimport { Kind, print, type DocumentNode, type OperationDefinitionNode } from 'graphql'\n\n/** Bump on any change to lowering semantics — invalidates every op hash. */\nexport const COMPILER_MAJOR = 1\n\nconst OP_HASH_DOMAIN = 'sequence-orm-op\\0'\nconst OPS_HASH_DOMAIN = 'sequence-orm-opset\\0'\n\n/** Canonical print of one flattened operation (fragments already inlined). */\nexport function canonicalOperationText(definition: OperationDefinitionNode): string {\n const document: DocumentNode = { kind: Kind.DOCUMENT, definitions: [definition] }\n return print(document)\n}\n\nexport function computeOpHash({\n definition,\n schemaHash,\n}: {\n definition: OperationDefinitionNode\n schemaHash: string\n}): string {\n const digest = createHash('sha256')\n .update(OP_HASH_DOMAIN)\n .update(`${COMPILER_MAJOR}\\0${schemaHash}\\0`)\n .update(canonicalOperationText(definition))\n .digest('hex')\n return `sha256:${digest}`\n}\n\n/** Order-independent set hash over the sorted op hashes. */\nexport function computeOpsHash(opHashes: readonly string[]): string {\n const digest = createHash('sha256')\n .update(OPS_HASH_DOMAIN)\n .update([...opHashes].sort().join('\\n'))\n .digest('hex')\n return `sha256:${digest}`\n}\n","/**\n * Lower pass — flattened GraphQL selection trees → IR. Document-authored\n * argument literals lower to PredIr/OrderIr (variables allowed in leaf\n * positions as ValueIr variables); whole-variable arguments become §4f\n * dynamic slots keyed by the variable name. Policies are NOT injected here —\n * see inject.ts (this pass emits document-only `where` shapes).\n */\nimport { Kind, type ArgumentNode, type FieldNode, type ObjectValueNode, type OperationDefinitionNode, type SelectionSetNode, type ValueNode } from 'graphql'\nimport type { CmpOp, InputRefKind, LimitIr, OrderIr, PredIr, RootIr, SelectionIr, ValueIr, VariableIr } from '../ir/index.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport type { RestrictedOperation } from './restrict.js'\nimport { CONST_TRUE } from './pred-utils.js'\n\nexport const DEFAULT_LIMIT = 100\nexport const MAX_LIMIT = 1000\n\nconst BOOLEXP_OPS: Readonly<Record<string, CmpOp>> = {\n _eq: 'eq',\n _neq: 'neq',\n _gt: 'gt',\n _gte: 'gte',\n _lt: 'lt',\n _lte: 'lte',\n _in: 'in',\n _nin: 'nin',\n _like: 'like',\n _ilike: 'ilike',\n _isNull: 'isNull',\n _contains: 'contains',\n _hasKey: 'hasKey',\n}\n\nconst AGG_PREDICATE_OPS = ['_eq', '_neq', '_gt', '_gte', '_lt', '_lte'] as const\n\nconst ORDER_DIRECTIONS: Readonly<Record<string, { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' }>> = {\n ASC: { direction: 'asc' },\n DESC: { direction: 'desc' },\n ASC_NULLS_FIRST: { direction: 'asc', nulls: 'first' },\n ASC_NULLS_LAST: { direction: 'asc', nulls: 'last' },\n DESC_NULLS_FIRST: { direction: 'desc', nulls: 'first' },\n DESC_NULLS_LAST: { direction: 'desc', nulls: 'last' },\n}\n\nconst NUMERIC_TYPES = new Set(['integer', 'bigint', 'numeric', 'double'])\n\ntype TableMeta = CompileContext['tables'][string]\n\nfunction fail(message: string, code: string, candidates: readonly string[] = []): never {\n throw new DocumentCompileError(message, code, candidates)\n}\n\nfunction argsByName(field: FieldNode): Map<string, ArgumentNode> {\n return new Map((field.arguments ?? []).map((arg) => [arg.name.value, arg]))\n}\n\nfunction assertKnownArgs(field: FieldNode, allowed: readonly string[]): void {\n for (const arg of field.arguments ?? []) {\n if (!allowed.includes(arg.name.value)) {\n fail(`argument '${arg.name.value}' on '${field.name.value}' is not supported in v2.0`, 'unsupported-argument', allowed)\n }\n }\n}\n\nexport class OperationLowerer {\n private readonly variables: Map<string, VariableIr>\n\n constructor(private readonly ctx: CompileContext, restricted: RestrictedOperation) {\n this.variables = new Map(restricted.variables.map((v) => [v.name, v]))\n }\n\n private meta(table: string): TableMeta {\n // Root/link resolution guarantees the table exists — this is an internal invariant.\n return this.ctx.tables[table] as TableMeta\n }\n\n private column(table: string, name: string): TableMeta['columns'][number] | undefined {\n return this.meta(table).columns.find((c) => c.name === name)\n }\n\n private link(table: string, name: string): TableMeta['links'][number] | undefined {\n return this.meta(table).links.find((l) => l.name === name)\n }\n\n private fieldCandidates(table: string): string[] {\n const meta = this.meta(table)\n return [\n ...meta.columns.map((c) => c.name),\n ...meta.links.map((l) => l.name),\n ...meta.links.filter((l) => l.kind === 'toMany').map((l) => `${l.name}Aggregate`),\n ]\n }\n\n /** Validate that a whole-variable argument is the declared §4f slot for this table. */\n private slot(name: string, input: InputRefKind, table: string): string {\n const variable = this.variables.get(name)\n if (!variable || variable.type.kind !== 'inputRef' || variable.type.input !== input || variable.type.table !== table) {\n fail(`variable $${name} must be declared as the ${input} input type for table '${table}'`, 'slot-mismatch')\n }\n return name\n }\n\n // -------------------------------------------------------------------------\n // Values\n // -------------------------------------------------------------------------\n\n private lowerValue(node: ValueNode): ValueIr {\n switch (node.kind) {\n case Kind.VARIABLE:\n return { kind: 'variable', name: node.name.value }\n case Kind.INT:\n case Kind.FLOAT:\n return { kind: 'literal', value: Number(node.value) }\n case Kind.STRING:\n case Kind.ENUM:\n return { kind: 'literal', value: node.value }\n case Kind.BOOLEAN:\n return { kind: 'literal', value: node.value }\n case Kind.NULL:\n return { kind: 'literal', value: null }\n case Kind.LIST: {\n const items = node.values.map((item) => {\n const lowered = this.lowerValue(item)\n if (lowered.kind !== 'literal' || Array.isArray(lowered.value)) {\n fail('list literals must contain scalar literals only — pass the whole list as a variable instead', 'unsupported-literal')\n }\n return lowered.value\n })\n return { kind: 'literal', value: items }\n }\n case Kind.OBJECT:\n fail('literal JSON objects are not supported in documents — pass the value via a variable', 'unsupported-literal')\n }\n }\n\n // -------------------------------------------------------------------------\n // BoolExp / orderBy / distinctOn / paging\n // -------------------------------------------------------------------------\n\n lowerBoolExp(node: ValueNode, table: string): PredIr {\n if (node.kind === Kind.VARIABLE) {\n return { kind: 'dynamicFilter', slot: this.slot(node.name.value, 'boolExp', table) }\n }\n if (node.kind !== Kind.OBJECT) fail(`a boolean expression on '${table}' must be an object or a variable`, 'invalid-boolexp')\n\n const operands: PredIr[] = []\n for (const field of node.fields) {\n const key = field.name.value\n if (key === '_and' || key === '_or') {\n const children = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n const lowered = children.map((child) => this.lowerBoolExp(child, table))\n if (lowered.length > 0) operands.push(lowered.length === 1 ? (lowered[0] as PredIr) : { kind: key === '_and' ? 'and' : 'or', operands: lowered })\n continue\n }\n if (key === '_not') {\n operands.push({ kind: 'not', operand: this.lowerBoolExp(field.value, table) })\n continue\n }\n\n const column = this.column(table, key)\n if (column) {\n operands.push(...this.lowerComparison(field.value, key, table))\n continue\n }\n const link = this.link(table, key)\n if (link) {\n operands.push({ kind: 'exists', link: link.name, where: this.lowerBoolExp(field.value, link.target) })\n continue\n }\n if (key.endsWith('Aggregate')) {\n const aggLink = this.link(table, key.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n operands.push(this.lowerAggPredicate(field.value, aggLink.name, aggLink.target))\n continue\n }\n }\n fail(`unknown field '${key}' in a boolean expression on '${table}'`, 'unknown-column', this.fieldCandidates(table))\n }\n if (operands.length === 0) return CONST_TRUE\n return operands.length === 1 ? (operands[0] as PredIr) : { kind: 'and', operands }\n }\n\n private lowerComparison(node: ValueNode, column: string, table: string): PredIr[] {\n if (node.kind !== Kind.OBJECT) {\n fail(`comparison on '${table}.${column}' must be an object like { _eq: … }`, 'invalid-comparison', Object.keys(BOOLEXP_OPS))\n }\n return node.fields.map((field) => {\n const op = BOOLEXP_OPS[field.name.value]\n if (!op) {\n fail(`unknown comparison operator '${field.name.value}' on '${table}.${column}'`, 'unknown-operator', Object.keys(BOOLEXP_OPS))\n }\n return { kind: 'cmp', op, column, value: this.lowerValue(field.value) }\n })\n }\n\n /** Hasura aggregation predicate: `{ count: { predicate: { _gt: 2 }, filter: {…} } }`. */\n private lowerAggPredicate(node: ValueNode, link: string, target: string): PredIr {\n if (node.kind !== Kind.OBJECT) fail(`aggregate predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n const countField = node.fields.find((f) => f.name.value === 'count')\n if (!countField || node.fields.length !== 1) {\n fail(`aggregate predicates support { count: … } only in v2.0 (through '${link}')`, 'invalid-agg-predicate', ['count'])\n }\n if (countField.value.kind !== Kind.OBJECT) fail(`count predicate through '${link}' must be an object`, 'invalid-agg-predicate')\n\n let predicate: { op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte'; value: number } | undefined\n let where: PredIr | undefined\n for (const field of countField.value.fields) {\n if (field.name.value === 'predicate') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`count predicate through '${link}' needs exactly one operator`, 'invalid-agg-predicate', [...AGG_PREDICATE_OPS])\n }\n const opField = field.value.fields[0] as ObjectValueNode['fields'][number]\n const opName = opField.name.value\n if (!(AGG_PREDICATE_OPS as readonly string[]).includes(opName)) {\n fail(`aggregate count predicates support ${AGG_PREDICATE_OPS.join('/')} only, got '${opName}'`, 'invalid-agg-predicate')\n }\n if (opField.value.kind !== Kind.INT) {\n fail(`aggregate count predicate value must be an integer literal`, 'invalid-agg-predicate')\n }\n predicate = { op: opName.slice(1) as 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte', value: Number(opField.value.value) }\n continue\n }\n if (field.name.value === 'filter') {\n where = this.lowerBoolExp(field.value, target)\n continue\n }\n fail(`unknown key '${field.name.value}' in a count predicate`, 'invalid-agg-predicate', ['predicate', 'filter'])\n }\n if (!predicate) fail(`count predicate through '${link}' needs a { predicate: { _gt: n } }`, 'invalid-agg-predicate')\n return { kind: 'aggPredicate', link, fn: 'count', op: predicate.op, value: predicate.value, ...(where ? { where } : {}) }\n }\n\n lowerOrderBy(node: ValueNode, table: string): OrderIr[] {\n if (node.kind === Kind.VARIABLE) {\n return [{ kind: 'dynamic', slot: this.slot(node.name.value, 'orderBy', table) }]\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n const lowered: OrderIr[] = []\n for (const item of items) {\n if (item.kind !== Kind.OBJECT) fail(`orderBy entries on '${table}' must be objects`, 'invalid-orderby')\n for (const field of item.fields) {\n const key = field.name.value\n const column = this.column(table, key)\n if (column) {\n lowered.push({ kind: 'column', column: key, ...this.lowerDirection(field.value, table, key) })\n continue\n }\n const link = this.link(table, key)\n if (link && link.kind !== 'toMany') {\n if (field.value.kind !== Kind.OBJECT || field.value.fields.length !== 1) {\n fail(`orderBy through '${key}' needs exactly one target column`, 'invalid-orderby')\n }\n const inner = field.value.fields[0] as ObjectValueNode['fields'][number]\n const targetColumn = this.column(link.target, inner.name.value)\n if (!targetColumn) {\n fail(`unknown column '${inner.name.value}' on '${link.target}' in orderBy`, 'unknown-column', this.meta(link.target).columns.map((c) => c.name))\n }\n lowered.push({ kind: 'column', column: inner.name.value, link: key, ...this.lowerDirection(inner.value, link.target, inner.name.value) })\n continue\n }\n fail(`unknown orderBy key '${key}' on '${table}' (to-one links only)`, 'invalid-orderby', this.fieldCandidates(table))\n }\n }\n return lowered\n }\n\n private lowerDirection(node: ValueNode, table: string, column: string): { direction: 'asc' | 'desc'; nulls?: 'first' | 'last' } {\n if (node.kind !== Kind.ENUM) fail(`orderBy direction on '${table}.${column}' must be a direction enum`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n const direction = ORDER_DIRECTIONS[node.value]\n if (!direction) fail(`unknown orderBy direction '${node.value}'`, 'invalid-orderby', Object.keys(ORDER_DIRECTIONS))\n return direction.nulls ? { direction: direction.direction, nulls: direction.nulls } : { direction: direction.direction }\n }\n\n lowerDistinctOn(node: ValueNode, table: string): string[] | { slot: string } {\n if (node.kind === Kind.VARIABLE) {\n return { slot: this.slot(node.name.value, 'selectColumn', table) }\n }\n const items = node.kind === Kind.LIST ? node.values : [node]\n return items.map((item) => {\n if (item.kind !== Kind.ENUM) fail(`distinctOn entries on '${table}' must be select-column enum values`, 'invalid-distinct-on')\n if (!this.column(table, item.value)) {\n fail(`unknown distinctOn column '${item.value}' on '${table}'`, 'unknown-column', this.meta(table).columns.map((c) => c.name))\n }\n return item.value\n })\n }\n\n private lowerLimit(node: ValueNode | undefined): LimitIr {\n const base = { default: DEFAULT_LIMIT, max: MAX_LIMIT }\n if (!node) return base\n if (node.kind === Kind.VARIABLE) return { ...base, variable: node.name.value }\n if (node.kind === Kind.INT) {\n const value = Number(node.value)\n if (value < 1) fail('limit must be a positive integer', 'invalid-limit')\n return { ...base, value: Math.min(value, MAX_LIMIT) }\n }\n fail('limit must be an integer literal or a variable', 'invalid-limit')\n }\n\n private lowerOffset(node: ValueNode | undefined): { variable?: string; value?: number } | undefined {\n if (!node) return undefined\n if (node.kind === Kind.VARIABLE) return { variable: node.name.value }\n if (node.kind === Kind.INT) return { value: Number(node.value) }\n fail('offset must be an integer literal or a variable', 'invalid-offset')\n }\n\n // -------------------------------------------------------------------------\n // Selections\n // -------------------------------------------------------------------------\n\n lowerSelection(selectionSet: SelectionSetNode, table: string): SelectionIr {\n const meta = this.meta(table)\n const selection: SelectionIr = { typename: meta.typename, columns: [], relations: [], aggregates: [] }\n\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (node.directives && node.directives.length > 0) {\n fail(`@include/@skip are supported on root fields only ('${node.name.value}' is nested)`, 'nested-directive')\n }\n const name = node.name.value\n if (name === '__typename') continue\n const alias = node.alias?.value ?? name\n\n const column = this.column(table, name)\n if (column) {\n if ((node.arguments !== undefined && node.arguments.length > 0) || node.selectionSet !== undefined) {\n fail(`column '${table}.${name}' takes no arguments or sub-selection`, 'invalid-selection')\n }\n selection.columns.push({ alias, column: name })\n continue\n }\n\n const link = this.link(table, name)\n if (link) {\n if (!node.selectionSet) fail(`link '${table}.${name}' needs a selection set`, 'invalid-selection')\n const relation: SelectionIr['relations'][number] = {\n alias,\n link: name,\n selection: this.lowerSelection(node.selectionSet, link.target),\n }\n if (link.kind === 'toMany') {\n assertKnownArgs(node, ['where', 'orderBy', 'limit', 'offset'])\n const args = argsByName(node)\n const where = args.get('where')\n if (where) relation.where = this.lowerBoolExp(where.value, link.target)\n const orderBy = args.get('orderBy')\n if (orderBy) relation.orderBy = this.lowerOrderBy(orderBy.value, link.target)\n if (args.get('limit') ?? args.get('offset')) {\n relation.limit = this.lowerLimit(args.get('limit')?.value)\n const offset = this.lowerOffset(args.get('offset')?.value)\n if (offset) relation.offset = offset\n }\n } else if (node.arguments && node.arguments.length > 0) {\n fail(`to-one link '${table}.${name}' takes no arguments`, 'invalid-selection')\n }\n selection.relations.push(relation)\n continue\n }\n\n if (name.endsWith('Aggregate')) {\n const aggLink = this.link(table, name.slice(0, -'Aggregate'.length))\n if (aggLink && aggLink.kind === 'toMany') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n assertKnownArgs(node, ['where'])\n const whereArg = argsByName(node).get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, aggLink.target)\n selection.aggregates.push({\n alias,\n link: aggLink.name,\n ...(whereArg ? { where: this.lowerBoolExp(whereArg.value, aggLink.target) } : {}),\n ...aggregate,\n })\n continue\n }\n }\n\n fail(`unknown field '${name}' on '${table}'`, 'unknown-field', this.fieldCandidates(table))\n }\n\n return selection\n }\n\n /** The `{ aggregate { count sum {…} avg {…} } nodes {…} }` block shared by roots and relations. */\n private lowerAggregateSelection(\n selectionSet: SelectionSetNode,\n table: string,\n ): { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } {\n const result: { count?: { columns?: string[]; distinct?: boolean }; sum?: string[]; avg?: string[]; nodes?: SelectionIr } = {}\n let sawAggregate = false\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (node.alias) fail(`aliases are not supported inside aggregate blocks ('${node.alias.value}')`, 'invalid-aggregate')\n if (name === 'nodes') {\n if (!node.selectionSet) fail(\"'nodes' needs a selection set\", 'invalid-aggregate')\n result.nodes = this.lowerSelection(node.selectionSet, table)\n continue\n }\n if (name !== 'aggregate') fail(`unknown aggregate field '${name}'`, 'invalid-aggregate', ['aggregate', 'nodes'])\n if (sawAggregate) fail('one aggregate block per field — alias the root instead', 'invalid-aggregate')\n sawAggregate = true\n if (!node.selectionSet) fail(\"'aggregate' needs a selection set\", 'invalid-aggregate')\n\n for (const aggField of node.selectionSet.selections) {\n if (aggField.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const aggName = aggField.name.value\n if (aggName === '__typename') continue\n if (aggField.alias) fail(`aliases are not supported inside aggregate blocks ('${aggField.alias.value}')`, 'invalid-aggregate')\n if (aggName === 'count') {\n assertKnownArgs(aggField, ['columns', 'distinct'])\n const args = argsByName(aggField)\n const count: { columns?: string[]; distinct?: boolean } = {}\n const columns = args.get('columns')\n if (columns) count.columns = this.lowerDistinctOn(columns.value, table) as string[]\n const distinct = args.get('distinct')\n if (distinct) {\n if (distinct.value.kind !== Kind.BOOLEAN) fail('count(distinct:) must be a boolean literal', 'invalid-aggregate')\n count.distinct = distinct.value.value\n }\n result.count = count\n continue\n }\n if (aggName === 'sum' || aggName === 'avg') {\n if (!aggField.selectionSet) fail(`'${aggName}' needs a column selection`, 'invalid-aggregate')\n const columns: string[] = []\n for (const columnField of aggField.selectionSet.selections) {\n if (columnField.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n if (columnField.name.value === '__typename') continue\n const column = this.column(table, columnField.name.value)\n if (!column || typeof column.type !== 'string' || !NUMERIC_TYPES.has(column.type)) {\n fail(\n `'${aggName}' supports numeric columns only, got '${columnField.name.value}' on '${table}'`,\n 'invalid-aggregate',\n this.meta(table).columns.filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type)).map((c) => c.name),\n )\n }\n columns.push(columnField.name.value)\n }\n result[aggName] = columns\n continue\n }\n fail(`aggregate '${aggName}' is not supported in v2.0 (count/sum/avg only)`, 'invalid-aggregate', ['count', 'sum', 'avg'])\n }\n }\n if (!sawAggregate && !result.nodes) fail('aggregate selection needs an aggregate or nodes block', 'invalid-aggregate')\n return result\n }\n\n // -------------------------------------------------------------------------\n // Roots\n // -------------------------------------------------------------------------\n\n lowerRoots(operation: OperationDefinitionNode, kind: 'query' | 'mutation'): RootIr[] {\n const roots: RootIr[] = []\n for (const node of operation.selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments are not supported at the operation root', 'invalid-root')\n const gate = this.parseRootDirectives(node)\n if (gate.omit) continue\n const root = kind === 'query' ? this.lowerQueryRoot(node) : this.lowerMutationRoot(node)\n roots.push(gate.includeIf ? { ...root, includeIf: gate.includeIf } : root)\n }\n if (roots.length === 0) fail('operation has no roots (all statically skipped?)', 'invalid-root')\n return roots\n }\n\n private parseRootDirectives(node: FieldNode): { includeIf?: { variable: string; negated: boolean }; omit: boolean } {\n let includeIf: { variable: string; negated: boolean } | undefined\n let omit = false\n for (const directive of node.directives ?? []) {\n const name = directive.name.value\n if (name !== 'include' && name !== 'skip') {\n fail(`directive @${name} is not supported on fields`, 'unknown-directive', ['include', 'skip'])\n }\n const ifArg = directive.arguments?.find((a) => a.name.value === 'if')\n if (!ifArg) fail(`@${name} needs an if: argument`, 'invalid-directive')\n if (ifArg.value.kind === Kind.BOOLEAN) {\n const keep = name === 'include' ? ifArg.value.value : !ifArg.value.value\n if (!keep) omit = true\n continue\n }\n if (ifArg.value.kind !== Kind.VARIABLE) fail(`@${name}(if:) must be a boolean literal or variable`, 'invalid-directive')\n if (includeIf) fail('at most one of @include/@skip per root field', 'invalid-directive')\n includeIf = { variable: ifArg.value.name.value, negated: name === 'skip' }\n }\n return omit ? { omit: true } : { includeIf, omit: false }\n }\n\n private lowerQueryRoot(node: FieldNode): Exclude<RootIr, { kind: 'action' }> {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.queryRoots.get(name)\n if (!rootInfo) fail(`unknown query root '${name}'`, 'unknown-root', [...this.ctx.queryRoots.keys()])\n const { table } = rootInfo\n const args = argsByName(node)\n\n if (rootInfo.kind === 'select') {\n assertKnownArgs(node, ['where', 'orderBy', 'distinctOn', 'limit', 'offset'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const where = args.get('where')\n const orderBy = args.get('orderBy')\n const distinctOn = args.get('distinctOn')\n const offset = this.lowerOffset(args.get('offset')?.value)\n const distinct = distinctOn ? this.lowerDistinctOn(distinctOn.value, table) : undefined\n return {\n kind: 'select',\n alias,\n table,\n selection: this.lowerSelection(node.selectionSet, table),\n where: where ? this.lowerBoolExp(where.value, table) : CONST_TRUE,\n orderBy: orderBy ? this.lowerOrderBy(orderBy.value, table) : [],\n ...(distinct ? { distinctOn: distinct } : {}),\n limit: this.lowerLimit(args.get('limit')?.value),\n ...(offset ? { offset } : {}),\n }\n }\n\n if (rootInfo.kind === 'byPk') {\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const pk = this.lowerPkArgs(node, table)\n return { kind: 'byPk', alias, table, selection: this.lowerSelection(node.selectionSet, table), pk, where: CONST_TRUE }\n }\n\n // aggregate root\n assertKnownArgs(node, ['where'])\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n const whereArg = args.get('where')\n const aggregate = this.lowerAggregateSelection(node.selectionSet, table)\n return {\n kind: 'aggregate',\n alias,\n table,\n where: whereArg ? this.lowerBoolExp(whereArg.value, table) : CONST_TRUE,\n ...aggregate,\n }\n }\n\n /** byPk-style pk arguments: one argument per primary-key column, exactly. */\n private lowerPkArgs(node: FieldNode, table: string): Array<{ column: string; value: ValueIr }> {\n const meta = this.meta(table)\n const args = argsByName(node)\n assertKnownArgs(node, meta.primaryKey)\n return meta.primaryKey.map((column) => {\n const arg = args.get(column)\n if (!arg) fail(`'${node.name.value}' is missing primary-key argument '${column}'`, 'missing-pk-argument', meta.primaryKey)\n return { column, value: this.lowerValue(arg.value) }\n })\n }\n\n // -------------------------------------------------------------------------\n // Mutations\n // -------------------------------------------------------------------------\n\n private lowerMutationRoot(node: FieldNode): Exclude<RootIr, { kind: 'action' }> {\n const name = node.name.value\n const alias = node.alias?.value ?? name\n const rootInfo = this.ctx.mutationRoots.get(name)\n if (!rootInfo) fail(`unknown mutation root '${name}'`, 'unknown-root', [...this.ctx.mutationRoots.keys()])\n const { op, table } = rootInfo\n const args = argsByName(node)\n if (!node.selectionSet) fail(`'${name}' needs a selection set`, 'invalid-selection')\n\n const base = { kind: 'mutation' as const, op, alias, table, pinnedColumns: [], affectedRows: false }\n\n switch (op) {\n case 'insert': {\n assertKnownArgs(node, ['objects', 'onConflict'])\n const objects = args.get('objects')\n if (!objects) fail(`'${name}' needs objects:`, 'missing-argument')\n const response = this.lowerMutationResponse(node.selectionSet, table)\n return {\n ...base,\n ...response,\n objects: this.lowerInsertObjects(objects.value, table, { list: true }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n }\n }\n case 'insertOne': {\n assertKnownArgs(node, ['object', 'onConflict'])\n const object = args.get('object')\n if (!object) fail(`'${name}' needs object:`, 'missing-argument')\n return {\n ...base,\n objects: this.lowerInsertObjects(object.value, table, { list: false }),\n ...this.lowerOnConflictArg(args.get('onConflict'), table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'update': {\n assertKnownArgs(node, ['where', '_set', '_append', '_inc'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk updates without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n ...this.lowerWriteValues(args, table),\n }\n }\n case 'updateByPk': {\n assertKnownArgs(node, ['pkColumns', '_set', '_append', '_inc'])\n const pkColumns = args.get('pkColumns')\n if (!pkColumns) fail(`'${name}' needs pkColumns:`, 'missing-argument')\n return {\n ...base,\n pk: this.lowerPkColumnsArg(pkColumns.value, table),\n ...this.lowerWriteValues(args, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n case 'delete': {\n assertKnownArgs(node, ['where'])\n const where = args.get('where')\n if (!where) fail(`'${name}' needs where: (bulk deletes without a filter are not allowed)`, 'missing-argument')\n return {\n ...base,\n ...this.lowerMutationResponse(node.selectionSet, table),\n where: this.lowerBoolExp(where.value, table),\n }\n }\n case 'deleteByPk': {\n return {\n ...base,\n pk: this.lowerPkArgs(node, table),\n returning: this.lowerSelection(node.selectionSet, table),\n }\n }\n }\n }\n\n private lowerMutationResponse(\n selectionSet: SelectionSetNode,\n table: string,\n ): { affectedRows: boolean; returning: SelectionIr | null } {\n let affectedRows = false\n let returning: SelectionIr | null = null\n for (const node of selectionSet.selections) {\n if (node.kind !== Kind.FIELD) fail('fragments must be flattened before lowering', 'internal')\n const name = node.name.value\n if (name === '__typename') continue\n if (name === 'affectedRows') {\n affectedRows = true\n continue\n }\n if (name === 'returning') {\n if (!node.selectionSet) fail(\"'returning' needs a selection set\", 'invalid-selection')\n returning = this.lowerSelection(node.selectionSet, table)\n continue\n }\n fail(`unknown mutation-response field '${name}'`, 'invalid-selection', ['affectedRows', 'returning'])\n }\n return { affectedRows, returning }\n }\n\n private lowerInsertObjects(\n node: ValueNode,\n table: string,\n { list }: { list: boolean },\n ): { slot: string } | { rows: Array<Array<{ column: string; value: ValueIr }>> } {\n if (node.kind === Kind.VARIABLE) return { slot: this.slot(node.name.value, 'insertInput', table) }\n if (list) {\n if (node.kind !== Kind.LIST) fail(`objects: must be a list literal or a variable`, 'invalid-insert')\n return { rows: node.values.map((item) => this.lowerInsertRow(item, table)) }\n }\n return { rows: [this.lowerInsertRow(node, table)] }\n }\n\n private lowerInsertRow(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`insert rows on '${table}' must be objects`, 'invalid-insert')\n const meta = this.meta(table)\n return node.fields.map((field) => {\n const key = field.name.value\n if (this.link(table, key)) {\n fail(`nested inserts are not supported in v2.0 — '${key}' is a link on '${table}'`, 'nested-insert-unsupported')\n }\n if (!meta.insertable.includes(key)) {\n const column = this.column(table, key)\n if (column) fail(`column '${table}.${key}' is not insertable (pinned by the write policy or deprecated)`, 'column-not-insertable', meta.insertable)\n fail(`unknown column '${key}' in an insert on '${table}'`, 'unknown-column', meta.insertable)\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerOnConflictArg(\n arg: ArgumentNode | undefined,\n table: string,\n ): { onConflict?: { slot: string } | { constraint: string; updateColumns: string[] } } {\n if (!arg) return {}\n const node = arg.value\n if (node.kind === Kind.VARIABLE) return { onConflict: { slot: this.slot(node.name.value, 'onConflict', table) } }\n if (node.kind !== Kind.OBJECT) fail('onConflict: must be an object literal or a variable', 'invalid-on-conflict')\n const meta = this.meta(table)\n let constraint: string | undefined\n const updateColumns: string[] = []\n for (const field of node.fields) {\n if (field.name.value === 'constraint') {\n if (field.value.kind !== Kind.ENUM) fail('onConflict.constraint must be a constraint enum value', 'invalid-on-conflict')\n constraint = field.value.value\n continue\n }\n if (field.name.value === 'updateColumns') {\n const items = field.value.kind === Kind.LIST ? field.value.values : [field.value]\n for (const item of items) {\n if (item.kind !== Kind.ENUM) fail('onConflict.updateColumns must be update-column enum values', 'invalid-on-conflict')\n if (!meta.settable.includes(item.value)) {\n fail(`onConflict.updateColumns: '${item.value}' is not updatable on '${table}'`, 'invalid-on-conflict', meta.settable)\n }\n updateColumns.push(item.value)\n }\n continue\n }\n fail(`unknown onConflict key '${field.name.value}'`, 'invalid-on-conflict', ['constraint', 'updateColumns'])\n }\n if (!constraint) fail('onConflict needs a constraint', 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n if (!meta.constraints.some((c) => c.name === constraint)) {\n fail(`unknown constraint '${constraint}' on '${table}'`, 'invalid-on-conflict', meta.constraints.map((c) => c.name))\n }\n return { onConflict: { constraint, updateColumns } }\n }\n\n private lowerWriteValues(\n args: Map<string, ArgumentNode>,\n table: string,\n ): { set?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; append?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> }; inc?: { slot: string } | { entries: Array<{ column: string; value: ValueIr }> } } {\n const meta = this.meta(table)\n const result: ReturnType<OperationLowerer['lowerWriteValues']> = {}\n\n const set = args.get('_set')\n if (set) {\n result.set =\n set.value.kind === Kind.VARIABLE\n ? { slot: this.slot(set.value.name.value, 'setInput', table) }\n : { entries: this.lowerColumnEntries(set.value, table, meta.settable, '_set') }\n }\n const append = args.get('_append')\n if (append) {\n result.append =\n append.value.kind === Kind.VARIABLE\n ? { slot: this.slot(append.value.name.value, 'appendInput', table) }\n : { entries: this.lowerColumnEntries(append.value, table, meta.appendable, '_append') }\n }\n const inc = args.get('_inc')\n if (inc) {\n // No IncInput inputRef kind exists (§4f) — _inc is literal-only.\n if (inc.value.kind === Kind.VARIABLE) {\n fail('_inc has no dynamic input type — inline the columns with variable leaf values', 'invalid-inc')\n }\n const numeric = meta.columns\n .filter((c) => typeof c.type === 'string' && NUMERIC_TYPES.has(c.type) && meta.settable.includes(c.name))\n .map((c) => c.name)\n result.inc = { entries: this.lowerColumnEntries(inc.value, table, numeric, '_inc') }\n }\n if (!result.set && !result.append && !result.inc) {\n fail(`an update on '${table}' needs at least one of _set/_append/_inc`, 'missing-argument')\n }\n return result\n }\n\n private lowerColumnEntries(\n node: ValueNode,\n table: string,\n whitelist: readonly string[],\n argName: string,\n ): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`${argName} on '${table}' must be an object literal or a variable`, 'invalid-write-values')\n return node.fields.map((field) => {\n const key = field.name.value\n if (!whitelist.includes(key)) {\n fail(`${argName}: column '${key}' is not allowed on '${table}'`, 'column-not-settable', [...whitelist])\n }\n return { column: key, value: this.lowerValue(field.value) }\n })\n }\n\n private lowerPkColumnsArg(node: ValueNode, table: string): Array<{ column: string; value: ValueIr }> {\n if (node.kind !== Kind.OBJECT) fail(`pkColumns on '${table}' must be an object literal`, 'invalid-pk-columns')\n const meta = this.meta(table)\n const provided = new Map(node.fields.map((field) => [field.name.value, field.value]))\n for (const key of provided.keys()) {\n if (!meta.primaryKey.includes(key)) fail(`pkColumns: '${key}' is not a primary-key column of '${table}'`, 'invalid-pk-columns', meta.primaryKey)\n }\n return meta.primaryKey.map((column) => {\n const value = provided.get(column)\n if (!value) fail(`pkColumns is missing '${column}'`, 'invalid-pk-columns', meta.primaryKey)\n return { column, value: this.lowerValue(value) }\n })\n }\n}\n\nexport function lowerOperation({ restricted, ctx }: { restricted: RestrictedOperation; ctx: CompileContext }): RootIr[] {\n const lowerer = new OperationLowerer(ctx, restricted)\n return lowerer.lowerRoots(restricted.definition, restricted.kind)\n}\n","/**\n * Parse pass — build the GraphQLSchema from SDL text and parse + validate the\n * consumer's documents against it with graphql-js's spec rules. Validation\n * failures become diagnostics (never thrown mid-pipeline) so every document\n * reports at once.\n */\nimport {\n buildSchema,\n Kind,\n parse as parseGraphql,\n validate,\n type DocumentNode,\n type FragmentDefinitionNode,\n type GraphQLSchema,\n type OperationDefinitionNode,\n} from 'graphql'\nimport type { CompilerDiagnostic } from './diagnostics.js'\n\nexport interface SourceDocument {\n path: string\n contents: string\n}\n\nexport interface ParsedDocument {\n path: string\n document: DocumentNode\n operations: OperationDefinitionNode[]\n /** Fragments are document-scoped — bios colocates them via TS interpolation. */\n fragments: Map<string, FragmentDefinitionNode>\n}\n\nexport function parseSdl(sdl: string): GraphQLSchema {\n return buildSchema(sdl)\n}\n\nexport interface ParseDocumentsResult {\n documents: ParsedDocument[]\n diagnostics: CompilerDiagnostic[]\n}\n\nexport function parseDocuments({\n schema,\n documents,\n}: {\n schema: GraphQLSchema\n documents: SourceDocument[]\n}): ParseDocumentsResult {\n const parsed: ParsedDocument[] = []\n const diagnostics: CompilerDiagnostic[] = []\n\n for (const source of documents) {\n let document: DocumentNode\n try {\n document = parseGraphql(source.contents)\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-syntax-error',\n message: error instanceof Error ? error.message : String(error),\n document: source.path,\n })\n continue\n }\n\n const validationErrors = validate(schema, document)\n if (validationErrors.length > 0) {\n for (const validationError of validationErrors) {\n diagnostics.push({\n severity: 'error',\n code: 'graphql-validation-error',\n message: validationError.message,\n document: source.path,\n })\n }\n continue\n }\n\n const operations: OperationDefinitionNode[] = []\n const fragments = new Map<string, FragmentDefinitionNode>()\n for (const definition of document.definitions) {\n if (definition.kind === Kind.OPERATION_DEFINITION) operations.push(definition)\n if (definition.kind === Kind.FRAGMENT_DEFINITION) fragments.set(definition.name.value, definition)\n }\n parsed.push({ path: source.path, document, operations, fragments })\n }\n\n return { documents: parsed, diagnostics }\n}\n","/**\n * Restrict pass — the grammar gate that keeps operations inside the v2.0\n * envelope BEFORE lowering:\n *\n * - operations must be named (the op name keys the registry + manifest);\n * - no subscriptions (post-v1);\n * - every variable must be a scalar, a scalar list, a declared enum, OR one\n * of the §4f generated input types (BoolExp/OrderBy/SelectColumn/\n * InsertInput/SetInput/AppendInput/OnConflict) — mapped back to\n * `{ inputRef kind, table }` via the naming rules. Anything else gets a\n * targeted error naming what IS allowed.\n * - a declared default is validated here and persisted into the IR, so the\n * executor can apply it. A default the IR cannot carry faithfully is a\n * compile error rather than a value that silently becomes NULL.\n */\nimport { Kind, valueFromASTUntyped, type ConstValueNode, type OperationDefinitionNode, type TypeNode } from 'graphql'\nimport { CAPABILITY_KEY_PATTERN } from '../constants.js'\nimport type { CompiledOperation, VariableDefaultIr, VariableIr } from '../ir/index.js'\nimport { columnTypeForScalar, VARIABLE_SCALAR_NAMES } from '../sdl/naming.js'\nimport type { CompileContext } from './context.js'\nimport { DocumentCompileError } from './diagnostics.js'\nimport { classifyInputType } from './naming.js'\n\nexport interface RestrictedOperation {\n name: string\n kind: 'query' | 'mutation'\n requires: CompiledOperation['requires']\n variables: VariableIr[]\n definition: OperationDefinitionNode\n}\n\ninterface UnwrappedType {\n named: string\n list: boolean\n nullable: boolean\n}\n\nfunction unwrapType(node: TypeNode, variable: string): UnwrappedType {\n let nullable = true\n let list = false\n let current = node\n for (;;) {\n if (current.kind === Kind.NON_NULL_TYPE) {\n if (current === node) nullable = false\n current = current.type\n continue\n }\n if (current.kind === Kind.LIST_TYPE) {\n if (list) {\n throw new DocumentCompileError(`variable $${variable}: nested list types are not supported`, 'unsupported-variable-type')\n }\n list = true\n current = current.type\n continue\n }\n return { named: current.name.value, list, nullable }\n }\n}\n\nfunction classifyVariableType(\n { named, list }: UnwrappedType,\n variable: string,\n ctx: CompileContext,\n): VariableIr['type'] {\n // §4f input types first — SelectColumn is a GraphQL enum but classifies as a slot.\n const inputRef = classifyInputType(named, ctx.tableByTypename)\n if (inputRef) {\n const listable: Record<string, 'must' | 'never' | 'either'> = {\n boolExp: 'never',\n onConflict: 'never',\n setInput: 'never',\n appendInput: 'never',\n orderBy: 'must',\n selectColumn: 'must',\n insertInput: 'either',\n }\n const rule = listable[inputRef.input] as 'must' | 'never' | 'either'\n if (rule === 'must' && !list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} must be used as a list (e.g. [${named}!])`,\n 'unsupported-variable-type',\n )\n }\n if (rule === 'never' && list) {\n throw new DocumentCompileError(\n `variable $${variable}: ${named} cannot be used as a list`,\n 'unsupported-variable-type',\n )\n }\n return { kind: 'inputRef', input: inputRef.input, table: inputRef.table }\n }\n\n // Scalars classify by the exact names the generated SDL declares — built-ins\n // (Int/Float/String/Boolean/ID) plus the LOWERCASE custom scalars (uuid,\n // timestamptz, date, numeric, bigint, jsonb) from src/sdl/naming.ts.\n const scalar = columnTypeForScalar(named)\n if (scalar) return { kind: 'scalar', scalar }\n\n const enumDef = ctx.enumsByTypeName.get(named)\n // Carry the declared values, not just the name: they ARE the executor's\n // membership whitelist, and without them any string reaches Postgres.\n if (enumDef) return { kind: 'enum', name: enumDef.name, values: [...enumDef.values] }\n\n throw new DocumentCompileError(\n `variable $${variable}: type '${named}' is not usable as a variable — allowed: scalars (${VARIABLE_SCALAR_NAMES.join(', ')}), declared enums, or the generated dynamic input types (FooBoolExp, [FooOrderBy!], [FooSelectColumn!], FooInsertInput, FooSetInput, FooAppendInput, FooOnConflict)`,\n 'unsupported-variable-type',\n )\n}\n\ntype ScalarLiteral = string | number | boolean | null\n\n/** One element of a default: a scalar literal, checked for enum membership. */\nfunction restrictDefaultLiteral(item: unknown, variable: string, type: VariableIr['type']): ScalarLiteral {\n if (item !== null && typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n throw new DocumentCompileError(\n `variable $${variable}: default values must be scalar literals — got ${JSON.stringify(item) ?? 'undefined'}`,\n 'unsupported-variable-default',\n )\n }\n if (type.kind === 'enum' && !(typeof item === 'string' && type.values.includes(item))) {\n throw new DocumentCompileError(\n `variable $${variable}: default ${JSON.stringify(item)} is not a value of enum ${type.name}`,\n 'unsupported-variable-default',\n type.values,\n )\n }\n return item\n}\n\n/**\n * Validate a declared default and reduce it to the literal the IR persists.\n *\n * §4f slots are rejected rather than supported: an ABSENT slot prunes its\n * filter/orderBy/write to a no-op, which no literal default can reproduce, so\n * accepting one would mean two different notions of \"unset\".\n */\nfunction restrictDefault({\n node,\n variable,\n type,\n list,\n nullable,\n}: {\n node: ConstValueNode\n variable: string\n type: VariableIr['type']\n list: boolean\n nullable: boolean\n}): VariableDefaultIr {\n if (type.kind === 'inputRef') {\n throw new DocumentCompileError(\n `variable $${variable}: dynamic input types cannot declare a default — omit the variable instead (an absent slot prunes to a no-op)`,\n 'unsupported-variable-default',\n )\n }\n\n const value: unknown = valueFromASTUntyped(node)\n if (value === null) {\n if (!nullable) {\n throw new DocumentCompileError(\n `variable $${variable}: default null is not valid for a non-nullable variable`,\n 'unsupported-variable-default',\n )\n }\n return { value: null }\n }\n if (Array.isArray(value)) {\n if (!list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a non-list variable must not be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: value.map((item) => restrictDefaultLiteral(item, variable, type)) }\n }\n if (list) {\n throw new DocumentCompileError(\n `variable $${variable}: default for a list variable must be a list`,\n 'unsupported-variable-default',\n )\n }\n return { value: restrictDefaultLiteral(value, variable, type) }\n}\n\nfunction parseRequires(operation: OperationDefinitionNode): CompiledOperation['requires'] {\n const directive = operation.directives?.find((d) => d.name.value === 'requires')\n if (!directive) return null\n\n const requires: { capability?: string; role?: string } = {}\n for (const key of ['capability', 'role'] as const) {\n const arg = directive.arguments?.find((a) => a.name.value === key)\n if (!arg) continue\n if (arg.value.kind !== Kind.STRING) {\n throw new DocumentCompileError(`@requires(${key}:) must be a string literal`, 'invalid-requires')\n }\n if (!CAPABILITY_KEY_PATTERN.test(arg.value.value)) {\n throw new DocumentCompileError(`@requires(${key}: \"${arg.value.value}\") is not a valid key`, 'invalid-requires')\n }\n requires[key] = arg.value.value\n }\n if (requires.capability === undefined && requires.role === undefined) {\n throw new DocumentCompileError('@requires needs a capability or a role argument', 'invalid-requires')\n }\n return requires\n}\n\nexport function restrictOperation({\n operation,\n ctx,\n}: {\n operation: OperationDefinitionNode\n ctx: CompileContext\n}): RestrictedOperation {\n if (operation.operation === 'subscription') {\n throw new DocumentCompileError('subscriptions are not supported in v2.0 — poll a query instead', 'subscription-unsupported')\n }\n const name = operation.name?.value\n if (!name) {\n throw new DocumentCompileError(\n 'anonymous operations are not supported — every operation must be named (the name keys the registry)',\n 'anonymous-operation',\n )\n }\n\n const variables = (operation.variableDefinitions ?? []).map((definition): VariableIr => {\n const variable = definition.variable.name.value\n const unwrapped = unwrapType(definition.type, variable)\n const { list, nullable } = unwrapped\n const type = classifyVariableType(unwrapped, variable, ctx)\n const ir: VariableIr = { name: variable, type, nullable, list }\n if (definition.defaultValue === undefined) return ir\n return { ...ir, defaultValue: restrictDefault({ node: definition.defaultValue, variable, type, list, nullable }) }\n })\n\n return {\n name,\n kind: operation.operation === 'mutation' ? 'mutation' : 'query',\n requires: parseRequires(operation),\n variables,\n definition: operation,\n }\n}\n","/**\n * Artifact assembly — the full push-time pipeline:\n *\n * canonical → compile context (TableMetaIr + policies + pins)\n * SDL → GraphQLSchema; documents → parse/validate\n * per operation: restrict → flatten → lower → inject → hash\n * → CompiledArtifact (self-checked through normalizeIr) + client manifest\n *\n * Runs identically in the CLI (preview) and canonically on the server at push\n * — neither side ever trusts the other's output.\n */\nimport { createHash } from 'node:crypto'\nimport type { CanonicalDefinition } from '../canonical/v2.js'\nimport { stableJson } from '../hash.js'\nimport {\n IR_VERSION,\n normalizeIr,\n type CompiledArtifact,\n type CompiledOperation,\n} from '../ir/index.js'\nimport { buildCompileContext, type CompileContext, type PinnedColumn } from './context.js'\nimport { DocumentCompileError, NamespaceCompileError, type CompilerDiagnostic } from './diagnostics.js'\nimport { flattenOperation } from './flatten.js'\nimport { computeOpHash, computeOpsHash } from './hash.js'\nimport { injectPolicies } from './inject.js'\nimport { lowerOperation } from './lower.js'\nimport { parseDocuments, parseSdl, type SourceDocument } from './parse.js'\nimport { restrictOperation } from './restrict.js'\n\nconst SCHEMA_HASH_DOMAIN = 'sequence-orm-canonical-v2\\0'\n\n/** Content hash of the canonical definition — the schema identity ops compile against. */\nexport function computeSchemaHash(canonical: CanonicalDefinition): string {\n const digest = createHash('sha256').update(SCHEMA_HASH_DOMAIN).update(stableJson(canonical)).digest('hex')\n return `sha256:${digest}`\n}\n\nexport interface ClientManifestOperation {\n opHash: string\n kind: 'query' | 'mutation' | 'action'\n requires: CompiledOperation['requires']\n}\n\n/** What codegen/the client transport needs: name → hash mapping + set identity. */\nexport interface ClientManifest {\n namespace: string\n schemaHash: string\n opsHash: string\n operations: Record<string, ClientManifestOperation>\n}\n\nexport interface CompileNamespaceInput {\n canonical: CanonicalDefinition\n /** Generated SDL text (src/sdl once it lands; test-local SDL until then). */\n sdl: string\n documents: SourceDocument[]\n}\n\nexport type CompileNamespaceResult =\n | { ok: true; artifact: CompiledArtifact; manifest: ClientManifest; diagnostics: CompilerDiagnostic[] }\n | { ok: false; diagnostics: CompilerDiagnostic[] }\n\nexport function compileNamespace({ canonical, sdl, documents }: CompileNamespaceInput): CompileNamespaceResult {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const schema = parseSdl(sdl)\n const schemaHash = computeSchemaHash(canonical)\n const parsed = parseDocuments({ schema, documents })\n diagnostics.push(...parsed.diagnostics)\n\n const operations: Record<string, CompiledOperation> = {}\n const operationSources = new Map<string, string>()\n\n for (const document of parsed.documents) {\n for (const operationNode of document.operations) {\n const operationName = operationNode.name?.value\n try {\n const restricted = restrictOperation({ operation: operationNode, ctx })\n const flattened = flattenOperation({ operation: restricted.definition, fragments: document.fragments })\n const previousSource = operationSources.get(restricted.name)\n if (previousSource !== undefined) {\n throw new DocumentCompileError(\n `duplicate operation name '${restricted.name}' (also defined in ${previousSource})`,\n 'duplicate-operation',\n )\n }\n const loweredRoots = lowerOperation({ restricted: { ...restricted, definition: flattened }, ctx })\n const { roots, tableSet } = injectPolicies({ roots: loweredRoots, ctx })\n operations[restricted.name] = {\n irVersion: IR_VERSION,\n name: restricted.name,\n opHash: computeOpHash({ definition: flattened, schemaHash }),\n kind: restricted.kind,\n requires: restricted.requires,\n variables: restricted.variables,\n tableSet,\n roots,\n }\n operationSources.set(restricted.name, document.path)\n } catch (error) {\n if (error instanceof DocumentCompileError) {\n diagnostics.push({\n severity: 'error',\n code: error.code,\n message: error.message,\n document: document.path,\n ...(operationName !== undefined ? { operation: operationName } : {}),\n })\n continue\n }\n throw error\n }\n }\n }\n\n if (diagnostics.some((d) => d.severity === 'error')) return { ok: false, diagnostics }\n\n const artifact: CompiledArtifact = {\n irVersion: IR_VERSION,\n namespace: ctx.namespace,\n schemaHash,\n opsHash: computeOpsHash(Object.values(operations).map((op) => op.opHash)),\n tables: ctx.tables,\n operations,\n }\n // Self-check: the artifact we hand the registry must round-trip the frozen\n // IR schema — a compiler bug surfaces here, at compile time, not at runtime.\n const normalized = normalizeIr(artifact)\n\n const manifest: ClientManifest = {\n namespace: ctx.namespace,\n schemaHash,\n opsHash: normalized.opsHash,\n operations: Object.fromEntries(\n Object.values(normalized.operations).map((op) => [\n op.name,\n { opHash: op.opHash, kind: op.kind, requires: op.requires },\n ]),\n ),\n }\n\n return { ok: true, artifact: normalized, manifest, diagnostics }\n}\n\n/** compileNamespace that throws on errors — for callers that want the v1-style hard failure. */\nexport function compileNamespaceOrThrow(input: CompileNamespaceInput): {\n artifact: CompiledArtifact\n manifest: ClientManifest\n diagnostics: CompilerDiagnostic[]\n} {\n const result = compileNamespace(input)\n if (!result.ok) throw new NamespaceCompileError(result.diagnostics)\n return result\n}\n\n/** Per-table `col = claim(k)` write-policy pins — exposed for SDL generation options. */\nexport function computePinnedColumnsByTable(canonical: CanonicalDefinition): Record<string, PinnedColumn[]> {\n const { ctx, diagnostics } = buildCompileContext(canonical)\n if (diagnostics.some((d) => d.severity === 'error')) {\n throw new NamespaceCompileError(diagnostics)\n }\n return Object.fromEntries([...ctx.pins.entries()].map(([table, pins]) => [table, pins]))\n}\n\nexport type { CompileContext }\n","import type { ActionDefinition } from '../schema/actions.js'\nimport type { ColumnDefinition, ColumnType } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\n\n/**\n * Wire types per column type — what a Data API row actually carries after\n * the driver + JSON serialization, not the Postgres type. Mirrors\n * engine/columns.ts: bigint arrives as a STRING (int8 exceeds JS number\n * precision, so the executor serializes it losslessly); numeric stays a\n * string (exact decimal); timestamptz serializes to an ISO string.\n */\nconst WIRE_TYPES: Readonly<Record<ColumnType, string>> = {\n uuid: 'string',\n text: 'string',\n integer: 'number',\n bigint: 'string',\n numeric: 'string',\n double: 'number',\n boolean: 'boolean',\n timestamptz: 'string',\n date: 'string',\n jsonb: 'unknown',\n}\n\n/**\n * Emit the `Tables` type for a namespace — the generic parameter for\n * `createOrmClient<…Tables>`. A `type` alias, deliberately not an\n * `interface`: object type literals carry the implicit index signature that\n * satisfies the client's `Record<string, Record<string, unknown>>`\n * constraint; interfaces don't. Derived from the definitions alone (no\n * database), so generation is deterministic and runs offline.\n */\nexport function generateNamespaceTypes(definition: NamespaceDefinition): string {\n const lines: string[] = [\n `// Generated by \\`seq-studio orm apply\\` from the '${definition.namespace}' definitions — do not edit.`,\n '',\n `export type ${typesInterfaceName(definition.namespace)} = {`,\n ]\n for (const table of definition.tables) {\n if (table.source) {\n // Synced tables reflect their gold source at apply — the definitions\n // don't declare columns, so the row type stays permissive until\n // reflected generation lands. Readable through the client today.\n lines.push(` /** Synced from ${table.source} — columns reflect the gold source. */`)\n lines.push(` ${table.table}: Record<string, unknown>`)\n continue\n }\n lines.push(` ${table.table}: {`)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n // Phase one of a column retirement: deprecated columns leave the typed\n // surface while the data stays, so consumers migrate before the drop.\n if (column.deprecated) continue\n lines.push(` ${name}: ${columnWireType(column)}`)\n }\n lines.push(' }')\n }\n lines.push('}', '')\n lines.push(...actionTypeLines(definition))\n return lines.join('\\n')\n}\n\n/**\n * Emit the `Actions` type for a namespace — the second generic parameter for\n * `createOrmClient<…Tables, …Actions>`, keying each action to its param and\n * result shapes. An action with `returns:` resolves to `{ rows: Row[] }`; a\n * count action to `{ rowsAffected: number }`. Derived from the definitions\n * alone, like the table types.\n */\nfunction actionTypeLines(definition: NamespaceDefinition): string[] {\n const actions = definition.tables.flatMap((table) => Object.entries(table.actions ?? {}))\n const lines = [`export type ${actionsInterfaceName(definition.namespace)} = {`]\n for (const [name, action] of actions.sort(([a], [b]) => a.localeCompare(b))) {\n lines.push(` ${name}: { params: ${actionParamsType(action)}; result: ${actionResultType(action)} }`)\n }\n lines.push('}', '')\n return lines\n}\n\nfunction actionParamsType(action: ActionDefinition): string {\n const entries = Object.entries(action.params ?? {})\n if (entries.length === 0) return 'Record<never, never>'\n const fields = entries.map(([name, param]) => {\n const base = WIRE_TYPES[param.type]\n return param.optional ? `${name}?: ${base} | null` : `${name}: ${base}`\n })\n return `{ ${fields.join('; ')} }`\n}\n\nfunction actionResultType(action: ActionDefinition): string {\n if (!action.returns) return '{ rowsAffected: number }'\n // A RETURNING column is nullable at runtime and `returns` records only the\n // type, so every field is `| null` (unknown jsonb already subsumes null).\n const columns = Object.entries(action.returns).map(([name, type]) => {\n const base = WIRE_TYPES[type]\n return base === 'unknown' ? `${name}: ${base}` : `${name}: ${base} | null`\n })\n return `{ rows: Array<{ ${columns.join('; ')} }> }`\n}\n\nexport function typesInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Tables`\n}\n\nexport function actionsInterfaceName(namespace: string): string {\n return `${pascalCase(namespace)}Actions`\n}\n\nfunction pascalCase(namespace: string): string {\n return namespace\n .split('_')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction columnWireType(column: ColumnDefinition): string {\n const base = WIRE_TYPES[column.type]\n const notNull = column.primary_key === true || column.nullable === false\n return notNull || base === 'unknown' ? base : `${base} | null`\n}\n","/** Claims are stamped per transaction by the Data API (`set_config('request.jwt.claims', …, true)`). */\nexport const CLAIMS_SETTING = 'request.jwt.claims'\n\n/** Claims JSON key holding the caller's granted capability pins (a string array). */\nexport const CAPABILITIES_CLAIM_KEY = 'capabilities'\n\nexport const quoteIdentifier = (name: string): string => `\"${name.replaceAll('\"', '\"\"')}\"`\n\nexport const quoteLiteral = (value: string): string => `'${value.replaceAll(\"'\", \"''\")}'`\n\n/** `nullif(…, '')` because a session that ever set the GUC reverts it to '' (not NULL) after the transaction — ''::jsonb is an error. */\nconst CLAIMS_SOURCE = `nullif(current_setting('${CLAIMS_SETTING}', true), '')::jsonb`\n\nexport const claimExpression = (key: string): string => `(${CLAIMS_SOURCE} ->> ${quoteLiteral(key)})`\n\n/** NULL claims (or a missing capabilities array) coalesce to false — capability checks fail closed. */\nexport const capabilityExpression = (key: string): string =>\n `coalesce(${CLAIMS_SOURCE} -> '${CAPABILITIES_CLAIM_KEY}' ? ${quoteLiteral(key)}, false)`\n","import { z } from 'zod'\nimport {\n IDENTIFIER_PATTERN,\n MAX_IDENTIFIER_LENGTH,\n NAMESPACE_PATTERN,\n QUALIFIED_TABLE_PATTERN,\n} from '../constants.js'\n\nexport const identifierSchema = z\n .string()\n .max(MAX_IDENTIFIER_LENGTH)\n .regex(IDENTIFIER_PATTERN, 'must be a lowercase identifier (a-z, 0-9, _)')\n\nexport const namespaceSchema = z\n .string()\n .regex(NAMESPACE_PATTERN, 'must be lowercase, start with a letter, and be at most 41 characters')\n\n/** `<table>` for a table in the same namespace, `<schema>.<table>` for anything else. */\nexport const tableReferenceSchema = z\n .string()\n .refine(\n (value) => IDENTIFIER_PATTERN.test(value) || QUALIFIED_TABLE_PATTERN.test(value),\n 'must be a table name or a schema-qualified table reference',\n )\n\nexport const isQualifiedReference = (reference: string): boolean => reference.includes('.')\n","import { z } from 'zod'\nimport { identifierSchema } from './identifiers.js'\n\nexport const COLUMN_TYPES = [\n 'uuid',\n 'text',\n 'integer',\n 'bigint',\n 'numeric',\n 'double',\n 'boolean',\n 'timestamptz',\n 'date',\n 'jsonb',\n] as const\n\nexport type ColumnType = (typeof COLUMN_TYPES)[number]\n\nexport const columnTypeSchema = z.enum(COLUMN_TYPES)\n\nconst FUNCTION_DEFAULTS: Readonly<Record<string, readonly ColumnType[]>> = {\n 'gen_random_uuid()': ['uuid'],\n 'now()': ['timestamptz', 'date'],\n}\n\nconst CAST_PATTERN = /^([a-z][a-z0-9_]*)::([a-z]+)$/\n\n/**\n * True when the default is one of the allowlisted SQL function calls for its\n * type — the ONLY defaults the engine may emit as raw SQL. Everything else\n * is a literal value; in particular a text default that happens to end in\n * `()` is data, never code.\n */\nexport const isFunctionDefault = (value: ColumnDefault, type: ColumnType): boolean =>\n typeof value === 'string' && (FUNCTION_DEFAULTS[value]?.includes(type) ?? false)\n\nexport type ColumnDefault = string | number | boolean\n\nexport interface ColumnDefinition {\n readonly type: ColumnType\n readonly primary_key?: boolean\n readonly nullable?: boolean\n readonly unique?: boolean\n readonly default?: ColumnDefault\n readonly description?: string\n readonly renamed_from?: string\n readonly cast?: string\n readonly deprecated?: boolean\n}\n\nfunction defaultIssue(value: ColumnDefault, type: ColumnType): string | null {\n if (typeof value === 'boolean') return type === 'boolean' ? null : `boolean default is invalid for type '${type}'`\n if (typeof value === 'number') {\n if (!['integer', 'bigint', 'numeric', 'double'].includes(type)) {\n return `numeric default is invalid for type '${type}'`\n }\n if (['integer', 'bigint'].includes(type)) {\n if (!Number.isInteger(value)) return `default for type '${type}' must be an integer`\n if (!Number.isSafeInteger(value)) {\n return `default for type '${type}' exceeds the safe integer range — YAML numbers lose precision past 2^53`\n }\n }\n // `numeric` is exact-precision in Postgres but this value already went\n // through a JS float — past 2^53 it may not be what was written. Quote\n // it as a string to keep exact precision. (`double` IS a float; fine.)\n if (type === 'numeric' && Math.abs(value) > Number.MAX_SAFE_INTEGER) {\n return \"numeric default exceeds the safe float range — write it as a string (e.g. '9007199254740993') to keep exact precision\"\n }\n return null\n }\n // The exact allowlisted function names always validate against their\n // types — `now()` on a text column is a misdeclared type, not a literal.\n const allowedTypes = FUNCTION_DEFAULTS[value]\n if (allowedTypes) return allowedTypes.includes(type) ? null : `default '${value}' is invalid for type '${type}'`\n // Any other string default is a quoted literal — including strings ending\n // in `()`, which are data, never code. Whether the literal parses is the\n // column input function's call at apply; string grammars (uuid forms,\n // numeric notations, date formats) are never mirrored client-side.\n return null\n}\n\nexport const columnSchema = z\n .strictObject({\n type: columnTypeSchema,\n primary_key: z.boolean().optional(),\n nullable: z.boolean().optional(),\n unique: z.boolean().optional(),\n default: z.union([z.string(), z.number(), z.boolean()]).optional(),\n description: z.string().optional(),\n renamed_from: identifierSchema.optional(),\n cast: z.string().optional(),\n deprecated: z.boolean().optional(),\n })\n .superRefine((column, ctx) => {\n if (column.default !== undefined) {\n const issue = defaultIssue(column.default, column.type)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['default'] })\n }\n if (column.primary_key && column.nullable) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be nullable', path: ['nullable'] })\n }\n if (column.primary_key && column.deprecated) {\n ctx.addIssue({ code: 'custom', message: 'a primary key column cannot be deprecated', path: ['deprecated'] })\n }\n if (column.cast && !CAST_PATTERN.test(column.cast)) {\n ctx.addIssue({ code: 'custom', message: \"cast must have the shape '<column>::<type>'\", path: ['cast'] })\n }\n })\n\nexport function castParts(cast: string): { column: string; type: string } | null {\n const match = CAST_PATTERN.exec(cast)\n if (!match) return null\n return { column: match[1] as string, type: match[2] as string }\n}\n","export const COMPARE_OPS = ['=', '!=', '<', '<=', '>', '>='] as const\nexport type CompareOp = (typeof COMPARE_OPS)[number]\n\nexport type Operand =\n | { kind: 'column'; name: string }\n | { kind: 'claim'; key: string }\n | { kind: 'literal'; value: string | number | boolean | null }\n\nexport type Predicate =\n | { kind: 'and'; operands: readonly Predicate[] }\n | { kind: 'or'; operands: readonly Predicate[] }\n | { kind: 'not'; operand: Predicate }\n | { kind: 'compare'; op: CompareOp; left: Operand; right: Operand }\n | { kind: 'capability'; key: string }\n\nexport interface ParsedPredicate {\n readonly source: string\n readonly ast: Predicate\n}\n\nexport function walkPredicate(predicate: Predicate, visit: (node: Predicate) => void): void {\n visit(predicate)\n if (predicate.kind === 'and' || predicate.kind === 'or') {\n for (const operand of predicate.operands) walkPredicate(operand, visit)\n }\n if (predicate.kind === 'not') walkPredicate(predicate.operand, visit)\n}\n\nexport function predicateOperands(predicate: Predicate): Operand[] {\n const operands: Operand[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'compare') operands.push(node.left, node.right)\n })\n return operands\n}\n\nexport function referencedColumns(predicate: Predicate): string[] {\n const names = predicateOperands(predicate).flatMap((operand) =>\n operand.kind === 'column' ? [operand.name] : [],\n )\n return [...new Set(names)]\n}\n\nexport function referencedCapabilities(predicate: Predicate): string[] {\n const keys: string[] = []\n walkPredicate(predicate, (node) => {\n if (node.kind === 'capability') keys.push(node.key)\n })\n return [...new Set(keys)]\n}\n","import { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN, IDENTIFIER_PATTERN } from '../constants.js'\nimport { PredicateParseError } from '../errors.js'\nimport { COMPARE_OPS, type CompareOp, type Operand, type ParsedPredicate, type Predicate } from './ast.js'\n\ntype TokenKind = 'identifier' | 'string' | 'number' | 'operator' | 'lparen' | 'rparen' | 'comma' | 'end'\n\ninterface Token {\n readonly kind: TokenKind\n readonly value: string\n readonly position: number\n}\n\nconst KEYWORDS = new Set(['and', 'or', 'not', 'true', 'false', 'null', 'claim', 'capability'])\nconst OPERATOR_PATTERN = /^(!=|<=|>=|<>|=|<|>)/\nconst IDENTIFIER_START = /[a-z_]/\nconst IDENTIFIER_CHAR = /[a-z0-9_.-]/\nconst NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?/\n\nfunction tokenize(source: string): Token[] {\n const tokens: Token[] = []\n let position = 0\n\n while (position < source.length) {\n const char = source[position] as string\n\n if (/\\s/.test(char)) {\n position += 1\n continue\n }\n if (char === '(') {\n tokens.push({ kind: 'lparen', value: char, position })\n position += 1\n continue\n }\n if (char === ')') {\n tokens.push({ kind: 'rparen', value: char, position })\n position += 1\n continue\n }\n if (char === ',') {\n tokens.push({ kind: 'comma', value: char, position })\n position += 1\n continue\n }\n if (char === \"'\") {\n const { value, end } = readString(source, position)\n tokens.push({ kind: 'string', value, position })\n position = end\n continue\n }\n\n const operator = OPERATOR_PATTERN.exec(source.slice(position))\n if (operator) {\n const value = operator[0] === '<>' ? '!=' : operator[0]\n tokens.push({ kind: 'operator', value, position })\n position += operator[0].length\n continue\n }\n\n const number = NUMBER_PATTERN.exec(source.slice(position))\n if (number && !IDENTIFIER_START.test(char)) {\n tokens.push({ kind: 'number', value: number[0], position })\n position += number[0].length\n continue\n }\n\n if (IDENTIFIER_START.test(char)) {\n let end = position\n while (end < source.length && IDENTIFIER_CHAR.test(source[end] as string)) end += 1\n tokens.push({ kind: 'identifier', value: source.slice(position, end), position })\n position = end\n continue\n }\n\n throw new PredicateParseError(`unexpected character '${char}'`, position)\n }\n\n tokens.push({ kind: 'end', value: '', position: source.length })\n return tokens\n}\n\nfunction readString(source: string, start: number): { value: string; end: number } {\n let value = ''\n let position = start + 1\n while (position < source.length) {\n const char = source[position] as string\n if (char !== \"'\") {\n value += char\n position += 1\n continue\n }\n if (source[position + 1] === \"'\") {\n value += \"'\"\n position += 2\n continue\n }\n return { value, end: position + 1 }\n }\n throw new PredicateParseError('unterminated string literal', start)\n}\n\nclass Parser {\n private index = 0\n\n constructor(private readonly tokens: Token[]) {}\n\n parse(): Predicate {\n const predicate = this.parseOr()\n this.expect('end', 'end of expression')\n return predicate\n }\n\n private parseOr(): Predicate {\n const operands = [this.parseAnd()]\n while (this.matchKeyword('or')) operands.push(this.parseAnd())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'or', operands }\n }\n\n private parseAnd(): Predicate {\n const operands = [this.parseNot()]\n while (this.matchKeyword('and')) operands.push(this.parseNot())\n return operands.length === 1 ? (operands[0] as Predicate) : { kind: 'and', operands }\n }\n\n private parseNot(): Predicate {\n if (this.matchKeyword('not')) return { kind: 'not', operand: this.parseNot() }\n return this.parsePrimary()\n }\n\n private parsePrimary(): Predicate {\n if (this.peek().kind === 'lparen') {\n this.advance()\n const inner = this.parseOr()\n this.expect('rparen', \"')'\")\n return inner\n }\n if (this.peekKeyword('capability')) {\n const capability = this.parseCapability()\n const next = this.peek()\n if (next.kind === 'operator') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', next.position)\n }\n return capability\n }\n return this.parseComparison()\n }\n\n private parseCapability(): Predicate {\n this.advance()\n const key = this.parseCallArgument('capability')\n if (!CAPABILITY_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid capability key '${key}'`, this.peek().position)\n }\n return { kind: 'capability', key }\n }\n\n private parseComparison(): Predicate {\n const left = this.parseOperand()\n const operator = this.expect('operator', 'a comparison operator')\n if (!COMPARE_OPS.includes(operator.value as CompareOp)) {\n throw new PredicateParseError(`unsupported operator '${operator.value}'`, operator.position)\n }\n const right = this.parseOperand()\n return { kind: 'compare', op: operator.value as CompareOp, left, right }\n }\n\n private parseOperand(): Operand {\n const token = this.peek()\n\n if (token.kind === 'string') {\n this.advance()\n return { kind: 'literal', value: token.value }\n }\n if (token.kind === 'number') {\n this.advance()\n const value = Number(token.value)\n // A bigint-sized literal would silently round through the JS number and\n // compile a policy against the wrong identifier — reject; quote it.\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value))) {\n throw new PredicateParseError(\n `numeric literal '${token.value}' exceeds safe integer precision — quote it as a string`,\n token.position,\n )\n }\n return { kind: 'literal', value }\n }\n if (token.kind !== 'identifier') {\n throw new PredicateParseError(`expected an operand, got '${token.value || 'end'}'`, token.position)\n }\n\n this.advance()\n if (token.value === 'true' || token.value === 'false') {\n return { kind: 'literal', value: token.value === 'true' }\n }\n if (token.value === 'null') return { kind: 'literal', value: null }\n if (token.value === 'claim') {\n const key = this.parseCallArgument('claim')\n if (!CLAIM_KEY_PATTERN.test(key)) {\n throw new PredicateParseError(`invalid claim key '${key}'`, token.position)\n }\n return { kind: 'claim', key }\n }\n if (token.value === 'capability') {\n throw new PredicateParseError('capability() is boolean-valued and cannot appear in a comparison', token.position)\n }\n if (KEYWORDS.has(token.value) || !IDENTIFIER_PATTERN.test(token.value)) {\n throw new PredicateParseError(`invalid column reference '${token.value}'`, token.position)\n }\n return { kind: 'column', name: token.value }\n }\n\n private parseCallArgument(fn: 'claim' | 'capability'): string {\n this.expect('lparen', `'(' after ${fn}`)\n const argument = this.expect('string', `a quoted key in ${fn}(...)`)\n this.expect('rparen', `')' after ${fn} key`)\n return argument.value\n }\n\n private peek(): Token {\n return this.tokens[this.index] as Token\n }\n\n private peekKeyword(keyword: string): boolean {\n const token = this.peek()\n return token.kind === 'identifier' && token.value === keyword\n }\n\n private matchKeyword(keyword: string): boolean {\n if (!this.peekKeyword(keyword)) return false\n this.advance()\n return true\n }\n\n private advance(): Token {\n const token = this.peek()\n if (token.kind !== 'end') this.index += 1\n return token\n }\n\n private expect(kind: TokenKind, description: string): Token {\n const token = this.peek()\n if (token.kind !== kind) {\n throw new PredicateParseError(`expected ${description}, got '${token.value || 'end'}'`, token.position)\n }\n return this.advance()\n }\n}\n\nexport function parsePredicate(source: string): ParsedPredicate {\n const trimmed = source.trim()\n if (trimmed.length === 0) throw new PredicateParseError('empty predicate', 0)\n return { source: trimmed, ast: new Parser(tokenize(trimmed)).parse() }\n}\n","import { z } from 'zod'\nimport { parsePredicate } from '../predicate/parse.js'\nimport type { ParsedPredicate } from '../predicate/ast.js'\n\nexport const parsedPredicateSchema = z\n .string()\n .transform((source, ctx): ParsedPredicate => {\n try {\n return parsePredicate(source)\n } catch (error) {\n ctx.addIssue({ code: 'custom', message: error instanceof Error ? error.message : String(error) })\n return z.NEVER\n }\n })\n","import { z } from 'zod'\nimport { referencedColumns } from '../predicate/ast.js'\nimport { columnTypeSchema } from './columns.js'\nimport { identifierSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst EXECUTES_VERB_PATTERN = /^\\s*(insert|update|delete)\\b/i\n// Dollar-quoting ($tag$…$tag$) isn't handled by the claim/param scanner (it\n// masks single-quoted literals only), so a `:param` or claim()-like text\n// inside one would be silently rewritten. Reject it — app action SQL never\n// needs it.\nconst DOLLAR_QUOTE_PATTERN = /\\$[a-zA-Z0-9_]*\\$/\n// RETURNING is how a `returns:` action populates its declared rows — so it's\n// required when returns is declared and rejected otherwise (an action without\n// returns reports rows_affected only, and a stray RETURNING would just buffer\n// discarded rows).\nconst RETURNING_PATTERN = /\\breturning\\b/i\n// Escape strings (E'…') use backslash escaping the quoted-literal scanner\n// doesn't model — in E'can\\'t :body' the \\' ends the match early and :body is\n// mis-rewritten as a bind placeholder. On string-masked text a surviving\n// `E'`/`e'` can only be an escape-string introducer (every standard literal is\n// already masked away), so reject it there. App action SQL never needs them.\nconst ESCAPE_STRING_PATTERN = /(?<![a-zA-Z0-9_])[Ee]'/\n// A valid claim()/capability() call, once its argument literal is masked to\n// '' — used to strip the good calls so any leftover bare call is malformed.\nconst MASKED_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\(\\s*''\\s*\\)/g\n// Any claim()/capability( that survives masking + stripping is malformed\n// (unquoted arg, wrong arity) — it would compile-throw at invoke as a 500.\nconst BARE_CLAIM_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\nconst EXISTS_ENTRY_PATTERN = /^exists\\(\\s*'([^']+)'\\s*,\\s*([a-z][a-z0-9_]*)\\s*\\)$/\nconst NAMED_PARAM_PATTERN = /(?<!:):([a-z][a-z0-9_]*)/g\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\nconst SQL_COMMENT_PATTERN = /--|\\/\\*/\n\nexport const actionParamSchema = z.strictObject({\n type: columnTypeSchema,\n optional: z.boolean().optional(),\n description: z.string().optional(),\n})\n\nexport interface ValidatesEntry {\n readonly source: string\n readonly table: string\n readonly param: string\n}\n\nconst validatesEntrySchema = z\n .string()\n .transform((source, ctx): ValidatesEntry => {\n const match = EXISTS_ENTRY_PATTERN.exec(source.trim())\n if (!match) {\n ctx.addIssue({ code: 'custom', message: \"validates entries must have the shape exists('<table>', <param>)\" })\n return z.NEVER\n }\n const table = tableReferenceSchema.safeParse(match[1])\n if (!table.success) {\n ctx.addIssue({ code: 'custom', message: `invalid table reference '${match[1]}'` })\n return z.NEVER\n }\n return { source: source.trim(), table: table.data, param: match[2] as string }\n })\n\nexport const AUDIT_ACTIONS = ['create', 'update', 'delete'] as const\n\nconst auditSchema = z.strictObject({\n action: z.enum(AUDIT_ACTIONS),\n resource: identifierSchema.optional(),\n})\n\nexport const actionSchema = z\n .strictObject({\n description: z.string().optional(),\n requires: parsedPredicateSchema.optional(),\n params: z.record(identifierSchema, actionParamSchema).optional(),\n validates: z.array(validatesEntrySchema).optional(),\n // One statement, or an ordered list run atomically in the action function.\n executes: z.union([z.string().min(1), z.array(z.string().min(1)).min(1)]),\n // Declares the columns the action's RETURNING yields. Present → the\n // function returns those rows (typed in the client); absent → the action\n // reports rows_affected only. The column names/types must match the\n // RETURNING list, which Postgres enforces at CREATE FUNCTION.\n returns: z.record(identifierSchema, columnTypeSchema).optional(),\n audit: auditSchema.optional(),\n })\n .superRefine((action, ctx) => {\n const params = Object.keys(action.params ?? {})\n if (action.requires && referencedColumns(action.requires.ast).length > 0) {\n ctx.addIssue({\n code: 'custom',\n message: 'requires may reference claims and capabilities only, not columns',\n path: ['requires'],\n })\n }\n for (const issue of executesIssues(action.executes, new Set(params), action.returns !== undefined)) {\n ctx.addIssue({ code: 'custom', message: issue, path: ['executes'] })\n }\n // An empty `returns: {}` would compile to `RETURNS TABLE()` — invalid SQL —\n // and slip through as \"has returns\"; require at least one declared column.\n if (action.returns && Object.keys(action.returns).length === 0) {\n ctx.addIssue({ code: 'custom', message: 'returns must declare at least one column', path: ['returns'] })\n }\n for (const [index, entry] of (action.validates ?? []).entries()) {\n if (!params.includes(entry.param)) {\n ctx.addIssue({\n code: 'custom',\n message: `validates references undeclared param '${entry.param}'`,\n path: ['validates', index],\n })\n }\n }\n })\n\nexport type ActionDefinition = z.output<typeof actionSchema>\n\nexport function extractNamedParams(sql: string): string[] {\n const withoutStrings = sql.replace(QUOTED_STRING_PATTERN, \"''\")\n const names = [...withoutStrings.matchAll(NAMED_PARAM_PATTERN)].map((match) => match[1] as string)\n return [...new Set(names)]\n}\n\n/** One statement, or the ordered list — normalized to trimmed strings. */\nexport function actionStatementSources(executes: string | readonly string[]): string[] {\n return (Array.isArray(executes) ? executes : [executes]).map((statement) => statement.trim())\n}\n\n// The write target of each executes verb — the identifier right after\n// `INSERT INTO` / `UPDATE [ONLY]` / `DELETE FROM [ONLY]`, optionally\n// schema-qualified (last segment wins) and optionally double-quoted. ORM\n// identifiers are lowercase, so a case-insensitive match + lowercase is exact.\nconst WRITE_TARGET_PATTERNS: ReadonlyArray<RegExp> = [\n /^insert\\s+into\\s+(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n /^update\\s+(?:only\\s+)?(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n /^delete\\s+from\\s+(?:only\\s+)?(?:\"?[a-z_][a-z0-9_]*\"?\\.)?\"?([a-z_][a-z0-9_]*)\"?/i,\n]\n\n/**\n * The tables an action's `executes` statements write to — the `INSERT INTO` /\n * `UPDATE` / `DELETE FROM` targets, in first-seen order, deduped. This is the\n * authoritative write set: an action can touch more than its declaring table\n * (its `executes` may write several), so this reads the statements themselves\n * rather than assuming the owning table. Quoted string literals are masked first\n * so a table name inside a value is never mistaken for a target.\n */\nexport function actionWriteTargets(action: ActionDefinition): string[] {\n const targets: string[] = []\n const seen = new Set<string>()\n for (const statement of actionStatementSources(action.executes)) {\n const masked = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n for (const pattern of WRITE_TARGET_PATTERNS) {\n const match = pattern.exec(masked)\n if (!match) continue\n const table = (match[1] as string).toLowerCase()\n if (!seen.has(table)) {\n seen.add(table)\n targets.push(table)\n }\n break\n }\n }\n return targets\n}\n\nfunction executesIssues(\n executes: string | readonly string[],\n declaredParams: ReadonlySet<string>,\n hasReturns: boolean,\n): string[] {\n const issues: string[] = []\n const statements = actionStatementSources(executes)\n statements.forEach((statement, index) => {\n // Literal-stripped form so `;`/`--`/RETURNING inside a quoted value isn't a false hit.\n const withoutStrings = statement.replace(QUOTED_STRING_PATTERN, \"''\")\n const at = statements.length > 1 ? ` (statement ${index + 1})` : ''\n if (!EXECUTES_VERB_PATTERN.test(statement)) issues.push(`executes must be INSERT, UPDATE, or DELETE${at}`)\n if (withoutStrings.replace(/;\\s*$/, '').includes(';')) issues.push(`each executes entry must be a single statement${at}`)\n if (SQL_COMMENT_PATTERN.test(withoutStrings)) issues.push(`executes must not contain SQL comments${at}`)\n if (DOLLAR_QUOTE_PATTERN.test(withoutStrings)) issues.push(`executes must not use dollar-quoted strings${at}`)\n if (ESCAPE_STRING_PATTERN.test(withoutStrings)) issues.push(`executes must not use escape strings (E'…')${at}`)\n // A double-quoted identifier hides `:param` from the compiler's literal scanner.\n if (withoutStrings.includes('\"')) issues.push(`executes must not use double-quoted identifiers${at}`)\n if (BARE_CLAIM_CALL_PATTERN.test(withoutStrings.replace(MASKED_CLAIM_CALL_PATTERN, ''))) {\n issues.push(`executes has a malformed claim()/capability() call — use e.g. claim('sub')${at}`)\n }\n // RETURNING populates the returns rows, so it belongs on the last statement\n // only, and only when returns is declared.\n if (RETURNING_PATTERN.test(withoutStrings) && !(hasReturns && index === statements.length - 1)) {\n issues.push(\n hasReturns\n ? `only the last executes statement may use RETURNING${at}`\n : `executes must not use RETURNING unless the action declares returns${at}`,\n )\n }\n })\n const last = statements.at(-1)\n if (hasReturns && last && !RETURNING_PATTERN.test(last.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n issues.push('the last executes statement must use RETURNING to populate the declared returns columns')\n }\n const undeclared = extractNamedParams(statements.join('\\n')).filter((name) => !declaredParams.has(name))\n if (undeclared.length > 0) issues.push(`executes references undeclared params: ${undeclared.join(', ')}`)\n return issues\n}\n","import { z } from 'zod'\nimport {\n MAX_IDENTIFIER_LENGTH,\n RESERVED_COLUMN_NAMES,\n RESERVED_TABLE_NAMES,\n SYNCED_SOURCE_PATTERN,\n} from '../constants.js'\nimport { referencedColumns, walkPredicate, type Operand } from '../predicate/ast.js'\nimport { actionSchema } from './actions.js'\nimport { castParts, columnSchema, type ColumnType } from './columns.js'\nimport { identifierSchema, namespaceSchema, tableReferenceSchema } from './identifiers.js'\nimport { parsedPredicateSchema } from './predicates.js'\n\nconst linkSchema = z.strictObject({\n to: tableReferenceSchema,\n on: identifierSchema,\n enforce: z.boolean().optional(),\n description: z.string().optional(),\n})\n\n// No column-count or index-count caps — Postgres's own INDEX_MAX_KEYS is the\n// authority and CREATE INDEX fails loudly past it.\nconst indexSchema = z\n .union([\n z.array(identifierSchema).min(1),\n z.strictObject({\n columns: z.array(identifierSchema).min(1),\n unique: z.boolean().optional(),\n name: identifierSchema.optional(),\n }),\n ])\n .transform((index) => (Array.isArray(index) ? { columns: index } : index))\n\nconst policiesSchema = z.strictObject({\n read: parsedPredicateSchema.optional(),\n write: parsedPredicateSchema.optional(),\n})\n\nexport const tableFileSchema = z\n .strictObject({\n namespace: namespaceSchema,\n table: identifierSchema,\n description: z.string().optional(),\n columns: z.record(identifierSchema, columnSchema).optional(),\n source: z.string().regex(SYNCED_SOURCE_PATTERN, 'source must reference a gold-layer table').optional(),\n links: z.record(identifierSchema, linkSchema).optional(),\n indexes: z.array(indexSchema).optional(),\n policies: policiesSchema.optional(),\n actions: z.record(identifierSchema, actionSchema).optional(),\n })\n .superRefine((table, ctx) => {\n if (RESERVED_TABLE_NAMES.has(table.table)) {\n ctx.addIssue({ code: 'custom', message: `'${table.table}' is a reserved table name`, path: ['table'] })\n }\n for (const name of Object.keys(table.columns ?? {})) {\n if (RESERVED_COLUMN_NAMES.has(name)) {\n ctx.addIssue({\n code: 'custom',\n message: `column '${name}' collides with the Data API's reserved query parameters (select, order, limit, offset) — it could never be filtered`,\n path: ['columns', name],\n })\n }\n }\n if (table.source) validateSyncedTable(table, ctx)\n else validateColumnTable(table, ctx)\n validateLinks(table, ctx)\n validatePolicyColumns(table, ctx)\n validateDerivedNameLengths(table, ctx)\n })\n\nexport type TableFile = z.output<typeof tableFileSchema>\nexport type LinkDefinition = z.output<typeof linkSchema>\nexport type IndexDefinition = z.output<typeof indexSchema>\n\n/** The physical index name — explicit, or derived from table + columns. One formula for the builder and the namespace-wide uniqueness check. */\nexport const indexName = (table: string, definition: IndexDefinition): string =>\n definition.name ?? `ix_${table}_${definition.columns.join('_')}`\n\n/** Row-policy name the security pass owns per table — `<table>_<suffix>`. One formula for the emitter and the load-time length check. */\nexport const policyName = (table: string, suffix: string): string => `${table}_${suffix}`\n\n/** Enforced-link FK constraint name — one formula for the engine builder and the load-time length check. */\nexport const foreignKeyName = (table: string, link: string): string => `fk_${table}_${link}`\n\ntype RefineCtx = { addIssue: (issue: { code: 'custom'; message: string; path?: (string | number)[] }) => void }\n\nfunction validateSyncedTable(table: TableFile, ctx: RefineCtx): void {\n const forbidden: Array<[keyof TableFile, string]> = [\n ['columns', 'synced tables reflect their source; columns are not declared'],\n ['actions', 'synced tables are read-only; actions are not allowed'],\n ['indexes', 'synced tables are system-owned; indexes are not allowed'],\n ]\n for (const [field, message] of forbidden) {\n if (table[field] !== undefined) ctx.addIssue({ code: 'custom', message, path: [field] })\n }\n if (table.policies?.write) {\n ctx.addIssue({ code: 'custom', message: 'synced tables are read-only', path: ['policies', 'write'] })\n }\n}\n\nfunction validateRenames(\n columns: NonNullable<TableFile['columns']>,\n names: readonly string[],\n ctx: RefineCtx,\n): void {\n const renameSources = new Map<string, string>()\n for (const name of names) {\n const renamedFrom = columns[name]?.renamed_from\n if (!renamedFrom) continue\n if (renamedFrom === name || names.includes(renamedFrom)) {\n ctx.addIssue({\n code: 'custom',\n message: 'renamed_from must name a column that no longer exists',\n path: ['columns', name, 'renamed_from'],\n })\n }\n // Two columns claiming the same source would make the rename migration ambiguous.\n const claimed = renameSources.get(renamedFrom)\n if (claimed) {\n ctx.addIssue({\n code: 'custom',\n message: `renamed_from '${renamedFrom}' is already claimed by '${claimed}'`,\n path: ['columns', name, 'renamed_from'],\n })\n }\n renameSources.set(renamedFrom, name)\n }\n}\n\nfunction validateColumnTable(table: TableFile, ctx: RefineCtx): void {\n const columns = table.columns ?? {}\n const names = Object.keys(columns)\n if (names.length === 0) {\n ctx.addIssue({ code: 'custom', message: 'a table must declare columns or a source', path: ['columns'] })\n return\n }\n\n const primaryKeys = names.filter((name) => columns[name]?.primary_key)\n if (primaryKeys.length !== 1) {\n ctx.addIssue({ code: 'custom', message: 'exactly one column must be primary_key', path: ['columns'] })\n }\n\n validateRenames(columns, names, ctx)\n for (const name of names) {\n const column = columns[name]\n if (!column) continue\n const cast = column.cast ? castParts(column.cast) : null\n if (column.cast && cast?.column !== name) {\n ctx.addIssue({\n code: 'custom',\n message: 'cast must reference the column it is declared on',\n path: ['columns', name, 'cast'],\n })\n }\n if (cast && cast.type !== column.type) {\n ctx.addIssue({\n code: 'custom',\n message: `cast target '${cast.type}' must match the declared type '${column.type}'`,\n path: ['columns', name, 'cast'],\n })\n }\n }\n\n for (const [position, index] of (table.indexes ?? []).entries()) {\n if (new Set(index.columns).size !== index.columns.length) {\n ctx.addIssue({\n code: 'custom',\n message: 'index names a column more than once',\n path: ['indexes', position],\n })\n }\n for (const column of index.columns) {\n if (!names.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `index references unknown column '${column}'`,\n path: ['indexes', position],\n })\n }\n }\n }\n}\n\nfunction validateLinks(table: TableFile, ctx: RefineCtx): void {\n const columnNames = Object.keys(table.columns ?? {})\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (!table.source && !columnNames.includes(link.on)) {\n ctx.addIssue({ code: 'custom', message: `link references unknown column '${link.on}'`, path: ['links', name, 'on'] })\n }\n if (link.enforce && link.to.includes('.')) {\n ctx.addIssue({\n code: 'custom',\n message: 'enforce is only valid for links inside the namespace; cross-boundary links stay soft',\n path: ['links', name, 'enforce'],\n })\n }\n if (link.enforce && table.source) {\n ctx.addIssue({\n code: 'custom',\n message: 'a synced table cannot enforce foreign keys — its DDL is owned by the sync',\n path: ['links', name, 'enforce'],\n })\n }\n }\n}\n\n/**\n * Postgres silently truncates identifiers past 63 bytes, so an over-long\n * derived name would collide or drift from what the engine thinks it created.\n * Fail at load instead. Explicit names are already capped by identifierSchema;\n * only the derived formulas can overflow.\n */\nfunction validateDerivedNameLengths(table: TableFile, ctx: RefineCtx): void {\n const worstPolicy = policyName(table.table, 'insert')\n if (!table.source && worstPolicy.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `table name is too long — the derived policy name '${worstPolicy}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit`,\n path: ['table'],\n })\n }\n for (const [position, index] of (table.indexes ?? []).entries()) {\n const name = indexName(table.table, index)\n if (name.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived index name '${name}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — set a shorter explicit name`,\n path: ['indexes', position],\n })\n }\n }\n for (const [name, link] of Object.entries(table.links ?? {})) {\n const constraint = foreignKeyName(table.table, name)\n if (link.enforce && constraint.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived foreign-key name '${constraint}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the link or table name`,\n path: ['links', name],\n })\n }\n }\n for (const name of Object.keys(table.actions ?? {})) {\n // Each action compiles to an `action_<name>` Postgres function.\n const fnName = `action_${name}`\n if (fnName.length > MAX_IDENTIFIER_LENGTH) {\n ctx.addIssue({\n code: 'custom',\n message: `derived action function name '${fnName}' exceeds Postgres's ${MAX_IDENTIFIER_LENGTH}-byte identifier limit — shorten the action name`,\n path: ['actions', name],\n })\n }\n }\n}\n\n/** Comparability groups — Postgres compares freely within a group, errors across them. One helper shared with link/param checks. */\nconst TYPE_GROUPS: Readonly<Record<ColumnType, 'numeric' | 'text' | 'uuid' | 'temporal' | 'boolean' | 'jsonb'>> = {\n integer: 'numeric',\n bigint: 'numeric',\n numeric: 'numeric',\n double: 'numeric',\n text: 'text',\n uuid: 'uuid',\n date: 'temporal',\n timestamptz: 'temporal',\n boolean: 'boolean',\n jsonb: 'jsonb',\n}\n\nexport const columnTypeGroup = (type: ColumnType): string => TYPE_GROUPS[type]\n\nfunction validatePolicyColumns(table: TableFile, ctx: RefineCtx): void {\n if (table.source) return\n const columns = table.columns ?? {}\n const columnNames = Object.keys(columns)\n for (const kind of ['read', 'write'] as const) {\n const predicate = table.policies?.[kind]\n if (!predicate) continue\n for (const column of referencedColumns(predicate.ast)) {\n if (!columnNames.includes(column)) {\n ctx.addIssue({\n code: 'custom',\n message: `policy references unknown column '${column}'`,\n path: ['policies', kind],\n })\n }\n }\n walkPredicate(predicate.ast, (node) => {\n if (node.kind !== 'compare') return\n const issue = comparisonTypeIssue(node.left, node.right, columns)\n if (issue) ctx.addIssue({ code: 'custom', message: issue, path: ['policies', kind] })\n })\n }\n}\n\n/**\n * A comparison that can never type-check in Postgres fails at load, not at\n * CREATE POLICY. Claims are exempt — the compiler casts them to the column's\n * declared type — and NULL literals compile to IS [NOT] NULL.\n */\nfunction comparisonTypeIssue(\n left: Operand,\n right: Operand,\n columns: NonNullable<TableFile['columns']>,\n): string | null {\n const groupOf = (operand: Operand): string | null =>\n operand.kind === 'column' ? (columns[operand.name] ? TYPE_GROUPS[columns[operand.name]!.type] : null) : null\n\n if (left.kind === 'column' && right.kind === 'column') {\n const leftGroup = groupOf(left)\n const rightGroup = groupOf(right)\n if (leftGroup && rightGroup && leftGroup !== rightGroup) {\n return `policy compares '${left.name}' (${columns[left.name]!.type}) with '${right.name}' (${columns[right.name]!.type}) — incomparable types`\n }\n return null\n }\n\n const column = left.kind === 'column' ? left : right.kind === 'column' ? right : null\n const literal = left.kind === 'literal' ? left : right.kind === 'literal' ? right : null\n if (!column || !literal || literal.value === null) return null\n const columnGroup = groupOf(column)\n if (!columnGroup) return null\n // Quoted literals are unknown-typed and coerce through the column's input\n // function, whose grammar is richer than any client-side mirror ('+1',\n // '.5', 'NaN', PG16 digit separators, uuid brace forms, boolean prefixes).\n // A malformed value fails loudly at apply — never falsely rejected here.\n if (typeof literal.value === 'string') return null\n const literalGroup = typeof literal.value === 'number' ? 'numeric' : 'boolean'\n if (literalGroup !== columnGroup) {\n return `policy compares '${column.name}' (${columns[column.name]!.type}) with a ${typeof literal.value} literal — incomparable types`\n }\n return null\n}\n","import type { ColumnType } from '../schema/columns.js'\n\n/** Definition-surface aliases → Postgres type names as drizzle-kit snapshots them. */\nconst SQL_TYPE_NAMES: Readonly<Partial<Record<ColumnType, string>>> = {\n double: 'double precision',\n timestamptz: 'timestamp with time zone',\n}\n\nexport const sqlTypeName = (type: ColumnType): string => SQL_TYPE_NAMES[type] ?? type\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n date,\n doublePrecision,\n integer,\n jsonb,\n numeric,\n text,\n timestamp,\n uuid,\n} from 'drizzle-orm/pg-core'\nimport { isFunctionDefault, type ColumnDefinition, type ColumnType } from '../schema/columns.js'\n\ntype ColumnFactory = (name: string) => ColumnBuilder\n\ninterface ColumnBuilder {\n primaryKey(): ColumnBuilder\n notNull(): ColumnBuilder\n unique(): ColumnBuilder\n default(value: unknown): ColumnBuilder\n}\n\nconst FACTORIES: Readonly<Record<ColumnType, ColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\n // Mode 'bigint' keeps int8 lossless — mode 'number' silently rounds past\n // 2^53. The read executor serializes BigInt to string for JSON.\n bigint: (name) => bigint(name, { mode: 'bigint' }),\n numeric: (name) => numeric(name),\n double: (name) => doublePrecision(name),\n boolean: (name) => boolean(name),\n timestamptz: (name) => timestamp(name, { withTimezone: true }),\n date: (name) => date(name),\n jsonb: (name) => jsonb(name),\n}\n\nexport function buildColumn(name: string, definition: ColumnDefinition): unknown {\n let column = FACTORIES[definition.type](name)\n if (definition.primary_key) column = column.primaryKey()\n if (definition.nullable === false && !definition.primary_key) column = column.notNull()\n if (definition.unique && !definition.primary_key) column = column.unique()\n if (definition.default !== undefined) {\n const value = definition.default\n // Only the schema's exact function allowlist becomes raw SQL — a text\n // literal that happens to end in parentheses is data, never code.\n column = column.default(\n typeof value === 'string' && isFunctionDefault(value, definition.type) ? sql.raw(value) : value,\n )\n }\n return column\n}\n","import type { ColumnType } from '../schema/columns.js'\nimport type { CompareOp, Operand, Predicate } from '../predicate/ast.js'\nimport { sqlTypeName } from '../engine/types.js'\nimport { capabilityExpression, claimExpression, quoteIdentifier, quoteLiteral } from './sql.js'\n\nconst SQL_COMPARE_OPS: Readonly<Record<CompareOp, string>> = {\n '=': '=',\n '!=': '<>',\n '<': '<',\n '<=': '<=',\n '>': '>',\n '>=': '>=',\n}\n\n/** Column name → declared type, so claim comparisons can cast to the column's side. */\nexport type PredicateColumnTypes = Readonly<Record<string, ColumnType>>\n\nfunction compileOperand(operand: Operand, other: Operand, columnTypes?: PredicateColumnTypes): string {\n if (operand.kind === 'column') return quoteIdentifier(operand.name)\n if (operand.kind === 'claim') {\n const expression = claimExpression(operand.key)\n // Claims extract as text; comparing against a typed column (uuid = text\n // has no operator) needs the claim cast to the column's declared type. A\n // NULL claim stays NULL through the cast, so the policy still fails closed.\n const columnType = other.kind === 'column' ? columnTypes?.[other.name] : undefined\n return columnType && columnType !== 'text' ? `(${expression})::${sqlTypeName(columnType)}` : expression\n }\n const { value } = operand\n if (value === null) return 'NULL'\n if (typeof value === 'string') return quoteLiteral(value)\n return String(value)\n}\n\nfunction compileComparison(op: CompareOp, left: Operand, right: Operand, columnTypes?: PredicateColumnTypes): string {\n const nullSide = left.kind === 'literal' && left.value === null ? right : right.kind === 'literal' && right.value === null ? left : null\n if (nullSide && (op === '=' || op === '!=')) {\n return `${compileOperand(nullSide, nullSide, columnTypes)} IS${op === '!=' ? ' NOT' : ''} NULL`\n }\n return `${compileOperand(left, right, columnTypes)} ${SQL_COMPARE_OPS[op]} ${compileOperand(right, left, columnTypes)}`\n}\n\n/** Predicate AST → a parenthesized SQL boolean expression. Never interpolates raw policy text. */\nexport function compilePredicate(predicate: Predicate, columnTypes?: PredicateColumnTypes): string {\n switch (predicate.kind) {\n case 'and':\n case 'or': {\n const joined = predicate.operands.map((operand) => compilePredicate(operand, columnTypes)).join(` ${predicate.kind.toUpperCase()} `)\n return `(${joined})`\n }\n case 'not':\n return `(NOT ${compilePredicate(predicate.operand, columnTypes)})`\n case 'compare':\n return `(${compileComparison(predicate.op, predicate.left, predicate.right, columnTypes)})`\n case 'capability':\n return `(${capabilityExpression(predicate.key)})`\n }\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport { compilePredicate } from '../compiler/predicates.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { policyName as derivePolicyName, type TableFile } from '../schema/table.js'\n\nexport const CONSUMER_TABLE_PRIVILEGES = ['SELECT', 'INSERT', 'UPDATE', 'DELETE'] as const\n\n/**\n * Policy names we own per table. `write` is the legacy single-policy name —\n * dropped on every apply so pre-split schemas converge.\n */\nconst POLICY_SUFFIXES = ['read', 'insert', 'update', 'delete', 'write'] as const\n\n/**\n * The security statements the kit never sees — FORCE row security (so\n * policies bind the table owner too), the row policies themselves, and the\n * grants that let the Data API's consumer role reach the namespace.\n *\n * Policies deliberately bypass drizzle-kit's diff: its API resolves\n * create+drop pairs interactively (fatal in a service), and they are cheap\n * and fully determined by the definition — so every apply drops and\n * recreates them. Writes compile to command-scoped policies, never FOR ALL:\n * permissive policies OR together, so an all-commands policy would let\n * write-capable callers SELECT rows the read policy hides.\n */\nexport function securityStatements(definition: NamespaceDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n const tables = columnTables(definition)\n\n const force = tables.map(\n (table) => `ALTER TABLE ${schema}.${quoteIdentifier(table.table)} FORCE ROW LEVEL SECURITY`,\n )\n const policies = tables.flatMap((table) => policyStatements(schema, table))\n const grants = tables.map(\n (table) =>\n `GRANT ${CONSUMER_TABLE_PRIVILEGES.join(', ')} ON ${schema}.${quoteIdentifier(table.table)} TO ${role}`,\n )\n return [...force, ...policies, `GRANT USAGE ON SCHEMA ${schema} TO ${role}`, ...grants]\n}\n\n/**\n * Drop every owned policy on the given (already existing) tables. Runs before\n * hints and DDL so a column referenced by an installed policy can be cast or\n * dropped — Postgres refuses to alter a column a live policy depends on.\n */\nexport function policyDropStatements(schemaName: string, tables: readonly string[]): string[] {\n const schema = quoteIdentifier(schemaName)\n return tables.flatMap((table) =>\n POLICY_SUFFIXES.map(\n (suffix) => `DROP POLICY IF EXISTS ${quoteIdentifier(derivePolicyName(table, suffix))} ON ${schema}.${quoteIdentifier(table)}`,\n ),\n )\n}\n\nfunction policyStatements(schema: string, table: TableFile): string[] {\n const qualified = `${schema}.${quoteIdentifier(table.table)}`\n const policyName = (suffix: string) => quoteIdentifier(derivePolicyName(table.table, suffix))\n const statements = POLICY_SUFFIXES.map((suffix) => `DROP POLICY IF EXISTS ${policyName(suffix)} ON ${qualified}`)\n const columnTypes = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.type]),\n )\n\n const read = table.policies?.read\n if (read) {\n statements.push(`CREATE POLICY ${policyName('read')} ON ${qualified} FOR SELECT USING (${compilePredicate(read.ast, columnTypes)})`)\n }\n const write = table.policies?.write\n if (write) {\n const predicate = compilePredicate(write.ast, columnTypes)\n statements.push(`CREATE POLICY ${policyName('insert')} ON ${qualified} FOR INSERT WITH CHECK (${predicate})`)\n statements.push(\n `CREATE POLICY ${policyName('update')} ON ${qualified} FOR UPDATE USING (${predicate}) WITH CHECK (${predicate})`,\n )\n statements.push(`CREATE POLICY ${policyName('delete')} ON ${qualified} FOR DELETE USING (${predicate})`)\n }\n return statements\n}\n\nexport const columnTables = (definition: NamespaceDefinition): TableFile[] =>\n definition.tables.filter((table) => !table.source)\n","import { foreignKey, index, pgSchema, uniqueIndex, type PgTableWithColumns } from 'drizzle-orm/pg-core'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { isQualifiedReference } from '../schema/identifiers.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport { buildColumn } from './columns.js'\nimport { columnTables } from './security.js'\n\nexport interface DrizzleEntities {\n /** The in-memory schema bag drizzle-kit snapshots (`generateDrizzleJson(imports)`). */\n readonly imports: Record<string, unknown>\n /** Tables by definition name — the typed handles query execution uses. */\n readonly tables: Record<string, PgTableWithColumns<never>>\n readonly schemaName: string\n}\n\n/** Table names share the imports bag with the schema entity — keep the schema key un-collidable ('$' can't appear in an identifier). */\nconst SCHEMA_IMPORT_KEY = '$schema'\n\n/**\n * Definitions → runtime Drizzle entities. Tables build in dependency order so\n * enforced links can reference their target's built column; policies attach in\n * the table's extras with predicates compiled from the parsed AST — raw policy\n * text never reaches SQL. Tables without policies stay RLS-enabled: default deny.\n */\nexport function buildDrizzleEntities(definition: NamespaceDefinition): DrizzleEntities {\n const schemaName = ormSchemaName(definition.namespace)\n const schema = pgSchema(schemaName)\n const imports: Record<string, unknown> = { [SCHEMA_IMPORT_KEY]: schema }\n const tables: Record<string, PgTableWithColumns<never>> = {}\n const built = new Map<string, Record<string, unknown>>()\n\n for (const table of sortByEnforcedLinks(columnTables(definition))) {\n const drizzleTable = buildTable(schema, table, built)\n built.set(table.table, drizzleTable as Record<string, unknown>)\n imports[table.table] = drizzleTable\n // enableRLS() returns Omit<..., 'enableRLS'>, which no longer overlaps\n // the columns generic — the double cast is the drizzle-typed escape hatch.\n tables[table.table] = drizzleTable as unknown as PgTableWithColumns<never>\n }\n return { imports, tables, schemaName }\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: TableFile,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n const columns = Object.fromEntries(\n Object.entries(table.columns ?? {}).map(([name, column]) => [name, buildColumn(name, column)]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildIndexes(table, self),\n ...buildForeignKeys(table, self, built),\n ])\n // Every table is RLS-enabled; the policies themselves are emitted by the\n // security pass (never through the kit diff — see security.ts).\n return drizzleTable.enableRLS()\n}\n\nfunction buildIndexes(table: TableFile, self: Record<string, unknown>) {\n return (table.indexes ?? []).map((definition) => {\n const name = indexName(table.table, definition)\n const factory = definition.unique ? uniqueIndex(name) : index(name)\n const columns = definition.columns.map((column) => self[column])\n return factory.on(...(columns as [never, ...never[]]))\n })\n}\n\nfunction buildForeignKeys(\n table: TableFile,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n) {\n return Object.entries(table.links ?? {})\n .filter(([, link]) => link.enforce)\n .map(([name, link]) => {\n // A self-referential link (parent_id hierarchy) resolves against the\n // table's own columns — it is never in `built` while being built.\n const target = link.to === table.table ? self : built.get(link.to)\n const targetColumn = target && findPrimaryKeyColumn(target)\n if (!target || !targetColumn) {\n throw new OrmDefinitionError(`enforced link '${name}' on '${table.table}' has no built target '${link.to}'`)\n }\n return foreignKey({\n name: foreignKeyName(table.table, name),\n columns: [self[link.on]] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n })\n}\n\nfunction findPrimaryKeyColumn(target: Record<string, unknown>): unknown {\n const columns = Object.values(target).filter(\n (value) => value !== null && typeof value === 'object' && 'primary' in (value as object),\n )\n return columns.find((column) => (column as { primary: boolean }).primary)\n}\n\n/** Targets of enforced links build first; cycles are a definition error. */\nfunction sortByEnforcedLinks(tables: readonly TableFile[]): TableFile[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: TableFile[] = []\n const placed = new Set<string>()\n\n while (remaining.size > 0) {\n const ready = [...remaining.values()].filter((table) =>\n enforcedTargets(table).every((target) => placed.has(target) || !remaining.has(target)),\n )\n if (ready.length === 0) {\n throw new OrmDefinitionError(`enforced links form a cycle among: ${[...remaining.keys()].join(', ')}`)\n }\n for (const table of ready) {\n sorted.push(table)\n placed.add(table.table)\n remaining.delete(table.table)\n }\n }\n return sorted\n}\n\nconst enforcedTargets = (table: TableFile): string[] =>\n Object.values(table.links ?? {})\n // A self-target is not an ordering dependency — the FK builds inline.\n .filter((link) => link.enforce && !isQualifiedReference(link.to) && link.to !== table.table)\n .map((link) => link.to)\n","import { generateDrizzleJson, generateMigration, upPgSnapshot } from 'drizzle-kit/api'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport { castParts } from '../schema/columns.js'\nimport { sqlTypeName } from './types.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { buildDrizzleEntities } from './tables.js'\nimport { columnTables } from './security.js'\n\n/** drizzle-kit's serialized schema — the diff/replay artifact the registry stores. */\nexport type NamespaceSnapshot = ReturnType<typeof generateDrizzleJson>\n\ninterface SnapshotColumn {\n name: string\n type: string\n [key: string]: unknown\n}\n\ninterface SnapshotTable {\n name: string\n schema: string\n columns: Record<string, SnapshotColumn>\n [key: string]: unknown\n}\n\nexport function generateSnapshot(definition: NamespaceDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntities(definition)\n return generateDrizzleJson(imports, previousId, [schemaName])\n}\n\nexport const emptySnapshot = (namespace: string): NamespaceSnapshot =>\n generateDrizzleJson({}, undefined, [ormSchemaName(namespace)])\n\nconst CURRENT_SNAPSHOT_VERSION = (generateDrizzleJson({}) as { version: string }).version\n\n/**\n * Persisted snapshots (registry version rows, committed migrations/meta)\n * outlive drizzle-kit upgrades. `upPgSnapshot` migrates older snapshot\n * formats to the kit's current one; a snapshot that still isn't current\n * after upgrading came from a NEWER kit than this one — fail loudly rather\n * than let the diff silently misread it.\n */\nexport function normalizeSnapshot(snapshot: NamespaceSnapshot): NamespaceSnapshot {\n const upgraded = upPgSnapshot(snapshot as Record<string, unknown>) as NamespaceSnapshot\n const version = (upgraded as { version?: unknown }).version\n if (version !== CURRENT_SNAPSHOT_VERSION) {\n throw new OrmDefinitionError(\n `snapshot format '${String(version)}' is not supported by this drizzle-kit (expected '${CURRENT_SNAPSHOT_VERSION}') — upgrade @sequenceholdings/orm`,\n )\n }\n return upgraded\n}\n\nexport function diffStatements(previous: NamespaceSnapshot, current: NamespaceSnapshot): Promise<string[]> {\n assertUnambiguousDiff(previous, current)\n return generateMigration(previous as never, current as never)\n}\n\n/**\n * drizzle-kit resolves a simultaneous add + drop by PROMPTING (\"did you\n * rename X to Y?\") — interactive hanji UI that hangs a terminal and throws\n * an opaque TTY error everywhere else. Renames are declared in the YAML\n * (`renamed_from`, applied as hints before the diff), so any add+drop pair\n * reaching the kit is either an undeclared rename or two changes bundled\n * into one — refuse both with an actionable message.\n */\nfunction assertUnambiguousDiff(previous: NamespaceSnapshot, current: NamespaceSnapshot): void {\n const previousTables = tablesOf(previous)\n const currentTables = tablesOf(current)\n\n const removedTables = [...previousTables.keys()].filter((name) => !currentTables.has(name))\n const addedTables = [...currentTables.keys()].filter((name) => !previousTables.has(name))\n if (removedTables.length > 0 && addedTables.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff: table(s) added (${addedTables.join(', ')}) and removed (${removedTables.join(', ')}) in the same change — ship the add and the drop as separate changes`,\n )\n }\n\n for (const [name, previousColumns] of previousTables) {\n const currentColumns = currentTables.get(name)\n if (!currentColumns) continue\n const removed = [...previousColumns].filter((column) => !currentColumns.has(column))\n const added = [...currentColumns].filter((column) => !previousColumns.has(column))\n if (removed.length > 0 && added.length > 0) {\n throw new OrmDefinitionError(\n `ambiguous diff on '${name}': column(s) added (${added.join(', ')}) and removed (${removed.join(', ')}) in the same change — declare \\`renamed_from\\` for a rename, or ship the add and the drop as separate changes`,\n )\n }\n }\n}\n\nfunction tablesOf(snapshot: NamespaceSnapshot): Map<string, Set<string>> {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return new Map(\n Object.values(tables).map((table) => [`${table.schema}.${table.name}`, new Set(Object.keys(table.columns))]),\n )\n}\n\nexport interface MigrationHints {\n /** ALTER RENAME / ALTER TYPE USING statements to run before the kit diff. */\n readonly statements: string[]\n /** Previous snapshot rewritten so the kit diff never sees the rename/cast. */\n readonly adjusted: NamespaceSnapshot\n}\n\n/**\n * Renames and casts are declared in the YAML, never inferred: we emit the\n * statement ourselves and rewrite the previous snapshot to match, so\n * drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service).\n */\nexport function applyMigrationHints(previous: NamespaceSnapshot, definition: NamespaceDefinition): MigrationHints {\n const adjusted = structuredClone(previous) as NamespaceSnapshot\n const statements: string[] = []\n const schemaName = ormSchemaName(definition.namespace)\n const qualified = (table: string) => `${quoteIdentifier(schemaName)}.${quoteIdentifier(table)}`\n\n for (const table of columnTables(definition)) {\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.renamed_from) {\n const previousColumn = snapshotTable.columns[column.renamed_from]\n if (previousColumn && snapshotTable.columns[name]) {\n // Both live: silently ignoring the hint would hand drizzle-kit the\n // source column as a plain drop — data loss the declaration was\n // meant to prevent.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but both columns exist in the previous schema — a rename cannot overwrite a live column`,\n )\n }\n if (previousColumn) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} RENAME COLUMN ${quoteIdentifier(column.renamed_from)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamed_from]\n snapshotTable.columns[name] = { ...previousColumn, name }\n } else if (!snapshotTable.columns[name]) {\n // Neither the declared source nor the destination exists in the\n // previous schema: a typo'd or stale renamed_from. Falling through\n // would hand drizzle-kit a drop/add diff — the exact ambiguity the\n // declaration exists to prevent — so fail with the declaration.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamed_from '${column.renamed_from}', but the previous schema has neither column — check the declared source name`,\n )\n }\n }\n\n const cast = column.cast ? castParts(column.cast) : null\n if (cast) {\n const current = snapshotTable.columns[name]\n const targetType = sqlTypeName(column.type)\n if (current && current.type !== targetType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${targetType} USING ${quoteIdentifier(name)}::${targetType}`,\n )\n current.type = targetType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\nfunction findTable(snapshot: NamespaceSnapshot, schema: string, table: string): SnapshotTable | undefined {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables).find((entry) => entry.schema === schema && entry.name === table)\n}\n\n/** Names of the tables a snapshot holds for one schema — the tables that exist before this plan runs. */\nexport function snapshotTableNames(snapshot: NamespaceSnapshot, schema: string): string[] {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables)\n .filter((entry) => entry.schema === schema)\n .map((entry) => entry.name)\n}\n","import { sql } from 'drizzle-orm'\nimport {\n bigint,\n boolean,\n date,\n doublePrecision,\n foreignKey,\n index,\n integer,\n jsonb,\n numeric,\n pgSchema,\n primaryKey,\n text,\n timestamp,\n uniqueIndex,\n uuid,\n type PgTableWithColumns,\n} from 'drizzle-orm/pg-core'\nimport { generateDrizzleJson } from 'drizzle-kit/api'\nimport type {\n CanonicalColumn,\n CanonicalDefinition,\n CanonicalTable,\n ColumnType,\n} from '../canonical/v2.js'\nimport { quoteIdentifier } from '../compiler/sql.js'\nimport { ormSchemaName } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { castParts, isFunctionDefault } from '../schema/columns.js'\nimport { foreignKeyName, indexName } from '../schema/table.js'\nimport type { CompiledStatement, PlannedMigration } from './index.js'\nimport { diffStatements, emptySnapshot, normalizeSnapshot, type MigrationHints, type NamespaceSnapshot } from './snapshot.js'\nimport type { DrizzleEntities } from './tables.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * Canonical v2 → runtime Drizzle entities + migration plans. This is the v2\n * twin of engine/{tables,columns}.ts + the planMigration chain, consuming\n * `CanonicalDefinition` (the frozen canonical/v2.ts contract) instead of the\n * v1 YAML `NamespaceDefinition`. The v1 modules stay untouched — v1 namespaces\n * keep planning through them until they rebase (see migrations/v2.ts).\n *\n * Snapshot-compatibility invariants (the rebase no-op depends on them):\n * - the 10 column types build through the exact same drizzle factories as\n * engine/columns.ts;\n * - tables stay `.enableRLS()` so a converted namespace's snapshot is\n * byte-equivalent to its committed v1 tip (v2 enforces policies in the\n * compiled operations, not in Postgres, but flipping RLS off would mint a\n * spurious `DISABLE ROW LEVEL SECURITY` diff on every rebase);\n * - index / FK names derive through the same schema/table.ts formulas.\n *\n * v2 additions over the v1 engine: pg enums (`defineEnum`) scoped to the\n * namespace schema, composite primary keys, table-level `renamedFrom`, and a\n * plan with NO security/function statements — policies ship inside compiled\n * operations and actions execute on the data plane, so DDL is all that's left.\n */\n\ntype ColumnFactory = (name: string) => ColumnBuilder\n\ninterface ColumnBuilder {\n primaryKey(): ColumnBuilder\n notNull(): ColumnBuilder\n unique(): ColumnBuilder\n default(value: unknown): ColumnBuilder\n}\n\n/** Mirrors engine/columns.ts FACTORIES exactly — one factory per v1 type. */\nconst FACTORIES: Readonly<Record<ColumnType, ColumnFactory>> = {\n uuid: (name) => uuid(name),\n text: (name) => text(name),\n integer: (name) => integer(name),\n // Mode 'bigint' keeps int8 lossless — mode 'number' silently rounds past\n // 2^53. The read executor serializes BigInt to string for JSON.\n bigint: (name) => bigint(name, { mode: 'bigint' }),\n numeric: (name) => numeric(name),\n double: (name) => doublePrecision(name),\n boolean: (name) => boolean(name),\n timestamptz: (name) => timestamp(name, { withTimezone: true }),\n date: (name) => date(name),\n jsonb: (name) => jsonb(name),\n}\n\n/** Enum names share the imports bag with tables — '$' can't appear in an identifier, so the key never collides. */\nconst SCHEMA_IMPORT_KEY = '$schema'\nconst enumImportKey = (name: string): string => `$enum_${name}`\n\ntype BuiltEnum = ColumnFactory\n\n/** Tables that own columns (synced `source:` tables reflect their gold source and never build DDL). */\nconst columnTablesV2 = (definition: CanonicalDefinition): CanonicalTable[] =>\n definition.tables.filter((table) => !table.source)\n\n/**\n * Canonical v2 → the in-memory schema bag drizzle-kit snapshots plus typed\n * table handles — the same `DrizzleEntities` shape engine/snapshot.ts consumes.\n */\nexport function buildDrizzleEntitiesV2(definition: CanonicalDefinition): DrizzleEntities {\n const schemaName = ormSchemaName(definition.namespace)\n const schema = pgSchema(schemaName)\n const imports: Record<string, unknown> = { [SCHEMA_IMPORT_KEY]: schema }\n const tables: Record<string, PgTableWithColumns<never>> = {}\n const built = new Map<string, Record<string, unknown>>()\n\n const enums = new Map<string, BuiltEnum>()\n for (const enumDefinition of definition.enums) {\n // canonicalEnumSchema guarantees ≥1 value; the tuple cast restates that.\n const values = enumDefinition.values as [string, ...string[]]\n const builtEnum = schema.enum(enumDefinition.name, values)\n enums.set(enumDefinition.name, builtEnum as unknown as BuiltEnum)\n imports[enumImportKey(enumDefinition.name)] = builtEnum\n }\n\n const byName = new Map(definition.tables.map((table) => [table.table, table]))\n for (const table of sortByEnforcedLinks(columnTablesV2(definition))) {\n const drizzleTable = buildTable(schema, table, built, enums, byName)\n built.set(table.table, drizzleTable as Record<string, unknown>)\n imports[table.table] = drizzleTable\n // enableRLS() returns Omit<..., 'enableRLS'>, which no longer overlaps\n // the columns generic — the double cast is the drizzle-typed escape hatch.\n tables[table.table] = drizzleTable as unknown as PgTableWithColumns<never>\n }\n return { imports, tables, schemaName }\n}\n\n/** drizzle-kit snapshot for a canonical definition — the v2 twin of engine/snapshot.ts generateSnapshot. */\nexport function generateSnapshotV2(definition: CanonicalDefinition, previousId?: string): NamespaceSnapshot {\n const { imports, schemaName } = buildDrizzleEntitiesV2(definition)\n return generateDrizzleJson(imports, previousId, [schemaName])\n}\n\nfunction buildTable(\n schema: ReturnType<typeof pgSchema>,\n table: CanonicalTable,\n built: ReadonlyMap<string, Record<string, unknown>>,\n enums: ReadonlyMap<string, BuiltEnum>,\n byName: ReadonlyMap<string, CanonicalTable>,\n) {\n const primaryKeyColumns = table.primaryKey ?? []\n if (primaryKeyColumns.length === 0) {\n throw new OrmDefinitionError(`table '${table.table}' declares no primaryKey`)\n }\n const columnNames = new Set(table.columns.map((column) => column.columnName))\n for (const name of primaryKeyColumns) {\n if (!columnNames.has(name)) {\n throw new OrmDefinitionError(`primaryKey of '${table.table}' references unknown column '${name}'`)\n }\n }\n const singlePrimaryKey = primaryKeyColumns.length === 1 ? primaryKeyColumns[0] : undefined\n const compositeMembers = new Set(singlePrimaryKey === undefined ? primaryKeyColumns : [])\n\n const columns = Object.fromEntries(\n table.columns.map((column) => [\n column.columnName,\n buildColumnV2({ table: table.table, column, singlePrimaryKey, compositeMembers, enums }),\n ]),\n )\n\n const drizzleTable = schema.table(table.table, columns as never, (self: Record<string, unknown>) => [\n ...buildCompositePrimaryKey(table, primaryKeyColumns, self),\n ...buildIndexes(table, self),\n ...buildForeignKeys(table, self, built, byName),\n ])\n // Tables stay RLS-enabled for snapshot parity with committed v1 tips (see\n // module doc). v2 policy enforcement lives in the compiled operations.\n return drizzleTable.enableRLS()\n}\n\nfunction resolveColumnFactory(\n table: string,\n column: CanonicalColumn,\n enums: ReadonlyMap<string, BuiltEnum>,\n): ColumnFactory {\n if (typeof column.type === 'string') return FACTORIES[column.type]\n const enumFactory = enums.get(column.type.enum)\n if (!enumFactory) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' references undeclared enum '${column.type.enum}'`)\n }\n return enumFactory\n}\n\nfunction buildColumnV2({\n table,\n column,\n singlePrimaryKey,\n compositeMembers,\n enums,\n}: {\n table: string\n column: CanonicalColumn\n singlePrimaryKey: string | undefined\n compositeMembers: ReadonlySet<string>\n enums: ReadonlyMap<string, BuiltEnum>\n}): unknown {\n const factory = resolveColumnFactory(table, column, enums)\n\n let builder = factory(column.columnName)\n const isSinglePrimaryKey = column.columnName === singlePrimaryKey\n if (isSinglePrimaryKey) builder = builder.primaryKey()\n // Mirrors engine/columns.ts: a single-column PK already implies NOT NULL.\n // Composite members are forced NOT NULL — Postgres does it implicitly, so\n // the snapshot must say so too or the next diff would try to relax it.\n if ((column.nullable === false || compositeMembers.has(column.columnName)) && !isSinglePrimaryKey) {\n builder = builder.notNull()\n }\n if (column.unique && !isSinglePrimaryKey) builder = builder.unique()\n\n if (column.defaultFn !== undefined && column.default !== undefined) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' declares both default and defaultFn`)\n }\n if (column.defaultFn !== undefined) {\n // The canonical schema already restricts defaultFn to the two allowlisted\n // functions; this re-checks the function/type pairing exactly as v1 did\n // (gen_random_uuid() → uuid, now() → timestamptz/date). Enum columns take\n // literal defaults only.\n if (typeof column.type !== 'string' || !isFunctionDefault(column.defaultFn, column.type)) {\n throw new OrmDefinitionError(\n `column '${table}.${column.columnName}' declares defaultFn '${column.defaultFn}' which is invalid for its type`,\n )\n }\n builder = builder.default(sql.raw(column.defaultFn))\n } else if (column.default !== undefined && column.default !== null) {\n // Literal defaults only — a text default that happens to end in `()` is\n // data, never code (the defaultFn allowlist is the ONLY raw-SQL path).\n // `default: null` is skipped: DEFAULT NULL is Postgres's own default.\n builder = builder.default(column.default)\n }\n return builder\n}\n\nfunction buildCompositePrimaryKey(table: CanonicalTable, primaryKeyColumns: readonly string[], self: Record<string, unknown>) {\n if (primaryKeyColumns.length < 2) return []\n // `<table>_pkey` matches what Postgres names an unlabeled PRIMARY KEY, so\n // an introspected database converges with the snapshot.\n return [\n primaryKey({\n name: `${table.table}_pkey`,\n columns: primaryKeyColumns.map((column) => self[column]) as [never, ...never[]],\n }),\n ]\n}\n\nfunction buildIndexes(table: CanonicalTable, self: Record<string, unknown>) {\n return table.indexes.map((definition) => {\n for (const column of definition.columns) {\n if (!(column in self)) {\n throw new OrmDefinitionError(`index on '${table.table}' references unknown column '${column}'`)\n }\n }\n const name = indexName(table.table, definition)\n const factory = definition.unique ? uniqueIndex(name) : index(name)\n const columns = definition.columns.map((column) => self[column])\n return factory.on(...(columns as [never, ...never[]]))\n })\n}\n\nfunction buildForeignKeys(\n table: CanonicalTable,\n self: Record<string, unknown>,\n built: ReadonlyMap<string, Record<string, unknown>>,\n byName: ReadonlyMap<string, CanonicalTable>,\n) {\n return table.links\n .filter((link) => link.enforce)\n .map((link) => {\n if (link.kind !== 'toOne' || !link.target) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' must be a toOne link with a namespace-local target`,\n )\n }\n // A self-referential link (parent_id hierarchy) resolves against the\n // table's own columns — it is never in `built` while being built.\n const targetTable = byName.get(link.target)\n const target = link.target === table.table ? self : built.get(link.target)\n if (!targetTable || !target) {\n throw new OrmDefinitionError(`enforced link '${link.name}' on '${table.table}' has no built target '${link.target}'`)\n }\n const referencedColumn = link.references ?? singlePrimaryKeyOf(targetTable)\n if (!referencedColumn) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' targets '${link.target}' whose primary key is composite — declare 'references'`,\n )\n }\n const targetColumn = target[referencedColumn]\n const sourceColumn = self[link.on]\n if (!targetColumn || !sourceColumn) {\n throw new OrmDefinitionError(\n `enforced link '${link.name}' on '${table.table}' references unknown column '${targetColumn ? link.on : referencedColumn}'`,\n )\n }\n return foreignKey({\n name: foreignKeyName(table.table, link.name),\n columns: [sourceColumn] as [never],\n foreignColumns: [targetColumn] as [never],\n })\n })\n}\n\nconst singlePrimaryKeyOf = (table: CanonicalTable): string | undefined =>\n table.primaryKey?.length === 1 ? table.primaryKey[0] : undefined\n\n/** Targets of enforced links build first; cycles are a definition error. Mirrors engine/tables.ts. */\nfunction sortByEnforcedLinks(tables: readonly CanonicalTable[]): CanonicalTable[] {\n const remaining = new Map(tables.map((table) => [table.table, table]))\n const sorted: CanonicalTable[] = []\n const placed = new Set<string>()\n\n while (remaining.size > 0) {\n const ready = [...remaining.values()].filter((table) =>\n enforcedTargets(table).every((target) => placed.has(target) || !remaining.has(target)),\n )\n if (ready.length === 0) {\n throw new OrmDefinitionError(`enforced links form a cycle among: ${[...remaining.keys()].join(', ')}`)\n }\n for (const table of ready) {\n sorted.push(table)\n placed.add(table.table)\n remaining.delete(table.table)\n }\n }\n return sorted\n}\n\nconst enforcedTargets = (table: CanonicalTable): string[] =>\n table.links.flatMap((link) =>\n // A self-target is not an ordering dependency — the FK builds inline.\n link.enforce && link.target !== undefined && link.target !== table.table ? [link.target] : [],\n )\n\n// ---------------------------------------------------------------------------\n// Migration hints (declared renames/casts) — v2 twin of snapshot.ts\n// ---------------------------------------------------------------------------\n\ninterface SnapshotColumn {\n name: string\n type: string\n [key: string]: unknown\n}\n\ninterface SnapshotTable {\n name: string\n schema: string\n columns: Record<string, SnapshotColumn>\n [key: string]: unknown\n}\n\n/**\n * Renames and casts are declared in the canonical definition, never inferred:\n * we emit the statement ourselves and rewrite the previous snapshot to match,\n * so drizzle-kit never faces a create+drop ambiguity (its API resolves those\n * interactively — fatal in a service). Semantics mirror engine/snapshot.ts\n * applyMigrationHints exactly, plus the v2-only table-level `renamedFrom`\n * (applied FIRST, so column hints find the table under its new name).\n *\n * This is a sibling of the v1 function rather than a wrapper: the v1 one is\n * keyed to `NamespaceDefinition`'s record-shaped columns and cannot express\n * table renames or enum-typed cast targets.\n */\nexport function applyMigrationHintsV2(previous: NamespaceSnapshot, definition: CanonicalDefinition): MigrationHints {\n const adjusted = structuredClone(previous) as NamespaceSnapshot\n const statements: string[] = []\n const schemaName = ormSchemaName(definition.namespace)\n const qualified = (table: string) => `${quoteIdentifier(schemaName)}.${quoteIdentifier(table)}`\n const enumsByName = new Map(definition.enums.map((entry) => [entry.name, entry]))\n\n for (const table of columnTablesV2(definition)) {\n if (table.renamedFrom) {\n applyTableRename({ adjusted, schemaName, table, renamedFrom: table.renamedFrom, statements, qualified })\n }\n\n const snapshotTable = findTable(adjusted, schemaName, table.table)\n if (!snapshotTable) continue\n\n for (const column of table.columns) {\n const name = column.columnName\n if (column.renamedFrom) {\n const previousColumn = snapshotTable.columns[column.renamedFrom]\n if (previousColumn && snapshotTable.columns[name]) {\n // Both live: silently ignoring the hint would hand drizzle-kit the\n // source column as a plain drop — data loss the declaration was\n // meant to prevent.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamedFrom '${column.renamedFrom}', but both columns exist in the previous schema — a rename cannot overwrite a live column`,\n )\n }\n if (previousColumn) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} RENAME COLUMN ${quoteIdentifier(column.renamedFrom)} TO ${quoteIdentifier(name)}`,\n )\n delete snapshotTable.columns[column.renamedFrom]\n snapshotTable.columns[name] = { ...previousColumn, name }\n } else if (!snapshotTable.columns[name]) {\n // Neither the declared source nor the destination exists in the\n // previous schema: a typo'd or stale renamedFrom. Falling through\n // would hand drizzle-kit a drop/add diff — the exact ambiguity the\n // declaration exists to prevent — so fail with the declaration.\n throw new OrmDefinitionError(\n `'${table.table}.${name}' declares renamedFrom '${column.renamedFrom}', but the previous schema has neither column — check the declared source name`,\n )\n }\n }\n\n const cast = column.cast ? castParts(column.cast) : null\n if (cast) {\n const current = snapshotTable.columns[name]\n const { snapshotType, sqlType } = castTargetTypes(column, enumsByName, schemaName, table.table)\n if (current && current.type !== snapshotType) {\n statements.push(\n `ALTER TABLE ${qualified(table.table)} ALTER COLUMN ${quoteIdentifier(name)} TYPE ${sqlType} USING ${quoteIdentifier(name)}::${sqlType}`,\n )\n current.type = snapshotType\n }\n }\n }\n }\n return { statements, adjusted }\n}\n\n/**\n * The cast target as drizzle-kit snapshots it vs. as SQL must spell it: enum\n * columns snapshot with the bare enum name (typeSchema is separate), but the\n * ALTER must qualify the type — the plan runs with an empty search_path.\n */\nfunction castTargetTypes(\n column: CanonicalColumn,\n enums: ReadonlyMap<string, { name: string }>,\n schemaName: string,\n table: string,\n): { snapshotType: string; sqlType: string } {\n if (typeof column.type === 'string') {\n const name = sqlTypeName(column.type)\n return { snapshotType: name, sqlType: name }\n }\n const enumName = column.type.enum\n if (!enums.has(enumName)) {\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' casts to undeclared enum '${enumName}'`)\n }\n return { snapshotType: enumName, sqlType: `${quoteIdentifier(schemaName)}.${quoteIdentifier(enumName)}` }\n}\n\nfunction applyTableRename({\n adjusted,\n schemaName,\n table,\n renamedFrom,\n statements,\n qualified,\n}: {\n adjusted: NamespaceSnapshot\n schemaName: string\n table: CanonicalTable\n renamedFrom: string\n statements: string[]\n qualified: (table: string) => string\n}): void {\n const tables = (adjusted as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n const previousEntry = Object.entries(tables).find(\n ([, entry]) => entry.schema === schemaName && entry.name === renamedFrom,\n )\n const currentTable = findTable(adjusted, schemaName, table.table)\n if (previousEntry && currentTable) {\n throw new OrmDefinitionError(\n `'${table.table}' declares renamedFrom '${renamedFrom}', but both tables exist in the previous schema — a rename cannot overwrite a live table`,\n )\n }\n if (!previousEntry) {\n if (currentTable) return // hint already applied in an earlier migration\n throw new OrmDefinitionError(\n `'${table.table}' declares renamedFrom '${renamedFrom}', but the previous schema has neither table — check the declared source name`,\n )\n }\n statements.push(`ALTER TABLE ${qualified(renamedFrom)} RENAME TO ${quoteIdentifier(table.table)}`)\n const [previousKey, previousTable] = previousEntry\n delete tables[previousKey]\n tables[`${schemaName}.${table.table}`] = { ...previousTable, name: table.table }\n}\n\nfunction findTable(snapshot: NamespaceSnapshot, schema: string, table: string): SnapshotTable | undefined {\n const tables = (snapshot as { tables?: Record<string, SnapshotTable> }).tables ?? {}\n return Object.values(tables).find((entry) => entry.schema === schema && entry.name === table)\n}\n\n// ---------------------------------------------------------------------------\n// Plan\n// ---------------------------------------------------------------------------\n\n/**\n * Desired canonical definition + the previously applied snapshot → ordered\n * statements. The v2 twin of engine/index.ts planMigration, reusing its\n * exported internals (normalizeSnapshot/emptySnapshot/diffStatements — the\n * assertUnambiguousDiff backstop rides along inside diffStatements).\n *\n * Deliberately absent relative to v1: policy drops, securityStatements, and\n * action function statements. v2 enforces row policies inside compiled\n * operations (no PG RLS policies) and executes actions on the data plane\n * (no plpgsql functions), so a v2 plan is hints + kit DDL only.\n */\nexport async function planMigrationV2({\n canonical,\n previousSnapshot,\n}: {\n canonical: CanonicalDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(canonical.namespace)\n // Stored snapshots may predate this kit — normalize (and fail loudly on\n // a newer-than-us format) before anything diffs against them.\n const previous = previousSnapshot ? normalizeSnapshot(previousSnapshot) : emptySnapshot(canonical.namespace)\n const hints = applyMigrationHintsV2(previous, canonical)\n const snapshot = generateSnapshotV2(canonical, previousId(previous))\n const ddl = await diffStatements(hints.adjusted, snapshot)\n\n const statements: CompiledStatement[] = [\n ...hints.statements.map((statement) => ({ kind: 'hint' as const, sql: statement })),\n ...ddl.map((statement) => ({ kind: 'ddl' as const, sql: statement.replace(/;\\s*$/, '') })),\n ]\n return { namespace: canonical.namespace, schema, statements, snapshot }\n}\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined => (snapshot as { id?: string }).id\n","import { z } from 'zod'\nimport { CAPABILITY_KEY_PATTERN, CLAIM_KEY_PATTERN } from '../constants.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { actionStatementSources, type ActionDefinition } from '../schema/actions.js'\nimport type { ColumnType } from '../schema/columns.js'\nimport { compilePredicate } from './predicates.js'\nimport { capabilityExpression, claimExpression } from './sql.js'\n\n/**\n * Action definitions → the pure pieces the apply-time function generator and\n * the executor need: a zod schema for the request params, the executes body\n * with `claim()`/`capability()` rewritten to the compiled claims expressions\n * and each `:param` rewritten to its plpgsql argument name, the declared\n * param order, and the compiled `requires` gate. Raw action text never reaches\n * SQL unrewritten.\n */\n\nconst QUOTED_STRING_PATTERN = /'(?:[^']|'')*'/g\n/**\n * One scan, leftmost-wins: a claim/capability call (whose argument is itself a\n * quoted literal) matches before the bare-literal alternative, while a literal\n * that merely CONTAINS call-looking text is consumed whole and left verbatim.\n */\nconst TOKEN_PATTERN =\n /\\bclaim\\(\\s*'((?:[^']|'')*)'\\s*\\)|\\bcapability\\(\\s*'((?:[^']|'')*)'\\s*\\)|'(?:[^']|'')*'|(?<!:):([a-z][a-z0-9_]*)/g\nconst BARE_CALL_PATTERN = /\\b(?:claim|capability)\\s*\\(/\n\n/**\n * Param schemas are a SHAPE contract for the JSON body, never value grammars\n * — values reach Postgres as bind parameters and the column's input function\n * is the authority (a bad uuid/number/date fails there as the caller's 400).\n * Every scalar also accepts its string form so exact bigint/numeric values\n * survive JSON's float bottleneck.\n */\nconst PARAM_SCHEMAS: Readonly<Record<ColumnType, z.ZodType>> = {\n uuid: z.string(),\n text: z.string(),\n integer: z.union([z.number(), z.string()]),\n bigint: z.union([z.number(), z.string()]),\n numeric: z.union([z.number(), z.string()]),\n double: z.union([z.number(), z.string()]),\n boolean: z.union([z.boolean(), z.string()]),\n timestamptz: z.string(),\n date: z.string(),\n jsonb: z.unknown(),\n}\n\nexport function buildActionParamsSchema(action: ActionDefinition): z.ZodType<Record<string, unknown>> {\n const shape: Record<string, z.ZodType> = {}\n const entries = Object.entries(action.params ?? {})\n for (const [name, param] of entries) {\n // Optional → nullish so an explicit JSON null (a nullable FK cleared to\n // NULL) is accepted, not just an omitted key.\n shape[name] = param.optional ? PARAM_SCHEMAS[param.type].nullish() : PARAM_SCHEMAS[param.type]\n }\n return z.strictObject(shape).superRefine((obj, ctx) => {\n // jsonb's z.unknown() treats an absent key as valid, so a REQUIRED jsonb\n // param could be omitted and bound as SQL NULL — enforce presence here\n // (every other required scalar's schema already rejects undefined).\n for (const [name, param] of entries) {\n if (!param.optional && param.type === 'jsonb' && (obj as Record<string, unknown>)[name] === undefined) {\n ctx.addIssue({ code: 'custom', message: 'Required', path: [name] })\n }\n }\n }) as z.ZodType<Record<string, unknown>>\n}\n\n/** Declared param names in signature order — the function's arg order and the executor's positional-call order. */\nexport const actionParamOrder = (action: ActionDefinition): string[] => Object.keys(action.params ?? {})\n\n/** The plpgsql argument name for a declared param — prefixed so it can never collide with a column of the same name inside the executes body. */\nexport const actionParamArg = (name: string): string => `p_${name}`\n\n/**\n * Compile an action's `executes` (one statement or the ordered list) into the\n * statements of its Postgres function body: `claim('x')`/`capability('k')`\n * become the compiled fail-closed claims expressions (the same SQL policies\n * use), and each `:param` becomes its `p_<name>` plpgsql argument — quoted\n * literals pass through verbatim. A call shape outside the grammar (bad quoting,\n * wrong args) fails loudly here; the build also rejects it in `executesIssues`.\n */\nexport function compileActionStatements(\n action: ActionDefinition,\n renderParam: (name: string) => string = actionParamArg,\n): string[] {\n return actionStatementSources(action.executes).map((statement) => compileStatement(statement, renderParam))\n}\n\nfunction compileStatement(sql: string, renderParam: (name: string) => string): string {\n const compiled = sql.replace(TOKEN_PATTERN, (token, claimKey?: string, capabilityKey?: string, paramName?: string) => {\n if (claimKey !== undefined) {\n if (!CLAIM_KEY_PATTERN.test(claimKey)) throw new OrmDefinitionError(`invalid claim key in executes: ${token}`)\n return claimExpression(claimKey)\n }\n if (capabilityKey !== undefined) {\n if (!CAPABILITY_KEY_PATTERN.test(capabilityKey)) {\n throw new OrmDefinitionError(`invalid capability key in executes: ${token}`)\n }\n return capabilityExpression(capabilityKey)\n }\n if (paramName !== undefined) return renderParam(paramName)\n return token\n })\n\n // Literals are masked first so text inside them stays inert; a surviving\n // call shape is malformed (valid calls were rewritten away).\n if (BARE_CALL_PATTERN.test(compiled.replace(QUOTED_STRING_PATTERN, \"''\"))) {\n throw new OrmDefinitionError('executes contains a claim()/capability() call outside the grammar')\n }\n return compiled\n}\n\n/** Compiled `requires` gate — a SQL boolean over the transaction claims, or null when unguarded. */\nexport function compileActionRequires(action: ActionDefinition): string | null {\n return action.requires ? compilePredicate(action.requires.ast) : null\n}\n\n/** Capability keys referenced across the executes statements (same scan the rewrite uses). */\nexport function referencedExecuteCapabilities(action: ActionDefinition): string[] {\n const keys: string[] = []\n for (const statement of actionStatementSources(action.executes)) {\n for (const match of statement.matchAll(TOKEN_PATTERN)) {\n if (match[2] !== undefined) keys.push(match[2])\n }\n }\n return keys\n}\n","import { consumerRoleName, ormSchemaName } from '../constants.js'\nimport {\n actionParamArg,\n actionParamOrder,\n compileActionRequires,\n compileActionStatements,\n} from '../compiler/actions.js'\nimport { quoteIdentifier, quoteLiteral } from '../compiler/sql.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { ActionDefinition, ValidatesEntry } from '../schema/actions.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { sqlTypeName } from './types.js'\n\n/**\n * SQLSTATEs the action function raises for the two application-level denials\n * that Postgres has no native code for. Custom 5-char classes (unused by\n * Postgres) so the executor maps them precisely: requires → 403, validates →\n * 422. RLS `WITH CHECK`, constraints, and bad values keep their native codes.\n */\nexport const ACTION_REQUIRES_DENIED_SQLSTATE = 'ORMRQ'\nexport const ACTION_VALIDATES_FAILED_SQLSTATE = 'ORMVL'\n\n/** Internal function name for a declared action — the `action_` prefix is what the reconcile sweep drops. */\nexport const actionFunctionName = (actionName: string): string => `action_${actionName}`\n\n/**\n * A returns action's final statement, re-projected into the declared `returns`\n * order by column name. `RETURN QUERY` binds the row's columns to the RETURNS\n * TABLE out-params positionally, so trusting the author's RETURNING order would\n * mislabel columns; wrapping in a CTE and selecting the declared names binds by\n * name instead — order-independent, and works with an explicit RETURNING list or\n * `RETURNING *`. PREPARE runs this same form so a declared column the RETURNING\n * doesn't produce fails the apply.\n */\nfunction returnProjection(returns: NonNullable<ActionDefinition['returns']>, lastStatement: string): string {\n const projection = Object.keys(returns).map(quoteIdentifier).join(', ')\n return `WITH orm_returning AS (${lastStatement}) SELECT ${projection} FROM orm_returning`\n}\n\ninterface NamedAction {\n readonly name: string\n readonly action: ActionDefinition\n}\n\nconst allActions = (definition: NamespaceDefinition): NamedAction[] =>\n definition.tables\n .flatMap((table) => Object.entries(table.actions ?? {}).map(([name, action]) => ({ name, action })))\n .sort((a, b) => a.name.localeCompare(b.name))\n\n/**\n * Every declared action becomes a `SECURITY INVOKER` Postgres function, so the\n * apply-time `CREATE FUNCTION` is where Postgres validates the SQL (with\n * `check_function_bodies` on, a bad column/table reference fails the apply and\n * the action never goes live) and the invoke path is a single `SELECT fn(...)`\n * under the consumer role — no client-side statement rewriting at call time.\n *\n * Actions carry no data and are absent from the drizzle snapshot, so instead\n * of diffing them we reconcile: a leading sweep drops every `action_*` function\n * in the schema (clearing removed/renamed/retyped ones — a signature change\n * can't `CREATE OR REPLACE`), then each current action is created fresh. Runs\n * last in the plan because the bodies reference tables the earlier DDL creates.\n */\nexport function actionFunctionStatements(definition: NamespaceDefinition): string[] {\n const schema = ormSchemaName(definition.namespace)\n return [dropAllActionFunctions(schema), ...allActions(definition).flatMap(({ name, action }) => createActionFunction(definition, name, action))]\n}\n\n/**\n * PREPARE each action's executes at apply so Postgres parses and plans it\n * against the live schema — catching unknown columns/tables/types that a\n * plpgsql function body does NOT check at CREATE (it defers to first invoke).\n * A failed PREPARE aborts the apply, so a broken action never goes live. Runs\n * on the migration connection with the namespace on search_path; the prepared\n * statements die with that connection, so no DEALLOCATE is needed.\n */\nexport function actionPrepareChecks(definition: NamespaceDefinition): string[] {\n const actions = allActions(definition)\n if (actions.length === 0) return []\n const statements = [`SET LOCAL search_path TO ${quoteIdentifier(ormSchemaName(definition.namespace))}`]\n for (const { name, action } of actions) {\n const order = actionParamOrder(action)\n const signature = order.length > 0 ? ` (${order.map((param) => sqlTypeName(action.params![param]!.type)).join(', ')})` : ''\n const compiled = compileActionStatements(action, (param) => `$${order.indexOf(param) + 1}`)\n compiled.forEach((sql, index) => {\n // The last statement of a returns action is prepared through the same\n // re-projection the function uses, so a declared column its RETURNING\n // omits fails here at apply, not at first invoke.\n const checked = action.returns && index === compiled.length - 1 ? returnProjection(action.returns, sql) : sql\n statements.push(`PREPARE ${quoteIdentifier(`orm_check_${name}_${index}`)}${signature} AS ${checked}`)\n })\n }\n return statements\n}\n\n/**\n * Drop every `action_*` function in the namespace schema before recreating the\n * current set. The schema holds only ORM-created objects, so the prefix match\n * is exact enough; `\\_` escapes the underscore so it can't widen to `actionX`.\n */\nfunction dropAllActionFunctions(schema: string): string {\n return `DO $orm_reconcile_actions$\nDECLARE\n r record;\nBEGIN\n FOR r IN\n SELECT p.oid::regprocedure AS sig\n FROM pg_catalog.pg_proc p\n JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\n WHERE n.nspname = ${quoteLiteral(schema)} AND p.proname LIKE 'action\\\\_%'\n LOOP\n EXECUTE 'DROP FUNCTION ' || r.sig;\n END LOOP;\nEND\n$orm_reconcile_actions$`\n}\n\nfunction createActionFunction(definition: NamespaceDefinition, name: string, action: ActionDefinition): string[] {\n const schema = quoteIdentifier(ormSchemaName(definition.namespace))\n const fn = `${schema}.${quoteIdentifier(actionFunctionName(name))}`\n const order = actionParamOrder(action)\n const signature = order\n .map((paramName) => `${quoteIdentifier(actionParamArg(paramName))} ${sqlTypeName(action.params![paramName]!.type)}`)\n .join(', ')\n const argTypes = order.map((paramName) => sqlTypeName(action.params![paramName]!.type)).join(', ')\n const role = quoteIdentifier(consumerRoleName(definition.namespace))\n\n // The executes statements run in order; the last one carries the result —\n // its RETURNING for a returns action, its ROW_COUNT for a count action.\n const statements = compileActionStatements(action)\n const last = statements[statements.length - 1] as string\n const leading = statements.slice(0, -1).map((statement) => ` ${statement};`)\n const create = action.returns\n ? // RETURNS TABLE + RETURN QUERY over the declared-order re-projection.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS TABLE(${Object.entries(action.returns)\n .map(([column, type]) => `${quoteIdentifier(column)} ${sqlTypeName(type)}`)\n .join(', ')})\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\n-- RETURNS TABLE names OUT params (id, …) that collide with the re-projection's\n-- columns; resolve unqualified names to the column.\n#variable_conflict use_column\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` RETURN QUERY ${returnProjection(action.returns, last)};`].filter(Boolean).join('\\n')}\nEND\n$orm_action$`\n : // No returns: report the last statement's affected count.\n `CREATE FUNCTION ${fn}(${signature})\nRETURNS bigint\nLANGUAGE plpgsql\nSECURITY INVOKER\nSET search_path = ${schema}\nAS $orm_action$\nDECLARE\n v_count bigint;\nBEGIN\n${[functionGuards(definition, name, action), ...leading, ` ${last};`].filter(Boolean).join('\\n')}\n GET DIAGNOSTICS v_count = ROW_COUNT;\n RETURN v_count;\nEND\n$orm_action$`\n\n // Least privilege: only the namespace consumer role (what the executor\n // SET LOCAL ROLEs into) may invoke; the body still runs INVOKER, so RLS\n // and WITH CHECK bind it exactly as a direct statement would.\n return [\n create,\n `REVOKE ALL ON FUNCTION ${fn}(${argTypes}) FROM PUBLIC`,\n `GRANT EXECUTE ON FUNCTION ${fn}(${argTypes}) TO ${role}`,\n ]\n}\n\n/** The requires gate + validates probes that precede the mutation, in that order. */\nfunction functionGuards(definition: NamespaceDefinition, name: string, action: ActionDefinition): string {\n const lines: string[] = []\n\n const requires = compileActionRequires(action)\n if (requires) {\n // An unauthorized caller must be rejected before any validates probe can\n // leak valid-vs-invalid ids.\n lines.push(\n ` IF NOT (${requires}) THEN`,\n ` RAISE EXCEPTION 'action ${name} requires a grant the caller does not hold' USING ERRCODE = ${quoteLiteral(ACTION_REQUIRES_DENIED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n for (const entry of action.validates ?? []) {\n const { schema, table, key } = resolveValidatesTarget(definition, entry)\n const arg = quoteIdentifier(actionParamArg(entry.param))\n // Omitted/null optional params skip the check; FOR SHARE holds the row so\n // the soft link can't dangle before commit. RLS scopes the probe to what\n // the caller may see — the FK-like semantic, no cross-row oracle.\n lines.push(\n ` IF ${arg} IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ${quoteIdentifier(schema)}.${quoteIdentifier(table)} WHERE ${quoteIdentifier(key)} = ${arg} FOR SHARE) THEN`,\n ` RAISE EXCEPTION 'validates failed: no ${entry.table} row for ${entry.param}' USING ERRCODE = ${quoteLiteral(ACTION_VALIDATES_FAILED_SQLSTATE)};`,\n ` END IF;`,\n )\n }\n\n return lines.join('\\n')\n}\n\nfunction resolveValidatesTarget(\n definition: NamespaceDefinition,\n entry: ValidatesEntry,\n): { schema: string; table: string; key: string } {\n if (entry.table.includes('.')) {\n const [schema, table] = entry.table.split('.') as [string, string]\n return { schema, table, key: 'id' }\n }\n const target = definition.tables.find((table) => table.table === entry.table)\n const key = target && Object.entries(target.columns ?? {}).find(([, column]) => column.primary_key)?.[0]\n if (!target || !key) {\n // buildNamespaceDefinition already rejects unknown and synced targets, so\n // this is a belt for a target reachable only through a direct compile.\n throw new OrmDefinitionError(`action validates target '${entry.table}' is not a local table with a primary key`)\n }\n return { schema: ormSchemaName(definition.namespace), table: entry.table, key }\n}\n","import { ormSchemaName } from '../constants.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport { actionFunctionStatements, actionPrepareChecks } from './actions.js'\nimport { policyDropStatements, securityStatements } from './security.js'\nimport {\n applyMigrationHints,\n diffStatements,\n emptySnapshot,\n generateSnapshot,\n normalizeSnapshot,\n snapshotTableNames,\n type NamespaceSnapshot,\n} from './snapshot.js'\n\nexport const STATEMENT_KINDS = ['hint', 'ddl', 'security', 'function'] as const\nexport type StatementKind = (typeof STATEMENT_KINDS)[number]\n\nexport interface CompiledStatement {\n readonly kind: StatementKind\n readonly sql: string\n}\n\nexport interface PlannedMigration {\n readonly namespace: string\n readonly schema: string\n readonly statements: readonly CompiledStatement[]\n /** Snapshot of the desired state — persisted by the registry, previous input to the next plan. */\n readonly snapshot: NamespaceSnapshot\n}\n\n/**\n * Desired definition + the previously applied snapshot → ordered statements.\n * The owned policies on pre-existing tables drop first (Postgres refuses to\n * alter or drop a column a live policy depends on), hints (declared\n * renames/casts) rewrite the previous snapshot, drizzle-kit diffs the\n * remainder, and the owned security statements (FORCE RLS, recreated\n * policies, consumer grants) close every migration.\n */\nexport async function planMigration({\n definition,\n previousSnapshot,\n}: {\n definition: NamespaceDefinition\n previousSnapshot?: NamespaceSnapshot\n}): Promise<PlannedMigration> {\n const schema = ormSchemaName(definition.namespace)\n // Stored snapshots may predate this kit — normalize (and fail loudly on\n // a newer-than-us format) before anything diffs against them.\n const previous = previousSnapshot ? normalizeSnapshot(previousSnapshot) : emptySnapshot(definition.namespace)\n const hints = applyMigrationHints(previous, definition)\n const snapshot = generateSnapshot(definition, previousId(previous))\n const ddl = await diffStatements(hints.adjusted, snapshot)\n // Only tables the previous snapshot holds exist in the database — DROP\n // POLICY IF EXISTS still errors when the table itself is missing.\n const policyDrops = policyDropStatements(schema, snapshotTableNames(previous, schema))\n\n const statements: CompiledStatement[] = [\n ...policyDrops.map((sql) => ({ kind: 'security' as const, sql })),\n ...hints.statements.map((sql) => ({ kind: 'hint' as const, sql })),\n ...ddl.map((sql) => ({ kind: 'ddl' as const, sql: sql.replace(/;\\s*$/, '') })),\n ...securityStatements(definition).map((sql) => ({ kind: 'security' as const, sql })),\n // PREPARE each action's executes first (plpgsql bodies don't check columns\n // at CREATE), then create the functions. Both reference the tables the DDL\n // above creates, so they close the plan.\n ...actionPrepareChecks(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ...actionFunctionStatements(definition).map((sql) => ({ kind: 'function' as const, sql })),\n ]\n return { namespace: definition.namespace, schema, statements, snapshot }\n}\n\n/** Full-create plan (empty previous snapshot) — what `plan` prints and first apply runs. */\nexport const compileNamespace = (definition: NamespaceDefinition): Promise<PlannedMigration> =>\n planMigration({ definition })\n\nconst previousId = (snapshot: NamespaceSnapshot): string | undefined =>\n (snapshot as { id?: string }).id\n\nexport { isOwnedStatement, pendingKitStatements } from './converge.js'\nexport { buildDrizzleEntities } from './tables.js'\nexport type { DrizzleEntities } from './tables.js'\nexport {\n ACTION_REQUIRES_DENIED_SQLSTATE,\n ACTION_VALIDATES_FAILED_SQLSTATE,\n actionFunctionName,\n actionFunctionStatements,\n actionPrepareChecks,\n} from './actions.js'\nexport { securityStatements } from './security.js'\nexport { applyMigrationHints, diffStatements, emptySnapshot, generateSnapshot, normalizeSnapshot } from './snapshot.js'\nexport type { NamespaceSnapshot } from './snapshot.js'\nexport { sqlTypeName } from './types.js'\n","import { referencedExecuteCapabilities } from '../compiler/actions.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { referencedCapabilities } from '../predicate/ast.js'\nimport { validateCapabilityPins, type CustomRolesBlock } from './custom-roles-block.js'\nimport { isQualifiedReference } from './identifiers.js'\nimport type { NamespaceConfig } from './namespace-config.js'\nimport { columnTypeGroup, indexName, type TableFile } from './table.js'\n\n/**\n * The namespace's Custom Roles manifest block — the platform grammar, verbatim\n * (see custom-roles-block.ts). `roles` declares capabilities + roles (grants,\n * inherits); `uses` attaches existing capabilities. Reconciled into the Custom\n * Roles attachment set at apply, so it's grantable and enters claim resolution.\n */\nexport interface NamespaceCapabilities {\n readonly roles: CustomRolesBlock\n readonly uses: readonly string[]\n}\n\nexport interface NamespaceDefinition {\n readonly namespace: string\n readonly description: string | null\n readonly capabilities: NamespaceCapabilities\n readonly tables: readonly TableFile[]\n}\n\nconst EMPTY_CAPABILITIES: NamespaceCapabilities = { roles: { definitions: {}, capabilities: {} }, uses: [] }\n\n/** The capability claim keys the block declares — bare declarations plus every attach. */\nexport function declaredCapabilityKeys(capabilities: NamespaceCapabilities): Set<string> {\n return new Set<string>([...Object.keys(capabilities.roles.capabilities), ...capabilities.uses])\n}\n\nexport interface DefinitionFile {\n readonly file: string\n readonly table: TableFile\n}\n\nexport function buildNamespaceDefinition(\n files: readonly DefinitionFile[],\n config?: NamespaceConfig,\n): NamespaceDefinition {\n if (files.length === 0) throw new OrmDefinitionError('no table definitions found')\n\n const namespace = (files[0] as DefinitionFile).table.namespace\n if (config && config.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${config.namespace}' conflicts with '${namespace}'`, 'namespace.yaml')\n }\n for (const { file, table } of files) {\n if (table.namespace !== namespace) {\n throw new OrmDefinitionError(`namespace '${table.namespace}' conflicts with '${namespace}'`, file)\n }\n }\n\n const seen = new Map<string, string>()\n for (const { file, table } of files) {\n const existing = seen.get(table.table)\n if (existing) throw new OrmDefinitionError(`table '${table.table}' is already defined in ${existing}`, file)\n seen.set(table.table, file)\n }\n\n // Actions are addressed namespace-wide (/actions/<name>) — a name must\n // resolve to exactly one action regardless of which table file declared it.\n const actionsSeen = new Map<string, string>()\n for (const { file, table } of files) {\n for (const name of Object.keys(table.actions ?? {})) {\n const existing = actionsSeen.get(name)\n if (existing) throw new OrmDefinitionError(`action '${name}' is already defined in ${existing}`, file)\n actionsSeen.set(name, file)\n }\n }\n\n const capabilities: NamespaceCapabilities = config?.capabilities\n ? { roles: config.capabilities.roles ?? EMPTY_CAPABILITIES.roles, uses: config.capabilities.uses ?? [] }\n : EMPTY_CAPABILITIES\n const pinIssues = validateCapabilityPins({ uses: capabilities.uses, roles: capabilities.roles })\n if (pinIssues.length > 0) throw new OrmDefinitionError(pinIssues.join('; '), 'namespace.yaml')\n const tables = files.map(({ table }) => table).sort((a, b) => a.table.localeCompare(b.table))\n const byName = new Map(tables.map((table) => [table.table, table]))\n validateLocalLinks(files, byName)\n validateActionValidates(files, byName)\n validateIndexNames(files)\n validateCapabilityRefs(files, declaredCapabilityKeys(capabilities))\n return { namespace, description: config?.description ?? null, capabilities, tables }\n}\n\n/**\n * A `validates: exists('<table>', <param>)` entry only resolves at execute\n * time against a real local table — an unknown target (or a param that can\n * never match the target's primary key) is an action that can never pass,\n * so fail at build like links do. Qualified references stay soft.\n */\nfunction validateActionValidates(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [actionName, action] of Object.entries(table.actions ?? {})) {\n for (const entry of action.validates ?? []) {\n if (entry.table.includes('.')) continue\n const target = byName.get(entry.table)\n if (!target) {\n throw new OrmDefinitionError(`action '${actionName}' validates against unknown table '${entry.table}'`, file)\n }\n if (target.source) {\n // Synced tables reflect their gold source and declare no primary\n // key, so the runtime exists() check has no key to resolve — it\n // would 422 every call. Reject at build rather than fail at run.\n throw new OrmDefinitionError(\n `action '${actionName}' validates against synced table '${entry.table}' — synced tables can't be validates targets`,\n file,\n )\n }\n const paramType = action.params?.[entry.param]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (paramType && targetPrimaryKey && columnTypeGroup(paramType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `action '${actionName}' validates '${entry.param}' (${paramType}) against '${entry.table}' whose primary key is ${targetPrimaryKey.type}`,\n file,\n )\n }\n }\n }\n }\n}\n\n/**\n * Postgres index names are schema-scoped, not table-scoped — two tables in\n * one namespace declaring (or deriving) the same index name would build fine\n * and then fail on the second CREATE INDEX at apply. Reject at load instead.\n */\nfunction validateIndexNames(files: readonly DefinitionFile[]): void {\n // Everything here shares one pg_class relation namespace in the orm schema:\n // tables, declared indexes, and the indexes Postgres creates implicitly for\n // primary-key (`<table>_pkey`) and unique-column (`<table>_<col>_unique`)\n // constraints. Seed them all so any collision fails at load, not at apply.\n const seen = new Map<string, string>()\n const claim = (name: string, label: string, file: string) => {\n const existing = seen.get(name)\n if (existing) {\n throw new OrmDefinitionError(`relation name '${name}' (${label}) collides with ${existing}`, file)\n }\n seen.set(name, `${label} (${file})`)\n }\n\n for (const { file, table } of files) {\n claim(table.table, `table '${table.table}'`, file)\n }\n for (const { file, table } of files) {\n if (table.source) continue\n claim(`${table.table}_pkey`, `implicit primary-key index of '${table.table}'`, file)\n for (const [name, column] of Object.entries(table.columns ?? {})) {\n if (column.unique && !column.primary_key) {\n claim(`${table.table}_${name}_unique`, `implicit unique constraint of '${table.table}.${name}'`, file)\n }\n }\n }\n for (const { file, table } of files) {\n for (const definition of table.indexes ?? []) {\n claim(indexName(table.table, definition), `index on '${table.table}'`, file)\n }\n }\n}\n\nfunction validateLocalLinks(files: readonly DefinitionFile[], byName: ReadonlyMap<string, TableFile>): void {\n for (const { file, table } of files) {\n for (const [name, link] of Object.entries(table.links ?? {})) {\n if (isQualifiedReference(link.to)) continue\n const target = byName.get(link.to)\n if (!target) {\n throw new OrmDefinitionError(`link '${name}' references unknown table '${link.to}'`, file)\n }\n if (link.enforce && target.source) {\n throw new OrmDefinitionError(`link '${name}' cannot enforce a foreign key onto a synced table`, file)\n }\n // Soft links join at query time — a type mismatch with the target's\n // primary key can never match a row, so it fails at load like an\n // enforced one would fail at ALTER. Synced targets reflect their\n // source (no declared pk) and stay unchecked.\n // Group comparability, not exact equality — int4 = int8 joins fine.\n const sourceType = table.columns?.[link.on]?.type\n const targetPrimaryKey = Object.values(target.columns ?? {}).find((column) => column.primary_key)\n if (sourceType && targetPrimaryKey && columnTypeGroup(sourceType) !== columnTypeGroup(targetPrimaryKey.type)) {\n throw new OrmDefinitionError(\n `link '${name}' can never join: '${link.on}' is ${sourceType} but '${link.to}' has a ${targetPrimaryKey.type} primary key`,\n file,\n )\n }\n }\n }\n}\n\n/**\n * A capability reference only resolves at claim time if the namespace DECLARES\n * it — a capability that's neither declared (`capabilities.roles.capabilities`)\n * nor attached (`capabilities.uses`) never enters the attachment set, so it's\n * neither grantable in Custom Roles nor present in any caller's claims. An\n * undeclared reference is a policy that can never pass — fail at build.\n */\nfunction validateCapabilityRefs(files: readonly DefinitionFile[], declared: ReadonlySet<string>): void {\n for (const { file, table } of files) {\n const referenced = [\n ...(table.policies?.read ? referencedCapabilities(table.policies.read.ast) : []),\n ...(table.policies?.write ? referencedCapabilities(table.policies.write.ast) : []),\n ...Object.values(table.actions ?? {}).flatMap((action) => [\n ...(action.requires ? referencedCapabilities(action.requires.ast) : []),\n ...referencedExecuteCapabilities(action),\n ]),\n ]\n for (const key of referenced) {\n if (!declared.has(key)) {\n throw new OrmDefinitionError(\n `capability('${key}') is not declared — add it under capabilities.roles.capabilities or capabilities.uses in namespace.yaml`,\n file,\n )\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { capabilityPinsSchema, customRolesBlockSchema } from './custom-roles-block.js'\nimport { namespaceSchema } from './identifiers.js'\n\n/**\n * The reserved `namespace.yaml` — namespace-level settings beside the table\n * files. `capabilities` is the platform's Custom Roles manifest block, authored\n * exactly as an artifact or managed function authors it:\n * - `capabilities.roles.capabilities` declares namespace-scoped capabilities\n * (published on the namespace's registry scope + pinned at apply),\n * - `capabilities.roles.definitions` declares roles (grants + inherits) that\n * bundle those capabilities,\n * - `capabilities.uses` attaches EXISTING capabilities — `org/<key>` for an\n * org capability (namespaces never create org entities), or a bare `<key>`\n * already published on the namespace scope.\n * Apply feeds this block straight to the shared attachment reconciler, so the\n * capabilities are grantable in Custom Roles and enter claim resolution.\n */\nexport const namespaceConfigSchema = z.strictObject({\n namespace: namespaceSchema,\n description: z.string().optional(),\n capabilities: z\n .strictObject({\n roles: customRolesBlockSchema.optional(),\n uses: capabilityPinsSchema.optional(),\n })\n .optional(),\n})\n\nexport type NamespaceConfig = z.output<typeof namespaceConfigSchema>\n","import { readdir, readFile } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { load as loadYaml } from 'js-yaml'\nimport { z } from 'zod'\nimport {\n DEFINITION_FILE_EXTENSIONS,\n MAX_DEFINITION_FILE_BYTES,\n NAMESPACE_CONFIG_FILENAMES,\n} from './constants.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { computeDefinitionHash } from './hash.js'\nimport { buildNamespaceDefinition, type DefinitionFile, type NamespaceDefinition } from './schema/namespace.js'\nimport { namespaceConfigSchema, type NamespaceConfig } from './schema/namespace-config.js'\nimport { tableFileSchema } from './schema/table.js'\n\nexport interface LoadedNamespace {\n readonly definition: NamespaceDefinition\n readonly contentHash: string\n readonly files: readonly string[]\n}\n\nexport function parseTableFile(file: string, contents: string): DefinitionFile {\n const parsed = tableFileSchema.safeParse(parseYaml(file, contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), file)\n return { file, table: parsed.data }\n}\n\nexport interface DefinitionSource {\n readonly path: string\n readonly contents: string\n}\n\n/**\n * Raw sources → validated definition, splitting the reserved namespace\n * config file from the table files. The one parse path for the loader and\n * the registry, so a local directory and an uploaded bundle can't diverge.\n */\nexport function parseDefinitionSources(sources: readonly DefinitionSource[]): NamespaceDefinition {\n let config: NamespaceConfig | undefined\n const tables: DefinitionFile[] = []\n for (const source of sources) {\n if (NAMESPACE_CONFIG_FILENAMES.has(source.path)) {\n if (config) throw new OrmDefinitionError('duplicate namespace config file', source.path)\n const parsed = namespaceConfigSchema.safeParse(parseYaml(source.path, source.contents))\n if (!parsed.success) throw new OrmDefinitionError(formatIssues(parsed.error), source.path)\n config = parsed.data\n continue\n }\n tables.push(parseTableFile(source.path, source.contents))\n }\n return buildNamespaceDefinition(tables, config)\n}\n\nexport async function loadNamespaceDefinition(dir: string): Promise<LoadedNamespace> {\n const files = await listDefinitionFiles(dir)\n if (files.length === 0) throw new OrmDefinitionError(`no ${DEFINITION_FILE_EXTENSIONS.join('/')} files in ${dir}`)\n\n const sources: DefinitionSource[] = []\n for (const file of files) {\n const contents = await readFile(join(dir, file), 'utf8')\n if (Buffer.byteLength(contents, 'utf8') > MAX_DEFINITION_FILE_BYTES) {\n throw new OrmDefinitionError(`exceeds the maximum definition file size of ${MAX_DEFINITION_FILE_BYTES} bytes`, file)\n }\n sources.push({ path: file, contents })\n }\n\n const definition = parseDefinitionSources(sources)\n return { definition, contentHash: computeDefinitionHash(definition), files }\n}\n\nfunction parseYaml(file: string, contents: string): unknown {\n try {\n return loadYaml(contents)\n } catch (error) {\n throw new OrmDefinitionError(error instanceof Error ? error.message : 'invalid YAML', file)\n }\n}\n\nconst isDefinitionFile = (name: string): boolean =>\n DEFINITION_FILE_EXTENSIONS.some((extension) => extname(name) === extension)\n\nasync function listDefinitionFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true })\n return entries\n .filter((entry) => entry.isFile() && isDefinitionFile(entry.name))\n .map((entry) => entry.name)\n .sort()\n}\n\nfunction formatIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => (issue.path.length > 0 ? `${issue.path.join('.')}: ${issue.message}` : issue.message))\n .join('; ')\n}\n","import type { CompiledStatement } from '../engine/index.js'\n\nexport interface DestructiveStatement {\n readonly sql: string\n readonly reason: string\n}\n\n/** A column type change — `SET DATA TYPE` / `TYPE`. Data-losing in general (numeric→integer rounds, a narrowing text cast truncates). */\nconst TYPE_CHANGE = /\\bALTER\\s+COLUMN\\s+\"?[a-z_][a-z0-9_]*\"?\\s+(?:SET\\s+DATA\\s+)?TYPE\\b/i\n\n/**\n * Statements that lose data if they run. `ddl` statements match the rules\n * below; `security` statements are a drop-and-recreate of policies by design\n * and always safe. Of the `hint` statements (the declared rename/cast\n * rewrites), a RENAME never loses data, but a declared `cast:` is still a type\n * change that can — declaring HOW to convert is not the same as consenting to\n * the data loss, so a cast hint stays gated on `--allow-destructive` too.\n */\nconst RULES: ReadonlyArray<{ pattern: RegExp; reason: string }> = [\n { pattern: /^\\s*DROP\\s+SCHEMA\\b/i, reason: 'drops the namespace schema and everything in it' },\n { pattern: /^\\s*DROP\\s+TABLE\\b/i, reason: 'drops a table and all of its rows' },\n { pattern: /^\\s*TRUNCATE\\b/i, reason: 'deletes every row' },\n { pattern: /\\bDROP\\s+COLUMN\\b/i, reason: 'drops a column and its data' },\n {\n pattern: TYPE_CHANGE,\n reason: \"changes a column type without a declared cast (add `cast: '<column>::<type>'` to make the conversion explicit)\",\n },\n]\n\nexport function classifyDestructive(statements: readonly CompiledStatement[]): DestructiveStatement[] {\n const flagged: DestructiveStatement[] = []\n for (const statement of statements) {\n if (statement.kind === 'ddl') {\n const rule = RULES.find(({ pattern }) => pattern.test(statement.sql))\n if (rule) flagged.push({ sql: statement.sql, reason: rule.reason })\n } else if (statement.kind === 'hint' && TYPE_CHANGE.test(statement.sql)) {\n flagged.push({ sql: statement.sql, reason: 'a declared cast changes a column type and can lose data (numeric→integer rounds, a narrowing cast truncates)' })\n }\n }\n return flagged\n}\n","import { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { z } from 'zod'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\n\n/**\n * The committed migration workspace inside a definitions directory:\n *\n * <dir>/migrations/NNNN_<hash12>.sql reviewable statements\n * <dir>/migrations/meta/NNNN.snapshot.json desired-state snapshot after NNNN\n * <dir>/migrations/meta/journal.json ordered index with checksums\n *\n * `orm diff` appends to it; `orm diff --check` (the CI gate) verifies it\n * matches the definitions with no database and no credentials. Everything\n * here is deterministic from (previous snapshot, definition) so the gate\n * can regenerate and byte-compare.\n */\nexport const MIGRATIONS_DIRNAME = 'migrations'\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\n\nconst journalEntrySchema = z.object({\n ordinal: z.number().int().positive(),\n name: z.string().min(1),\n content_hash: z.string().length(64),\n /** Definitions hash the migration was diffed FROM — null on the first. Replay checks an environment sits at this base. */\n previous_content_hash: z.string().length(64).nullable(),\n checksum: z.string().length(64),\n /** sha256 of the snapshot FILE — the next diff builds on this snapshot, so a hand-edit must fail `--check` too. */\n snapshot_checksum: z.string().length(64),\n destructive: z.boolean(),\n})\n\nconst journalSchema = z.object({\n version: z.literal(1),\n namespace: z.string().min(1),\n entries: z.array(journalEntrySchema),\n})\n\nexport type MigrationJournal = z.infer<typeof journalSchema>\nexport type JournalEntry = z.infer<typeof journalEntrySchema>\n\nexport interface MigrationWorkspace {\n readonly journal: MigrationJournal\n /** Snapshot at the journal tip — the previous input for the next diff. */\n readonly tipSnapshot: NamespaceSnapshot | undefined\n}\n\nexport const emptyJournal = (namespace: string): MigrationJournal => ({ version: 1, namespace, entries: [] })\n\nexport async function readMigrationWorkspace(dir: string, namespace: string): Promise<MigrationWorkspace> {\n const journalPath = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, JOURNAL_FILENAME)\n const raw = await readFile(journalPath, 'utf8').catch(() => null)\n if (raw === null) return { journal: emptyJournal(namespace), tipSnapshot: undefined }\n\n const parsed = journalSchema.safeParse(parseJson(journalPath, raw))\n if (!parsed.success) {\n throw new OrmDefinitionError(`invalid migration journal: ${parsed.error.issues[0]?.message ?? 'unreadable'}`, journalPath)\n }\n if (parsed.data.namespace !== namespace) {\n throw new OrmDefinitionError(\n `migration journal belongs to namespace '${parsed.data.namespace}', definitions are '${namespace}'`,\n journalPath,\n )\n }\n parsed.data.entries.forEach((entry, index) => {\n if (entry.ordinal !== index + 1) {\n throw new OrmDefinitionError(`migration journal entries must be contiguous from 1 (found ${entry.name})`, journalPath)\n }\n })\n\n const tip = parsed.data.entries.at(-1)\n return { journal: parsed.data, tipSnapshot: tip ? await readSnapshot(dir, tip.ordinal) : undefined }\n}\n\nexport async function readSnapshotText(dir: string, ordinal: number): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration snapshot', path)\n })\n}\n\nexport async function readSnapshot(dir: string, ordinal: number): Promise<NamespaceSnapshot> {\n const path = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME, `${pad(ordinal)}.snapshot.json`)\n return parseJson(path, await readSnapshotText(dir, ordinal)) as NamespaceSnapshot\n}\n\nexport async function readMigrationSql(dir: string, entry: JournalEntry): Promise<string> {\n const path = join(dir, MIGRATIONS_DIRNAME, `${entry.name}.sql`)\n return readFile(path, 'utf8').catch(() => {\n throw new OrmDefinitionError('missing migration file', path)\n })\n}\n\nexport const checksumOf = (text: string): string => createHash('sha256').update(text).digest('hex')\n\nexport const migrationName = (ordinal: number, contentHash: string): string => `${pad(ordinal)}_${contentHash.slice(0, 12)}`\n\nexport function renderMigrationSql({\n name,\n namespace,\n contentHash,\n plan,\n}: {\n name: string\n namespace: string\n contentHash: string\n plan: PlannedMigration\n}): string {\n const header = [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${contentHash}`,\n '-- generated by `seq-studio orm diff` — review and commit, do not edit',\n ].join('\\n')\n return [header, ...plan.statements.map((statement) => `${statement.sql};`)].join('\\n\\n') + '\\n'\n}\n\nexport interface WrittenMigration {\n readonly name: string\n readonly ordinal: number\n readonly destructive: boolean\n}\n\nexport async function writeMigration({\n dir,\n workspace,\n plan,\n contentHash,\n destructive,\n}: {\n dir: string\n workspace: MigrationWorkspace\n plan: PlannedMigration\n contentHash: string\n destructive: boolean\n}): Promise<WrittenMigration> {\n const tip = workspace.journal.entries.at(-1)\n const ordinal = (tip?.ordinal ?? 0) + 1\n const name = migrationName(ordinal, contentHash)\n const sql = renderMigrationSql({ name, namespace: workspace.journal.namespace, contentHash, plan })\n\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n const snapshotText = `${JSON.stringify(plan.snapshot, null, 2)}\\n`\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${name}.sql`), sql)\n await writeFile(join(metaDir, `${pad(ordinal)}.snapshot.json`), snapshotText)\n\n const journal: MigrationJournal = {\n ...workspace.journal,\n entries: [\n ...workspace.journal.entries,\n {\n ordinal,\n name,\n content_hash: contentHash,\n previous_content_hash: tip?.content_hash ?? null,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive,\n },\n ],\n }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n return { name, ordinal, destructive }\n}\n\nconst pad = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\nfunction parseJson(path: string, raw: string): unknown {\n try {\n return JSON.parse(raw) as unknown\n } catch {\n throw new OrmDefinitionError('not valid JSON', path)\n }\n}\n","import { planMigration, type CompiledStatement } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport type { LoadedNamespace } from '../loader.js'\nimport {\n MIGRATIONS_DIRNAME,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n renderMigrationSql,\n} from './workspace.js'\n\n/**\n * The reviewed migration a registration carries: replay-only environments\n * (production, banksouth) execute nothing that doesn't match one of these.\n * Statements are recomputed at load and verified to reproduce the committed\n * file byte-for-byte, so the payload can never drift from what review saw.\n */\nexport interface CommittedMigration {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n}\n\n/**\n * Load the workspace tip as a registration payload. Returns null when there\n * is no workspace (dev-loop registrations stay migration-less); throws when\n * a workspace exists but is stale or drifted — a half-true artifact is worse\n * than none.\n */\nexport async function loadCommittedTipMigration(\n dir: string,\n loaded: LoadedNamespace,\n): Promise<CommittedMigration | null> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return null\n\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n }\n}\n\n/**\n * One link in the committed history: a migration's content hash and the hash it\n * was diffed FROM. This is an ancestry record, NOT executable SQL — a\n * registration carries the whole chain so a replay-only environment can prove\n * that its active version is a reviewed ancestor of the target (and thus that a\n * direct catch-up diff is in-lineage) even over migrations that were never\n * registered there (batched deploys, skipped releases). The catch-up apply then\n * runs the engine's own direct diff, never any SQL from this chain.\n */\nexport interface CommittedChainEntry {\n readonly name: string\n readonly contentHash: string\n readonly previousContentHash: string | null\n}\n\n/**\n * The committed hash chain for a definitions directory, oldest-first, taken from\n * the journal (already integrity-checked by `orm validate` / `diff --check`).\n * The tip must match the loaded definitions — a registration carries this so\n * replay-only environments can verify catch-up ancestry without those\n * intervening versions being registered. Empty when there is no workspace.\n */\nexport async function loadCommittedMigrations(dir: string, loaded: LoadedNamespace): Promise<CommittedChainEntry[]> {\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const entries = workspace.journal.entries\n const tip = entries.at(-1)\n if (!tip) return []\n if (tip.content_hash !== loaded.contentHash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/meta/journal.json`,\n )\n }\n return entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n }))\n}\n","import { planMigration } from '../engine/index.js'\nimport { loadNamespaceDefinition } from '../loader.js'\nimport { classifyDestructive } from './classify.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n} from './workspace.js'\n\nexport interface DiffOptions {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * `orm diff` — append the next committed migration for a definitions\n * directory, diffed against the workspace's tip snapshot. `--check` is the\n * CI gate: no database, no credentials — verify checksums, the snapshot\n * chain, that the definitions match the journal tip, and that regenerating\n * the tip reproduces the committed file byte-for-byte.\n */\nexport async function diffCommand({ dir, allowDestructive, check, log }: DiffOptions): Promise<number> {\n const loaded = await loadNamespaceDefinition(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (check) return checkWorkspace({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.contentHash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\"retire columns in two phases (`deprecated: true` first, drop later), declare type changes as `cast:`, or re-run with --allow-destructive to consent\")\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.contentHash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\nasync function checkWorkspace({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>\n workspace: Awaited<ReturnType<typeof readMigrationWorkspace>>\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n if (!tip) {\n log(`no committed migrations for '${loaded.definition.namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.contentHash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigration({ definition: loaded.definition, previousSnapshot })\n const regenerated = renderMigrationSql({\n name: tip.name,\n namespace: loaded.definition.namespace,\n contentHash: loaded.contentHash,\n plan,\n })\n if (regenerated !== (await readMigrationSql(dir, tip))) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n","import {\n canonicalDefinitionSchema,\n normalizeCanonical,\n CANONICAL_FORMAT,\n type CanonicalDefinition,\n} from '../canonical/v2.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { actionStatementSources, type ActionDefinition } from '../schema/actions.js'\nimport { isFunctionDefault, type ColumnDefinition } from '../schema/columns.js'\nimport type { NamespaceDefinition } from '../schema/namespace.js'\nimport type { TableFile } from '../schema/table.js'\n\n/**\n * v1 YAML `NamespaceDefinition` → canonical v2 (`orm migrate-from-yaml`).\n * Lossless where the v2 contract can express it, loud where it can't:\n *\n * - columns keep declaration order (order is meaningful for DDL); the v1\n * `default` splits into literal `default` vs allowlisted `defaultFn`\n * exactly along the isFunctionDefault line the v1 engine used;\n * - the single v1 `primary_key: true` column becomes `primaryKey: [name]`;\n * - policy expressions carry over as their verbatim DSL source strings\n * (re-parsed by the v2 predicate compiler, never the parsed v1 AST);\n * - actions carry over verbatim (multi-statement `executes` lists join on\n * ';\\n' — the boundaries stay recoverable for the compiled-op executor);\n * - the capabilities block passes through untouched (verbatim custom-roles\n * grammar in both formats);\n * - qualified (cross-namespace) link targets have no v2 representation —\n * links are namespace-local in v2 (plan §5) — so they fail the conversion\n * rather than silently dropping.\n *\n * The result re-validates through canonicalDefinitionSchema and normalizes,\n * so hashing and server-side re-validation see exactly what an authored v2\n * definition would produce.\n */\nexport function convertV1DefinitionToCanonical(definition: NamespaceDefinition): CanonicalDefinition {\n const raw = {\n definition_format: CANONICAL_FORMAT,\n namespace: definition.namespace,\n description: definition.description ?? undefined,\n enums: [],\n tables: definition.tables.map(convertTable),\n capabilities: {\n roles: definition.capabilities.roles,\n uses: [...definition.capabilities.uses],\n },\n }\n const parsed = canonicalDefinitionSchema.safeParse(raw)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n throw new OrmDefinitionError(\n `converted definition is not valid canonical v2: ${issue ? `${issue.path.join('.')}: ${issue.message}` : 'unknown issue'}`,\n )\n }\n return normalizeCanonical(parsed.data)\n}\n\nfunction convertTable(table: TableFile) {\n const columns = Object.entries(table.columns ?? {})\n const primaryKey = columns.filter(([, column]) => column.primary_key).map(([name]) => name)\n return {\n table: table.table,\n description: table.description,\n source: table.source,\n columns: columns.map(([name, column]) => convertColumn(name, column)),\n // Synced tables reflect their source — no columns, no primary key.\n primaryKey: primaryKey.length > 0 ? primaryKey : undefined,\n links: Object.entries(table.links ?? {}).map(([name, link]) => convertLink(table.table, name, link)),\n indexes: (table.indexes ?? []).map((index) => ({\n columns: [...index.columns],\n unique: index.unique ?? false,\n name: index.name,\n })),\n policies: {\n // Verbatim DSL source strings — the parsed v1 AST is derived state.\n read: table.policies?.read?.source,\n write: table.policies?.write?.source,\n },\n actions: Object.entries(table.actions ?? {}).map(([name, action]) => convertAction(table.table, name, action)),\n }\n}\n\nfunction convertColumn(name: string, column: ColumnDefinition) {\n // The exact split the v1 engine applied at build time: only the allowlisted\n // function defaults were ever raw SQL; everything else is a literal.\n const isDefaultFn = column.default !== undefined && isFunctionDefault(column.default, column.type)\n return {\n name,\n columnName: name,\n type: column.type,\n nullable: column.primary_key ? false : column.nullable !== false,\n unique: column.unique === true,\n default: isDefaultFn ? undefined : column.default,\n // isFunctionDefault guarantees one of the two allowlisted functions; the\n // canonicalDefinitionSchema parse below re-checks the enum.\n defaultFn: isDefaultFn ? column.default : undefined,\n description: column.description,\n renamedFrom: column.renamed_from,\n cast: column.cast,\n deprecated: column.deprecated === true,\n }\n}\n\nfunction convertLink(table: string, name: string, link: NonNullable<TableFile['links']>[string]) {\n if (link.to.includes('.')) {\n throw new OrmDefinitionError(\n `link '${name}' on '${table}' targets '${link.to}' — cross-namespace links have no canonical v2 representation (links are namespace-local in v2)`,\n )\n }\n // v1 links always join `on` against the target's primary key, so\n // `references` stays unset (v2 defaults it to the target PK).\n return {\n name,\n kind: 'toOne' as const,\n target: link.to,\n on: link.on,\n enforce: link.enforce === true,\n description: link.description,\n }\n}\n\nfunction convertAction(table: string, name: string, action: ActionDefinition) {\n return {\n name,\n requires: action.requires?.source,\n params: Object.fromEntries(\n Object.entries(action.params ?? {}).map(([param, definition]) => [\n param,\n { type: definition.type, nullable: definition.optional === true },\n ]),\n ),\n // The v2 contract carries one SQL string; statement boundaries survive as\n // `;\\n` (v1 validation guarantees no bare `;` inside a single statement).\n executes: actionStatementSources(action.executes).join(';\\n'),\n // v1 declared the RETURNING columns inline; v2 types them at compile time,\n // so the shape collapses to rows-vs-rowsAffected.\n returns: action.returns ? ('rows' as const) : ('rowsAffected' as const),\n audit: action.audit ? { action: action.audit.action, resource: action.audit.resource ?? table } : undefined,\n }\n}\n","import type { CompiledStatement, NamespaceSnapshot, PlannedMigration } from '../engine/index.js'\nimport { OrmDefinitionError } from '../errors.js'\nimport { checksumOf, migrationName, type JournalEntry } from './workspace.js'\n\n/**\n * Rebase support for the v1 → v2 migration path (`orm diff --rebase`).\n *\n * Converting a namespace from YAML to canonical v2 changes its CONTENT HASH\n * (a different canonical serialization hashes differently) while changing\n * nothing in the database. The journal chains on content hashes, so without\n * a bridge entry every v2 diff would fail the previous-hash check. A rebase\n * entry is that bridge: a committed, checksummed journal entry whose\n * migration file carries ZERO statements — it records the discontinuity and\n * re-anchors the snapshot chain, nothing else.\n *\n * The caller's flow: convert (from-yaml.ts) → planMigrationV2 against the\n * committed tip snapshot → verifyRebaseIsNoop(plan) → buildRebaseJournalEntry\n * → write the three files (sql, snapshot, journal) like writeMigration does.\n */\n\nconst SHA256_HEX = /^[0-9a-f]{64}$/\n\n/** Statement kinds that disqualify a plan from being a rebase no-op. */\nexport interface RebaseNoopOptions {\n /**\n * v1 planned a drop-and-recreate of the RLS policies on every migration, so\n * a plan produced by the V1 PIPELINE against an unchanged schema still\n * carries `security` statements. v2 plans never emit them. Default false:\n * a rebase verified through planMigrationV2 must be empty outright.\n */\n readonly allowSecurityReemission?: boolean\n}\n\n/** The statements that stop a plan from qualifying as a rebase no-op. */\nexport function rebaseViolations(\n statements: readonly CompiledStatement[],\n options?: RebaseNoopOptions,\n): CompiledStatement[] {\n const allowSecurity = options?.allowSecurityReemission ?? false\n return statements.filter((statement) => !(statement.kind === 'security' && allowSecurity))\n}\n\n/**\n * True when the plan changes nothing: no DDL, no hint (rename/cast) ALTERs,\n * no action functions — and, unless explicitly allowed, no security\n * re-emission either. Pure predicate over the plan's statements.\n */\nexport const verifyRebaseIsNoop = (\n plan: Pick<PlannedMigration, 'statements'>,\n options?: RebaseNoopOptions,\n): boolean => rebaseViolations(plan.statements, options).length === 0\n\nexport interface RebaseEntryInput {\n readonly namespace: string\n /** Content hash at the committed journal tip (the v1 hash being rebased from). */\n readonly previousHash: string\n /** Content hash of the converted canonical v2 definition. */\n readonly newHash: string\n /** Journal tip ordinal + 1. A rebase always sits on an existing tip. */\n readonly ordinal: number\n /**\n * The verified no-op plan's snapshot. Structurally identical to the tip\n * snapshot but re-chained (fresh `id`, `prevId` = tip snapshot's id) so the\n * `--check` snapshot-chain walk stays unbroken through the rebase.\n */\n readonly snapshot: NamespaceSnapshot\n}\n\nexport interface RebaseEntry {\n readonly name: string\n /** Journal entry matching workspace.ts's journalEntrySchema exactly. */\n readonly entry: JournalEntry\n /** `migrations/<name>.sql` contents — header only, zero statements. */\n readonly sql: string\n /** `migrations/meta/NNNN.snapshot.json` contents (writeMigration's serialization). */\n readonly snapshotText: string\n}\n\n/**\n * Build the no-op journal entry (+ the exact file contents its checksums\n * commit to) recording a v1 → v2 content-hash rebase. Everything is\n * deterministic from the inputs, so `--check`-style gates can regenerate and\n * byte-compare it just like ordinary migrations.\n */\nexport function buildRebaseJournalEntry({ namespace, previousHash, newHash, ordinal, snapshot }: RebaseEntryInput): RebaseEntry {\n if (!SHA256_HEX.test(previousHash)) {\n throw new OrmDefinitionError(`rebase previousHash is not a sha256 hex digest: '${previousHash}'`)\n }\n if (!SHA256_HEX.test(newHash)) {\n throw new OrmDefinitionError(`rebase newHash is not a sha256 hex digest: '${newHash}'`)\n }\n if (previousHash === newHash) {\n throw new OrmDefinitionError('rebase previousHash and newHash are identical — nothing to rebase')\n }\n if (!Number.isInteger(ordinal) || ordinal < 2) {\n throw new OrmDefinitionError(`rebase ordinal must be an integer ≥ 2 (a rebase sits on an existing journal tip); got ${ordinal}`)\n }\n\n const name = migrationName(ordinal, newHash)\n const sql = renderRebaseMigrationSql({ name, namespace, previousHash, newHash })\n const snapshotText = `${JSON.stringify(snapshot, null, 2)}\\n`\n\n const entry: JournalEntry = {\n ordinal,\n name,\n content_hash: newHash,\n previous_content_hash: previousHash,\n checksum: checksumOf(sql),\n snapshot_checksum: checksumOf(snapshotText),\n destructive: false,\n }\n return { name, entry, sql, snapshotText }\n}\n\n/** Header-only migration file — the rebase's reviewable artifact. Modeled on workspace.ts renderMigrationSql. */\nfunction renderRebaseMigrationSql({\n name,\n namespace,\n previousHash,\n newHash,\n}: {\n name: string\n namespace: string\n previousHash: string\n newHash: string\n}): string {\n return (\n [\n `-- ${name}`,\n `-- namespace: ${namespace}`,\n `-- content hash: ${newHash}`,\n `-- rebase: v1 definitions (${previousHash}) converted to canonical v2 — verified no-op, zero statements`,\n '-- generated by `seq-studio orm diff --rebase` — review and commit, do not edit',\n ].join('\\n') + '\\n'\n )\n}\n","/**\n * SDL generation (plan §3): pure `(canonical) → string`, offline and\n * byte-deterministic. The output is the schema consumers commit as\n * `schema.graphql` and point graphql-codegen at; the GraphQL→IR compiler\n * validates documents against the same SDL.\n *\n * Determinism discipline: the canonical definition is normalized\n * (`normalizeCanonical` — tables/links/indexes/enums sorted, columns kept in\n * declaration order), every derived collection is emitted in a fixed order,\n * and nothing time- or environment-dependent enters the output.\n */\nimport {\n canonicalDefinitionSchema,\n normalizeCanonical,\n type CanonicalColumn,\n type CanonicalDefinition,\n type CanonicalTable,\n type ColumnType,\n} from '../canonical/v2.js'\nimport {\n CUSTOM_SCALARS,\n NUMERICISH_COLUMN_TYPES,\n ORDER_BY_ENUM,\n ORDER_BY_ENUM_VALUES,\n PLATFORM_USER_TYPENAME,\n comparisonExpName,\n enumTypeName,\n fieldName,\n graphqlScalarFor,\n tableNames,\n type TableNames,\n} from './naming.js'\n\nexport class SdlGenerationError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SdlGenerationError'\n }\n}\n\nexport interface GenerateSdlOptions {\n /**\n * Server-pinned columns per table (computed by the compiler from write\n * policies — a column referenced via claim comparison, e.g.\n * `author_sub = claim('sub')`, is stamped server-side on insert and must\n * not be client-suppliable). Pinned columns are excluded from\n * `<Type>InsertInput` only; they remain readable, filterable, orderable,\n * and settable. Entries match either the column's TS `name` or its\n * Postgres `columnName`.\n */\n pinnedColumns?: Record<string, string[]>\n}\n\nconst GRAPHQL_NAME_RE = /^[_A-Za-z][_0-9A-Za-z]*$/\nconst RESERVED_ENUM_VALUES = new Set(['true', 'false', 'null'])\n\nconst NUMERICISH = new Set<ColumnType>(NUMERICISH_COLUMN_TYPES)\n\n/** PlatformUser curated fields (plan §4b) in contract order. */\nconst PLATFORM_USER_FIELDS: ReadonlyArray<{ name: string; gqlType: string; nullable: boolean }> = [\n { name: 'sub', gqlType: 'String', nullable: false },\n { name: 'email', gqlType: 'String', nullable: true },\n { name: 'name', gqlType: 'String', nullable: true },\n { name: 'organization', gqlType: 'String', nullable: true },\n { name: 'role', gqlType: 'String', nullable: true },\n { name: 'managerId', gqlType: 'String', nullable: true },\n { name: 'accountEnabled', gqlType: 'Boolean', nullable: false },\n]\n\nexport function generateSdl(canonical: CanonicalDefinition, options: GenerateSdlOptions = {}): string {\n const def = normalizeCanonical(canonicalDefinitionSchema.parse(canonical))\n // Synced (`source: gold.*`) tables stay on the v1 REST path — excluded from SDL in v2.0.\n const tables = def.tables.filter((table) => table.source === undefined)\n if (tables.length === 0) {\n throw new SdlGenerationError(\n `Namespace \"${def.namespace}\" exposes no tables (synced tables are excluded from SDL in v2.0) — nothing to generate.`,\n )\n }\n for (const table of tables) {\n if (table.columns.length === 0) {\n throw new SdlGenerationError(`Table \"${table.table}\" has no columns — cannot generate an object type.`)\n }\n }\n\n const namesByTable = new Map<string, TableNames>(tables.map((table) => [table.table, tableNames(table.table)]))\n const enumByName = new Map(def.enums.map((entry) => [entry.name, entry]))\n\n const hasPlatformUser = tables.some((table) => table.links.some((link) => link.kind === 'toPlatformUser'))\n\n /** Enums actually referenced by an exposed column — declared-but-unused enums are omitted. */\n const usedEnums = new Set<string>()\n for (const table of tables) {\n for (const column of table.columns) {\n if (typeof column.type === 'object') {\n if (!enumByName.has(column.type.enum)) {\n throw new SdlGenerationError(\n `Column \"${table.table}.${column.columnName}\" references undeclared enum \"${column.type.enum}\".`,\n )\n }\n usedEnums.add(column.type.enum)\n }\n }\n }\n\n /** Tables reachable through a toMany link get an aggregate predicate input (count only, §4d). */\n const aggregateBoolExpTargets = new Set<string>()\n for (const table of tables) {\n for (const link of table.links) {\n if (link.kind === 'toMany' && link.target !== undefined && namesByTable.has(link.target)) {\n aggregateBoolExpTargets.add(link.target)\n }\n }\n }\n\n const usedComparisonScalars = new Set<string>()\n for (const table of tables) {\n for (const column of table.columns) {\n if (typeof column.type !== 'object') usedComparisonScalars.add(graphqlScalarFor(column.type))\n }\n }\n if (hasPlatformUser) {\n usedComparisonScalars.add('String')\n usedComparisonScalars.add('Boolean')\n }\n // Aggregate predicates compare counts: `predicate: IntComparisonExp!`.\n if (aggregateBoolExpTargets.size > 0) usedComparisonScalars.add('Int')\n\n const blocks: string[] = []\n\n blocks.push(\n `# Generated by @sequenceholdings/orm — GraphQL SDL for namespace \"${def.namespace}\".\\n` +\n '# Do not edit: regenerate with `seq-studio orm generate`.',\n )\n\n blocks.push('directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT')\n blocks.push(\n '\"\"\"Gates an operation behind a platform capability or custom role — checked by the data plane before execution.\"\"\"\\n' +\n 'directive @requires(capability: String, role: String) on QUERY | MUTATION',\n )\n blocks.push('directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT')\n\n for (const scalar of CUSTOM_SCALARS) blocks.push(`scalar ${scalar}`)\n\n blocks.push(renderEnum(ORDER_BY_ENUM, [...ORDER_BY_ENUM_VALUES]))\n\n for (const enumName of [...usedEnums].sort()) {\n const entry = enumByName.get(enumName)\n if (!entry) continue\n for (const value of entry.values) assertEnumValue(value, `enum \"${enumName}\"`)\n blocks.push(renderEnum(enumTypeName(enumName), entry.values))\n }\n\n for (const scalar of [...usedComparisonScalars].sort()) {\n blocks.push(renderComparisonExp(scalar))\n }\n for (const enumName of [...usedEnums].sort()) {\n blocks.push(renderComparisonExp(enumTypeName(enumName)))\n }\n\n if (hasPlatformUser) blocks.push(...renderPlatformUserBlocks())\n\n for (const table of tables) {\n const names = namesByTable.get(table.table)\n if (!names) continue\n blocks.push(\n ...renderTableBlocks({\n table,\n names,\n namesByTable,\n emitAggregateBoolExp: aggregateBoolExpTargets.has(table.table),\n pinned: options.pinnedColumns?.[table.table] ?? [],\n }),\n )\n }\n\n blocks.push(renderQueryRoot(tables, namesByTable))\n\n const mutationRoot = renderMutationRoot(tables, namesByTable)\n if (mutationRoot !== null) blocks.push(mutationRoot)\n\n return `${blocks.join('\\n\\n')}\\n`\n}\n\n// ---------------------------------------------------------------------------\n// Rendering helpers\n// ---------------------------------------------------------------------------\n\nfunction assertEnumValue(value: string, context: string): void {\n if (!GRAPHQL_NAME_RE.test(value) || RESERVED_ENUM_VALUES.has(value)) {\n throw new SdlGenerationError(\n `Value \"${value}\" in ${context} is not a valid GraphQL enum value (must match ${GRAPHQL_NAME_RE} and not be true/false/null).`,\n )\n }\n}\n\nfunction renderEnum(name: string, values: readonly string[]): string {\n return `enum ${name} {\\n${values.map((value) => ` ${value}`).join('\\n')}\\n}`\n}\n\n/** `\"\"\"…\"\"\"` description block lines, with embedded triple-quotes escaped. */\nfunction descriptionLines(text: string, indent: string): string[] {\n const escaped = text.replace(/\"\"\"/g, '\\\\\"\"\"')\n return [`${indent}\"\"\"`, ...escaped.split('\\n').map((line) => `${indent}${line}`), `${indent}\"\"\"`]\n}\n\n/**\n * Comparison input for one GraphQL type. Uniform base operator set, plus\n * `_like`/`_ilike` on String and `_contains`/`_hasKey` on jsonb (§4d).\n * Fields sort alphabetically for byte determinism.\n */\nfunction renderComparisonExp(gqlTypeName: string): string {\n const fields: Array<[string, string]> = [\n ['_eq', gqlTypeName],\n ['_neq', gqlTypeName],\n ['_gt', gqlTypeName],\n ['_gte', gqlTypeName],\n ['_lt', gqlTypeName],\n ['_lte', gqlTypeName],\n ['_in', `[${gqlTypeName}!]`],\n ['_nin', `[${gqlTypeName}!]`],\n ['_isNull', 'Boolean'],\n ]\n if (gqlTypeName === 'String') {\n fields.push(['_like', 'String'], ['_ilike', 'String'])\n }\n if (gqlTypeName === 'jsonb') {\n fields.push(['_contains', 'jsonb'], ['_hasKey', 'String'])\n }\n fields.sort(([a], [b]) => a.localeCompare(b))\n const body = fields.map(([field, type]) => ` ${field}: ${type}`).join('\\n')\n return `input ${comparisonExpName(gqlTypeName)} {\\n${body}\\n}`\n}\n\nfunction renderPlatformUserBlocks(): string[] {\n const typeFields = PLATFORM_USER_FIELDS.map(\n (field) => ` ${field.name}: ${field.gqlType}${field.nullable ? '' : '!'}`,\n ).join('\\n')\n const boolExpName = `${PLATFORM_USER_TYPENAME}BoolExp`\n const boolFields = [\n ` _and: [${boolExpName}!]`,\n ` _not: ${boolExpName}`,\n ` _or: [${boolExpName}!]`,\n ...PLATFORM_USER_FIELDS.map((field) => ` ${field.name}: ${comparisonExpName(field.gqlType)}`),\n ].join('\\n')\n const orderFields = PLATFORM_USER_FIELDS.map((field) => ` ${field.name}: ${ORDER_BY_ENUM}`).join('\\n')\n return [\n '\"\"\"Curated read-only view over platform users (plan §4b) — reachable only through `toPlatformUser` links.\"\"\"\\n' +\n `type ${PLATFORM_USER_TYPENAME} {\\n${typeFields}\\n}`,\n `input ${boolExpName} {\\n${boolFields}\\n}`,\n `input ${PLATFORM_USER_TYPENAME}OrderBy {\\n${orderFields}\\n}`,\n ]\n}\n\ninterface TableRenderContext {\n table: CanonicalTable\n names: TableNames\n namesByTable: Map<string, TableNames>\n emitAggregateBoolExp: boolean\n pinned: string[]\n}\n\n/** `where/orderBy/limit/offset` args for a to-many relation field. */\nfunction relationArgs(target: TableNames): string {\n return `where: ${target.boolExp}, orderBy: [${target.orderBy}!], limit: Int, offset: Int`\n}\n\n/** Root select/aggregate args — relations plus `distinctOn`. */\nfunction rootArgs(names: TableNames): string {\n return `where: ${names.boolExp}, orderBy: [${names.orderBy}!], distinctOn: [${names.selectColumn}!], limit: Int, offset: Int`\n}\n\n/** Resolve the PK identifiers to canonical columns (throws on a dangling reference). */\nfunction primaryKeyColumns(table: CanonicalTable): CanonicalColumn[] {\n if (!table.primaryKey || table.primaryKey.length === 0) return []\n return table.primaryKey.map((identifier) => {\n const column = table.columns.find((c) => c.columnName === identifier || c.name === identifier)\n if (!column) {\n throw new SdlGenerationError(`Primary key column \"${identifier}\" not found on table \"${table.table}\".`)\n }\n return column\n })\n}\n\nfunction pkArgs(table: CanonicalTable, ctx: TableRenderContext): string {\n return primaryKeyColumns(table)\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n}\n\nfunction renderTableBlocks(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const blocks: string[] = [\n renderObjectType(ctx),\n renderSelectColumnEnum(ctx),\n renderOrderByInput(ctx),\n renderBoolExp(ctx),\n ...renderAggregateTypes(ctx),\n ]\n if (ctx.emitAggregateBoolExp) blocks.push(...renderAggregateBoolExp(ctx))\n\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n const fields = pk\n .map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join('\\n')\n blocks.push(`input ${names.pkColumnsInput} {\\n${fields}\\n}`)\n }\n\n if (isWritable(table)) blocks.push(...renderWriteBlocks(ctx))\n return blocks\n}\n\nfunction isWritable(table: CanonicalTable): boolean {\n return table.policies.write !== undefined\n}\n\nfunction renderObjectType(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines: string[] = []\n if (table.description !== undefined) lines.push(...descriptionLines(table.description, ''))\n lines.push(`type ${names.typename} {`)\n for (const column of table.columns) {\n if (column.description !== undefined) lines.push(...descriptionLines(column.description, ' '))\n const bang = column.nullable ? '' : '!'\n const deprecated = column.deprecated ? ' @deprecated' : ''\n lines.push(` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}${bang}${deprecated}`)\n }\n for (const link of table.links) {\n if (link.description !== undefined) lines.push(...descriptionLines(link.description, ' '))\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}`)\n continue\n }\n // A link may target a synced/excluded table (valid in policies) — SDL skips it.\n const target = link.target !== undefined ? ctx.namesByTable.get(link.target) : undefined\n if (!target) continue\n if (link.kind === 'toOne') {\n lines.push(` ${fieldName(link.name)}: ${target.typename}`)\n } else {\n lines.push(` ${fieldName(link.name)}(${relationArgs(target)}): [${target.typename}!]!`)\n lines.push(` ${fieldName(link.name)}Aggregate(${relationArgs(target)}): ${target.aggregate}!`)\n }\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nfunction renderSelectColumnEnum(ctx: TableRenderContext): string {\n const values = ctx.table.columns.map((column) => fieldName(column.name))\n for (const value of values) assertEnumValue(value, `select-column enum for table \"${ctx.table.table}\"`)\n return renderEnum(ctx.names.selectColumn, values)\n}\n\nfunction renderOrderByInput(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines = table.columns.map((column) => ` ${fieldName(column.name)}: ${ORDER_BY_ENUM}`)\n for (const link of table.links) {\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}OrderBy`)\n } else if (link.kind === 'toOne' && link.target !== undefined) {\n const target = ctx.namesByTable.get(link.target)\n if (target) lines.push(` ${fieldName(link.name)}: ${target.orderBy}`)\n }\n // to-many ordering is not part of the v1 grammar (plan §4e: to-one only).\n }\n return `input ${names.orderBy} {\\n${lines.join('\\n')}\\n}`\n}\n\nfunction renderBoolExp(ctx: TableRenderContext): string {\n const { table, names } = ctx\n const lines: string[] = [\n ` _and: [${names.boolExp}!]`,\n ` _not: ${names.boolExp}`,\n ` _or: [${names.boolExp}!]`,\n ]\n for (const column of table.columns) {\n lines.push(` ${fieldName(column.name)}: ${comparisonExpName(columnGqlTypeOf(table, column))}`)\n }\n for (const link of table.links) {\n if (link.kind === 'toPlatformUser') {\n lines.push(` ${fieldName(link.name)}: ${PLATFORM_USER_TYPENAME}BoolExp`)\n continue\n }\n const target = link.target !== undefined ? ctx.namesByTable.get(link.target) : undefined\n if (!target) continue\n lines.push(` ${fieldName(link.name)}: ${target.boolExp}`)\n if (link.kind === 'toMany') {\n lines.push(` ${fieldName(link.name)}Aggregate: ${target.aggregateBoolExp}`)\n }\n }\n return `input ${names.boolExp} {\\n${lines.join('\\n')}\\n}`\n}\n\nfunction numericishColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => typeof column.type !== 'object' && NUMERICISH.has(column.type))\n}\n\nfunction jsonbColumns(table: CanonicalTable): CanonicalColumn[] {\n return table.columns.filter((column) => column.type === 'jsonb')\n}\n\nfunction renderAggregateTypes(ctx: TableRenderContext): string[] {\n const { table, names } = ctx\n const numericish = numericishColumns(table)\n const blocks: string[] = []\n blocks.push(\n `type ${names.aggregate} {\\n aggregate: ${names.aggregateFields}\\n nodes: [${names.typename}!]!\\n}`,\n )\n const fieldLines = [` count(columns: [${names.selectColumn}!], distinct: Boolean): Int!`]\n if (numericish.length > 0) {\n fieldLines.push(` avg: ${names.avgFields}`)\n fieldLines.push(` sum: ${names.sumFields}`)\n }\n blocks.push(`type ${names.aggregateFields} {\\n${fieldLines.join('\\n')}\\n}`)\n if (numericish.length > 0) {\n const avgLines = numericish.map((column) => ` ${fieldName(column.name)}: Float`)\n blocks.push(`type ${names.avgFields} {\\n${avgLines.join('\\n')}\\n}`)\n const sumLines = numericish.map((column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`)\n blocks.push(`type ${names.sumFields} {\\n${sumLines.join('\\n')}\\n}`)\n }\n return blocks\n}\n\n/** Hasura-parity aggregate predicate input — count only in v1 (§4d). */\nfunction renderAggregateBoolExp(ctx: TableRenderContext): string[] {\n const { names } = ctx\n return [\n `input ${names.aggregateBoolExp} {\\n count: ${names.aggregateBoolExpCount}\\n}`,\n `input ${names.aggregateBoolExpCount} {\\n` +\n ` arguments: [${names.selectColumn}!]\\n` +\n ' distinct: Boolean\\n' +\n ` filter: ${names.boolExp}\\n` +\n ' predicate: IntComparisonExp!\\n}',\n ]\n}\n\n/** Postgres constraint names selectable in `onConflict` — PK + unique indexes/columns. */\nfunction constraintValues(table: CanonicalTable): string[] {\n const values = new Set<string>()\n if (table.primaryKey && table.primaryKey.length > 0) values.add(`${table.table}_pkey`)\n for (const column of table.columns) {\n if (column.unique) values.add(`${table.table}_${column.columnName}_key`)\n }\n for (const index of table.indexes) {\n if (index.unique) values.add(index.name ?? `${table.table}_${index.columns.join('_')}_key`)\n }\n return [...values].sort()\n}\n\nfunction renderWriteBlocks(ctx: TableRenderContext): string[] {\n const { table, names, pinned } = ctx\n const blocks: string[] = []\n\n const pinnedSet = new Set(pinned)\n const insertable = table.columns.filter(\n (column) => !pinnedSet.has(column.name) && !pinnedSet.has(column.columnName),\n )\n if (insertable.length === 0) {\n throw new SdlGenerationError(\n `Table \"${table.table}\" has no insertable columns after excluding pinned columns [${pinned.join(', ')}].`,\n )\n }\n // Insert-input fields are all nullable (Hasura parity) — column defaults and\n // server-pinned values fill the gaps; NOT NULL is enforced by Postgres.\n const insertLines = insertable.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.insertInput} {\\n${insertLines.join('\\n')}\\n}`)\n\n const setLines = table.columns.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.setInput} {\\n${setLines.join('\\n')}\\n}`)\n\n const jsonb = jsonbColumns(table)\n if (jsonb.length > 0) {\n const appendLines = jsonb.map((column) => ` ${fieldName(column.name)}: jsonb`)\n blocks.push(`input ${names.appendInput} {\\n${appendLines.join('\\n')}\\n}`)\n }\n\n const numericish = numericishColumns(table)\n if (numericish.length > 0) {\n const incLines = numericish.map(\n (column) => ` ${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}`,\n )\n blocks.push(`input ${names.incInput} {\\n${incLines.join('\\n')}\\n}`)\n }\n\n const constraints = constraintValues(table)\n if (constraints.length > 0) {\n for (const value of constraints) assertEnumValue(value, `constraint enum for table \"${table.table}\"`)\n blocks.push(renderEnum(names.constraintEnum, constraints))\n const updateColumns = table.columns.map((column) => fieldName(column.name))\n blocks.push(renderEnum(names.updateColumnEnum, updateColumns))\n blocks.push(\n `input ${names.onConflict} {\\n` +\n ` constraint: ${names.constraintEnum}!\\n` +\n ` updateColumns: [${names.updateColumnEnum}!]! = []\\n` +\n ` where: ${names.boolExp}\\n}`,\n )\n }\n\n blocks.push(\n `type ${names.mutationResponse} {\\n affectedRows: Int!\\n returning: [${names.typename}!]!\\n}`,\n )\n return blocks\n}\n\nfunction renderQueryRoot(tables: CanonicalTable[], namesByTable: Map<string, TableNames>): string {\n const lines: string[] = ['type Query {']\n for (const table of tables) {\n const names = namesByTable.get(table.table)\n if (!names) continue\n lines.push(` ${names.selectRoot}(${rootArgs(names)}): [${names.typename}!]!`)\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n const args = pk\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n lines.push(` ${names.byPkRoot}(${args}): ${names.typename}`)\n }\n lines.push(` ${names.aggregateRoot}(${rootArgs(names)}): ${names.aggregate}!`)\n }\n lines.push('}')\n return lines.join('\\n')\n}\n\nfunction columnGqlTypeOf(table: CanonicalTable, column: CanonicalColumn): string {\n return typeof column.type === 'object' ? enumTypeName(column.type.enum) : graphqlScalarFor(column.type)\n}\n\nfunction renderMutationRoot(tables: CanonicalTable[], namesByTable: Map<string, TableNames>): string | null {\n const lines: string[] = []\n for (const table of tables) {\n if (!isWritable(table)) continue\n const names = namesByTable.get(table.table)\n if (!names) continue\n const constraints = constraintValues(table)\n const onConflictArg = constraints.length > 0 ? `, onConflict: ${names.onConflict}` : ''\n const updateArgs = [`_set: ${names.setInput}`]\n if (jsonbColumns(table).length > 0) updateArgs.push(`_append: ${names.appendInput}`)\n if (numericishColumns(table).length > 0) updateArgs.push(`_inc: ${names.incInput}`)\n const updateArgList = updateArgs.join(', ')\n\n lines.push(` ${names.insertRoot}(objects: [${names.insertInput}!]!${onConflictArg}): ${names.mutationResponse}`)\n lines.push(` ${names.insertOneRoot}(object: ${names.insertInput}!${onConflictArg}): ${names.typename}`)\n lines.push(` ${names.updateRoot}(where: ${names.boolExp}!, ${updateArgList}): ${names.mutationResponse}`)\n const pk = primaryKeyColumns(table)\n if (pk.length > 0) {\n lines.push(\n ` ${names.updateByPkRoot}(pkColumns: ${names.pkColumnsInput}!, ${updateArgList}): ${names.typename}`,\n )\n }\n lines.push(` ${names.deleteRoot}(where: ${names.boolExp}!): ${names.mutationResponse}`)\n if (pk.length > 0) {\n const args = pk\n .map((column) => `${fieldName(column.name)}: ${columnGqlTypeOf(table, column)}!`)\n .join(', ')\n lines.push(` ${names.deleteByPkRoot}(${args}): ${names.typename}`)\n }\n }\n if (lines.length === 0) return null\n return `type Mutation {\\n${lines.join('\\n')}\\n}`\n}\n","import { mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { createRequire } from 'node:module'\nimport { basename, dirname, join, resolve } from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { createJiti } from 'jiti'\nimport { deriveColumnName } from './authoring/columns.js'\nimport {\n loadNamespaceFromDir,\n NAMESPACE_CONFIG_FILE,\n SCHEMA_DIR,\n type LoadedNamespaceV2,\n type LoadNamespaceOptions,\n} from './authoring/load.js'\nimport type { CanonicalColumn, CanonicalDefinition, CanonicalTable } from './canonical/v2.js'\nimport { buildOperationsManifest, generateTypePolicies } from './codegen-gql/index.js'\nimport {\n compileNamespace as compileOperations,\n computePinnedColumnsByTable,\n computeSchemaHash,\n type ClientManifest,\n type CompilerDiagnostic,\n type SourceDocument,\n} from './compiler-gql/index.js'\nimport { generateNamespaceTypes } from './codegen/types.js'\nimport { DEFINITION_FILE_EXTENSIONS, NAMESPACE_PATTERN } from './constants.js'\nimport { planMigrationV2 } from './engine/canonical2.js'\nimport { compileNamespace, type CompiledStatement } from './engine/index.js'\nimport { OrmDefinitionError } from './errors.js'\nimport { loadNamespaceDefinition } from './loader.js'\nimport { classifyDestructive } from './migrations/classify.js'\nimport { loadCommittedMigrations, loadCommittedTipMigration } from './migrations/committed.js'\nimport { diffCommand } from './migrations/diff.js'\nimport { convertV1DefinitionToCanonical } from './migrations/from-yaml.js'\nimport { buildRebaseJournalEntry, rebaseViolations, verifyRebaseIsNoop } from './migrations/v2.js'\nimport {\n MIGRATIONS_DIRNAME,\n checksumOf,\n readMigrationSql,\n readMigrationWorkspace,\n readSnapshot,\n readSnapshotText,\n renderMigrationSql,\n writeMigration,\n type JournalEntry,\n type MigrationWorkspace,\n} from './migrations/workspace.js'\nimport { generateSdl } from './sdl/index.js'\n\n/** Set by the seq-studio delegate; direct users export them. */\nexport const BASE_URL_ENV = 'SEQUENCE_ORM_BASE_URL'\nexport const TOKEN_ENV = 'SEQUENCE_ORM_TOKEN'\n\n/**\n * Test/dev hook mirroring `LoadNamespaceOptions.ormModulePath`: when set, bare\n * `'@sequenceholdings/orm'` imports in consumer files resolve to this path\n * (jiti alias). Production leaves it unset — the consumer's own installed\n * package resolves naturally.\n */\nexport const ORM_MODULE_PATH_ENV = 'SEQUENCE_ORM_MODULE_PATH'\n\nconst USAGE = `usage:\n seq-studio orm init <dir> scaffold a namespace package (v2: TypeScript schema + GraphQL documents)\n seq-studio orm generate [dir] write schema.graphql + operations.manifest.json + typePolicies.gen.ts (+ consumer graphql-codegen when codegen.ts is present)\n seq-studio orm validate [dir] parse + validate definitions and verify committed migrations are in sync\n seq-studio orm plan [dir] -e <env> offline dry run: compile definitions and diff against the registry (no database, no writes)\n seq-studio orm apply [dir] -e <env> author the migration, register, apply, and refresh the generated outputs (the everyday command)\n seq-studio orm apply --dry-run -e <env> rehearse the migration on a copy of the environment's real data, then discard it (no real apply)\n seq-studio orm apply --no-create -e <env> apply only if the namespace is already registered (CI guard; never provisions a new namespace)\n seq-studio orm diff [dir] write/verify the committed migration standalone (--check is the offline CI gate; --allow-destructive consents; --rebase records a v1 -> v2 conversion as a verified no-op)\n seq-studio orm migrate-from-yaml <dir> convert a v1 YAML namespace to the v2 TypeScript format (migrations/ preserved)\n\n A directory holds ONE namespace and its format is auto-detected:\n v2 = sequence.config.ts + schema/*.ts + graphql/**; v1 (legacy) = one <table>.yaml per table.\n Environments: see \\`seq-studio envs list\\` (discovered after you authenticate).\n Authenticate with: seq-studio login\n`\n\ntype TokenProvider = () => Promise<string | null>\nlet tokenProvider: TokenProvider | null = null\n\n/** Hand the CLI a refreshing token source (used by the seq-studio delegate). */\nexport function setTokenProvider(provider: TokenProvider): void {\n tokenProvider = provider\n}\n\nasync function resolveToken(): Promise<string | null> {\n const fromEnv = process.env[TOKEN_ENV]?.trim()\n if (fromEnv) return fromEnv\n return tokenProvider ? tokenProvider() : null\n}\n\nexport async function runCli(argv: readonly string[]): Promise<number> {\n const [command, ...rest] = argv\n if (!command || command === 'help' || command === '--help' || command === '-h') {\n console.log(USAGE)\n return command ? 0 : 1\n }\n\n try {\n switch (command) {\n case 'init':\n return await initCommand(rest)\n case 'generate':\n return await generateCommand(rest)\n case 'migrate-from-yaml':\n return await migrateFromYamlCommand(rest)\n case 'validate': {\n const dir = positional(rest) ?? '.'\n return (await detectProjectFormat(dir)) === 'v2' ? await validateV2Command(dir) : await validateCommand(rest)\n }\n case 'plan': {\n const dir = positional(rest) ?? '.'\n return (await detectProjectFormat(dir)) === 'v2' ? await planV2Command(dir) : await planCommand(rest)\n }\n case 'diff': {\n const dir = positional(rest) ?? '.'\n const options = {\n dir,\n allowDestructive: rest.includes('--allow-destructive'),\n check: rest.includes('--check'),\n log: (line: string) => console.log(line),\n }\n if ((await detectProjectFormat(dir)) === 'v2') {\n return await diffV2Command({ ...options, rebase: rest.includes('--rebase') })\n }\n if (rest.includes('--rebase')) {\n console.error(`--rebase records a v1 -> v2 conversion — convert first: seq-studio orm migrate-from-yaml ${dir}`)\n return 1\n }\n return await diffCommand(options)\n }\n case 'apply': {\n const dir = positional(rest) ?? '.'\n return (await detectProjectFormat(dir)) === 'v2' ? await applyV2Command(rest, dir) : await applyCommand(rest)\n }\n default:\n console.error(`unknown command: ${command}`)\n console.log(USAGE)\n return 1\n }\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n return 1\n }\n}\n\n// ---------------------------------------------------------------------------\n// Project format detection\n// ---------------------------------------------------------------------------\n\ntype ProjectFormat = 'v1' | 'v2'\n\n/**\n * A directory holds ONE format: `sequence.config.ts` marks v2 (TypeScript\n * authoring), top-level `*.yaml`/`*.yml` files mark v1. Both present is an\n * error — a half-converted directory must be finished, not guessed at.\n */\nasync function detectProjectFormat(dir: string): Promise<ProjectFormat> {\n const entries = await readdir(dir, { withFileTypes: true }).catch(() => {\n throw new OrmDefinitionError(`namespace directory not found: ${dir}`)\n })\n const hasConfig = entries.some((entry) => entry.isFile() && entry.name === NAMESPACE_CONFIG_FILE)\n const hasYaml = entries.some(\n (entry) => entry.isFile() && DEFINITION_FILE_EXTENSIONS.some((extension) => entry.name.endsWith(extension)),\n )\n if (hasConfig && hasYaml) {\n throw new OrmDefinitionError(\n `${dir} mixes v1 (*.yaml) and v2 (${NAMESPACE_CONFIG_FILE}) definitions — finish the conversion: ` +\n 'remove the YAML files (or the v2 files) so the directory holds one format',\n )\n }\n if (hasConfig) return 'v2'\n if (hasYaml) return 'v1'\n throw new OrmDefinitionError(\n `no namespace definitions in ${dir} — expected ${NAMESPACE_CONFIG_FILE} + ${SCHEMA_DIR}/*.ts (v2) ` +\n 'or <table>.yaml files (v1); scaffold with: seq-studio orm init <dir>',\n )\n}\n\n// ---------------------------------------------------------------------------\n// init — copy the v2 template package\n// ---------------------------------------------------------------------------\n\n/** Placeholder literals the template carries; both spellings substitute to the target slug. */\nconst TEMPLATE_NAMESPACE_PLACEHOLDER = 'my_namespace'\nconst TEMPLATE_PACKAGE_PLACEHOLDER = 'my-namespace'\n\nasync function initCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest)\n if (!dir) {\n console.error('init requires a target directory')\n return 1\n }\n const dirName = basename(resolve(dir))\n const namespaceSlug = deriveNamespaceSlug(dirName)\n if (!namespaceSlug) {\n console.error(\n `cannot derive a namespace from directory name '${dirName}' — namespaces match ${NAMESPACE_PATTERN}; ` +\n 'name the directory after your namespace (e.g. lending)',\n )\n return 1\n }\n const packageSlug = namespaceSlug.replace(/_/g, '-')\n\n const templateRoot = await resolveTemplateRoot()\n const files = await walkFiles(templateRoot)\n for (const file of files) {\n // npm strips `.gitignore` from published tarballs, so the template may\n // carry it under either name — the scaffold always writes `.gitignore`.\n const targetRelative = basename(file) === 'gitignore' ? join(dirname(file), '.gitignore') : file\n const contents = (await readFile(join(templateRoot, file), 'utf8'))\n .replaceAll(TEMPLATE_NAMESPACE_PLACEHOLDER, namespaceSlug)\n .replaceAll(TEMPLATE_PACKAGE_PLACEHOLDER, packageSlug)\n const target = join(dir, targetRelative)\n await mkdir(dirname(target), { recursive: true })\n try {\n await writeFile(target, contents, { flag: 'wx' })\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n throw new OrmDefinitionError(`refusing to overwrite existing ${target} — init scaffolds into a new directory`)\n }\n throw error\n }\n }\n console.log(`scaffolded ${dir} — namespace '${namespaceSlug}' (${files.length} files)`)\n console.log(`next: edit ${SCHEMA_DIR}/tables.ts, then: seq-studio orm generate ${dir} && seq-studio orm diff ${dir}`)\n return 0\n}\n\n/** Directory name → namespace slug (`My-Namespace` → `my_namespace`), or undefined when it can't become one. */\nfunction deriveNamespaceSlug(dirName: string): string | undefined {\n const slug = dirName.toLowerCase().replace(/[^a-z0-9_]/g, '_')\n return NAMESPACE_PATTERN.test(slug) ? slug : undefined\n}\n\n/** `templates/orm-namespace/` sits at the package root — one level above both `src/` and `dist/`. */\nasync function resolveTemplateRoot(): Promise<string> {\n const candidate = fileURLToPath(new URL('../templates/orm-namespace/', import.meta.url))\n const stats = await stat(candidate).catch(() => undefined)\n if (!stats?.isDirectory()) {\n throw new OrmDefinitionError(`init template not found at ${candidate} — is the package installation complete?`)\n }\n return candidate\n}\n\n/** Recursive file listing (paths relative to root, '/'-separated, sorted) — deterministic template copies and document globs. */\nasync function walkFiles(root: string, prefix = ''): Promise<string[]> {\n const entries = await readdir(root, { withFileTypes: true }).catch(() => [])\n const files: string[] = []\n for (const entry of [...entries].sort((a, b) => a.name.localeCompare(b.name))) {\n if (entry.name === 'node_modules' || entry.name === '.DS_Store') continue\n const relative = prefix ? `${prefix}/${entry.name}` : entry.name\n if (entry.isDirectory()) files.push(...(await walkFiles(join(root, entry.name), relative)))\n else if (entry.isFile()) files.push(relative)\n }\n return files\n}\n\n// ---------------------------------------------------------------------------\n// v2 loading + compilation (shared by generate / validate / apply)\n// ---------------------------------------------------------------------------\n\nconst SCHEMA_GRAPHQL_FILE = 'schema.graphql'\nconst OPERATIONS_MANIFEST_FILE = 'operations.manifest.json'\nconst TYPE_POLICIES_FILE = 'typePolicies.gen.ts'\nconst GRAPHQL_DIRNAME = 'graphql'\nconst CODEGEN_CONFIG_FILE = 'codegen.ts'\n\nfunction ormLoadOptions(): LoadNamespaceOptions {\n const override = process.env[ORM_MODULE_PATH_ENV]?.trim()\n return override ? { ormModulePath: override } : {}\n}\n\nasync function loadV2(dir: string): Promise<LoadedNamespaceV2> {\n return loadNamespaceFromDir(dir, ormLoadOptions())\n}\n\ninterface V2Project {\n readonly loaded: LoadedNamespaceV2\n readonly sdl: string\n readonly documents: SourceDocument[]\n readonly manifest: ClientManifest\n readonly diagnostics: CompilerDiagnostic[]\n}\n\ntype CompileV2Result = { ok: true; project: V2Project } | { ok: false; diagnostics: CompilerDiagnostic[] }\n\n/**\n * The full offline v2 pipeline: jiti-load the TypeScript definitions →\n * canonical → pinned columns (policy compile) → SDL → document compile. The\n * same inputs the server recompiles canonically at push — neither side ever\n * trusts the other's output.\n */\nasync function compileV2Project(dir: string): Promise<CompileV2Result> {\n const loaded = await loadV2(dir)\n // Throws NamespaceCompileError (listing the diagnostics) on policy errors.\n const pins = computePinnedColumnsByTable(loaded.canonical)\n const pinnedColumns = Object.fromEntries(\n Object.entries(pins).map(([table, entries]) => [table, entries.map((pin) => pin.column)]),\n )\n const sdl = generateSdl(loaded.canonical, { pinnedColumns })\n const documents = await collectGraphqlDocuments(dir)\n const result = compileOperations({ canonical: loaded.canonical, sdl, documents })\n if (!result.ok) return { ok: false, diagnostics: result.diagnostics }\n return {\n ok: true,\n project: { loaded, sdl, documents, manifest: result.manifest, diagnostics: result.diagnostics },\n }\n}\n\n/**\n * Matches a `gql`-tagged or GraphQL-comment-annotated template literal. This\n * is a DELIBERATELY simple regex, not an AST pass (the compiler has no shared\n * TS-extraction helper — its tests inline SourceDocument fixtures): templates\n * must be single literals with no `${…}` interpolation, which is exactly the\n * shape the init scaffold demonstrates.\n */\nconst GQL_TEMPLATE_RE = /(?:\\bgql|\\/\\*\\s*GraphQL\\s*\\*\\/)\\s*`([^`]*)`/g\n\n/**\n * Collect operation documents: every `.graphql` file under `graphql/`\n * verbatim, plus templates extracted from every `.ts` file under `graphql/`.\n * Extracted templates get a\n * `#<n>` path suffix so diagnostics (and the server's stored provenance)\n * point at the right document inside a multi-operation file.\n */\nasync function collectGraphqlDocuments(dir: string): Promise<SourceDocument[]> {\n const root = join(dir, GRAPHQL_DIRNAME)\n const files = await walkFiles(root)\n const documents: SourceDocument[] = []\n for (const file of files) {\n const path = `${GRAPHQL_DIRNAME}/${file}`\n if (file.endsWith('.graphql') || file.endsWith('.gql')) {\n documents.push({ path, contents: await readFile(join(root, file), 'utf8') })\n continue\n }\n if (!file.endsWith('.ts') || file.endsWith('.d.ts')) continue\n const source = await readFile(join(root, file), 'utf8')\n let index = 0\n for (const match of source.matchAll(GQL_TEMPLATE_RE)) {\n const contents = match[1] ?? ''\n if (contents.includes('${')) {\n throw new OrmDefinitionError(\n `template interpolation is not supported in GraphQL documents — write each document as one literal (fragments may be colocated in the same template)`,\n path,\n )\n }\n documents.push({ path: `${path}#${index}`, contents })\n index += 1\n }\n }\n return documents\n}\n\nfunction printDiagnostics(diagnostics: readonly CompilerDiagnostic[]): void {\n for (const diagnostic of diagnostics) {\n const where = diagnostic.document\n ? ` (${diagnostic.document}${diagnostic.operation ? ` › ${diagnostic.operation}` : ''})`\n : diagnostic.table\n ? ` (table ${diagnostic.table})`\n : ''\n const line = `${diagnostic.severity}: [${diagnostic.code}] ${diagnostic.message}${where}`\n if (diagnostic.severity === 'error') console.error(line)\n else console.log(line)\n }\n}\n\n// ---------------------------------------------------------------------------\n// generate\n// ---------------------------------------------------------------------------\n\nasync function generateCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n if ((await detectProjectFormat(dir)) === 'v1') {\n console.error(`generate needs a v2 project (${NAMESPACE_CONFIG_FILE}) — convert with: seq-studio orm migrate-from-yaml ${dir}`)\n return 1\n }\n const compiled = await compileV2Project(dir)\n printDiagnostics(compiled.ok ? compiled.project.diagnostics : compiled.diagnostics)\n if (!compiled.ok) return 1\n await writeGenerateOutputs(dir, compiled.project)\n const { loaded, manifest } = compiled.project\n console.log(\n `wrote ${SCHEMA_GRAPHQL_FILE}, ${OPERATIONS_MANIFEST_FILE}, ${TYPE_POLICIES_FILE} ` +\n `(${loaded.canonical.tables.length} table(s), ${Object.keys(manifest.operations).length} operation(s))`,\n )\n return runConsumerCodegen(dir)\n}\n\n/** The three v2 generated outputs — written by `orm generate` and refreshed after every successful `orm apply`. */\nasync function writeGenerateOutputs(dir: string, project: V2Project): Promise<void> {\n const { loaded, sdl, manifest } = project\n await writeFile(join(dir, SCHEMA_GRAPHQL_FILE), sdl)\n const operations = Object.entries(manifest.operations).map(([name, op]) => ({\n name,\n hash: op.opHash,\n kind: op.kind,\n requires: op.requires,\n }))\n const manifestFile = buildOperationsManifest({ schemaHash: manifest.schemaHash, operations })\n await writeFile(join(dir, OPERATIONS_MANIFEST_FILE), `${JSON.stringify(manifestFile, null, 2)}\\n`)\n await writeFile(join(dir, TYPE_POLICIES_FILE), generateTypePolicies(loaded.canonical))\n}\n\n/**\n * Run the CONSUMER's graphql-codegen when `codegen.ts` is present — the\n * optional-peer pattern: `@graphql-codegen/cli` must resolve from the consumer\n * directory (it is never a dependency of this package); when it doesn't, skip\n * with a note rather than failing an otherwise-complete generate.\n */\nasync function runConsumerCodegen(dir: string): Promise<number> {\n const codegenPath = join(dir, CODEGEN_CONFIG_FILE)\n if (!(await stat(codegenPath).catch(() => undefined))?.isFile()) return 0\n\n let resolved: string\n try {\n resolved = createRequire(join(resolve(dir), 'package.json')).resolve('@graphql-codegen/cli')\n } catch {\n console.log(\n `${CODEGEN_CONFIG_FILE} present but '@graphql-codegen/cli' is not installed in ${dir} — ` +\n 'skipping consumer codegen (npm i -D @graphql-codegen/cli to enable)',\n )\n return 0\n }\n\n const jiti = createJiti(import.meta.url, { interopDefault: true, fsCache: false })\n const config: unknown = await jiti.import(resolve(dir, CODEGEN_CONFIG_FILE), { default: true })\n const module = (await import(pathToFileURL(resolved).href)) as {\n generate?: (config: unknown, saveToFile?: boolean) => Promise<unknown>\n }\n if (typeof module.generate !== 'function') {\n console.error(`'@graphql-codegen/cli' resolved from ${dir} exports no generate() — reinstall it, then retry`)\n return 1\n }\n // graphql-codegen resolves schema/documents/output paths from cwd.\n const previousCwd = process.cwd()\n try {\n process.chdir(dir)\n await module.generate(config, true)\n } finally {\n process.chdir(previousCwd)\n }\n console.log(`ran consumer graphql-codegen (${CODEGEN_CONFIG_FILE})`)\n return 0\n}\n\n// ---------------------------------------------------------------------------\n// validate (v2)\n// ---------------------------------------------------------------------------\n\n/**\n * The v2 gate: loader + canonical serialization + policy compile + a full\n * document-compile dry run (diagnostics surfaced), then the same offline\n * committed-ledger check as `orm diff --check` — keyed on the v2 canonical\n * hash, so a definitions edit without a regenerated migration fails here.\n */\nasync function validateV2Command(dir: string): Promise<number> {\n const compiled = await compileV2Project(dir)\n printDiagnostics(compiled.ok ? compiled.project.diagnostics : compiled.diagnostics)\n if (!compiled.ok) return 1\n const { loaded, manifest } = compiled.project\n\n console.log(\n `namespace ${loaded.canonical.namespace}: ${loaded.canonical.tables.length} table(s), ` +\n `${Object.keys(manifest.operations).length} operation(s) valid`,\n )\n console.log(`content hash ${loaded.hash}`)\n\n const workspace = await readMigrationWorkspace(dir, loaded.canonical.namespace)\n if (workspace.journal.entries.length === 0) {\n console.error(\n `missing committed migrations — every namespace carries its ${MIGRATIONS_DIRNAME}/ ledger; run \\`seq-studio orm diff\\` and commit the result`,\n )\n return 1\n }\n return diffV2Command({ dir, allowDestructive: false, check: true, rebase: false, log: console.log })\n}\n\n// ---------------------------------------------------------------------------\n// plan (v2)\n// ---------------------------------------------------------------------------\n\nasync function planV2Command(dir: string): Promise<number> {\n const loaded = await loadV2(dir)\n // Full plan from an empty schema — the offline \"what would this create\"\n // preview, exactly like the v1 plan (the incremental diff is `orm diff`).\n const plan = await planMigrationV2({ canonical: loaded.canonical })\n\n console.log(`-- namespace ${loaded.canonical.namespace} (content hash ${loaded.hash.slice(0, 12)}…)`)\n for (const statement of plan.statements) console.log(`${statement.sql};\\n`)\n\n // The registry keys v2 versions on the bare schema hash (what the server's\n // canonical recompile mints as content_hash), not the ledger's canonical hash.\n const registry = await fetchRegistryState(loaded.canonical.namespace, bareSchemaHash(loaded.canonical))\n return reportRegistryState(registry)\n}\n\n/** Registry content_hash for a v2 canonical: `computeSchemaHash` without its `sha256:` prefix. */\nfunction bareSchemaHash(canonical: CanonicalDefinition): string {\n return computeSchemaHash(canonical).replace(/^sha256:/, '')\n}\n\n/** Shared plan-command reporting for the registry comparison (v1 and v2). */\nfunction reportRegistryState(registry: RegistryState): number {\n if (registry.kind === 'offline') {\n console.log('-- registry: pass -e <env> (and seq-studio login) to compare against a deployment')\n return 0\n }\n if (registry.kind === 'missing') {\n // The route deliberately 404s for unauthorized reads too (no existence oracle).\n console.log('-- registry: namespace not registered (or you lack read access) — a first apply creates it')\n return 0\n }\n\n // hash_version is the server's exact lookup — the versions list is a\n // recent-history window and must never answer \"is this hash registered?\".\n const match = registry.hashVersion\n const active = registry.versions.find((version) => version.id === registry.activeVersionId)\n if (match && match.id === registry.activeVersionId) console.log('-- registry: this content is the ACTIVE version')\n else if (match) console.log(`-- registry: registered (status ${match.status}), not active`)\n else console.log(`-- registry: new content (active is ${active ? active.content_hash.slice(0, 12) : 'none'})`)\n return 0\n}\n\n// ---------------------------------------------------------------------------\n// diff (v2) — write / --check / --rebase\n// ---------------------------------------------------------------------------\n\n// File-layout constants mirrored from migrations/workspace.ts (module-private\n// there); the rebase writer must produce the exact same paths writeMigration does.\nconst META_DIRNAME = 'meta'\nconst JOURNAL_FILENAME = 'journal.json'\nconst padOrdinal = (ordinal: number): string => String(ordinal).padStart(4, '0')\n\ninterface DiffV2Options {\n readonly dir: string\n readonly allowDestructive: boolean\n readonly check: boolean\n readonly rebase: boolean\n readonly log: (line: string) => void\n}\n\n/**\n * The v2 twin of migrations/diff.ts diffCommand: append the next committed\n * migration (planMigrationV2 against the workspace tip), verify offline with\n * `--check`, or record a v1 -> v2 conversion with `--rebase`. Reuses the\n * migrations/workspace.ts ledger machinery exactly — same files, same\n * checksums, same journal schema.\n */\nasync function diffV2Command({ dir, allowDestructive, check, rebase, log }: DiffV2Options): Promise<number> {\n const loaded = await loadV2(dir)\n const workspace = await readMigrationWorkspace(dir, loaded.canonical.namespace)\n const tip = workspace.journal.entries.at(-1)\n\n if (rebase) return rebaseWorkspaceV2({ dir, loaded, workspace, log })\n if (check) return checkWorkspaceV2({ dir, loaded, workspace, tip, log })\n\n if (tip?.content_hash === loaded.hash) {\n log(`no changes — ${MIGRATIONS_DIRNAME}/${tip.name}.sql already matches the definitions`)\n return 0\n }\n\n const plan = await planMigrationV2({ canonical: loaded.canonical, previousSnapshot: workspace.tipSnapshot })\n const destructive = classifyDestructive(plan.statements)\n if (destructive.length > 0 && !allowDestructive) {\n log('destructive migration blocked — these statements lose data:')\n for (const statement of destructive) log(` ${firstLine(statement.sql)} -- ${statement.reason}`)\n log(\n \"retire columns in two phases (`.deprecated()` first, drop later), declare type changes with `.cast()`, or re-run with --allow-destructive to consent\",\n )\n return 1\n }\n\n const written = await writeMigration({\n dir,\n workspace,\n plan,\n contentHash: loaded.hash,\n destructive: destructive.length > 0,\n })\n log(\n `wrote ${MIGRATIONS_DIRNAME}/${written.name}.sql — ${plan.statements.length} statement(s)` +\n (written.destructive ? ' (DESTRUCTIVE — consented via --allow-destructive)' : ''),\n )\n return 0\n}\n\n/**\n * `orm diff --rebase` (the v1 -> v2 migration path): converting a namespace to\n * canonical v2 changes its CONTENT HASH while changing nothing in the\n * database, so the journal needs a bridge entry. Verify the v2 plan against\n * the committed tip snapshot is a byte-noop, then commit the zero-statement\n * rebase entry (sql + snapshot + journal — the same three files writeMigration\n * produces).\n */\nasync function rebaseWorkspaceV2({\n dir,\n loaded,\n workspace,\n log,\n}: {\n dir: string\n loaded: LoadedNamespaceV2\n workspace: MigrationWorkspace\n log: (line: string) => void\n}): Promise<number> {\n const namespace = loaded.canonical.namespace\n const tip = workspace.journal.entries.at(-1)\n if (!tip) {\n log('nothing to rebase — no committed migrations; run `seq-studio orm diff` to author the first migration')\n return 1\n }\n if (tip.content_hash === loaded.hash) {\n log(`already rebased — ${MIGRATIONS_DIRNAME}/${tip.name}.sql matches the v2 definitions`)\n return 0\n }\n\n const plan = await planMigrationV2({ canonical: loaded.canonical, previousSnapshot: workspace.tipSnapshot })\n if (!verifyRebaseIsNoop(plan)) {\n log('rebase must be a no-op — these statements mean the schema changed during the conversion:')\n for (const statement of rebaseViolations(plan.statements)) log(` ${statement.kind}: ${firstLine(statement.sql)}`)\n log('convert byte-identically first, rebase, then make schema changes with a normal `seq-studio orm diff`')\n return 1\n }\n\n const rebase = buildRebaseJournalEntry({\n namespace,\n previousHash: tip.content_hash,\n newHash: loaded.hash,\n ordinal: tip.ordinal + 1,\n snapshot: plan.snapshot,\n })\n const metaDir = join(dir, MIGRATIONS_DIRNAME, META_DIRNAME)\n await mkdir(metaDir, { recursive: true })\n await writeFile(join(dir, MIGRATIONS_DIRNAME, `${rebase.name}.sql`), rebase.sql)\n await writeFile(join(metaDir, `${padOrdinal(rebase.entry.ordinal)}.snapshot.json`), rebase.snapshotText)\n const journal = { ...workspace.journal, entries: [...workspace.journal.entries, rebase.entry] }\n await writeFile(join(metaDir, JOURNAL_FILENAME), `${JSON.stringify(journal, null, 2)}\\n`)\n log(`wrote ${MIGRATIONS_DIRNAME}/${rebase.name}.sql — rebase entry (verified no-op, zero statements)`)\n return 0\n}\n\n/**\n * The v2 offline CI gate — the v1 checkWorkspace walk (checksums, snapshot\n * chain, content-hash chain) plus a v2-aware tip regeneration: an ordinary tip\n * must regenerate byte-for-byte through planMigrationV2, and a rebase tip must\n * reproduce through buildRebaseJournalEntry on a verified-noop plan.\n */\nasync function checkWorkspaceV2({\n dir,\n loaded,\n workspace,\n tip,\n log,\n}: {\n dir: string\n loaded: LoadedNamespaceV2\n workspace: MigrationWorkspace\n tip: JournalEntry | undefined\n log: (line: string) => void\n}): Promise<number> {\n const namespace = loaded.canonical.namespace\n if (!tip) {\n log(`no committed migrations for '${namespace}' — run \\`seq-studio orm diff\\` and commit the result`)\n return 1\n }\n\n let previousId: unknown\n let previousHash: string | null = null\n for (const entry of workspace.journal.entries) {\n const sql = await readMigrationSql(dir, entry)\n if (checksumOf(sql) !== entry.checksum) {\n log(`${MIGRATIONS_DIRNAME}/${entry.name}.sql does not match its journal checksum — committed migrations must not be edited`)\n return 1\n }\n const snapshotText = await readSnapshotText(dir, entry.ordinal)\n if (checksumOf(snapshotText) !== entry.snapshot_checksum) {\n log(`the snapshot for ${entry.name} does not match its journal checksum — committed snapshots must not be edited (the next diff builds on it)`)\n return 1\n }\n const snapshot = JSON.parse(snapshotText) as { id?: unknown; prevId?: unknown }\n if (entry.ordinal > 1 && snapshot.prevId !== previousId) {\n log(`snapshot chain broken at ${entry.name} — regenerate the workspace with \\`seq-studio orm diff\\``)\n return 1\n }\n if (entry.previous_content_hash !== previousHash) {\n log(`content-hash chain broken at ${entry.name} — migrations must be appended in order by \\`seq-studio orm diff\\``)\n return 1\n }\n previousId = snapshot.id\n previousHash = entry.content_hash\n }\n\n if (tip.content_hash !== loaded.hash) {\n log(`definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`)\n return 1\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigrationV2({ canonical: loaded.canonical, previousSnapshot })\n const regenerated = renderMigrationSql({ name: tip.name, namespace, contentHash: loaded.hash, plan })\n const committed = await readMigrationSql(dir, tip)\n if (regenerated !== committed && !matchesRebaseTip({ committed, tip, namespace, plan })) {\n log(`${MIGRATIONS_DIRNAME}/${tip.name}.sql does not regenerate from the definitions — re-run \\`seq-studio orm diff\\``)\n return 1\n }\n\n log(`migrations in sync — ${workspace.journal.entries.length} committed, tip ${tip.name}`)\n return 0\n}\n\n/**\n * A rebase tip is deterministic from (journal entry, verified-noop plan), so\n * the check gate regenerates it exactly like ordinary migrations — via\n * buildRebaseJournalEntry instead of renderMigrationSql.\n */\nfunction matchesRebaseTip({\n committed,\n tip,\n namespace,\n plan,\n}: {\n committed: string\n tip: JournalEntry\n namespace: string\n plan: Awaited<ReturnType<typeof planMigrationV2>>\n}): boolean {\n if (tip.previous_content_hash === null) return false\n if (!verifyRebaseIsNoop(plan)) return false\n try {\n const rebase = buildRebaseJournalEntry({\n namespace,\n previousHash: tip.previous_content_hash,\n newHash: tip.content_hash,\n ordinal: tip.ordinal,\n snapshot: plan.snapshot,\n })\n return rebase.sql === committed\n } catch {\n return false\n }\n}\n\n// ---------------------------------------------------------------------------\n// apply (v2)\n// ---------------------------------------------------------------------------\n\ninterface RegisterV2Response {\n readonly namespace: string\n readonly version_id: string\n readonly content_hash: string\n readonly ops_hash: string | null\n readonly operation_set_id: string | null\n readonly created: boolean\n}\n\ntype ApplyV2Response =\n | {\n ops_only: true\n operation_set_id: string | null\n ops_hash: string | null\n already_active: boolean\n duration_ms: number\n }\n | { status: 'queued'; version_id: string; run_id: string | null }\n | {\n ordinal: number | null\n statements_executed: number\n statements_healed: number\n already_active: boolean\n duration_ms: number\n }\n\nasync function applyV2Command(rest: readonly string[], dir: string): Promise<number> {\n const allowDestructive = rest.includes('--allow-destructive')\n const dryRun = rest.includes('--dry-run')\n const noCreate = rest.includes('--no-create')\n\n // Same discipline as the v1 apply: author the committed migration as part of\n // applying (a no-op when the ledger tip matches), then run the full validate\n // gate so an apply can never register content whose migration was never\n // generated or whose documents don't compile.\n if ((await diffV2Command({ dir, allowDestructive, check: false, rebase: false, log: (line) => console.log(line) })) !== 0) {\n return 1\n }\n if ((await validateV2Command(dir)) !== 0) return 1\n\n const compiled = await compileV2Project(dir)\n if (!compiled.ok) {\n printDiagnostics(compiled.diagnostics) // unreachable after validate; defensive\n return 1\n }\n const { loaded, sdl, documents, manifest } = compiled.project\n const namespace = loaded.canonical.namespace\n\n const workspace = await readMigrationWorkspace(dir, namespace)\n const migration = await loadCommittedTipMigrationV2({ dir, loaded, workspace })\n\n const registered = await apiRequestStrict<RegisterV2Response>('POST', '/api/orm/namespaces', {\n // Push payload v2 (plan §8) — the server recompiles canonically and\n // cross-checks this manifest; a mismatch is CLI/server version skew.\n canonical_definition: loaded.canonical,\n documents,\n client_manifest: {\n ops_hash: manifest.opsHash,\n operations: Object.fromEntries(Object.entries(manifest.operations).map(([name, op]) => [name, op.opHash])),\n },\n sdl,\n ...(workspace.tipSnapshot !== undefined ? { schema_snapshot: workspace.tipSnapshot } : {}),\n ...(migration ? { migration } : {}),\n // The server refuses to create a new namespace under --no-create, atomically\n // inside the register transaction (no preflight TOCTOU).\n ...(noCreate ? { no_create: true } : {}),\n })\n console.log(\n (registered.created\n ? `registered ${namespace}@${registered.content_hash.slice(0, 12)}`\n : `already registered ${namespace}@${registered.content_hash.slice(0, 12)}`) +\n (registered.ops_hash ? ` (ops ${registered.ops_hash.slice(0, 19)})` : '') +\n (migration ? ` with committed migration ${migration.name}` : ''),\n )\n\n // --dry-run stops here: rehearse on a copy-on-write fork of this\n // environment's real data and report, WITHOUT the real apply.\n if (dryRun) return dryRunRehearsal({ namespace, versionId: registered.version_id, contentHash: registered.content_hash })\n\n // Fast-path awareness (plan §8): when the registered version is ALREADY the\n // active schema version, the only thing left to activate is the operation\n // set — pass its id so the server flips EXACTLY the set this push\n // registered. When the schema version is not active, a full apply runs\n // instead (never with operation_set_id — the server 409s that combination);\n // the full apply activates the newest operation set for the version\n // atomically with the pointer, so the documents still land.\n const registry = await fetchRegistryState(namespace, registered.content_hash)\n const schemaAlreadyActive = registry.kind === 'found' && registry.activeVersionId === registered.version_id\n const applied = await apiRequestStrict<ApplyV2Response>('POST', `/api/orm/namespaces/${namespace}/apply`, {\n version_id: registered.version_id,\n ...(allowDestructive ? { allow_destructive: true } : {}),\n ...(schemaAlreadyActive && registered.operation_set_id ? { operation_set_id: registered.operation_set_id } : {}),\n })\n\n if ('ops_only' in applied) {\n console.log(\n applied.already_active\n ? `${namespace} is already serving this operation set — no-op`\n : `applied ${namespace}: ops-only fast path — operation set ${applied.operation_set_id ?? 'none'} is live (${applied.duration_ms}ms)`,\n )\n return refreshGenerateOutputs(dir, compiled.project)\n }\n if ('status' in applied) {\n console.log(`queued (run ${applied.run_id ?? 'unknown'}) — waiting for the apply to finish…`)\n const verdict = await waitForQueuedApply(namespace, registered.content_hash, applied.run_id)\n return verdict === 0 ? refreshGenerateOutputs(dir, compiled.project) : verdict\n }\n if (applied.already_active) {\n console.log(`${namespace} is already active at this version — no-op`)\n return refreshGenerateOutputs(dir, compiled.project)\n }\n console.log(\n `applied ${namespace}: ledger #${applied.ordinal}, ${applied.statements_executed} statement(s)` +\n `${applied.statements_healed > 0 ? ` (${applied.statements_healed} healed)` : ''} in ${applied.duration_ms}ms`,\n )\n return refreshGenerateOutputs(dir, compiled.project)\n}\n\n/**\n * Generated outputs refresh on every successful apply — the v2 replacement of\n * writeGeneratedTypes: the same definitions that shaped the live schema shape\n * the committed schema.graphql / manifest / type policies, so they can't\n * drift apart. A write failure exits 1 with the state spelled out: the APPLY\n * has already succeeded.\n */\nasync function refreshGenerateOutputs(dir: string, project: V2Project): Promise<number> {\n try {\n await writeGenerateOutputs(dir, project)\n } catch (error) {\n console.error(\n `could not refresh generated outputs in ${dir}: ${error instanceof Error ? error.message : String(error)} — ` +\n `the apply itself succeeded; re-run \\`seq-studio orm generate ${dir}\\` to refresh them`,\n )\n return 1\n }\n console.log(`wrote ${SCHEMA_GRAPHQL_FILE}, ${OPERATIONS_MANIFEST_FILE}, ${TYPE_POLICIES_FILE}`)\n return 0\n}\n\ninterface CommittedMigrationV2Payload {\n readonly name: string\n readonly ordinal: number\n readonly previous_content_hash: string | null\n readonly destructive: boolean\n readonly checksum: string\n readonly statements: readonly CompiledStatement[]\n readonly chain: ReadonlyArray<{ name: string; contentHash: string; previousContentHash: string | null }>\n}\n\n/**\n * The v2 twin of migrations/committed.ts loadCommittedTipMigration: load the\n * workspace tip as a registration payload, regenerating through\n * planMigrationV2 and byte-comparing (rebase tips reproduce through\n * buildRebaseJournalEntry). Returns undefined when there is no workspace OR\n * when the tip carries zero statements — the server's committed-migration\n * schema requires at least one, and a statement-less tip (a rebase) has no\n * replayable DDL to carry anyway.\n */\nasync function loadCommittedTipMigrationV2({\n dir,\n loaded,\n workspace,\n}: {\n dir: string\n loaded: LoadedNamespaceV2\n workspace: MigrationWorkspace\n}): Promise<CommittedMigrationV2Payload | undefined> {\n const namespace = loaded.canonical.namespace\n const tip = workspace.journal.entries.at(-1)\n if (!tip) return undefined\n\n if (tip.content_hash !== loaded.hash) {\n throw new OrmDefinitionError(\n `definitions changed since ${tip.name} — run \\`seq-studio orm diff\\` and commit the new migration`,\n `${MIGRATIONS_DIRNAME}/${META_DIRNAME}/${JOURNAL_FILENAME}`,\n )\n }\n\n const previousSnapshot = tip.ordinal > 1 ? await readSnapshot(dir, tip.ordinal - 1) : undefined\n const plan = await planMigrationV2({ canonical: loaded.canonical, previousSnapshot })\n const committed = await readMigrationSql(dir, tip)\n const regenerated = renderMigrationSql({ name: tip.name, namespace, contentHash: loaded.hash, plan })\n if (regenerated !== committed && !matchesRebaseTip({ committed, tip, namespace, plan })) {\n throw new OrmDefinitionError(\n `${tip.name}.sql does not regenerate from the definitions — run \\`seq-studio orm diff --check\\``,\n MIGRATIONS_DIRNAME,\n )\n }\n if (plan.statements.length === 0) return undefined\n\n return {\n name: tip.name,\n ordinal: tip.ordinal,\n previous_content_hash: tip.previous_content_hash,\n destructive: tip.destructive,\n checksum: tip.checksum,\n statements: plan.statements,\n // The FULL committed chain rides along (plan ancestry, not executable SQL)\n // so a replay-only environment lagging by more than one migration can\n // verify catch-up ancestry from the registry alone.\n chain: workspace.journal.entries.map((entry) => ({\n name: entry.name,\n contentHash: entry.content_hash,\n previousContentHash: entry.previous_content_hash,\n })),\n }\n}\n\n// ---------------------------------------------------------------------------\n// migrate-from-yaml — v1 YAML → v2 TypeScript\n// ---------------------------------------------------------------------------\n\n/**\n * `orm migrate-from-yaml <dir>`: convert the v1 YAML definitions to canonical\n * v2 (migrations/from-yaml.ts), emit the equivalent TypeScript authoring\n * files, self-check that the emitted project loads back to the EXACT same\n * canonical, then remove the YAML files. `migrations/` is preserved verbatim;\n * the printed follow-up (`orm diff --rebase`) records the content-hash\n * discontinuity as a verified no-op journal entry.\n */\nasync function migrateFromYamlCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest)\n if (!dir) {\n console.error('migrate-from-yaml requires a namespace directory')\n return 1\n }\n if ((await detectProjectFormat(dir)) === 'v2') {\n console.error(`${dir} is already a v2 project (${NAMESPACE_CONFIG_FILE} present) — nothing to convert`)\n return 1\n }\n\n const v1 = await loadNamespaceDefinition(dir)\n const canonical = convertV1DefinitionToCanonical(v1.definition)\n\n await writeConverted(join(dir, NAMESPACE_CONFIG_FILE), emitSequenceConfig(canonical))\n await mkdir(join(dir, SCHEMA_DIR), { recursive: true })\n await writeConverted(join(dir, SCHEMA_DIR, 'tables.ts'), emitSchemaTables(canonical))\n\n // Round-trip self-check BEFORE deleting anything: the emitted TypeScript\n // must load and serialize back to the exact converted canonical — the same\n // property `orm diff --rebase` will rely on.\n const reloaded = await loadV2(dir)\n if (JSON.stringify(sortKeys(reloaded.canonical)) !== JSON.stringify(sortKeys(canonical))) {\n console.error(\n 'conversion self-check failed — the emitted TypeScript does not round-trip to the converted canonical; ' +\n `the YAML files were left in place (remove ${NAMESPACE_CONFIG_FILE} and ${SCHEMA_DIR}/ to retry)`,\n )\n return 1\n }\n for (const file of v1.files) await rm(join(dir, file))\n\n console.log(\n `converted ${canonical.namespace}: wrote ${NAMESPACE_CONFIG_FILE} + ${SCHEMA_DIR}/tables.ts, ` +\n `removed ${v1.files.length} YAML file(s), preserved ${MIGRATIONS_DIRNAME}/`,\n )\n console.log(\n `next: seq-studio orm diff --rebase ${dir} (records the v1 -> v2 content-hash discontinuity as a verified no-op journal entry — review and commit it)`,\n )\n return 0\n}\n\nasync function writeConverted(path: string, contents: string): Promise<void> {\n try {\n await writeFile(path, contents, { flag: 'wx' })\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n throw new OrmDefinitionError(`refusing to overwrite existing ${path} — remove it to re-run the conversion`)\n }\n throw error\n }\n}\n\n/** Deep key-sort for canonical comparison (JSON.stringify drops undefined-valued keys, so absent == undefined). */\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys)\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, entry]) => [key, sortKeys(entry)]),\n )\n }\n return value\n}\n\n// --- TypeScript emitters (pragmatic: exact fidelity for the v1 grammar — the\n// --- 10 column types, toOne links, policy source strings, and actions).\n\nconst quote = (value: string): string => JSON.stringify(value)\n\n/** JSON pretty-printed as a TS literal, with continuation lines re-indented. */\nfunction jsonLiteral(value: unknown, indent: number): string {\n const pad = ' '.repeat(indent)\n return JSON.stringify(value, null, 2)\n .split('\\n')\n .map((line, index) => (index === 0 ? line : pad + line))\n .join('\\n')\n}\n\nfunction emitSequenceConfig(canonical: CanonicalDefinition): string {\n const lines: string[] = [\n \"import { defineNamespace } from '@sequenceholdings/orm'\",\n '',\n '/**',\n ' * Generated by `seq-studio orm migrate-from-yaml` from the v1 YAML definitions.',\n ' * Capabilities and roles are DECLARED here (verbatim custom-roles grammar);',\n ' * who HOLDS them is granted in the Permissions UI (FGA), never in code.',\n ' */',\n 'export default defineNamespace({',\n ` namespace: ${quote(canonical.namespace)},`,\n ]\n if (canonical.description !== undefined) lines.push(` description: ${quote(canonical.description)},`)\n const { roles, uses } = canonical.capabilities\n if (roles !== undefined || uses.length > 0) {\n lines.push(' capabilities: {')\n if (roles !== undefined) lines.push(` roles: ${jsonLiteral(roles, 4)},`)\n lines.push(` uses: ${jsonLiteral(uses, 4)},`)\n lines.push(' },')\n }\n lines.push('})', '')\n return lines.join('\\n')\n}\n\nfunction emitSchemaTables(canonical: CanonicalDefinition): string {\n const columnTables = canonical.tables.filter((table) => table.source === undefined)\n const syncedTables = canonical.tables.filter((table) => table.source !== undefined)\n const hasLinks = canonical.tables.some((table) => table.links.length > 0)\n\n const imports = [\n ...(columnTables.length > 0 ? ['defineTable'] : []),\n ...(syncedTables.length > 0 ? ['defineSyncedTable'] : []),\n ...(columnTables.length > 0 ? ['t'] : []),\n ...(hasLinks ? ['toOne'] : []),\n ].sort((a, b) => a.localeCompare(b))\n\n const parts: string[] = [\n `import { ${imports.join(', ')} } from '@sequenceholdings/orm'`,\n '',\n '/**',\n ' * Generated by `seq-studio orm migrate-from-yaml` from the v1 YAML definitions.',\n ' * Property names ARE the v1 Postgres column names, so the serialized canonical',\n ' * (and therefore the migration plan) is identical to the conversion output.',\n ' */',\n '',\n ]\n for (const table of canonical.tables) {\n parts.push(table.source !== undefined ? emitSyncedTable(table) : emitTable(table))\n }\n return parts.join('\\n')\n}\n\nfunction emitSyncedTable(table: CanonicalTable): string {\n const lines = [\n `export const ${tableVarName(table.table)} = defineSyncedTable(${quote(table.table)}, {`,\n // `source` is guaranteed by the caller's filter.\n ` source: ${quote(table.source ?? '')},`,\n ]\n if (table.description !== undefined) lines.push(` description: ${quote(table.description)},`)\n lines.push('})', '')\n return lines.join('\\n')\n}\n\nfunction emitTable(table: CanonicalTable): string {\n const singlePrimaryKey = table.primaryKey?.length === 1 ? table.primaryKey[0] : undefined\n const lines: string[] = [`export const ${tableVarName(table.table)} = defineTable(`, ` ${quote(table.table)},`, ' {']\n for (const column of table.columns) lines.push(` ${columnProperty(table.table, column, singlePrimaryKey)}`)\n lines.push(' },')\n const config = emitTableConfig(table, singlePrimaryKey)\n if (config.length > 0) lines.push(' {', ...config, ' },')\n lines.push(')', '')\n return lines.join('\\n')\n}\n\nfunction columnProperty(table: string, column: CanonicalColumn, singlePrimaryKey: string | undefined): string {\n if (typeof column.type !== 'string') {\n // v1 has no enum columns, so the emitter never needs t.enum()/defineEnum.\n throw new OrmDefinitionError(`column '${table}.${column.columnName}' has an enum type — not a v1 conversion output`)\n }\n const propertyName = column.name\n if (!/^[a-z_][a-zA-Z0-9_$]*$/.test(propertyName)) {\n throw new OrmDefinitionError(`column '${table}.${propertyName}' cannot be emitted as a TS property name`)\n }\n // Property name == v1 column name; snake_case derives to itself, so the\n // explicit override is only needed when the derivation would diverge.\n const explicitName = deriveColumnName(propertyName) === column.columnName ? '' : quote(column.columnName)\n\n let chain = `t.${column.type}(${explicitName})`\n if (column.columnName === singlePrimaryKey) chain += '.primaryKey()'\n else if (!column.nullable) chain += '.notNull()'\n if (column.unique) chain += '.unique()'\n if (column.defaultFn !== undefined) {\n chain += `.default(${quote(column.defaultFn)})`\n } else if (column.default !== undefined) {\n if (column.default === 'gen_random_uuid()' || column.default === 'now()') {\n // The builder classifies these strings as defaultFn — a v1 LITERAL of\n // the same spelling has no v2 representation; fail loudly over drifting.\n throw new OrmDefinitionError(\n `column '${table}.${column.columnName}' has literal default ${quote(String(column.default))} which the v2 builder would reclassify as a function default`,\n )\n }\n chain += `.default(${JSON.stringify(column.default)})`\n }\n if (column.description !== undefined) chain += `.description(${quote(column.description)})`\n if (column.renamedFrom !== undefined) chain += `.renamedFrom(${quote(column.renamedFrom)})`\n if (column.cast !== undefined) chain += `.cast(${quote(column.cast)})`\n if (column.deprecated) chain += '.deprecated()'\n return `${propertyName}: ${chain},`\n}\n\nfunction emitTableConfig(table: CanonicalTable, singlePrimaryKey: string | undefined): string[] {\n const lines: string[] = []\n if (table.description !== undefined) lines.push(` description: ${quote(table.description)},`)\n if (table.renamedFrom !== undefined) lines.push(` renamedFrom: ${quote(table.renamedFrom)},`)\n if (singlePrimaryKey === undefined && table.primaryKey && table.primaryKey.length > 0) {\n lines.push(` primaryKey: ${jsonLiteral(table.primaryKey, 4)},`)\n }\n if (table.indexes.length > 0) lines.push(` indexes: ${jsonLiteral(table.indexes, 4)},`)\n if (table.links.length > 0) {\n lines.push(' links: {')\n for (const link of table.links) {\n if (link.kind !== 'toOne' || link.target === undefined) {\n throw new OrmDefinitionError(`link '${link.name}' on '${table.table}' is not a toOne link — not a v1 conversion output`)\n }\n const options = [`on: ${quote(link.on)}`]\n if (link.references !== undefined) options.push(`references: ${quote(link.references)}`)\n if (link.enforce) options.push('enforce: true')\n if (link.description !== undefined) options.push(`description: ${quote(link.description)}`)\n lines.push(` ${objectKey(link.name)}: toOne(() => ${tableVarName(link.target)}, { ${options.join(', ')} }),`)\n }\n lines.push(' },')\n }\n if (table.policies.read !== undefined || table.policies.write !== undefined) {\n lines.push(' policies: {')\n if (table.policies.read !== undefined) lines.push(` read: ${policyLiteral(table.policies.read)},`)\n if (table.policies.write !== undefined) lines.push(` write: ${policyLiteral(table.policies.write)},`)\n lines.push(' },')\n }\n if (table.actions.length > 0) lines.push(` actions: ${jsonLiteral(table.actions, 4)},`)\n return lines\n}\n\nfunction policyLiteral(policy: CanonicalTable['policies']['read']): string {\n // v1 conversions always carry policy SOURCE STRINGS; the object form is\n // handled for completeness (canonical allows it).\n return typeof policy === 'string' ? quote(policy) : jsonLiteral(policy, 6)\n}\n\nconst objectKey = (name: string): string => (/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : quote(name))\n\n/** Table names are valid TS identifiers by grammar; dodge collisions with the emitted imports and reserved words. */\nconst EMITTER_RESERVED = new Set([\n 'defineTable', 'defineSyncedTable', 'defineNamespace', 'defineEnum', 't', 'toOne', 'toMany', 'toPlatformUser',\n 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'else', 'enum',\n 'export', 'extends', 'false', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'let', 'new',\n 'null', 'package', 'private', 'protected', 'public', 'return', 'static', 'super', 'switch', 'this', 'throw',\n 'true', 'try', 'typeof', 'var', 'void', 'while', 'with', 'yield', 'await', 'implements', 'interface',\n])\n\nconst tableVarName = (table: string): string => (EMITTER_RESERVED.has(table) ? `${table}_table` : table)\n\n// ---------------------------------------------------------------------------\n// v1 commands (unchanged behavior; the YAML path stays supported until the\n// live namespaces rebase onto v2)\n// ---------------------------------------------------------------------------\n\nasync function validateCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const loaded = await loadNamespaceDefinition(dir)\n // Compile too, so action functions (claims grammar, validates targets,\n // RETURNING/returns) are checked here — not just at plan/apply.\n await compileNamespace(loaded.definition)\n const actions = loaded.definition.tables.reduce((total, table) => total + Object.keys(table.actions ?? {}).length, 0)\n console.log(`namespace ${loaded.definition.namespace}: ${loaded.definition.tables.length} table(s), ${actions} action(s) valid`)\n console.log(`content hash ${loaded.contentHash}`)\n\n // A definitions edit without a regenerated migration is the most common\n // way to drift — when a committed-migration workspace exists, validate\n // runs the same offline gate as `orm diff --check` (checksums, snapshot\n // chain, tip regenerates byte-for-byte from these definitions).\n const workspace = await readMigrationWorkspace(dir, loaded.definition.namespace)\n if (workspace.journal.entries.length === 0) {\n console.error(\n `missing committed migrations — every namespace carries its ${MIGRATIONS_DIRNAME}/ ledger; run \\`seq-studio orm diff\\` and commit the result`,\n )\n return 1\n }\n return diffCommand({ dir, allowDestructive: false, check: true, log: console.log })\n}\n\n/**\n * Every server-touching command validates first — the same gate as\n * `orm validate` (definitions parse + the committed ledger is in sync), so\n * an apply can never register content whose migration was never generated.\n */\nasync function requireValidated(dir: string): Promise<boolean> {\n return (await validateCommand([dir])) === 0\n}\n\nasync function planCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const loaded = await loadNamespaceDefinition(dir)\n const compiled = await compileNamespace(loaded.definition)\n\n console.log(`-- namespace ${loaded.definition.namespace} (content hash ${loaded.contentHash.slice(0, 12)}…)`)\n for (const statement of compiled.statements) console.log(`${statement.sql};\\n`)\n\n const registry = await fetchRegistryState(loaded.definition.namespace, loaded.contentHash)\n return reportRegistryState(registry)\n}\n\nasync function applyCommand(rest: readonly string[]): Promise<number> {\n const dir = positional(rest) ?? '.'\n const allowDestructive = rest.includes('--allow-destructive')\n const dryRun = rest.includes('--dry-run')\n // --no-create mirrors `functions deploy --no-provision` / `artifact deploy\n // --no-create`: CI updates only namespaces a human already registered, so a\n // pipeline never silently provisions a brand-new namespace (which also\n // publishes/pins its Custom-Roles capabilities). First provisioning stays a\n // deliberate human step.\n const noCreate = rest.includes('--no-create')\n\n // Author the committed migration AS PART OF applying: generate and write the\n // next migration under <dir>/migrations/ — a no-op when the ledger tip already\n // matches the definitions. The everyday loop is one command (edit YAML →\n // apply), and the file that lands is exactly what CI's offline `diff --check`\n // verifies. Data-losing DDL still needs --allow-destructive; diffCommand\n // refuses to author it otherwise.\n if ((await diffCommand({ dir, allowDestructive, check: false, log: (line) => console.log(line) })) !== 0) return 1\n if (!(await requireValidated(dir))) return 1\n const loaded = await loadNamespaceDefinition(dir)\n const namespace = loaded.definition.namespace\n\n // A committed workspace rides along so replay-only environments can verify\n // the apply against the reviewed migration. The FULL committed chain rides\n // with it too (the tip plus its whole ancestry) so a replay-only environment\n // lagging by more than one migration can catch up from the registry alone —\n // the intervening migrations need never have been registered there. Dev loops\n // without a workspace register definitions alone.\n const tip = await loadCommittedTipMigration(dir, loaded)\n const migration = tip ? { ...tip, chain: await loadCommittedMigrations(dir, loaded) } : undefined\n const registered = await apiRequestStrict<{ version_id: string; content_hash: string; created: boolean }>(\n 'POST',\n '/api/orm/namespaces',\n {\n files: await readDefinitionFiles(dir, loaded.files),\n ...(migration ? { migration } : {}),\n // The server refuses to create a new namespace under --no-create, atomically\n // inside the register transaction (no preflight TOCTOU).\n ...(noCreate ? { no_create: true } : {}),\n },\n )\n console.log(\n (registered.created\n ? `registered ${namespace}@${registered.content_hash.slice(0, 12)}`\n : `already registered ${namespace}@${registered.content_hash.slice(0, 12)}`) +\n (migration ? ` with committed migration ${migration.name}` : ''),\n )\n\n // --dry-run stops here: rehearse the plan on a copy-on-write fork of this\n // environment's real data and report, WITHOUT the real apply. (The offline,\n // no-database preview is `orm plan`; this is the \"survives the data\" check.)\n if (dryRun) return dryRunRehearsal({ namespace, versionId: registered.version_id, contentHash: registered.content_hash })\n\n const applied = await apiRequestStrict<\n | {\n ordinal: number | null\n statements_executed: number\n statements_healed: number\n already_active: boolean\n duration_ms: number\n }\n | { status: 'queued'; version_id: string; run_id: string | null; already_active?: false }\n >('POST', `/api/orm/namespaces/${namespace}/apply`, {\n version_id: registered.version_id,\n ...(allowDestructive ? { allow_destructive: true } : {}),\n })\n\n if ('status' in applied) {\n console.log(`queued (run ${applied.run_id ?? 'unknown'}) — waiting for the apply to finish…`)\n const verdict = await waitForQueuedApply(namespace, registered.content_hash, applied.run_id)\n return verdict === 0 ? writeGeneratedTypes(dir, loaded) : verdict\n }\n if (applied.already_active) {\n console.log(`${namespace} is already active at this version — no-op`)\n return writeGeneratedTypes(dir, loaded)\n }\n console.log(\n `applied ${namespace}: ledger #${applied.ordinal}, ${applied.statements_executed} statement(s)` +\n `${applied.statements_healed > 0 ? ` (${applied.statements_healed} healed)` : ''} in ${applied.duration_ms}ms`,\n )\n return writeGeneratedTypes(dir, loaded)\n}\n\nconst APPLY_POLL_INTERVAL_MS = 2_500\n\n/**\n * Poll THE RUN for the verdict — the version's durable status can't answer\n * \"did my run finish\" (a re-apply of a previously failed version reads\n * 'failed' before the run starts). On a verdict, the version's exact `hash`\n * lookup supplies the human detail. No overall deadline — DDL on a large\n * namespace takes as long as it takes; interrupt with Ctrl-C.\n */\nasync function waitForQueuedApply(\n namespace: string,\n contentHash: string,\n runId: string | null,\n): Promise<number> {\n let lastStatus: string | null = null\n // A run id that keeps 404ing (not a brief blip) means the run record is gone\n // for good — after this many CONSECUTIVE misses, fall back to the durable\n // status so a genuinely-failed run whose record expired can't be polled\n // forever. ~20s at the 2.5s interval: ample for a real run to (re)appear.\n const MISSING_RUN_POLL_LIMIT = 8\n let missingRunPolls = 0\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, APPLY_POLL_INTERVAL_MS))\n // allow404: the Trigger run id can stop resolving mid-poll (retention /\n // a brief post-enqueue window), which must NOT abort a running apply — fall\n // through to the version's durable status below, which is authoritative for\n // \"did this land\". A hard error (auth/5xx) still throws.\n const run = runId\n ? await apiRequest<{ status: string; verdict: 'succeeded' | 'failed' | null }>(\n 'GET',\n `/api/orm/namespaces/${namespace}/apply?run=${runId}`,\n undefined,\n { allow404: true },\n )\n : null\n if (run) missingRunPolls = 0\n else if (runId) missingRunPolls++\n\n if (run && run.verdict === null) {\n if (run.status !== lastStatus) {\n lastStatus = run.status\n console.log(`… ${run.status.toLowerCase()}`)\n }\n continue\n }\n\n const body = await apiRequestStrict<{\n namespace: { active_version_id: string | null }\n hash_version: { id: string; status: string; status_detail: string | null } | null\n }>('GET', `/api/orm/namespaces/${namespace}?hash=${contentHash}`)\n const version = body.hash_version\n // The sound \"this run succeeded\" signal is that THIS version is now the\n // namespace's active pointer — not its durable `status`. Durable status\n // records the content's history, not this run: a re-applied-then-deactivated\n // version keeps `applied`, and a re-applied previously-failed version keeps\n // `failed` until this run flips it. So neither status value, on its own, can\n // be trusted while the run is gone (a 404).\n const isActive = version != null && body.namespace.active_version_id === version.id\n\n // THE RUN VERDICT IS AUTHORITATIVE — check failure FIRST. A rejected apply\n // (e.g. destructive without consent) that targeted an already-applied\n // version leaves that version's durable status 'applied', so ordering the\n // success check first would report a failed run as success.\n if (run?.verdict === 'failed') {\n const detail = version?.status_detail ?? 'no detail recorded'\n console.error(`apply failed (run ${run.status.toLowerCase()}): ${detail}`)\n if (version?.status === 'applying') {\n console.error('re-run `seq-studio orm apply` — the retry heals the committed DDL and reconciles the registry')\n }\n return 1\n }\n // Success = the run says so, OR (when the run is gone) this version is now\n // the active pointer. A 404 poll (allow404 → null) never concludes from\n // durable `applied`/`failed` alone — both can be a prior apply's leftover\n // during a re-apply — so we keep polling until the run resolves or the\n // pointer moves to this version.\n if (run?.verdict === 'succeeded' || isActive) {\n console.log(`applied ${namespace} — the version is now active`)\n return 0\n }\n // Durable `failed` is a trustworthy failure verdict ONLY when there is no run\n // to poll (older server response). With a runId, failure must come from the\n // run verdict — never from a 404 + stale durable status.\n if (!runId && version?.status === 'failed') {\n console.error(`apply failed: ${version.status_detail ?? 'no detail recorded'}`)\n return 1\n }\n // Bounded missing-run fallback: a transient 404 above doesn't trust durable\n // status, but a run unretrievable for MISSING_RUN_POLL_LIMIT consecutive\n // polls is gone for good — stop waiting. A genuine success would already\n // have shown via the active pointer; a run that vanished without activating\n // this version did not succeed, so surface the durable failure (or an\n // unknown-status prompt to re-run) instead of polling forever.\n if (runId && missingRunPolls >= MISSING_RUN_POLL_LIMIT) {\n if (version?.status === 'failed') {\n console.error(`apply failed: ${version.status_detail ?? 'no detail recorded'}`)\n } else {\n console.error(\n `apply status unknown — run ${runId} is no longer retrievable and ${namespace} is not active at this ` +\n `version (last durable status: ${version?.status ?? 'unknown'}). Re-run \\`seq-studio orm apply\\`.`,\n )\n }\n return 1\n }\n }\n}\n\ninterface RehearsalRecord {\n status: string\n detail: string | null\n statements_executed: number | null\n statements_pending: number | null\n}\n\n/**\n * `orm apply --dry-run`: rehearse the registered version on a copy-on-write\n * fork of this environment's real data and report — the fork is discarded, so\n * nothing real changes. Deployed environments run it async on the Trigger\n * worker (a branch fork takes minutes); local dev runs it inline. Exit 0 only\n * when the rehearsal converged.\n */\nasync function dryRunRehearsal({\n namespace,\n versionId,\n contentHash,\n}: {\n namespace: string\n versionId: string\n contentHash: string\n}): Promise<number> {\n const { rehearsal } = await apiRequestStrict<{\n rehearsal: { status: string; run_id?: string | null; runId?: string | null } | null\n }>('POST', `/api/orm/namespaces/${namespace}/diff`, { version_id: versionId, rehearse: true })\n\n if (!rehearsal) {\n console.log(`${namespace} is already active at this version — nothing to rehearse`)\n return 0\n }\n if (rehearsal.status === 'queued') {\n console.log(\n `rehearsal queued (run ${rehearsal.run_id ?? rehearsal.runId ?? 'unknown'}) — forking a copy of the data (this can take a few minutes)…`,\n )\n return waitForRehearsal(namespace, contentHash)\n }\n // Ran inline — read the durable record for the full statement counts.\n return reportRehearsal(await fetchRehearsal(namespace, contentHash))\n}\n\nconst REHEARSAL_POLL_INTERVAL_MS = 2_500\n\n/** Poll the version's durable rehearsal record until it reaches a terminal verdict. */\nasync function waitForRehearsal(namespace: string, contentHash: string): Promise<number> {\n let lastStatus: string | null = null\n for (;;) {\n await new Promise((resolve) => setTimeout(resolve, REHEARSAL_POLL_INTERVAL_MS))\n const record = await fetchRehearsal(namespace, contentHash)\n if (record && (record.status === 'passed' || record.status === 'failed')) return reportRehearsal(record)\n const status = record?.status ?? 'pending'\n if (status !== lastStatus) {\n lastStatus = status\n console.log(`… ${status}`)\n }\n }\n}\n\nasync function fetchRehearsal(namespace: string, contentHash: string): Promise<RehearsalRecord | null> {\n const body = await apiRequestStrict<{ hash_version: { rehearsal: RehearsalRecord | null } | null }>(\n 'GET',\n `/api/orm/namespaces/${namespace}?hash=${contentHash}`,\n )\n return body.hash_version?.rehearsal ?? null\n}\n\nfunction reportRehearsal(record: RehearsalRecord | null): number {\n if (!record) {\n console.error('rehearsal produced no record — re-run `seq-studio orm apply --dry-run`')\n return 1\n }\n if (record.status === 'passed') {\n console.log(\n `rehearsal passed — ${record.statements_executed ?? 0} statement(s) ran on a copy of the data and the schema converged`,\n )\n return 0\n }\n console.error(`rehearsal failed: ${record.detail ?? 'no detail recorded'}`)\n return 1\n}\n\n/**\n * v1 types regenerate on every successful apply — the same definitions that\n * shaped the live schema shape the client, so they can't drift apart. (The\n * v2 equivalent is refreshGenerateOutputs; v2 also has a standalone\n * `orm generate` because its outputs feed consumer codegen.) A write failure\n * exits 1 with the state spelled out: the APPLY has already succeeded.\n */\nasync function writeGeneratedTypes(\n dir: string,\n loaded: Awaited<ReturnType<typeof loadNamespaceDefinition>>,\n): Promise<number> {\n const outPath = join(dir, 'types.gen.ts')\n try {\n await writeFile(outPath, generateNamespaceTypes(loaded.definition))\n } catch (error) {\n console.error(\n `could not write ${outPath}: ${error instanceof Error ? error.message : String(error)} — the apply itself succeeded; re-run \\`seq-studio orm apply ${dir}\\` to refresh the types (it is a no-op on the already-active version and rewrites the file)`,\n )\n return 1\n }\n console.log(`wrote ${outPath} (${loaded.definition.tables.length} table(s))`)\n return 0\n}\n\nasync function readDefinitionFiles(\n dir: string,\n files: readonly string[],\n): Promise<Array<{ path: string; contents: string }>> {\n return Promise.all(\n files.map(async (file) => ({ path: file, contents: await readFile(join(dir, file), 'utf8') })),\n )\n}\n\n// ---------------------------------------------------------------------------\n// HTTP plumbing (shared by v1 and v2 commands)\n// ---------------------------------------------------------------------------\n\nasync function apiRequest<T>(\n method: 'GET' | 'POST',\n path: string,\n body?: unknown,\n options?: { allow404?: boolean },\n): Promise<T | null> {\n const baseUrl = process.env[BASE_URL_ENV]?.trim()\n const token = await resolveToken()\n if (!baseUrl) throw new Error('no environment resolved — pass -e <env>')\n if (!token) throw new Error('not authenticated — run: seq-studio login')\n\n const response = await fetch(`${baseUrl}${path}`, {\n method,\n headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n if (response.status === 404 && options?.allow404) return null\n const payload: unknown = await response.json().catch(() => null)\n if (!response.ok) {\n const detail =\n payload && typeof payload === 'object' && 'detail' in payload ? String(payload.detail) : `HTTP ${response.status}`\n throw new Error(`${method} ${path} failed: ${detail}`)\n }\n return payload as T\n}\n\n/** apiRequest that treats 404 as a hard error (the default for mutations). */\nasync function apiRequestStrict<T>(method: 'GET' | 'POST', path: string, body?: unknown): Promise<T> {\n const result = await apiRequest<T>(method, path, body)\n if (result === null) throw new Error(`${method} ${path} returned no payload`)\n return result\n}\n\ninterface RegistryVersion {\n readonly id: string\n readonly content_hash: string\n readonly status: string\n}\n\ntype RegistryState =\n | { kind: 'offline' }\n | { kind: 'missing' }\n | {\n kind: 'found'\n activeVersionId: string | null\n versions: readonly RegistryVersion[]\n hashVersion: RegistryVersion | null\n }\n\nasync function fetchRegistryState(namespace: string, contentHash: string): Promise<RegistryState> {\n if (!process.env[BASE_URL_ENV]?.trim() || !(await resolveToken())) return { kind: 'offline' }\n\n const body = await apiRequest<{\n namespace: { active_version_id: string | null }\n versions: RegistryVersion[]\n hash_version: RegistryVersion | null\n }>('GET', `/api/orm/namespaces/${namespace}?hash=${encodeURIComponent(contentHash)}`, undefined, { allow404: true })\n if (!body) return { kind: 'missing' }\n return {\n kind: 'found',\n activeVersionId: body.namespace.active_version_id,\n versions: body.versions,\n hashVersion: body.hash_version ?? null,\n }\n}\n\nfunction positional(rest: readonly string[]): string | undefined {\n const args = [...rest]\n const envIndex = args.indexOf('--env')\n if (envIndex !== -1) args.splice(envIndex, 2)\n return args.find((arg) => !arg.startsWith('-'))\n}\n\nconst firstLine = (sql: string): string => sql.split('\\n')[0] ?? sql\n"]}
|