[{"data":1,"prerenderedAt":7055},["ShallowReactive",2],{"navigation_docs_en":3,"-en-reference-extensions-extension-kit-protocol":445,"-en-reference-extensions-extension-kit-protocol-surround":7050},[4,30,72,132,260,436],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20,25],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Use Cases","\u002Fen\u002Fgetting-started\u002Fuse-cases","en\u002F1.getting-started\u002F4.use-cases","i-lucide-layers",{"title":26,"path":27,"stem":28,"icon":29},"Concepts","\u002Fen\u002Fgetting-started\u002Fconcepts","en\u002F1.getting-started\u002F5.concepts","i-lucide-book",{"title":26,"path":31,"stem":32,"children":33,"page":6},"\u002Fen\u002Fconcepts","en\u002F2.concepts",[34,38,43,48,53,58,63,68],{"title":35,"path":36,"stem":37,"icon":14},"Organization","\u002Fen\u002Fconcepts\u002Forganization","en\u002F2.concepts\u002F1.organization",{"title":39,"path":40,"stem":41,"icon":42},"Data Model","\u002Fen\u002Fconcepts\u002Fdata-model","en\u002F2.concepts\u002F2.data-model","i-lucide-database",{"title":44,"path":45,"stem":46,"icon":47},"Access Control","\u002Fen\u002Fconcepts\u002Faccess-permissions","en\u002F2.concepts\u002F3.access-permissions","i-lucide-user-key",{"title":49,"path":50,"stem":51,"icon":52},"Audit Logs","\u002Fen\u002Fconcepts\u002Faudit-logs","en\u002F2.concepts\u002F4.audit-logs","i-lucide-scroll-text",{"title":54,"path":55,"stem":56,"icon":57},"Introspection","\u002Fen\u002Fconcepts\u002Fintrospection","en\u002F2.concepts\u002F6.introspection","i-lucide-database-search",{"title":59,"path":60,"stem":61,"icon":62},"Query Engine","\u002Fen\u002Fconcepts\u002Fquery-engine","en\u002F2.concepts\u002F7.query-engine","i-lucide-workflow",{"title":64,"path":65,"stem":66,"icon":67},"AI","\u002Fen\u002Fconcepts\u002Fai","en\u002F2.concepts\u002F8.ai","i-lucide-sparkles",{"title":69,"path":70,"stem":71,"icon":42},"Caching","\u002Fen\u002Fconcepts\u002Fcaching","en\u002F2.concepts\u002F9.caching",{"title":73,"path":74,"stem":75,"children":76,"page":6},"Guides","\u002Fen\u002Fguides","en\u002F4.guides",[77,82,87,92,97,102,107,112],{"title":78,"path":79,"stem":80,"icon":81},"REST API Quickstart","\u002Fen\u002Fguides\u002Frest-api","en\u002F4.guides\u002F1.rest-api","i-lucide-plug",{"title":83,"path":84,"stem":85,"icon":86},"SDK Quickstart","\u002Fen\u002Fguides\u002Fsdk","en\u002F4.guides\u002F2.sdk","i-lucide-terminal",{"title":88,"path":89,"stem":90,"icon":91},"Configure SSO","\u002Fen\u002Fguides\u002Fconfigure-sso","en\u002F4.guides\u002F3.configure-sso","i-lucide-key-round",{"title":93,"path":94,"stem":95,"icon":96},"Configure MCP","\u002Fen\u002Fguides\u002Fmcp","en\u002F4.guides\u002F4.mcp","i-lucide-brain-cog",{"title":98,"path":99,"stem":100,"icon":101},"Customize Content Space","\u002Fen\u002Fguides\u002Fcustomize-content-space","en\u002F4.guides\u002F5.customize-content-space","i-lucide-columns-3-cog",{"title":103,"path":104,"stem":105,"icon":106},"Build an Application with AI Assistance","\u002Fen\u002Fguides\u002Fbuild-an-application","en\u002F4.guides\u002F6.build-an-application","i-lucide-route",{"title":108,"path":109,"stem":110,"icon":111},"Horizontal Scaling","\u002Fen\u002Fguides\u002Fhorizontal-scaling","en\u002F4.guides\u002F7.horizontal-scaling","i-lucide-network",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":6},"Data Connectors","i-lucide-cable","\u002Fen\u002Fguides\u002Fdata-connectors","en\u002F4.guides\u002F8.data-connectors",[118,122,127],{"title":16,"path":119,"stem":120,"icon":121},"\u002Fen\u002Fguides\u002Fdata-connectors\u002Fquickstart","en\u002F4.guides\u002F8.data-connectors\u002F1.quickstart","i-lucide-rocket",{"title":123,"path":124,"stem":125,"icon":126},"Build a Stripe Connector","\u002Fen\u002Fguides\u002Fdata-connectors\u002Fstripe","en\u002F4.guides\u002F8.data-connectors\u002F2.stripe","i-lucide-hammer",{"title":128,"path":129,"stem":130,"icon":131},"Build with AI Agents","\u002Fen\u002Fguides\u002Fdata-connectors\u002Fai-agents","en\u002F4.guides\u002F8.data-connectors\u002F3.ai-agents","i-lucide-bot",{"title":133,"path":134,"stem":135,"children":136,"page":6},"Developer","\u002Fen\u002Fdeveloper","en\u002F5.developer",[137,191,215,220],{"title":138,"path":139,"stem":140,"children":141,"page":6},"Data Access","\u002Fen\u002Fdeveloper\u002Fapi","en\u002F5.developer\u002F1.api",[142,147,152,157,162,167,172,177,182,186],{"title":143,"path":144,"stem":145,"icon":146},"Overview","\u002Fen\u002Fdeveloper\u002Fapi\u002Foverview","en\u002F5.developer\u002F1.api\u002F1.overview","i-lucide-globe",{"title":148,"path":149,"stem":150,"icon":151},"Errors","\u002Fen\u002Fdeveloper\u002Fapi\u002Ferrors","en\u002F5.developer\u002F1.api\u002F10.errors","i-lucide-alert-triangle",{"title":153,"path":154,"stem":155,"icon":156},"Authentication","\u002Fen\u002Fdeveloper\u002Fapi\u002Fauthentication","en\u002F5.developer\u002F1.api\u002F2.authentication","i-lucide-lock",{"title":158,"path":159,"stem":160,"icon":161},"Reading Data","\u002Fen\u002Fdeveloper\u002Fapi\u002Freading-data","en\u002F5.developer\u002F1.api\u002F3.reading-data","i-lucide-book-open",{"title":163,"path":164,"stem":165,"icon":166},"Writing Data","\u002Fen\u002Fdeveloper\u002Fapi\u002Fwriting-data","en\u002F5.developer\u002F1.api\u002F4.writing-data","i-lucide-pencil",{"title":168,"path":169,"stem":170,"icon":171},"Filtering","\u002Fen\u002Fdeveloper\u002Fapi\u002Ffiltering","en\u002F5.developer\u002F1.api\u002F5.filtering","i-lucide-filter",{"title":173,"path":174,"stem":175,"icon":176},"Field Selection","\u002Fen\u002Fdeveloper\u002Fapi\u002Ffield-selection","en\u002F5.developer\u002F1.api\u002F6.field-selection","i-lucide-list-checks",{"title":178,"path":179,"stem":180,"icon":181},"Sorting & Pagination","\u002Fen\u002Fdeveloper\u002Fapi\u002Fsorting-pagination","en\u002F5.developer\u002F1.api\u002F7.sorting-pagination","i-lucide-arrow-up-down",{"title":183,"path":184,"stem":185,"icon":111},"Relational Data","\u002Fen\u002Fdeveloper\u002Fapi\u002Frelational-data","en\u002F5.developer\u002F1.api\u002F8.relational-data",{"title":187,"path":188,"stem":189,"icon":190},"Files & Assets","\u002Fen\u002Fdeveloper\u002Fapi\u002Ffiles","en\u002F5.developer\u002F1.api\u002F9.files","i-lucide-file-up",{"title":192,"path":193,"stem":194,"children":195,"page":6},"Client SDK","\u002Fen\u002Fdeveloper\u002Fsdk","en\u002F5.developer\u002F2.sdk",[196,200,205,210],{"title":197,"path":198,"stem":199,"icon":19},"Installation","\u002Fen\u002Fdeveloper\u002Fsdk\u002Finstallation","en\u002F5.developer\u002F2.sdk\u002F1.installation",{"title":201,"path":202,"stem":203,"icon":204},"Client Setup","\u002Fen\u002Fdeveloper\u002Fsdk\u002Fclient-setup","en\u002F5.developer\u002F2.sdk\u002F2.client-setup","i-lucide-settings",{"title":206,"path":207,"stem":208,"icon":209},"Type System","\u002Fen\u002Fdeveloper\u002Fsdk\u002Ftype-system","en\u002F5.developer\u002F2.sdk\u002F3.type-system","i-lucide-braces",{"title":211,"path":212,"stem":213,"icon":214},"Advanced","\u002Fen\u002Fdeveloper\u002Fsdk\u002Fadvanced","en\u002F5.developer\u002F2.sdk\u002F5.advanced","i-lucide-puzzle",{"title":216,"path":217,"stem":218,"icon":219},"Application Users","\u002Fen\u002Fdeveloper\u002Fapplication-users","en\u002F5.developer\u002F3.application-users","i-lucide-users",{"title":221,"path":222,"stem":223,"children":224,"icon":214},"Extensions","\u002Fen\u002Fdeveloper\u002Fextensions","en\u002F5.developer\u002F3.extensions\u002Findex",[225,226,231],{"title":143,"path":222,"stem":223,"icon":214},{"title":227,"path":228,"stem":229,"icon":230},"Install and Manage Extensions","\u002Fen\u002Fdeveloper\u002Fextensions\u002Finstall","en\u002F5.developer\u002F3.extensions\u002F1.install","i-lucide-package-plus",{"title":113,"path":232,"stem":233,"children":234,"icon":114},"\u002Fen\u002Fdeveloper\u002Fextensions\u002Fdata-connectors","en\u002F5.developer\u002F3.extensions\u002F2.data-connectors\u002Findex",[235,236,241,245,250,255],{"title":143,"path":232,"stem":233,"icon":114},{"title":237,"path":238,"stem":239,"icon":240},"How Data Connectors Run","\u002Fen\u002Fdeveloper\u002Fextensions\u002Fdata-connectors\u002Fruntime","en\u002F5.developer\u002F3.extensions\u002F2.data-connectors\u002F2.runtime","i-lucide-cpu",{"title":242,"path":243,"stem":244,"icon":42},"Data Sources","\u002Fen\u002Fdeveloper\u002Fextensions\u002Fdata-connectors\u002Fdata-sources","en\u002F5.developer\u002F3.extensions\u002F2.data-connectors\u002F3.data-sources",{"title":246,"path":247,"stem":248,"icon":249},"Map an External Data Source","\u002Fen\u002Fdeveloper\u002Fextensions\u002Fdata-connectors\u002Fdata-source-mapping","en\u002F5.developer\u002F3.extensions\u002F2.data-connectors\u002F4.data-source-mapping","i-lucide-map",{"title":251,"path":252,"stem":253,"icon":254},"Handle Errors","\u002Fen\u002Fdeveloper\u002Fextensions\u002Fdata-connectors\u002Ferrors","en\u002F5.developer\u002F3.extensions\u002F2.data-connectors\u002F5.errors","i-lucide-shield-alert",{"title":256,"path":257,"stem":258,"icon":259},"Test a Data Connector","\u002Fen\u002Fdeveloper\u002Fextensions\u002Fdata-connectors\u002Ftesting","en\u002F5.developer\u002F3.extensions\u002F2.data-connectors\u002F6.testing","i-lucide-flask-conical",{"title":261,"path":262,"stem":263,"children":264,"page":6},"Reference","\u002Fen\u002Freference","en\u002F6.reference",[265,269,274,279,295,299,304,340,369,374],{"title":266,"path":267,"stem":268,"icon":204},"Configuration","\u002Fen\u002Freference\u002Fenvironment-variables","en\u002F6.reference\u002F1.environment-variables",{"title":270,"path":271,"stem":272,"icon":273},"System Requirements","\u002Fen\u002Freference\u002Fsystem-requirements","en\u002F6.reference\u002F2.system-requirements","i-lucide-server",{"title":275,"path":276,"stem":277,"icon":278},"Licensing","\u002Fen\u002Freference\u002Flicensing","en\u002F6.reference\u002F3.licensing","i-lucide-gem",{"title":280,"path":281,"stem":282,"children":283,"icon":81},"Connectors","\u002Fen\u002Freference\u002Fconnectors","en\u002F6.reference\u002F4.connectors\u002Findex",[284,285,290],{"title":280,"path":281,"stem":282,"icon":81},{"title":286,"path":287,"stem":288,"icon":289},"PostgreSQL and Supabase","\u002Fen\u002Freference\u002Fconnectors\u002Fpostgresql-supabase","en\u002F6.reference\u002F4.connectors\u002F1.postgresql-supabase","i-simple-icons-postgresql",{"title":291,"path":292,"stem":293,"icon":294},"MySQL and MariaDB","\u002Fen\u002Freference\u002Fconnectors\u002Fmysql-mariadb","en\u002F6.reference\u002F4.connectors\u002F2.mysql-mariadb","i-simple-icons-mysql",{"title":296,"path":297,"stem":298,"icon":209},"Data Types Representation","\u002Fen\u002Freference\u002Fdata-types","en\u002F6.reference\u002F5.data-types",{"title":300,"path":301,"stem":302,"icon":303},"Permissions Reference","\u002Fen\u002Freference\u002Fpermissions","en\u002F6.reference\u002F6.permissions","i-lucide-shield",{"title":305,"path":306,"stem":307,"children":308,"page":6},"API Reference","\u002Fen\u002Freference\u002Fapi-reference","en\u002F6.reference\u002F7.api-reference",[309,313,318],{"title":310,"path":311,"stem":312,"icon":273},"System Endpoints","\u002Fen\u002Freference\u002Fapi-reference\u002Fsystem-endpoints","en\u002F6.reference\u002F7.api-reference\u002F1.system-endpoints",{"title":314,"path":315,"stem":316,"icon":317},"OpenAPI Spec","\u002Fen\u002Freference\u002Fapi-reference\u002Fopenapi-spec","en\u002F6.reference\u002F7.api-reference\u002F2.openapi-spec","i-lucide-file-code",{"title":319,"path":320,"stem":321,"children":322,"icon":324},"Schema Migration","\u002Fen\u002Freference\u002Fapi-reference\u002Fschema-migration","en\u002F6.reference\u002F7.api-reference\u002F3.schema-migration\u002Findex",[323,325,330,335],{"title":319,"path":320,"stem":321,"icon":324},"i-lucide-database-zap",{"title":326,"path":327,"stem":328,"icon":329},"Apply Migrations","\u002Fen\u002Freference\u002Fapi-reference\u002Fschema-migration\u002Fapply-migrations","en\u002F6.reference\u002F7.api-reference\u002F3.schema-migration\u002F1.apply-migrations","i-lucide-upload",{"title":331,"path":332,"stem":333,"icon":334},"Import Changes","\u002Fen\u002Freference\u002Fapi-reference\u002Fschema-migration\u002Fimport-changes","en\u002F6.reference\u002F7.api-reference\u002F3.schema-migration\u002F2.import-changes","i-lucide-refresh-cw",{"title":336,"path":337,"stem":338,"icon":339},"Operation Reference","\u002Fen\u002Freference\u002Fapi-reference\u002Fschema-migration\u002Foperation-reference","en\u002F6.reference\u002F7.api-reference\u002F3.schema-migration\u002F3.operation-reference","i-lucide-list-tree",{"title":341,"path":342,"stem":343,"children":344,"page":6},"Design Considerations","\u002Fen\u002Freference\u002Fdesign-considerations","en\u002F6.reference\u002F8.design-considerations",[345,349,354,359,364],{"title":143,"path":346,"stem":347,"icon":348},"\u002Fen\u002Freference\u002Fdesign-considerations\u002Foverview","en\u002F6.reference\u002F8.design-considerations\u002F1.overview","i-lucide-compass",{"title":350,"path":351,"stem":352,"icon":353},"Instance Configuration","\u002Fen\u002Freference\u002Fdesign-considerations\u002Finstance-configuration-related-problems","en\u002F6.reference\u002F8.design-considerations\u002F3.instance-configuration-related-problems","i-lucide-wrench",{"title":355,"path":356,"stem":357,"icon":358},"Overly Permissive Public Access","\u002Fen\u002Freference\u002Fdesign-considerations\u002Foverly-permissive","en\u002F6.reference\u002F8.design-considerations\u002F4.overly-permissive","i-lucide-shield-off",{"title":360,"path":361,"stem":362,"icon":363},"No Aggregates","\u002Fen\u002Freference\u002Fdesign-considerations\u002Fno-aggregates","en\u002F6.reference\u002F8.design-considerations\u002F5.no-aggregates","i-lucide-sigma",{"title":365,"path":366,"stem":367,"icon":368},"Cross-Data-Source Referential Integrity","\u002Fen\u002Freference\u002Fdesign-considerations\u002Fcross-data-source-referential-integrity","en\u002F6.reference\u002F8.design-considerations\u002F6.cross-data-source-referential-integrity","i-lucide-unlink",{"title":370,"path":371,"stem":372,"icon":373},"CLI","\u002Fen\u002Freference\u002Fcli","en\u002F6.reference\u002F9.cli","i-lucide-square-terminal",{"title":221,"path":375,"stem":376,"children":377,"page":6},"\u002Fen\u002Freference\u002Fextensions","en\u002F6.reference\u002F9.extensions",[378,383,386,405],{"title":379,"path":380,"stem":381,"icon":382},"Extension Config and Manifest","\u002Fen\u002Freference\u002Fextensions\u002Fmanifest","en\u002F6.reference\u002F9.extensions\u002F1.manifest","i-lucide-file-json",{"title":370,"path":384,"stem":385,"icon":86},"\u002Fen\u002Freference\u002Fextensions\u002Fcli","en\u002F6.reference\u002F9.extensions\u002F2.cli",{"title":387,"path":388,"stem":389,"children":390,"page":6},"Extension Kit","\u002Fen\u002Freference\u002Fextensions\u002Fextension-kit","en\u002F6.reference\u002F9.extensions\u002F3.extension-kit",[391,395,400],{"title":392,"path":393,"stem":394,"icon":81},"Data Connector","\u002Fen\u002Freference\u002Fextensions\u002Fextension-kit\u002Fdata-connector","en\u002F6.reference\u002F9.extensions\u002F3.extension-kit\u002F1.data-connector",{"title":396,"path":397,"stem":398,"icon":399},"Protocol","\u002Fen\u002Freference\u002Fextensions\u002Fextension-kit\u002Fprotocol","en\u002F6.reference\u002F9.extensions\u002F3.extension-kit\u002F2.protocol","i-lucide-arrow-left-right",{"title":401,"path":402,"stem":403,"icon":404},"Schema Helpers","\u002Fen\u002Freference\u002Fextensions\u002Fextension-kit\u002Fexperimental","en\u002F6.reference\u002F9.extensions\u002F3.extension-kit\u002F3.experimental","i-lucide-blocks",{"title":113,"path":406,"stem":407,"children":408,"page":6},"\u002Fen\u002Freference\u002Fextensions\u002Fdata-connectors","en\u002F6.reference\u002F9.extensions\u002F4.data-connectors",[409,413,417,421,426,431],{"title":410,"path":411,"stem":412,"icon":81},"Data Connector API","\u002Fen\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi","en\u002F6.reference\u002F9.extensions\u002F4.data-connectors\u002F1.api",{"title":414,"path":415,"stem":416,"icon":176},"Operations and Operators","\u002Fen\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations","en\u002F6.reference\u002F9.extensions\u002F4.data-connectors\u002F2.operations",{"title":148,"path":418,"stem":419,"icon":420},"\u002Fen\u002Freference\u002Fextensions\u002Fdata-connectors\u002Ferrors","en\u002F6.reference\u002F9.extensions\u002F4.data-connectors\u002F3.errors","i-lucide-triangle-alert",{"title":422,"path":423,"stem":424,"icon":425},"Runtime Limits","\u002Fen\u002Freference\u002Fextensions\u002Fdata-connectors\u002Flimits","en\u002F6.reference\u002F9.extensions\u002F4.data-connectors\u002F4.limits","i-lucide-gauge",{"title":427,"path":428,"stem":429,"icon":430},"Limitations","\u002Fen\u002Freference\u002Fextensions\u002Fdata-connectors\u002Flimitations","en\u002F6.reference\u002F9.extensions\u002F4.data-connectors\u002F5.limitations","i-lucide-ban",{"title":432,"path":433,"stem":434,"icon":435},"Network Permissions","\u002Fen\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fpermissions","en\u002F6.reference\u002F9.extensions\u002F4.data-connectors\u002F6.permissions","i-lucide-shield-check",{"title":437,"icon":121,"path":438,"stem":439,"children":440,"page":6},"Release Notes","\u002Fen\u002Frelease-notes","en\u002F7.release-notes",[441],{"title":442,"path":443,"stem":444,"icon":121},"Changelog","\u002Fen\u002Frelease-notes\u002Fchangelog","en\u002F7.release-notes\u002F1.changelog",{"id":446,"title":447,"body":448,"description":7043,"extension":7044,"links":7045,"meta":7046,"navigation":7047,"path":397,"seo":7048,"stem":398,"__hash__":7049},"docs_en\u002Fen\u002F6.reference\u002F9.extensions\u002F3.extension-kit\u002F2.protocol.md","Protocol Types",{"type":449,"value":450,"toc":6973},"minimark",[451,454,458,498,505,579,590,611,615,622,630,665,688,693,706,768,804,829,834,839,890,1075,1122,1164,1176,1181,1191,1303,1315,1320,1325,1356,1382,1388,1396,1457,1476,1482,1491,1557,1564,1570,1578,1616,1632,1638,1645,1703,1710,1715,1720,1750,1765,1770,1776,1800,1819,1824,1839,1908,1934,1940,1943,1986,2067,2105,2588,2597,2607,2612,2618,2645,2651,2656,2682,2688,2691,2717,2723,2736,2782,2785,2872,2877,2887,2923,2929,2932,2984,2987,2993,2999,3033,3038,3044,3101,3121,3126,3136,3181,3255,3268,3485,3490,3493,3515,3520,3526,3549,3553,3558,3569,3605,3657,3670,3675,3686,3717,3751,3776,3782,3787,3868,3886,3891,3897,3946,3970,3995,4035,4040,4043,4080,4083,4228,4232,4235,4295,4321,4327,4330,4347,4352,4355,4372,4381,4385,4391,4396,4444,4452,4525,4531,4537,4540,4574,4577,4583,4586,4659,4681,4874,4880,4883,4962,4977,4983,4996,5135,5144,5150,5155,5268,5274,5282,5364,5370,5373,5447,5461,5467,5473,5576,5597,5603,5606,5649,5658,5664,5667,5695,5701,5704,5820,5839,5845,5854,5892,5896,5904,5910,5913,5998,6052,6063,6069,6075,6180,6207,6213,6218,6251,6257,6262,6296,6307,6313,6320,6361,6368,6374,6380,6413,6419,6422,6482,6485,6675,6690,6695,6698,6739,6744,6754,6776,6783,6788,6793,6819,6824,6827,6856,6861,6866,6892,6897,6900,6927,6936,6940,6969],[452,453],"preview",{},[455,456,143],"h2",{"id":457},"overview",[459,460,461,465,466,470,471,474,475,478,479,482,483,488,489,492,493,497],"p",{},[462,463,464],"code",{},"@monospace\u002Fextension-kit\u002Fdata-connector\u002Fprotocol"," holds the types of what a ",[467,468,469],"strong",{},"data connector extension"," exchanges with Engine: the schema document ",[462,472,473],{},"introspect"," answers with, the requests ",[462,476,477],{},"query"," receives, and the answers it returns. A data connector exposes an ",[467,480,481],{},"external data source"," as ",[484,485,487],"a",{"href":486},"\u002Fconcepts\u002Fdata-model#collections","collections"," of ",[467,490,491],{},"items",", and each item carries named values called ",[484,494,496],{"href":495},"\u002Fconcepts\u002Fdata-model#fields","fields",".",[459,499,500,501,504],{},"The module exports types only. ",[462,502,503],{},"@monospace\u002Fextension-kit\u002Fdata-connector"," re-exports every one of them, so import them from there:",[506,507,513],"pre",{"className":508,"code":509,"filename":510,"language":511,"meta":512,"style":512},"language-ts shiki shiki-themes monospace-light monospace-light monospace-dark","import type { MonospaceObject, QueryResultFor, QueryResultSerialized, ReadManyOperationSerialized, ReadOneOperationSerialized, SortItemSerialized, Value } from '@monospace\u002Fextension-kit\u002Fdata-connector';\n","src\u002Fdata-connectors\u002Fartic\u002Fread.ts","ts","",[462,514,515],{"__ignoreMap":512},[516,517,520,524,527,531,535,538,541,543,546,548,551,553,556,558,561,563,566,569,572,576],"span",{"class":518,"line":519},"line",1,[516,521,523],{"class":522},"sLVBU","import",[516,525,526],{"class":522}," type",[516,528,530],{"class":529},"sTMul"," { ",[516,532,534],{"class":533},"sNJ9c","MonospaceObject",[516,536,537],{"class":529},", ",[516,539,540],{"class":533},"QueryResultFor",[516,542,537],{"class":529},[516,544,545],{"class":533},"QueryResultSerialized",[516,547,537],{"class":529},[516,549,550],{"class":533},"ReadManyOperationSerialized",[516,552,537],{"class":529},[516,554,555],{"class":533},"ReadOneOperationSerialized",[516,557,537],{"class":529},[516,559,560],{"class":533},"SortItemSerialized",[516,562,537],{"class":529},[516,564,565],{"class":533},"Value",[516,567,568],{"class":529}," } ",[516,570,571],{"class":522},"from",[516,573,575],{"class":574},"suKVh"," '@monospace\u002Fextension-kit\u002Fdata-connector'",[516,577,578],{"class":529},";\n",[459,580,581,582,585,586,589],{},"Each entry below shows the declaration from the kit's type definitions. The ",[484,583,410],{"href":584},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi"," describes what Engine sends and expects, and ",[484,587,414],{"href":588},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations"," the rules for declaring operations.",[459,591,592,593,597,598,601,602,605,606,610],{},"The examples are excerpts, with their imports and helpers left out. The ",[484,594,596],{"href":595},"\u002Fguides\u002Fdata-connectors\u002Fquickstart","Data Connector Quickstart"," shows the complete files of a trimmed Art Institute of Chicago connector, ",[484,599,246],{"href":600},"\u002Fdeveloper\u002Fextensions\u002Fdata-connectors\u002Fdata-source-mapping"," the full one (",[462,603,604],{},"search.ts","), and ",[484,607,609],{"href":608},"\u002Fguides\u002Fdata-connectors\u002Fstripe","Build a Stripe Data Connector"," walks through the Stripe connector.",[455,612,614],{"id":613},"read-a-query-request","Read a Query Request",[616,617,619],"h3",{"id":618},"queryserialized",[462,620,621],{},"QuerySerialized",[459,623,624,625,627,628,497],{},"The envelope ",[462,626,477],{}," receives: one operation under ",[462,629,477],{},[506,631,634],{"className":508,"code":632,"filename":633,"language":511,"meta":512,"style":512},"interface QuerySerialized {\n    query: OperationSerialized;\n}\n","signature",[462,635,636,648,659],{"__ignoreMap":512},[516,637,638,641,645],{"class":518,"line":519},[516,639,640],{"class":522},"interface",[516,642,644],{"class":643},"ssBNi"," QuerySerialized",[516,646,647],{"class":529}," {\n",[516,649,651,654,657],{"class":518,"line":650},2,[516,652,653],{"class":522},"    query:",[516,655,656],{"class":643}," OperationSerialized",[516,658,578],{"class":529},[516,660,662],{"class":518,"line":661},3,[516,663,664],{"class":529},"}\n",[459,666,667,668,670,671,677,678,680,681,684,685,497],{},"The envelope leaves room for further per-request context beside the operation. The ",[462,669,477],{}," handler is typed with ",[484,672,674],{"href":673},"#queryrequest",[462,675,676],{},"QueryRequest",", the same envelope narrowed to the operations a function serves; ",[462,679,621],{}," still types the reserved ",[462,682,683],{},"explainQuery"," handler. See ",[484,686,614],{"href":687},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#read-a-query-request",[616,689,691],{"id":690},"queryrequest",[462,692,676],{},[459,694,695,696,698,699,702,703,705],{},"The ",[462,697,477],{}," request for the operations ",[462,700,701],{},"Op",": the envelope, with ",[462,704,477],{}," narrowed to those operations.",[506,707,709],{"className":508,"code":708,"filename":633,"language":511,"meta":512,"style":512},"interface QueryRequest\u003COp extends OperationName> {\n    query: Extract\u003COperationSerialized, {\n        op: Op;\n    }>;\n}\n",[462,710,711,732,747,757,763],{"__ignoreMap":512},[516,712,713,715,718,721,723,726,729],{"class":518,"line":519},[516,714,640],{"class":522},[516,716,717],{"class":643}," QueryRequest",[516,719,720],{"class":529},"\u003C",[516,722,701],{"class":643},[516,724,725],{"class":522}," extends",[516,727,728],{"class":643}," OperationName",[516,730,731],{"class":529},"> {\n",[516,733,734,736,739,741,744],{"class":518,"line":650},[516,735,653],{"class":522},[516,737,738],{"class":643}," Extract",[516,740,720],{"class":529},[516,742,743],{"class":643},"OperationSerialized",[516,745,746],{"class":529},", {\n",[516,748,749,752,755],{"class":518,"line":661},[516,750,751],{"class":522},"        op:",[516,753,754],{"class":643}," Op",[516,756,578],{"class":529},[516,758,760],{"class":518,"line":759},4,[516,761,762],{"class":529},"    }>;\n",[516,764,766],{"class":518,"line":765},5,[516,767,664],{"class":529},[769,770,771,784],"table",{},[772,773,774],"thead",{},[775,776,777,781],"tr",{},[778,779,780],"th",{},"Type parameter",[778,782,783],{},"Description",[785,786,787],"tbody",{},[775,788,789,794],{},[790,791,792],"td",{},[462,793,701],{},[790,795,796,797,803],{},"An ",[484,798,800],{"href":799},"#operationname",[462,801,802],{},"OperationName",", or a union of them",[459,805,806,809,810,813,814,817,818,821,822,828],{},[462,807,808],{},"QueryRequest\u003C'readOne'>"," carries only a ",[462,811,812],{},"readOne",", so a function typed with it reads ",[462,815,816],{},"query.key"," without narrowing ",[462,819,820],{},"op"," first. ",[484,823,825],{"href":824},"\u002Freference\u002Fextensions\u002Fextension-kit\u002Fdata-connector#queryhandler",[462,826,827],{},"QueryHandler"," pairs it with the answer the operation owes.",[616,830,832],{"id":831},"operationserialized",[462,833,743],{},[459,835,836,837,497],{},"One operation and its arguments, discriminated by ",[462,838,820],{},[506,840,842],{"className":508,"code":841,"filename":633,"language":511,"meta":512,"style":512},"type OperationSerialized = ReadManyOperationSerialized | ReadOneOperationSerialized | CreateOperationSerialized | UpdateManyOperationSerialized | UpdateOneOperationSerialized | DeleteManyOperationSerialized | DeleteOneOperationSerialized;\n",[462,843,844],{"__ignoreMap":512},[516,845,846,849,851,854,857,860,863,865,868,870,873,875,878,880,883,885,888],{"class":518,"line":519},[516,847,848],{"class":522},"type",[516,850,656],{"class":643},[516,852,853],{"class":522}," =",[516,855,856],{"class":643}," ReadManyOperationSerialized",[516,858,859],{"class":522}," |",[516,861,862],{"class":643}," ReadOneOperationSerialized",[516,864,859],{"class":522},[516,866,867],{"class":643}," CreateOperationSerialized",[516,869,859],{"class":522},[516,871,872],{"class":643}," UpdateManyOperationSerialized",[516,874,859],{"class":522},[516,876,877],{"class":643}," UpdateOneOperationSerialized",[516,879,859],{"class":522},[516,881,882],{"class":643}," DeleteManyOperationSerialized",[516,884,859],{"class":522},[516,886,887],{"class":643}," DeleteOneOperationSerialized",[516,889,578],{"class":529},[769,891,892,906],{},[772,893,894],{},[775,895,896,900,903],{},[778,897,898],{},[462,899,820],{},[778,901,902],{},"Other properties",[778,904,905],{},"Answer with",[785,907,908,945,970,990,1011,1035,1053],{},[775,909,910,915,935],{},[790,911,912],{},[462,913,914],{},"readMany",[790,916,917,537,920,537,923,537,926,537,929,537,932],{},[462,918,919],{},"select?",[462,921,922],{},"filter?",[462,924,925],{},"sort?",[462,927,928],{},"limit?",[462,930,931],{},"offset?",[462,933,934],{},"count?",[790,936,937,940,941,944],{},[462,938,939],{},"records",": the matching items, or ",[462,942,943],{},"totalCount"," on a count read",[775,946,947,951,961],{},[790,948,949],{},[462,950,812],{},[790,952,953,537,956,537,959],{},[462,954,955],{},"select",[462,957,958],{},"key",[462,960,922],{},[790,962,963,966,967],{},[462,964,965],{},"record",": the item, or ",[462,968,969],{},"null",[775,971,972,977,985],{},[790,973,974],{},[462,975,976],{},"create",[790,978,979,537,981,984],{},[462,980,955],{},[462,982,983],{},"data"," (one object per item to create)",[790,986,987,989],{},[462,988,939],{},": the created items",[775,991,992,997,1006],{},[790,993,994],{},[462,995,996],{},"updateMany",[790,998,999,537,1001,537,1003,1005],{},[462,1000,955],{},[462,1002,922],{},[462,1004,983],{}," (one object applied to every match)",[790,1007,1008,1010],{},[462,1009,939],{},": the updated items",[775,1012,1013,1018,1028],{},[790,1014,1015],{},[462,1016,1017],{},"updateOne",[790,1019,1020,537,1022,537,1024,537,1026],{},[462,1021,955],{},[462,1023,958],{},[462,1025,922],{},[462,1027,983],{},[790,1029,1030,1032,1033],{},[462,1031,965],{},": the updated item, or ",[462,1034,969],{},[775,1036,1037,1042,1048],{},[790,1038,1039],{},[462,1040,1041],{},"deleteMany",[790,1043,1044,537,1046],{},[462,1045,955],{},[462,1047,922],{},[790,1049,1050,1052],{},[462,1051,939],{},": the deleted items",[775,1054,1055,1060,1068],{},[790,1056,1057],{},[462,1058,1059],{},"deleteOne",[790,1061,1062,537,1064,537,1066],{},[462,1063,955],{},[462,1065,958],{},[462,1067,922],{},[790,1069,1070,1072,1073],{},[462,1071,965],{},": the deleted item, or ",[462,1074,969],{},[459,1076,1077,1078,1081,1082,1085,1086,1088,1089,1091,1092,537,1095,1098,1099,1104,1105,1111,1112,1115,1116,1118,1119,1121],{},"Every operation carries ",[462,1079,1080],{},"collection",", and ",[462,1083,1084],{},"namespace"," when the collection is in one. A ",[462,1087,914],{}," without ",[462,1090,955],{}," is either a count read (",[462,1093,1094],{},"count: true",[462,1096,1097],{},"limit: 0",") or a read with an empty selection. Each operation has a named type, from ",[484,1100,1102],{"href":1101},"#readmanyoperationserialized",[462,1103,550],{}," to ",[484,1106,1108],{"href":1107},"#deleteoneoperationserialized",[462,1109,1110],{},"DeleteOneOperationSerialized",". A ",[462,1113,1114],{},"switch"," on ",[462,1117,820],{}," narrows the union to one of them, so a function that serves one operation takes its type, as the Quickstart connector's ",[462,1120,914],{}," does:",[506,1123,1125],{"className":508,"code":1124,"filename":510,"language":511,"meta":512,"style":512},"export async function readMany(query: ReadManyOperationSerialized): Promise\u003CQueryResultSerialized> {\n",[462,1126,1127],{"__ignoreMap":512},[516,1128,1129,1132,1135,1138,1141,1144,1147,1149,1152,1155,1158,1160,1162],{"class":518,"line":519},[516,1130,1131],{"class":522},"export",[516,1133,1134],{"class":522}," async",[516,1136,1137],{"class":522}," function",[516,1139,1140],{"class":643}," readMany",[516,1142,1143],{"class":529},"(",[516,1145,1146],{"class":522},"query:",[516,1148,856],{"class":643},[516,1150,1151],{"class":529},")",[516,1153,1154],{"class":522},":",[516,1156,1157],{"class":643}," Promise",[516,1159,720],{"class":529},[516,1161,545],{"class":643},[516,1163,731],{"class":529},[459,1165,1166,1167,1171,1172,497],{},"See ",[484,1168,1170],{"href":1169},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#operations","Operations"," and ",[484,1173,1175],{"href":1174},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#count-reads","Count Reads",[616,1177,1179],{"id":1178},"readmanyoperationserialized",[462,1180,550],{},[459,1182,1183,1184,1186,1187,1190],{},"A ",[462,1185,914],{}," request: the items that match ",[462,1188,1189],{},"filter",", sorted and paged, or their count.",[506,1192,1194],{"className":508,"code":1193,"filename":633,"language":511,"meta":512,"style":512},"interface ReadManyOperationSerialized {\n    op: 'readMany';\n    collection: Identifier;\n    namespace?: Identifier;\n    select?: Identifier[];\n    filter?: FilterSerialized;\n    sort?: SortItemSerialized[];\n    limit?: number;\n    offset?: number;\n    count?: boolean;\n}\n",[462,1195,1196,1204,1214,1224,1233,1243,1254,1265,1277,1287,1298],{"__ignoreMap":512},[516,1197,1198,1200,1202],{"class":518,"line":519},[516,1199,640],{"class":522},[516,1201,856],{"class":643},[516,1203,647],{"class":529},[516,1205,1206,1209,1212],{"class":518,"line":650},[516,1207,1208],{"class":522},"    op:",[516,1210,1211],{"class":574}," 'readMany'",[516,1213,578],{"class":529},[516,1215,1216,1219,1222],{"class":518,"line":661},[516,1217,1218],{"class":522},"    collection:",[516,1220,1221],{"class":643}," Identifier",[516,1223,578],{"class":529},[516,1225,1226,1229,1231],{"class":518,"line":759},[516,1227,1228],{"class":522},"    namespace?:",[516,1230,1221],{"class":643},[516,1232,578],{"class":529},[516,1234,1235,1238,1240],{"class":518,"line":765},[516,1236,1237],{"class":522},"    select?:",[516,1239,1221],{"class":643},[516,1241,1242],{"class":529},"[];\n",[516,1244,1246,1249,1252],{"class":518,"line":1245},6,[516,1247,1248],{"class":522},"    filter?:",[516,1250,1251],{"class":643}," FilterSerialized",[516,1253,578],{"class":529},[516,1255,1257,1260,1263],{"class":518,"line":1256},7,[516,1258,1259],{"class":522},"    sort?:",[516,1261,1262],{"class":643}," SortItemSerialized",[516,1264,1242],{"class":529},[516,1266,1268,1271,1275],{"class":518,"line":1267},8,[516,1269,1270],{"class":522},"    limit?:",[516,1272,1274],{"class":1273},"snHjA"," number",[516,1276,578],{"class":529},[516,1278,1280,1283,1285],{"class":518,"line":1279},9,[516,1281,1282],{"class":522},"    offset?:",[516,1284,1274],{"class":1273},[516,1286,578],{"class":529},[516,1288,1290,1293,1296],{"class":518,"line":1289},10,[516,1291,1292],{"class":522},"    count?:",[516,1294,1295],{"class":1273}," boolean",[516,1297,578],{"class":529},[516,1299,1301],{"class":518,"line":1300},11,[516,1302,664],{"class":529},[459,1304,1305,1306,1308,1309,1311,1312,1314],{},"Answer with ",[462,1307,939],{},", or with ",[462,1310,943],{}," on a count read. The Quickstart connector's ",[462,1313,914],{}," takes it, and so does the Stripe connector's.",[616,1316,1318],{"id":1317},"readoneoperationserialized",[462,1319,555],{},[459,1321,1183,1322,1324],{},[462,1323,812],{}," request: one item by its primary key, with an optional guard.",[506,1326,1328],{"className":508,"code":1327,"filename":633,"language":511,"meta":512,"style":512},"interface ReadOneOperationSerialized extends KeyedOperation {\n    op: 'readOne';\n}\n",[462,1329,1330,1343,1352],{"__ignoreMap":512},[516,1331,1332,1334,1336,1338,1341],{"class":518,"line":519},[516,1333,640],{"class":522},[516,1335,862],{"class":643},[516,1337,725],{"class":522},[516,1339,1340],{"class":643}," KeyedOperation",[516,1342,647],{"class":529},[516,1344,1345,1347,1350],{"class":518,"line":650},[516,1346,1208],{"class":522},[516,1348,1349],{"class":574}," 'readOne'",[516,1351,578],{"class":529},[516,1353,1354],{"class":518,"line":661},[516,1355,664],{"class":529},[459,1357,1358,1359,1365,1366,1368,1369,1372,1373,1375,1376,1381],{},"It extends ",[484,1360,1362],{"href":1361},"#keyedoperation",[462,1363,1364],{},"KeyedOperation",". Answer with ",[462,1367,965],{},", or ",[462,1370,1371],{},"record: null"," on a miss. The Quickstart connector's ",[462,1374,812],{}," takes it (see ",[484,1377,1379],{"href":1378},"#queryresultfor",[462,1380,540],{},").",[616,1383,1385],{"id":1384},"createoperationserialized",[462,1386,1387],{},"CreateOperationSerialized",[459,1389,1183,1390,1392,1393,1395],{},[462,1391,976],{}," request: one object in ",[462,1394,983],{}," per item to create.",[506,1397,1399],{"className":508,"code":1398,"filename":633,"language":511,"meta":512,"style":512},"interface CreateOperationSerialized {\n    op: 'create';\n    collection: Identifier;\n    namespace?: Identifier;\n    select: Identifier[];\n    data: MonospaceObject[];\n}\n",[462,1400,1401,1409,1418,1426,1434,1443,1453],{"__ignoreMap":512},[516,1402,1403,1405,1407],{"class":518,"line":519},[516,1404,640],{"class":522},[516,1406,867],{"class":643},[516,1408,647],{"class":529},[516,1410,1411,1413,1416],{"class":518,"line":650},[516,1412,1208],{"class":522},[516,1414,1415],{"class":574}," 'create'",[516,1417,578],{"class":529},[516,1419,1420,1422,1424],{"class":518,"line":661},[516,1421,1218],{"class":522},[516,1423,1221],{"class":643},[516,1425,578],{"class":529},[516,1427,1428,1430,1432],{"class":518,"line":759},[516,1429,1228],{"class":522},[516,1431,1221],{"class":643},[516,1433,578],{"class":529},[516,1435,1436,1439,1441],{"class":518,"line":765},[516,1437,1438],{"class":522},"    select:",[516,1440,1221],{"class":643},[516,1442,1242],{"class":529},[516,1444,1445,1448,1451],{"class":518,"line":1245},[516,1446,1447],{"class":522},"    data:",[516,1449,1450],{"class":643}," MonospaceObject",[516,1452,1242],{"class":529},[516,1454,1455],{"class":518,"line":1256},[516,1456,664],{"class":529},[459,1458,1305,1459,1461,1462,1464,1465,1467,1468,1472,1473,1475],{},[462,1460,939],{},": the created items, with the fields in ",[462,1463,955],{},". Which fields ",[462,1466,955],{}," holds depends on the ",[484,1469,1471],{"href":1470},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#declare-query-capabilities","query capabilities",". The Stripe connector's ",[462,1474,976],{}," takes it.",[616,1477,1479],{"id":1478},"updatemanyoperationserialized",[462,1480,1481],{},"UpdateManyOperationSerialized",[459,1483,796,1484,1392,1486,1488,1489,497],{},[462,1485,996],{},[462,1487,983],{},", applied to every item that matches ",[462,1490,1189],{},[506,1492,1494],{"className":508,"code":1493,"filename":633,"language":511,"meta":512,"style":512},"interface UpdateManyOperationSerialized {\n    op: 'updateMany';\n    collection: Identifier;\n    namespace?: Identifier;\n    select: Identifier[];\n    filter?: FilterSerialized;\n    data: MonospaceObject;\n}\n",[462,1495,1496,1504,1513,1521,1529,1537,1545,1553],{"__ignoreMap":512},[516,1497,1498,1500,1502],{"class":518,"line":519},[516,1499,640],{"class":522},[516,1501,872],{"class":643},[516,1503,647],{"class":529},[516,1505,1506,1508,1511],{"class":518,"line":650},[516,1507,1208],{"class":522},[516,1509,1510],{"class":574}," 'updateMany'",[516,1512,578],{"class":529},[516,1514,1515,1517,1519],{"class":518,"line":661},[516,1516,1218],{"class":522},[516,1518,1221],{"class":643},[516,1520,578],{"class":529},[516,1522,1523,1525,1527],{"class":518,"line":759},[516,1524,1228],{"class":522},[516,1526,1221],{"class":643},[516,1528,578],{"class":529},[516,1530,1531,1533,1535],{"class":518,"line":765},[516,1532,1438],{"class":522},[516,1534,1221],{"class":643},[516,1536,1242],{"class":529},[516,1538,1539,1541,1543],{"class":518,"line":1245},[516,1540,1248],{"class":522},[516,1542,1251],{"class":643},[516,1544,578],{"class":529},[516,1546,1547,1549,1551],{"class":518,"line":1256},[516,1548,1447],{"class":522},[516,1550,1450],{"class":643},[516,1552,578],{"class":529},[516,1554,1555],{"class":518,"line":1267},[516,1556,664],{"class":529},[459,1558,1305,1559,1561,1562,1475],{},[462,1560,939],{},": the updated items. The Stripe connector's ",[462,1563,996],{},[616,1565,1567],{"id":1566},"updateoneoperationserialized",[462,1568,1569],{},"UpdateOneOperationSerialized",[459,1571,796,1572,1574,1575,1577],{},[462,1573,1017],{}," request: ",[462,1576,983],{}," applied to one item by its primary key, with an optional guard.",[506,1579,1581],{"className":508,"code":1580,"filename":633,"language":511,"meta":512,"style":512},"interface UpdateOneOperationSerialized extends KeyedOperation {\n    op: 'updateOne';\n    data: MonospaceObject;\n}\n",[462,1582,1583,1595,1604,1612],{"__ignoreMap":512},[516,1584,1585,1587,1589,1591,1593],{"class":518,"line":519},[516,1586,640],{"class":522},[516,1588,877],{"class":643},[516,1590,725],{"class":522},[516,1592,1340],{"class":643},[516,1594,647],{"class":529},[516,1596,1597,1599,1602],{"class":518,"line":650},[516,1598,1208],{"class":522},[516,1600,1601],{"class":574}," 'updateOne'",[516,1603,578],{"class":529},[516,1605,1606,1608,1610],{"class":518,"line":661},[516,1607,1447],{"class":522},[516,1609,1450],{"class":643},[516,1611,578],{"class":529},[516,1613,1614],{"class":518,"line":759},[516,1615,664],{"class":529},[459,1617,1358,1618,1365,1622,1032,1624,1626,1627,1472,1630,1475],{},[484,1619,1620],{"href":1361},[462,1621,1364],{},[462,1623,965],{},[462,1625,969],{}," on a miss. Engine sends it only to a connector that declares ",[462,1628,1629],{},"updateReturning",[462,1631,1017],{},[616,1633,1635],{"id":1634},"deletemanyoperationserialized",[462,1636,1637],{},"DeleteManyOperationSerialized",[459,1639,1183,1640,1642,1643,497],{},[462,1641,1041],{}," request: delete every item that matches ",[462,1644,1189],{},[506,1646,1648],{"className":508,"code":1647,"filename":633,"language":511,"meta":512,"style":512},"interface DeleteManyOperationSerialized {\n    op: 'deleteMany';\n    collection: Identifier;\n    namespace?: Identifier;\n    select: Identifier[];\n    filter?: FilterSerialized;\n}\n",[462,1649,1650,1658,1667,1675,1683,1691,1699],{"__ignoreMap":512},[516,1651,1652,1654,1656],{"class":518,"line":519},[516,1653,640],{"class":522},[516,1655,882],{"class":643},[516,1657,647],{"class":529},[516,1659,1660,1662,1665],{"class":518,"line":650},[516,1661,1208],{"class":522},[516,1663,1664],{"class":574}," 'deleteMany'",[516,1666,578],{"class":529},[516,1668,1669,1671,1673],{"class":518,"line":661},[516,1670,1218],{"class":522},[516,1672,1221],{"class":643},[516,1674,578],{"class":529},[516,1676,1677,1679,1681],{"class":518,"line":759},[516,1678,1228],{"class":522},[516,1680,1221],{"class":643},[516,1682,578],{"class":529},[516,1684,1685,1687,1689],{"class":518,"line":765},[516,1686,1438],{"class":522},[516,1688,1221],{"class":643},[516,1690,1242],{"class":529},[516,1692,1693,1695,1697],{"class":518,"line":1245},[516,1694,1248],{"class":522},[516,1696,1251],{"class":643},[516,1698,578],{"class":529},[516,1700,1701],{"class":518,"line":1256},[516,1702,664],{"class":529},[459,1704,1305,1705,1707,1708,1475],{},[462,1706,939],{},": the deleted items. The Stripe connector's ",[462,1709,1041],{},[616,1711,1713],{"id":1712},"deleteoneoperationserialized",[462,1714,1110],{},[459,1716,1183,1717,1719],{},[462,1718,1059],{}," request: delete one item by its primary key, with an optional guard.",[506,1721,1723],{"className":508,"code":1722,"filename":633,"language":511,"meta":512,"style":512},"interface DeleteOneOperationSerialized extends KeyedOperation {\n    op: 'deleteOne';\n}\n",[462,1724,1725,1737,1746],{"__ignoreMap":512},[516,1726,1727,1729,1731,1733,1735],{"class":518,"line":519},[516,1728,640],{"class":522},[516,1730,887],{"class":643},[516,1732,725],{"class":522},[516,1734,1340],{"class":643},[516,1736,647],{"class":529},[516,1738,1739,1741,1744],{"class":518,"line":650},[516,1740,1208],{"class":522},[516,1742,1743],{"class":574}," 'deleteOne'",[516,1745,578],{"class":529},[516,1747,1748],{"class":518,"line":661},[516,1749,664],{"class":529},[459,1751,1358,1752,1365,1756,1072,1758,1626,1760,1472,1763,1475],{},[484,1753,1754],{"href":1361},[462,1755,1364],{},[462,1757,965],{},[462,1759,969],{},[462,1761,1762],{},"deleteReturning",[462,1764,1059],{},[616,1766,1768],{"id":1767},"operationname",[462,1769,802],{},[459,1771,1772,1773,1775],{},"The name of an operation, as its ",[462,1774,820],{}," tag.",[506,1777,1779],{"className":508,"code":1778,"filename":633,"language":511,"meta":512,"style":512},"type OperationName = OperationSerialized['op'];\n",[462,1780,1781],{"__ignoreMap":512},[516,1782,1783,1785,1787,1789,1791,1794,1797],{"class":518,"line":519},[516,1784,848],{"class":522},[516,1786,728],{"class":643},[516,1788,853],{"class":522},[516,1790,656],{"class":643},[516,1792,1793],{"class":529},"[",[516,1795,1796],{"class":574},"'op'",[516,1798,1799],{"class":529},"];\n",[459,1801,1802,1803,1806,1807,537,1811,1171,1815,497],{},"It's the union ",[462,1804,1805],{},"'readMany' | 'readOne' | 'create' | 'updateMany' | 'updateOne' | 'deleteMany' | 'deleteOne'",", and the type parameter of ",[484,1808,1809],{"href":673},[462,1810,676],{},[484,1812,1813],{"href":1378},[462,1814,540],{},[484,1816,1817],{"href":824},[462,1818,827],{},[616,1820,1822],{"id":1821},"keyedoperation",[462,1823,1364],{},[459,1825,1826,1827,537,1829,1171,1831,1833,1834,1836,1837,497],{},"What ",[462,1828,812],{},[462,1830,1017],{},[462,1832,1059],{}," share: a ",[462,1835,958],{}," for the collection's primary key, and an optional guard ",[462,1838,1189],{},[506,1840,1842],{"className":508,"code":1841,"filename":633,"language":511,"meta":512,"style":512},"interface KeyedOperation {\n    collection: Identifier;\n    namespace?: Identifier;\n    select: Identifier[];\n    key: Record\u003CIdentifier, Value>;\n    filter?: FilterSerialized;\n}\n",[462,1843,1844,1852,1860,1868,1876,1896,1904],{"__ignoreMap":512},[516,1845,1846,1848,1850],{"class":518,"line":519},[516,1847,640],{"class":522},[516,1849,1340],{"class":643},[516,1851,647],{"class":529},[516,1853,1854,1856,1858],{"class":518,"line":650},[516,1855,1218],{"class":522},[516,1857,1221],{"class":643},[516,1859,578],{"class":529},[516,1861,1862,1864,1866],{"class":518,"line":661},[516,1863,1228],{"class":522},[516,1865,1221],{"class":643},[516,1867,578],{"class":529},[516,1869,1870,1872,1874],{"class":518,"line":759},[516,1871,1438],{"class":522},[516,1873,1221],{"class":643},[516,1875,1242],{"class":529},[516,1877,1878,1881,1884,1886,1889,1891,1893],{"class":518,"line":765},[516,1879,1880],{"class":522},"    key:",[516,1882,1883],{"class":643}," Record",[516,1885,720],{"class":529},[516,1887,1888],{"class":643},"Identifier",[516,1890,537],{"class":529},[516,1892,565],{"class":643},[516,1894,1895],{"class":529},">;\n",[516,1897,1898,1900,1902],{"class":518,"line":1245},[516,1899,1248],{"class":522},[516,1901,1251],{"class":643},[516,1903,578],{"class":529},[516,1905,1906],{"class":518,"line":1256},[516,1907,664],{"class":529},[459,1909,1910,1912,1913,1915,1916,1922,1923,1368,1926,1929,1930,497],{},[462,1911,958],{}," holds a value for the collection's primary-key field, by field name. Engine offers keyed operations only on a single-field primary key, so ",[462,1914,958],{}," has one entry. The item must match both the key and the guard. Answer with a ",[484,1917,1919],{"href":1918},"#keyedqueryresultserialized",[462,1920,1921],{},"KeyedQueryResultSerialized",": ",[462,1924,1925],{},"{ record: \u003Citem> }",[462,1927,1928],{},"{ record: null }"," when the key or the guard misses. A miss isn't an error: don't throw, and change nothing. Apply the key and the guard before you write, so a write never touches an item the guard excludes. See ",[484,1931,1933],{"href":1932},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#keyed-operations","Keyed Operations",[616,1935,1937],{"id":1936},"filterserialized",[462,1938,1939],{},"FilterSerialized",[459,1941,1942],{},"A filter tree. Each node has exactly one of five shapes, told apart by which keys it has.",[506,1944,1946],{"className":508,"code":1945,"filename":633,"language":511,"meta":512,"style":512},"type FilterSerialized = StrictUnion\u003CAndFilterSerialized | OrFilterSerialized | NotFilterSerialized | ComparisonFilterSerialized | InFilterSerialized>;\n",[462,1947,1948],{"__ignoreMap":512},[516,1949,1950,1952,1954,1956,1959,1961,1964,1966,1969,1971,1974,1976,1979,1981,1984],{"class":518,"line":519},[516,1951,848],{"class":522},[516,1953,1251],{"class":643},[516,1955,853],{"class":522},[516,1957,1958],{"class":643}," StrictUnion",[516,1960,720],{"class":529},[516,1962,1963],{"class":643},"AndFilterSerialized",[516,1965,859],{"class":522},[516,1967,1968],{"class":643}," OrFilterSerialized",[516,1970,859],{"class":522},[516,1972,1973],{"class":643}," NotFilterSerialized",[516,1975,859],{"class":522},[516,1977,1978],{"class":643}," ComparisonFilterSerialized",[516,1980,859],{"class":522},[516,1982,1983],{"class":643}," InFilterSerialized",[516,1985,1895],{"class":529},[769,1987,1988,1998],{},[772,1989,1990],{},[775,1991,1992,1995],{},[778,1993,1994],{},"Shape",[778,1996,1997],{},"Meaning",[785,1999,2000,2010,2020,2030,2051],{},[775,2001,2002,2007],{},[790,2003,2004],{},[462,2005,2006],{},"{ and: FilterSerialized[] }",[790,2008,2009],{},"Every child matches",[775,2011,2012,2017],{},[790,2013,2014],{},[462,2015,2016],{},"{ or: FilterSerialized[] }",[790,2018,2019],{},"At least one child matches",[775,2021,2022,2027],{},[790,2023,2024],{},[462,2025,2026],{},"{ not: FilterSerialized }",[790,2028,2029],{},"The child doesn't match",[775,2031,2032,2037],{},[790,2033,2034],{},[462,2035,2036],{},"{ cmp, left, right }",[790,2038,2039,2040,2046,2047],{},"A comparison with a ",[484,2041,2043],{"href":2042},"#filteroperator",[462,2044,2045],{},"FilterOperator"," between two ",[484,2048,2050],{"href":2049},"#filteroperandserialized","operands",[775,2052,2053,2058],{},[790,2054,2055],{},[462,2056,2057],{},"{ in, values }",[790,2059,2060,2061],{},"The operand is one of ",[484,2062,2064],{"href":2063},"#insetserialized",[462,2065,2066],{},"values",[459,2068,2069,2070,2073,2074,2077,2078,2081,2082,1104,2087,2093,2094,2097,2098,2100,2101,2104],{},"The type forbids the keys of the other shapes, so reading ",[462,2071,2072],{},"filter.and"," on any node type-checks. Checking a key against ",[462,2075,2076],{},"undefined",", such as ",[462,2079,2080],{},"filter.cmp !== undefined",", narrows the node to its named type, from ",[484,2083,2085],{"href":2084},"#andfilterserialized",[462,2086,1963],{},[484,2088,2090],{"href":2089},"#infilterserialized",[462,2091,2092],{},"InFilterSerialized",". ",[462,2095,2096],{},"'cmp' in filter"," doesn't narrow it. How a comparison treats ",[462,2099,969],{},", and so what ",[462,2102,2103],{},"not"," around it matches, is up to your connector: the kit doesn't define it. The Quickstart connector translates the shapes it can serve and refuses the rest:",[506,2106,2109],{"className":508,"code":2107,"filename":2108,"language":511,"meta":512,"style":512},"export function toQuery(filter: FilterSerialized): SearchBody {\n    if (filter.and !== undefined) {\n        return { bool: { filter: filter.and.map((child) => toQuery(child)) } };\n    }\n\n    if (filter.or !== undefined) {\n        return { bool: { should: filter.or.map((child) => toQuery(child)), minimum_should_match: 1 } };\n    }\n\n    if (filter.in?.field !== undefined && Array.isArray(filter.values)) {\n        \u002F\u002F The search API rejects `null` in `terms`, and `terms` never matches a missing value. So `null`\n        \u002F\u002F members are left out, and `in` never matches an item without a value.\n        return { terms: { [apiFieldName(filter.in.field)]: filter.values.filter((value) => value !== null) } };\n    }\n\n    if (filter.cmp === 'equals' && filter.left.field !== undefined && filter.right.value !== undefined) {\n        const name = apiFieldName(filter.left.field);\n        \u002F\u002F `field = null` means \"is null\": the search API's `exists` is false for a field without a value.\n        if (filter.right.value === null) return { bool: { must_not: { exists: { field: name } } } };\n        return { term: { [name]: filter.right.value } };\n    }\n\n    throw new QueryRejected('The Art Institute connector answers only `equals` and `in`, joined with `and` or `or`.');\n}\n","src\u002Fdata-connectors\u002Fartic\u002Ffilter.ts",[462,2110,2111,2136,2160,2200,2205,2211,2230,2270,2274,2278,2323,2329,2335,2391,2396,2401,2458,2487,2493,2529,2554,2559,2564,2583],{"__ignoreMap":512},[516,2112,2113,2115,2117,2120,2122,2125,2127,2129,2131,2134],{"class":518,"line":519},[516,2114,1131],{"class":522},[516,2116,1137],{"class":522},[516,2118,2119],{"class":643}," toQuery",[516,2121,1143],{"class":529},[516,2123,2124],{"class":522},"filter:",[516,2126,1251],{"class":643},[516,2128,1151],{"class":529},[516,2130,1154],{"class":522},[516,2132,2133],{"class":643}," SearchBody",[516,2135,647],{"class":529},[516,2137,2138,2141,2144,2146,2148,2151,2154,2157],{"class":518,"line":650},[516,2139,2140],{"class":522},"    if",[516,2142,2143],{"class":529}," (",[516,2145,1189],{"class":533},[516,2147,497],{"class":529},[516,2149,2150],{"class":533},"and",[516,2152,2153],{"class":522}," !==",[516,2155,2156],{"class":643}," undefined",[516,2158,2159],{"class":529},") {\n",[516,2161,2162,2165,2168,2170,2172,2174,2176,2179,2182,2185,2188,2191,2193,2195,2197],{"class":518,"line":661},[516,2163,2164],{"class":522},"        return",[516,2166,2167],{"class":529}," { bool: { filter: ",[516,2169,1189],{"class":533},[516,2171,497],{"class":529},[516,2173,2150],{"class":533},[516,2175,497],{"class":529},[516,2177,2178],{"class":643},"map",[516,2180,2181],{"class":529},"((",[516,2183,2184],{"class":522},"child",[516,2186,2187],{"class":529},") ",[516,2189,2190],{"class":522},"=>",[516,2192,2119],{"class":643},[516,2194,1143],{"class":529},[516,2196,2184],{"class":533},[516,2198,2199],{"class":529},")) } };\n",[516,2201,2202],{"class":518,"line":759},[516,2203,2204],{"class":529},"    }\n",[516,2206,2207],{"class":518,"line":765},[516,2208,2210],{"emptyLinePlaceholder":2209},true,"\n",[516,2212,2213,2215,2217,2219,2221,2224,2226,2228],{"class":518,"line":1245},[516,2214,2140],{"class":522},[516,2216,2143],{"class":529},[516,2218,1189],{"class":533},[516,2220,497],{"class":529},[516,2222,2223],{"class":533},"or",[516,2225,2153],{"class":522},[516,2227,2156],{"class":643},[516,2229,2159],{"class":529},[516,2231,2232,2234,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2264,2267],{"class":518,"line":1256},[516,2233,2164],{"class":522},[516,2235,2236],{"class":529}," { bool: { should: ",[516,2238,1189],{"class":533},[516,2240,497],{"class":529},[516,2242,2223],{"class":533},[516,2244,497],{"class":529},[516,2246,2178],{"class":643},[516,2248,2181],{"class":529},[516,2250,2184],{"class":522},[516,2252,2187],{"class":529},[516,2254,2190],{"class":522},[516,2256,2119],{"class":643},[516,2258,1143],{"class":529},[516,2260,2184],{"class":533},[516,2262,2263],{"class":529},")), minimum_should_match: ",[516,2265,2266],{"class":643},"1",[516,2268,2269],{"class":529}," } };\n",[516,2271,2272],{"class":518,"line":1267},[516,2273,2204],{"class":529},[516,2275,2276],{"class":518,"line":1279},[516,2277,2210],{"emptyLinePlaceholder":2209},[516,2279,2280,2282,2284,2286,2288,2291,2294,2297,2299,2301,2304,2307,2309,2312,2314,2316,2318,2320],{"class":518,"line":1289},[516,2281,2140],{"class":522},[516,2283,2143],{"class":529},[516,2285,1189],{"class":533},[516,2287,497],{"class":529},[516,2289,2290],{"class":533},"in",[516,2292,2293],{"class":529},"?.",[516,2295,2296],{"class":533},"field",[516,2298,2153],{"class":522},[516,2300,2156],{"class":643},[516,2302,2303],{"class":522}," &&",[516,2305,2306],{"class":533}," Array",[516,2308,497],{"class":529},[516,2310,2311],{"class":643},"isArray",[516,2313,1143],{"class":529},[516,2315,1189],{"class":533},[516,2317,497],{"class":529},[516,2319,2066],{"class":533},[516,2321,2322],{"class":529},")) {\n",[516,2324,2325],{"class":518,"line":1300},[516,2326,2328],{"class":2327},"seNfP","        \u002F\u002F The search API rejects `null` in `terms`, and `terms` never matches a missing value. So `null`\n",[516,2330,2332],{"class":518,"line":2331},12,[516,2333,2334],{"class":2327},"        \u002F\u002F members are left out, and `in` never matches an item without a value.\n",[516,2336,2338,2340,2343,2346,2348,2350,2352,2354,2356,2358,2361,2363,2365,2367,2369,2371,2373,2376,2378,2380,2383,2385,2388],{"class":518,"line":2337},13,[516,2339,2164],{"class":522},[516,2341,2342],{"class":529}," { terms: { [",[516,2344,2345],{"class":643},"apiFieldName",[516,2347,1143],{"class":529},[516,2349,1189],{"class":533},[516,2351,497],{"class":529},[516,2353,2290],{"class":533},[516,2355,497],{"class":529},[516,2357,2296],{"class":533},[516,2359,2360],{"class":529},")]: ",[516,2362,1189],{"class":533},[516,2364,497],{"class":529},[516,2366,2066],{"class":533},[516,2368,497],{"class":529},[516,2370,1189],{"class":643},[516,2372,2181],{"class":529},[516,2374,2375],{"class":522},"value",[516,2377,2187],{"class":529},[516,2379,2190],{"class":522},[516,2381,2382],{"class":533}," value",[516,2384,2153],{"class":522},[516,2386,2387],{"class":643}," null",[516,2389,2390],{"class":529},") } };\n",[516,2392,2394],{"class":518,"line":2393},14,[516,2395,2204],{"class":529},[516,2397,2399],{"class":518,"line":2398},15,[516,2400,2210],{"emptyLinePlaceholder":2209},[516,2402,2404,2406,2408,2410,2412,2415,2418,2421,2423,2426,2428,2431,2433,2435,2437,2439,2441,2443,2445,2448,2450,2452,2454,2456],{"class":518,"line":2403},16,[516,2405,2140],{"class":522},[516,2407,2143],{"class":529},[516,2409,1189],{"class":533},[516,2411,497],{"class":529},[516,2413,2414],{"class":533},"cmp",[516,2416,2417],{"class":522}," ===",[516,2419,2420],{"class":574}," 'equals'",[516,2422,2303],{"class":522},[516,2424,2425],{"class":533}," filter",[516,2427,497],{"class":529},[516,2429,2430],{"class":533},"left",[516,2432,497],{"class":529},[516,2434,2296],{"class":533},[516,2436,2153],{"class":522},[516,2438,2156],{"class":643},[516,2440,2303],{"class":522},[516,2442,2425],{"class":533},[516,2444,497],{"class":529},[516,2446,2447],{"class":533},"right",[516,2449,497],{"class":529},[516,2451,2375],{"class":533},[516,2453,2153],{"class":522},[516,2455,2156],{"class":643},[516,2457,2159],{"class":529},[516,2459,2461,2464,2467,2469,2472,2474,2476,2478,2480,2482,2484],{"class":518,"line":2460},17,[516,2462,2463],{"class":522},"        const",[516,2465,2466],{"class":643}," name",[516,2468,853],{"class":522},[516,2470,2471],{"class":643}," apiFieldName",[516,2473,1143],{"class":529},[516,2475,1189],{"class":533},[516,2477,497],{"class":529},[516,2479,2430],{"class":533},[516,2481,497],{"class":529},[516,2483,2296],{"class":533},[516,2485,2486],{"class":529},");\n",[516,2488,2490],{"class":518,"line":2489},18,[516,2491,2492],{"class":2327},"        \u002F\u002F `field = null` means \"is null\": the search API's `exists` is false for a field without a value.\n",[516,2494,2496,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517,2520,2523,2526],{"class":518,"line":2495},19,[516,2497,2498],{"class":522},"        if",[516,2500,2143],{"class":529},[516,2502,1189],{"class":533},[516,2504,497],{"class":529},[516,2506,2447],{"class":533},[516,2508,497],{"class":529},[516,2510,2375],{"class":533},[516,2512,2417],{"class":522},[516,2514,2387],{"class":643},[516,2516,2187],{"class":529},[516,2518,2519],{"class":522},"return",[516,2521,2522],{"class":529}," { bool: { must_not: { exists: { field: ",[516,2524,2525],{"class":533},"name",[516,2527,2528],{"class":529}," } } } };\n",[516,2530,2532,2534,2537,2539,2542,2544,2546,2548,2550,2552],{"class":518,"line":2531},20,[516,2533,2164],{"class":522},[516,2535,2536],{"class":529}," { term: { [",[516,2538,2525],{"class":533},[516,2540,2541],{"class":529},"]: ",[516,2543,1189],{"class":533},[516,2545,497],{"class":529},[516,2547,2447],{"class":533},[516,2549,497],{"class":529},[516,2551,2375],{"class":533},[516,2553,2269],{"class":529},[516,2555,2557],{"class":518,"line":2556},21,[516,2558,2204],{"class":529},[516,2560,2562],{"class":518,"line":2561},22,[516,2563,2210],{"emptyLinePlaceholder":2209},[516,2565,2567,2570,2573,2576,2578,2581],{"class":518,"line":2566},23,[516,2568,2569],{"class":522},"    throw",[516,2571,2572],{"class":522}," new",[516,2574,2575],{"class":643}," QueryRejected",[516,2577,1143],{"class":529},[516,2579,2580],{"class":574},"'The Art Institute connector answers only `equals` and `in`, joined with `and` or `or`.'",[516,2582,2486],{"class":529},[516,2584,2586],{"class":518,"line":2585},24,[516,2587,664],{"class":529},[459,2589,2590,2591,2593,2594,2596],{},"This connector leaves ",[462,2592,969],{}," members out of ",[462,2595,2290],{},", so a null field never matches it.",[459,2598,1166,2599,1171,2603,497],{},[484,2600,2602],{"href":2601},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#filters","Filters",[484,2604,2606],{"href":2605},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#map-caller-operators-to-the-wire","Map Caller Operators to the Wire",[616,2608,2610],{"id":2609},"andfilterserialized",[462,2611,1963],{},[459,2613,2614,2615,2617],{},"A node that matches when every child in ",[462,2616,2150],{}," matches.",[506,2619,2621],{"className":508,"code":2620,"filename":633,"language":511,"meta":512,"style":512},"interface AndFilterSerialized {\n    and: FilterSerialized[];\n}\n",[462,2622,2623,2632,2641],{"__ignoreMap":512},[516,2624,2625,2627,2630],{"class":518,"line":519},[516,2626,640],{"class":522},[516,2628,2629],{"class":643}," AndFilterSerialized",[516,2631,647],{"class":529},[516,2633,2634,2637,2639],{"class":518,"line":650},[516,2635,2636],{"class":522},"    and:",[516,2638,1251],{"class":643},[516,2640,1242],{"class":529},[516,2642,2643],{"class":518,"line":661},[516,2644,664],{"class":529},[616,2646,2648],{"id":2647},"orfilterserialized",[462,2649,2650],{},"OrFilterSerialized",[459,2652,2653,2654,2617],{},"A node that matches when at least one child in ",[462,2655,2223],{},[506,2657,2659],{"className":508,"code":2658,"filename":633,"language":511,"meta":512,"style":512},"interface OrFilterSerialized {\n    or: FilterSerialized[];\n}\n",[462,2660,2661,2669,2678],{"__ignoreMap":512},[516,2662,2663,2665,2667],{"class":518,"line":519},[516,2664,640],{"class":522},[516,2666,1968],{"class":643},[516,2668,647],{"class":529},[516,2670,2671,2674,2676],{"class":518,"line":650},[516,2672,2673],{"class":522},"    or:",[516,2675,1251],{"class":643},[516,2677,1242],{"class":529},[516,2679,2680],{"class":518,"line":661},[516,2681,664],{"class":529},[616,2683,2685],{"id":2684},"notfilterserialized",[462,2686,2687],{},"NotFilterSerialized",[459,2689,2690],{},"A node that matches when its child doesn't.",[506,2692,2694],{"className":508,"code":2693,"filename":633,"language":511,"meta":512,"style":512},"interface NotFilterSerialized {\n    not: FilterSerialized;\n}\n",[462,2695,2696,2704,2713],{"__ignoreMap":512},[516,2697,2698,2700,2702],{"class":518,"line":519},[516,2699,640],{"class":522},[516,2701,1973],{"class":643},[516,2703,647],{"class":529},[516,2705,2706,2709,2711],{"class":518,"line":650},[516,2707,2708],{"class":522},"    not:",[516,2710,1251],{"class":643},[516,2712,578],{"class":529},[516,2714,2715],{"class":518,"line":661},[516,2716,664],{"class":529},[616,2718,2720],{"id":2719},"comparisonfilterserialized",[462,2721,2722],{},"ComparisonFilterSerialized",[459,2724,2725,2726,2728,2729,2733,2734,497],{},"A node that compares two ",[484,2727,2050],{"href":2049}," with the ",[484,2730,2731],{"href":2042},[462,2732,2045],{}," in ",[462,2735,2414],{},[506,2737,2739],{"className":508,"code":2738,"filename":633,"language":511,"meta":512,"style":512},"interface ComparisonFilterSerialized {\n    cmp: FilterOperator;\n    left: FilterOperandSerialized;\n    right: FilterOperandSerialized;\n}\n",[462,2740,2741,2749,2759,2769,2778],{"__ignoreMap":512},[516,2742,2743,2745,2747],{"class":518,"line":519},[516,2744,640],{"class":522},[516,2746,1978],{"class":643},[516,2748,647],{"class":529},[516,2750,2751,2754,2757],{"class":518,"line":650},[516,2752,2753],{"class":522},"    cmp:",[516,2755,2756],{"class":643}," FilterOperator",[516,2758,578],{"class":529},[516,2760,2761,2764,2767],{"class":518,"line":661},[516,2762,2763],{"class":522},"    left:",[516,2765,2766],{"class":643}," FilterOperandSerialized",[516,2768,578],{"class":529},[516,2770,2771,2774,2776],{"class":518,"line":759},[516,2772,2773],{"class":522},"    right:",[516,2775,2766],{"class":643},[516,2777,578],{"class":529},[516,2779,2780],{"class":518,"line":765},[516,2781,664],{"class":529},[459,2783,2784],{},"The Stripe connector evaluates a comparison in a function that takes this type, after it has handled the other shapes:",[506,2786,2789],{"className":508,"code":2787,"filename":2788,"language":511,"meta":512,"style":512},"function compare(\n    resource: ResourceSpec,\n    { cmp: operator, left: leftOperand, right: rightOperand }: ComparisonFilterSerialized,\n    item: MonospaceObject,\n): Truth {\n","src\u002Fdata-connectors\u002Fstripe\u002Ffilter.ts",[462,2790,2791,2802,2813,2852,2861],{"__ignoreMap":512},[516,2792,2793,2796,2799],{"class":518,"line":519},[516,2794,2795],{"class":522},"function",[516,2797,2798],{"class":643}," compare",[516,2800,2801],{"class":529},"(\n",[516,2803,2804,2807,2810],{"class":518,"line":650},[516,2805,2806],{"class":522},"    resource:",[516,2808,2809],{"class":643}," ResourceSpec",[516,2811,2812],{"class":529},",\n",[516,2814,2815,2818,2820,2822,2825,2827,2829,2831,2834,2836,2838,2840,2843,2846,2848,2850],{"class":518,"line":661},[516,2816,2817],{"class":529},"    { ",[516,2819,2414],{"class":522},[516,2821,1922],{"class":529},[516,2823,2824],{"class":522},"operator",[516,2826,537],{"class":529},[516,2828,2430],{"class":522},[516,2830,1922],{"class":529},[516,2832,2833],{"class":522},"leftOperand",[516,2835,537],{"class":529},[516,2837,2447],{"class":522},[516,2839,1922],{"class":529},[516,2841,2842],{"class":522},"rightOperand",[516,2844,2845],{"class":529}," }",[516,2847,1154],{"class":522},[516,2849,1978],{"class":643},[516,2851,2812],{"class":529},[516,2853,2854,2857,2859],{"class":518,"line":759},[516,2855,2856],{"class":522},"    item:",[516,2858,1450],{"class":643},[516,2860,2812],{"class":529},[516,2862,2863,2865,2867,2870],{"class":518,"line":765},[516,2864,1151],{"class":529},[516,2866,1154],{"class":522},[516,2868,2869],{"class":643}," Truth",[516,2871,647],{"class":529},[616,2873,2875],{"id":2874},"infilterserialized",[462,2876,2092],{},[459,2878,2879,2880,2882,2883,497],{},"A node that matches when the operand in ",[462,2881,2290],{}," is one of ",[484,2884,2885],{"href":2063},[462,2886,2066],{},[506,2888,2890],{"className":508,"code":2889,"filename":633,"language":511,"meta":512,"style":512},"interface InFilterSerialized {\n    in: FilterOperandSerialized;\n    values: InSetSerialized;\n}\n",[462,2891,2892,2900,2909,2919],{"__ignoreMap":512},[516,2893,2894,2896,2898],{"class":518,"line":519},[516,2895,640],{"class":522},[516,2897,1983],{"class":643},[516,2899,647],{"class":529},[516,2901,2902,2905,2907],{"class":518,"line":650},[516,2903,2904],{"class":522},"    in:",[516,2906,2766],{"class":643},[516,2908,578],{"class":529},[516,2910,2911,2914,2917],{"class":518,"line":661},[516,2912,2913],{"class":522},"    values:",[516,2915,2916],{"class":643}," InSetSerialized",[516,2918,578],{"class":529},[516,2920,2921],{"class":518,"line":759},[516,2922,664],{"class":529},[616,2924,2926],{"id":2925},"filteroperandserialized",[462,2927,2928],{},"FilterOperandSerialized",[459,2930,2931],{},"One side of a comparison: a field reference or a literal value.",[506,2933,2935],{"className":508,"code":2934,"filename":633,"language":511,"meta":512,"style":512},"type FilterOperandSerialized = StrictUnion\u003C{\n    field: Identifier;\n} | {\n    value: Value;\n}>;\n",[462,2936,2937,2950,2959,2969,2979],{"__ignoreMap":512},[516,2938,2939,2941,2943,2945,2947],{"class":518,"line":519},[516,2940,848],{"class":522},[516,2942,2766],{"class":643},[516,2944,853],{"class":522},[516,2946,1958],{"class":643},[516,2948,2949],{"class":529},"\u003C{\n",[516,2951,2952,2955,2957],{"class":518,"line":650},[516,2953,2954],{"class":522},"    field:",[516,2956,1221],{"class":643},[516,2958,578],{"class":529},[516,2960,2961,2964,2967],{"class":518,"line":661},[516,2962,2963],{"class":529},"} ",[516,2965,2966],{"class":522},"|",[516,2968,647],{"class":529},[516,2970,2971,2974,2977],{"class":518,"line":759},[516,2972,2973],{"class":522},"    value:",[516,2975,2976],{"class":643}," Value",[516,2978,578],{"class":529},[516,2980,2981],{"class":518,"line":765},[516,2982,2983],{"class":529},"}>;\n",[459,2985,2986],{},"Read both sides of a comparison; the field isn't always on the left.",[616,2988,2990],{"id":2989},"insetserialized",[462,2991,2992],{},"InSetSerialized",[459,2994,2995,2996,2998],{},"The set side of an ",[462,2997,2290],{},": literal values, or a reference to a list field.",[506,3000,3002],{"className":508,"code":3001,"filename":633,"language":511,"meta":512,"style":512},"type InSetSerialized = {\n    field: Identifier;\n} | List;\n",[462,3003,3004,3014,3022],{"__ignoreMap":512},[516,3005,3006,3008,3010,3012],{"class":518,"line":519},[516,3007,848],{"class":522},[516,3009,2916],{"class":643},[516,3011,853],{"class":522},[516,3013,647],{"class":529},[516,3015,3016,3018,3020],{"class":518,"line":650},[516,3017,2954],{"class":522},[516,3019,1221],{"class":643},[516,3021,578],{"class":529},[516,3023,3024,3026,3028,3031],{"class":518,"line":661},[516,3025,2963],{"class":529},[516,3027,2966],{"class":522},[516,3029,3030],{"class":643}," List",[516,3032,578],{"class":529},[616,3034,3036],{"id":3035},"filteroperator",[462,3037,2045],{},[459,3039,3040,3041,3043],{},"The comparison operators a ",[462,3042,2414],{}," node carries.",[506,3045,3047],{"className":508,"code":3046,"filename":633,"language":511,"meta":512,"style":512},"type FilterOperator = 'equals' | 'greaterThan' | 'greaterThanOrEquals' | 'lessThan' | 'lessThanOrEquals' | 'contains' | 'icontains' | 'startsWith' | 'endsWith';\n",[462,3048,3049],{"__ignoreMap":512},[516,3050,3051,3053,3055,3057,3059,3061,3064,3066,3069,3071,3074,3076,3079,3081,3084,3086,3089,3091,3094,3096,3099],{"class":518,"line":519},[516,3052,848],{"class":522},[516,3054,2756],{"class":643},[516,3056,853],{"class":522},[516,3058,2420],{"class":574},[516,3060,859],{"class":522},[516,3062,3063],{"class":574}," 'greaterThan'",[516,3065,859],{"class":522},[516,3067,3068],{"class":574}," 'greaterThanOrEquals'",[516,3070,859],{"class":522},[516,3072,3073],{"class":574}," 'lessThan'",[516,3075,859],{"class":522},[516,3077,3078],{"class":574}," 'lessThanOrEquals'",[516,3080,859],{"class":522},[516,3082,3083],{"class":574}," 'contains'",[516,3085,859],{"class":522},[516,3087,3088],{"class":574}," 'icontains'",[516,3090,859],{"class":522},[516,3092,3093],{"class":574}," 'startsWith'",[516,3095,859],{"class":522},[516,3097,3098],{"class":574}," 'endsWith'",[516,3100,578],{"class":529},[459,3102,3103,3104,3106,3107,482,3110,488,3112,1171,3115,3118,3119,497],{},"Negated caller operators arrive as ",[462,3105,2103],{}," around the positive form, and ",[462,3108,3109],{},"_between",[462,3111,2150],{},[462,3113,3114],{},"greaterThanOrEquals",[462,3116,3117],{},"lessThanOrEquals",". See ",[484,3120,2606],{"href":2605},[616,3122,3124],{"id":3123},"sortitemserialized",[462,3125,560],{},[459,3127,3128,3129,3131,3132,3135],{},"One sort key of a ",[462,3130,914],{},". The ",[462,3133,3134],{},"sort"," array applies them in order.",[506,3137,3139],{"className":508,"code":3138,"filename":633,"language":511,"meta":512,"style":512},"interface SortItemSerialized {\n    field: Identifier;\n    direction: SortDirection;\n    nulls?: SortNulls;\n}\n",[462,3140,3141,3149,3157,3167,3177],{"__ignoreMap":512},[516,3142,3143,3145,3147],{"class":518,"line":519},[516,3144,640],{"class":522},[516,3146,1262],{"class":643},[516,3148,647],{"class":529},[516,3150,3151,3153,3155],{"class":518,"line":650},[516,3152,2954],{"class":522},[516,3154,1221],{"class":643},[516,3156,578],{"class":529},[516,3158,3159,3162,3165],{"class":518,"line":661},[516,3160,3161],{"class":522},"    direction:",[516,3163,3164],{"class":643}," SortDirection",[516,3166,578],{"class":529},[516,3168,3169,3172,3175],{"class":518,"line":759},[516,3170,3171],{"class":522},"    nulls?:",[516,3173,3174],{"class":643}," SortNulls",[516,3176,578],{"class":529},[516,3178,3179],{"class":518,"line":765},[516,3180,664],{"class":529},[769,3182,3183,3195],{},[772,3184,3185],{},[775,3186,3187,3190,3193],{},[778,3188,3189],{},"Property",[778,3191,3192],{},"Type",[778,3194,783],{},[785,3196,3197,3211,3229],{},[775,3198,3199,3203,3208],{},[790,3200,3201],{},[462,3202,2296],{},[790,3204,3205],{},[462,3206,3207],{},"string",[790,3209,3210],{},"The field to sort by",[775,3212,3213,3218,3226],{},[790,3214,3215],{},[462,3216,3217],{},"direction",[790,3219,3220],{},[484,3221,3223],{"href":3222},"#sortdirection",[462,3224,3225],{},"SortDirection",[790,3227,3228],{},"The direction",[775,3230,3231,3236,3244],{},[790,3232,3233],{},[462,3234,3235],{},"nulls",[790,3237,3238],{},[484,3239,3241],{"href":3240},"#sortnulls",[462,3242,3243],{},"SortNulls",[790,3245,3246,3247,3250,3251,3254],{},"Optional. ",[462,3248,3249],{},"'first'"," or ",[462,3252,3253],{},"'last'"," places nulls before or after every value, whatever the direction. Absent, your connector places nulls by its own default",[459,3256,3257,3258,3260,3261,3264,3265,3267],{},"Engine sends ",[462,3259,3235],{}," only when the caller sets it. The Quickstart connector offers a sort by ",[462,3262,3263],{},"id"," only, and sorts by ",[462,3266,3263],{}," when the request has no sort:",[506,3269,3271],{"className":508,"code":3270,"filename":510,"language":511,"meta":512,"style":512},"\u002F**\n * Translates the caller's sort. Only `id` declares a sort, so a sort on any other field gets a plain\n * `Error`. `id` is never null, so `nulls` has no effect. Without a sort, pages still need a stable\n * order, so the default is `id` ascending.\n *\u002F\nfunction toSort(sort: readonly SortItemSerialized[]): { id: { order: 'asc' | 'desc' } }[] {\n    if (sort.length === 0) return [{ id: { order: 'asc' } }];\n\n    return sort.map(({ field, direction }) => {\n        if (field !== 'id') throw new Error(`The Art Institute connector doesn't offer sorting by \\`${field}\\`.`);\n        return { id: { order: direction === 'descending' ? 'desc' : 'asc' } };\n    });\n}\n",[462,3272,3273,3278,3283,3288,3293,3298,3341,3372,3376,3404,3450,3476,3481],{"__ignoreMap":512},[516,3274,3275],{"class":518,"line":519},[516,3276,3277],{"class":2327},"\u002F**\n",[516,3279,3280],{"class":518,"line":650},[516,3281,3282],{"class":2327}," * Translates the caller's sort. Only `id` declares a sort, so a sort on any other field gets a plain\n",[516,3284,3285],{"class":518,"line":661},[516,3286,3287],{"class":2327}," * `Error`. `id` is never null, so `nulls` has no effect. Without a sort, pages still need a stable\n",[516,3289,3290],{"class":518,"line":759},[516,3291,3292],{"class":2327}," * order, so the default is `id` ascending.\n",[516,3294,3295],{"class":518,"line":765},[516,3296,3297],{"class":2327}," *\u002F\n",[516,3299,3300,3302,3305,3307,3310,3313,3315,3318,3320,3322,3325,3327,3330,3333,3335,3338],{"class":518,"line":1245},[516,3301,2795],{"class":522},[516,3303,3304],{"class":643}," toSort",[516,3306,1143],{"class":529},[516,3308,3309],{"class":522},"sort:",[516,3311,3312],{"class":522}," readonly",[516,3314,1262],{"class":643},[516,3316,3317],{"class":529},"[])",[516,3319,1154],{"class":522},[516,3321,530],{"class":529},[516,3323,3324],{"class":522},"id:",[516,3326,530],{"class":529},[516,3328,3329],{"class":522},"order:",[516,3331,3332],{"class":574}," 'asc'",[516,3334,859],{"class":522},[516,3336,3337],{"class":574}," 'desc'",[516,3339,3340],{"class":529}," } }[] {\n",[516,3342,3343,3345,3347,3349,3351,3354,3356,3359,3361,3363,3366,3369],{"class":518,"line":1256},[516,3344,2140],{"class":522},[516,3346,2143],{"class":529},[516,3348,3134],{"class":533},[516,3350,497],{"class":529},[516,3352,3353],{"class":1273},"length",[516,3355,2417],{"class":522},[516,3357,3358],{"class":643}," 0",[516,3360,2187],{"class":529},[516,3362,2519],{"class":522},[516,3364,3365],{"class":529}," [{ id: { order: ",[516,3367,3368],{"class":574},"'asc'",[516,3370,3371],{"class":529}," } }];\n",[516,3373,3374],{"class":518,"line":1267},[516,3375,2210],{"emptyLinePlaceholder":2209},[516,3377,3378,3381,3384,3386,3388,3391,3393,3395,3397,3400,3402],{"class":518,"line":1279},[516,3379,3380],{"class":522},"    return",[516,3382,3383],{"class":533}," sort",[516,3385,497],{"class":529},[516,3387,2178],{"class":643},[516,3389,3390],{"class":529},"(({ ",[516,3392,2296],{"class":522},[516,3394,537],{"class":529},[516,3396,3217],{"class":522},[516,3398,3399],{"class":529}," }) ",[516,3401,2190],{"class":522},[516,3403,647],{"class":529},[516,3405,3406,3408,3410,3412,3414,3417,3419,3422,3424,3427,3429,3432,3435,3438,3440,3443,3445,3448],{"class":518,"line":1289},[516,3407,2498],{"class":522},[516,3409,2143],{"class":529},[516,3411,2296],{"class":533},[516,3413,2153],{"class":522},[516,3415,3416],{"class":574}," 'id'",[516,3418,2187],{"class":529},[516,3420,3421],{"class":522},"throw",[516,3423,2572],{"class":522},[516,3425,3426],{"class":643}," Error",[516,3428,1143],{"class":529},[516,3430,3431],{"class":574},"`The Art Institute connector doesn't offer sorting by ",[516,3433,3434],{"class":643},"\\`",[516,3436,3437],{"class":574},"${",[516,3439,2296],{"class":533},[516,3441,3442],{"class":574},"}",[516,3444,3434],{"class":643},[516,3446,3447],{"class":574},".`",[516,3449,2486],{"class":529},[516,3451,3452,3454,3457,3459,3461,3464,3467,3469,3472,3474],{"class":518,"line":1300},[516,3453,2164],{"class":522},[516,3455,3456],{"class":529}," { id: { order: ",[516,3458,3217],{"class":533},[516,3460,2417],{"class":522},[516,3462,3463],{"class":574}," 'descending'",[516,3465,3466],{"class":522}," ?",[516,3468,3337],{"class":574},[516,3470,3471],{"class":522}," :",[516,3473,3332],{"class":574},[516,3475,2269],{"class":529},[516,3477,3478],{"class":518,"line":2331},[516,3479,3480],{"class":529},"    });\n",[516,3482,3483],{"class":518,"line":2337},[516,3484,664],{"class":529},[616,3486,3488],{"id":3487},"sortdirection",[462,3489,3225],{},[459,3491,3492],{},"The direction of a sort key, and of a field's declared sort.",[506,3494,3496],{"className":508,"code":3495,"filename":633,"language":511,"meta":512,"style":512},"type SortDirection = 'ascending' | 'descending';\n",[462,3497,3498],{"__ignoreMap":512},[516,3499,3500,3502,3504,3506,3509,3511,3513],{"class":518,"line":519},[516,3501,848],{"class":522},[516,3503,3164],{"class":643},[516,3505,853],{"class":522},[516,3507,3508],{"class":574}," 'ascending'",[516,3510,859],{"class":522},[516,3512,3463],{"class":574},[516,3514,578],{"class":529},[616,3516,3518],{"id":3517},"sortnulls",[462,3519,3243],{},[459,3521,3522,3523,3525],{},"Where a sort key places ",[462,3524,969],{}," values.",[506,3527,3529],{"className":508,"code":3528,"filename":633,"language":511,"meta":512,"style":512},"type SortNulls = 'first' | 'last';\n",[462,3530,3531],{"__ignoreMap":512},[516,3532,3533,3535,3537,3539,3542,3544,3547],{"class":518,"line":519},[516,3534,848],{"class":522},[516,3536,3174],{"class":643},[516,3538,853],{"class":522},[516,3540,3541],{"class":574}," 'first'",[516,3543,859],{"class":522},[516,3545,3546],{"class":574}," 'last'",[516,3548,578],{"class":529},[455,3550,3552],{"id":3551},"answer-a-query","Answer a Query",[616,3554,3556],{"id":3555},"queryresultserialized",[462,3557,545],{},[459,3559,1826,3560,537,3562,537,3564,1171,3566,3568],{},[462,3561,914],{},[462,3563,976],{},[462,3565,996],{},[462,3567,1041],{}," answer with.",[506,3570,3572],{"className":508,"code":3571,"filename":633,"language":511,"meta":512,"style":512},"interface QueryResultSerialized {\n    records?: MonospaceObject[];\n    totalCount?: number;\n}\n",[462,3573,3574,3583,3592,3601],{"__ignoreMap":512},[516,3575,3576,3578,3581],{"class":518,"line":519},[516,3577,640],{"class":522},[516,3579,3580],{"class":643}," QueryResultSerialized",[516,3582,647],{"class":529},[516,3584,3585,3588,3590],{"class":518,"line":650},[516,3586,3587],{"class":522},"    records?:",[516,3589,1450],{"class":643},[516,3591,1242],{"class":529},[516,3593,3594,3597,3599],{"class":518,"line":661},[516,3595,3596],{"class":522},"    totalCount?:",[516,3598,1274],{"class":1273},[516,3600,578],{"class":529},[516,3602,3603],{"class":518,"line":759},[516,3604,664],{"class":529},[769,3606,3607,3617],{},[772,3608,3609],{},[775,3610,3611,3613,3615],{},[778,3612,3189],{},[778,3614,3192],{},[778,3616,783],{},[785,3618,3619,3636],{},[775,3620,3621,3625,3633],{},[790,3622,3623],{},[462,3624,939],{},[790,3626,3627],{},[484,3628,3630],{"href":3629},"#monospaceobject",[462,3631,3632],{},"MonospaceObject[]",[790,3634,3635],{},"The items, keyed by field name. Absent means none",[775,3637,3638,3642,3647],{},[790,3639,3640],{},[462,3641,943],{},[790,3643,3644],{},[462,3645,3646],{},"number",[790,3648,3649,3650,1171,3653,3656],{},"The answer to a count read: the number of items matching the filter, regardless of ",[462,3651,3652],{},"limit",[462,3654,3655],{},"offset",". A non-negative integer",[459,3658,3659,3660,3662,3663,3665,3666,3669],{},"Every item carries every field in ",[462,3661,955],{},", with an explicit ",[462,3664,969],{}," for a missing value. See ",[484,3667,3552],{"href":3668},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#answer-a-query"," for the checks Engine applies.",[616,3671,3673],{"id":3672},"keyedqueryresultserialized",[462,3674,1921],{},[459,3676,1826,3677,537,3679,1171,3681,3683,3684,497],{},[462,3678,812],{},[462,3680,1017],{},[462,3682,1059],{}," answer with: one item, or ",[462,3685,969],{},[506,3687,3689],{"className":508,"code":3688,"filename":633,"language":511,"meta":512,"style":512},"interface KeyedQueryResultSerialized {\n    record: MonospaceObject | null;\n}\n",[462,3690,3691,3700,3713],{"__ignoreMap":512},[516,3692,3693,3695,3698],{"class":518,"line":519},[516,3694,640],{"class":522},[516,3696,3697],{"class":643}," KeyedQueryResultSerialized",[516,3699,647],{"class":529},[516,3701,3702,3705,3707,3709,3711],{"class":518,"line":650},[516,3703,3704],{"class":522},"    record:",[516,3706,1450],{"class":643},[516,3708,859],{"class":522},[516,3710,2387],{"class":1273},[516,3712,578],{"class":529},[516,3714,3715],{"class":518,"line":661},[516,3716,664],{"class":529},[769,3718,3719,3729],{},[772,3720,3721],{},[775,3722,3723,3725,3727],{},[778,3724,3189],{},[778,3726,3192],{},[778,3728,783],{},[785,3730,3731],{},[775,3732,3733,3737,3745],{},[790,3734,3735],{},[462,3736,965],{},[790,3738,3739,3250,3743],{},[484,3740,3741],{"href":3629},[462,3742,534],{},[462,3744,969],{},[790,3746,3747,3748,3750],{},"The item the key names, if it also matches the guard. ",[462,3749,969],{}," when the key or the guard misses",[459,3752,3753,3755,3756,537,3759,1368,3762,3764,3765,3767,3768,482,3770,3773,3774,497],{},[462,3754,965],{}," is required, and the answer takes no other key. Engine fails a keyed operation that answers ",[462,3757,3758],{},"{ records: [...] }",[462,3760,3761],{},"{}",[462,3763,943],{}," beside ",[462,3766,965],{},". A caller sees ",[462,3769,1371],{},[462,3771,3772],{},"404"," \"No record found\". See ",[484,3775,1933],{"href":1932},[616,3777,3779],{"id":3778},"queryresults",[462,3780,3781],{},"QueryResults",[459,3783,3784,3785,497],{},"The answer each operation owes, by its ",[462,3786,820],{},[506,3788,3790],{"className":508,"code":3789,"filename":633,"language":511,"meta":512,"style":512},"interface QueryResults {\n    readMany: QueryResultSerialized;\n    readOne: KeyedQueryResultSerialized;\n    create: QueryResultSerialized;\n    updateMany: QueryResultSerialized;\n    updateOne: KeyedQueryResultSerialized;\n    deleteMany: QueryResultSerialized;\n    deleteOne: KeyedQueryResultSerialized;\n}\n",[462,3791,3792,3801,3810,3819,3828,3837,3846,3855,3864],{"__ignoreMap":512},[516,3793,3794,3796,3799],{"class":518,"line":519},[516,3795,640],{"class":522},[516,3797,3798],{"class":643}," QueryResults",[516,3800,647],{"class":529},[516,3802,3803,3806,3808],{"class":518,"line":650},[516,3804,3805],{"class":522},"    readMany:",[516,3807,3580],{"class":643},[516,3809,578],{"class":529},[516,3811,3812,3815,3817],{"class":518,"line":661},[516,3813,3814],{"class":522},"    readOne:",[516,3816,3697],{"class":643},[516,3818,578],{"class":529},[516,3820,3821,3824,3826],{"class":518,"line":759},[516,3822,3823],{"class":522},"    create:",[516,3825,3580],{"class":643},[516,3827,578],{"class":529},[516,3829,3830,3833,3835],{"class":518,"line":765},[516,3831,3832],{"class":522},"    updateMany:",[516,3834,3580],{"class":643},[516,3836,578],{"class":529},[516,3838,3839,3842,3844],{"class":518,"line":1245},[516,3840,3841],{"class":522},"    updateOne:",[516,3843,3697],{"class":643},[516,3845,578],{"class":529},[516,3847,3848,3851,3853],{"class":518,"line":1256},[516,3849,3850],{"class":522},"    deleteMany:",[516,3852,3580],{"class":643},[516,3854,578],{"class":529},[516,3856,3857,3860,3862],{"class":518,"line":1267},[516,3858,3859],{"class":522},"    deleteOne:",[516,3861,3697],{"class":643},[516,3863,578],{"class":529},[516,3865,3866],{"class":518,"line":1279},[516,3867,664],{"class":529},[459,3869,3870,3871,3875,3876,2093,3881,3885],{},"The keyed operations owe a ",[484,3872,3873],{"href":1918},[462,3874,1921],{},", every other operation a ",[484,3877,3879],{"href":3878},"#queryresultserialized",[462,3880,545],{},[484,3882,3883],{"href":1378},[462,3884,540],{}," reads its answer types from this map.",[616,3887,3889],{"id":3888},"queryresultfor",[462,3890,540],{},[459,3892,3893,3894,3896],{},"The answer the operations ",[462,3895,701],{}," owe, exclusive of the other shape's keys.",[506,3898,3900],{"className":508,"code":3899,"filename":633,"language":511,"meta":512,"style":512},"type QueryResultFor\u003COp extends OperationName> = StrictUnionMember\u003CQueryResults[Op], QueryResults[OperationName]>;\n",[462,3901,3902],{"__ignoreMap":512},[516,3903,3904,3906,3909,3911,3913,3915,3917,3920,3923,3926,3928,3930,3932,3934,3937,3939,3941,3943],{"class":518,"line":519},[516,3905,848],{"class":522},[516,3907,3908],{"class":643}," QueryResultFor",[516,3910,720],{"class":529},[516,3912,701],{"class":643},[516,3914,725],{"class":522},[516,3916,728],{"class":643},[516,3918,3919],{"class":529},"> ",[516,3921,3922],{"class":522},"=",[516,3924,3925],{"class":643}," StrictUnionMember",[516,3927,720],{"class":529},[516,3929,3781],{"class":643},[516,3931,1793],{"class":529},[516,3933,701],{"class":643},[516,3935,3936],{"class":529},"], ",[516,3938,3781],{"class":643},[516,3940,1793],{"class":529},[516,3942,802],{"class":643},[516,3944,3945],{"class":529},"]>;\n",[769,3947,3948,3956],{},[772,3949,3950],{},[775,3951,3952,3954],{},[778,3953,780],{},[778,3955,783],{},[785,3957,3958],{},[775,3959,3960,3964],{},[790,3961,3962],{},[462,3963,701],{},[790,3965,796,3966,803],{},[484,3967,3968],{"href":799},[462,3969,802],{},[459,3971,3972,3975,3976,3978,3979,1171,3981,1081,3983,3986,3987,3989,3990,3992,3993,1121],{},[462,3973,3974],{},"QueryResultFor\u003C'readOne'>"," is a ",[462,3977,1921],{}," that also forbids ",[462,3980,939],{},[462,3982,943],{},[462,3984,3985],{},"QueryResultFor\u003C'readMany'>"," a ",[462,3988,545],{}," that forbids ",[462,3991,965],{},". For a union of operations, it's the union of their answers, and an object with keys of both shapes fits neither. Use it as the return type of a function that answers some operations, as the Quickstart connector's ",[462,3994,812],{},[506,3996,3998],{"className":508,"code":3997,"filename":510,"language":511,"meta":512,"style":512},"export async function readOne(query: ReadOneOperationSerialized): Promise\u003CQueryResultFor\u003C'readOne'>> {\n",[462,3999,4000],{"__ignoreMap":512},[516,4001,4002,4004,4006,4008,4011,4013,4015,4017,4019,4021,4023,4025,4027,4029,4032],{"class":518,"line":519},[516,4003,1131],{"class":522},[516,4005,1134],{"class":522},[516,4007,1137],{"class":522},[516,4009,4010],{"class":643}," readOne",[516,4012,1143],{"class":529},[516,4014,1146],{"class":522},[516,4016,862],{"class":643},[516,4018,1151],{"class":529},[516,4020,1154],{"class":522},[516,4022,1157],{"class":643},[516,4024,720],{"class":529},[516,4026,540],{"class":643},[516,4028,720],{"class":529},[516,4030,4031],{"class":574},"'readOne'",[516,4033,4034],{"class":529},">> {\n",[616,4036,4038],{"id":4037},"monospaceobject",[462,4039,534],{},[459,4041,4042],{},"One item: field values keyed by the field names the connector declared.",[506,4044,4046],{"className":508,"code":4045,"filename":633,"language":511,"meta":512,"style":512},"interface MonospaceObject {\n    [field: string]: Value;\n}\n",[462,4047,4048,4056,4076],{"__ignoreMap":512},[516,4049,4050,4052,4054],{"class":518,"line":519},[516,4051,640],{"class":522},[516,4053,1450],{"class":643},[516,4055,647],{"class":529},[516,4057,4058,4061,4064,4067,4070,4072,4074],{"class":518,"line":650},[516,4059,4060],{"class":529},"    [",[516,4062,4063],{"class":522},"field:",[516,4065,4066],{"class":1273}," string",[516,4068,4069],{"class":529},"]",[516,4071,1154],{"class":522},[516,4073,2976],{"class":643},[516,4075,578],{"class":529},[516,4077,4078],{"class":518,"line":661},[516,4079,664],{"class":529},[459,4081,4082],{},"The Quickstart connector builds each item from exactly the selected fields:",[506,4084,4086],{"className":508,"code":4085,"filename":510,"language":511,"meta":512,"style":512},"\u002F**\n * Returns exactly the selected fields, with `null` where the API has no value (the API returns `null`\n * or leaves the field out). Monospace checks each value against the field's declared type.\n *\u002F\nfunction toItem(apiItem: Record\u003Cstring, Value>, select: readonly string[]): MonospaceObject {\n    const item: MonospaceObject = {};\n    for (const name of select) item[name] = apiItem[apiFieldName(name)] ?? null;\n    return item;\n}\n",[462,4087,4088,4092,4097,4102,4106,4146,4163,4216,4224],{"__ignoreMap":512},[516,4089,4090],{"class":518,"line":519},[516,4091,3277],{"class":2327},[516,4093,4094],{"class":518,"line":650},[516,4095,4096],{"class":2327}," * Returns exactly the selected fields, with `null` where the API has no value (the API returns `null`\n",[516,4098,4099],{"class":518,"line":661},[516,4100,4101],{"class":2327}," * or leaves the field out). Monospace checks each value against the field's declared type.\n",[516,4103,4104],{"class":518,"line":759},[516,4105,3297],{"class":2327},[516,4107,4108,4110,4113,4115,4118,4120,4122,4124,4126,4128,4131,4134,4136,4138,4140,4142,4144],{"class":518,"line":765},[516,4109,2795],{"class":522},[516,4111,4112],{"class":643}," toItem",[516,4114,1143],{"class":529},[516,4116,4117],{"class":522},"apiItem:",[516,4119,1883],{"class":643},[516,4121,720],{"class":529},[516,4123,3207],{"class":1273},[516,4125,537],{"class":529},[516,4127,565],{"class":643},[516,4129,4130],{"class":529},">, ",[516,4132,4133],{"class":522},"select:",[516,4135,3312],{"class":522},[516,4137,4066],{"class":1273},[516,4139,3317],{"class":529},[516,4141,1154],{"class":522},[516,4143,1450],{"class":643},[516,4145,647],{"class":529},[516,4147,4148,4151,4154,4156,4158,4160],{"class":518,"line":1245},[516,4149,4150],{"class":522},"    const",[516,4152,4153],{"class":643}," item",[516,4155,1154],{"class":522},[516,4157,1450],{"class":643},[516,4159,853],{"class":522},[516,4161,4162],{"class":529}," {};\n",[516,4164,4165,4168,4170,4173,4175,4178,4181,4183,4186,4188,4190,4193,4195,4198,4200,4202,4204,4206,4209,4212,4214],{"class":518,"line":1256},[516,4166,4167],{"class":522},"    for",[516,4169,2143],{"class":529},[516,4171,4172],{"class":522},"const",[516,4174,2466],{"class":643},[516,4176,4177],{"class":522}," of",[516,4179,4180],{"class":533}," select",[516,4182,2187],{"class":529},[516,4184,4185],{"class":533},"item",[516,4187,1793],{"class":529},[516,4189,2525],{"class":533},[516,4191,4192],{"class":529},"] ",[516,4194,3922],{"class":522},[516,4196,4197],{"class":533}," apiItem",[516,4199,1793],{"class":529},[516,4201,2345],{"class":643},[516,4203,1143],{"class":529},[516,4205,2525],{"class":533},[516,4207,4208],{"class":529},")] ",[516,4210,4211],{"class":522},"??",[516,4213,2387],{"class":643},[516,4215,578],{"class":529},[516,4217,4218,4220,4222],{"class":518,"line":1267},[516,4219,3380],{"class":522},[516,4221,4153],{"class":533},[516,4223,578],{"class":529},[516,4225,4226],{"class":518,"line":1279},[516,4227,664],{"class":529},[616,4229,4230],{"id":2375},[462,4231,565],{},[459,4233,4234],{},"Any value on the wire: untagged JSON.",[506,4236,4238],{"className":508,"code":4237,"filename":633,"language":511,"meta":512,"style":512},"type Value = null | string | number | boolean | Value[] | {\n    [key: string]: Value;\n};\n",[462,4239,4240,4273,4290],{"__ignoreMap":512},[516,4241,4242,4244,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264,4266,4269,4271],{"class":518,"line":519},[516,4243,848],{"class":522},[516,4245,2976],{"class":643},[516,4247,853],{"class":522},[516,4249,2387],{"class":1273},[516,4251,859],{"class":522},[516,4253,4066],{"class":1273},[516,4255,859],{"class":522},[516,4257,1274],{"class":1273},[516,4259,859],{"class":522},[516,4261,1295],{"class":1273},[516,4263,859],{"class":522},[516,4265,2976],{"class":643},[516,4267,4268],{"class":529},"[] ",[516,4270,2966],{"class":522},[516,4272,647],{"class":529},[516,4274,4275,4277,4280,4282,4284,4286,4288],{"class":518,"line":650},[516,4276,4060],{"class":529},[516,4278,4279],{"class":522},"key:",[516,4281,4066],{"class":1273},[516,4283,4069],{"class":529},[516,4285,1154],{"class":522},[516,4287,2976],{"class":643},[516,4289,578],{"class":529},[516,4291,4292],{"class":518,"line":661},[516,4293,4294],{"class":529},"};\n",[459,4296,4297,4298,3250,4301,4304,4305,4307,4308,3250,4310,4312,4313,1171,4317,497],{},"Types without a JSON form of their own travel as strings: decimals, base64 bytes, UUIDs, dates and times. A single ",[462,4299,4300],{},"int64",[462,4302,4303],{},"uint64"," value travels as a decimal string in ",[462,4306,983],{},", in filter literals and in keys. In an answer, Engine accepts a decimal string or a number. Narrower integers are JSON numbers, and so are the elements of an ",[462,4309,4300],{},[462,4311,4303],{}," list field. See ",[484,4314,4316],{"href":4315},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#values","Values",[484,4318,4320],{"href":4319},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#field-types","Field Types",[616,4322,4324],{"id":4323},"list",[462,4325,4326],{},"List",[459,4328,4329],{},"An array of values.",[506,4331,4333],{"className":508,"code":4332,"filename":633,"language":511,"meta":512,"style":512},"type List = Value[];\n",[462,4334,4335],{"__ignoreMap":512},[516,4336,4337,4339,4341,4343,4345],{"class":518,"line":519},[516,4338,848],{"class":522},[516,4340,3030],{"class":643},[516,4342,853],{"class":522},[516,4344,2976],{"class":643},[516,4346,1242],{"class":529},[616,4348,4350],{"id":4349},"identifier",[462,4351,1888],{},[459,4353,4354],{},"A non-empty field, collection or namespace name.",[506,4356,4358],{"className":508,"code":4357,"filename":633,"language":511,"meta":512,"style":512},"type Identifier = string;\n",[462,4359,4360],{"__ignoreMap":512},[516,4361,4362,4364,4366,4368,4370],{"class":518,"line":519},[516,4363,848],{"class":522},[516,4365,1221],{"class":643},[516,4367,853],{"class":522},[516,4369,4066],{"class":1273},[516,4371,578],{"class":529},[459,4373,4374,4375,4377,4378,497],{},"Requests name collections and fields by their ",[462,4376,2525],{},", never their ",[462,4379,4380],{},"apiName",[455,4382,4384],{"id":4383},"describe-the-schema-document","Describe the Schema Document",[616,4386,4388],{"id":4387},"schemadocument",[462,4389,4390],{},"SchemaDocument",[459,4392,1826,4393,4395],{},[462,4394,473],{}," answers with: the namespaces, collections and relations the data source exposes.",[506,4397,4399],{"className":508,"code":4398,"filename":633,"language":511,"meta":512,"style":512},"interface SchemaDocument {\n    namespaces?: CanonicalNamespace[];\n    collections?: CanonicalCollection[];\n    relations?: CanonicalRelation[];\n}\n",[462,4400,4401,4410,4420,4430,4440],{"__ignoreMap":512},[516,4402,4403,4405,4408],{"class":518,"line":519},[516,4404,640],{"class":522},[516,4406,4407],{"class":643}," SchemaDocument",[516,4409,647],{"class":529},[516,4411,4412,4415,4418],{"class":518,"line":650},[516,4413,4414],{"class":522},"    namespaces?:",[516,4416,4417],{"class":643}," CanonicalNamespace",[516,4419,1242],{"class":529},[516,4421,4422,4425,4428],{"class":518,"line":661},[516,4423,4424],{"class":522},"    collections?:",[516,4426,4427],{"class":643}," CanonicalCollection",[516,4429,1242],{"class":529},[516,4431,4432,4435,4438],{"class":518,"line":759},[516,4433,4434],{"class":522},"    relations?:",[516,4436,4437],{"class":643}," CanonicalRelation",[516,4439,1242],{"class":529},[516,4441,4442],{"class":518,"line":765},[516,4443,664],{"class":529},[459,4445,4446,4447,4451],{},"Every section defaults to empty. The ",[484,4448,4450],{"href":4449},"\u002Freference\u002Fextensions\u002Fextension-kit\u002Fexperimental","schema helpers"," build one from typed definitions; the Stripe connector answers a read-only variant when writes are off:",[506,4453,4456],{"className":508,"code":4454,"filename":4455,"language":511,"meta":512,"style":512},"\u002F**\n * The declared schema. A data source with `enableWrites: false` declares reads only: the kit leaves\n * out every member that writes, and so answers every collection and field as read-only.\n *\u002F\nexport function schemaDocument(enableWrites: boolean): SchemaDocument {\n    return schema.toSchemaDocument({ writes: enableWrites });\n}\n","src\u002Fdata-connectors\u002Fstripe\u002Fcollections.ts",[462,4457,4458,4462,4467,4472,4476,4500,4521],{"__ignoreMap":512},[516,4459,4460],{"class":518,"line":519},[516,4461,3277],{"class":2327},[516,4463,4464],{"class":518,"line":650},[516,4465,4466],{"class":2327}," * The declared schema. A data source with `enableWrites: false` declares reads only: the kit leaves\n",[516,4468,4469],{"class":518,"line":661},[516,4470,4471],{"class":2327}," * out every member that writes, and so answers every collection and field as read-only.\n",[516,4473,4474],{"class":518,"line":759},[516,4475,3297],{"class":2327},[516,4477,4478,4480,4482,4485,4487,4490,4492,4494,4496,4498],{"class":518,"line":765},[516,4479,1131],{"class":522},[516,4481,1137],{"class":522},[516,4483,4484],{"class":643}," schemaDocument",[516,4486,1143],{"class":529},[516,4488,4489],{"class":522},"enableWrites:",[516,4491,1295],{"class":1273},[516,4493,1151],{"class":529},[516,4495,1154],{"class":522},[516,4497,4407],{"class":643},[516,4499,647],{"class":529},[516,4501,4502,4504,4507,4509,4512,4515,4518],{"class":518,"line":1245},[516,4503,3380],{"class":522},[516,4505,4506],{"class":533}," schema",[516,4508,497],{"class":529},[516,4510,4511],{"class":643},"toSchemaDocument",[516,4513,4514],{"class":529},"({ writes: ",[516,4516,4517],{"class":533},"enableWrites",[516,4519,4520],{"class":529}," });\n",[516,4522,4523],{"class":518,"line":1256},[516,4524,664],{"class":529},[459,4526,1166,4527,497],{},[484,4528,4530],{"href":4529},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#describe-the-schema","Describe the Schema",[616,4532,4534],{"id":4533},"canonicalnamespace",[462,4535,4536],{},"CanonicalNamespace",[459,4538,4539],{},"A named group of collections.",[506,4541,4543],{"className":508,"code":4542,"filename":633,"language":511,"meta":512,"style":512},"interface CanonicalNamespace {\n    name: Identifier;\n    collections?: CanonicalCollection[];\n}\n",[462,4544,4545,4553,4562,4570],{"__ignoreMap":512},[516,4546,4547,4549,4551],{"class":518,"line":519},[516,4548,640],{"class":522},[516,4550,4417],{"class":643},[516,4552,647],{"class":529},[516,4554,4555,4558,4560],{"class":518,"line":650},[516,4556,4557],{"class":522},"    name:",[516,4559,1221],{"class":643},[516,4561,578],{"class":529},[516,4563,4564,4566,4568],{"class":518,"line":661},[516,4565,4424],{"class":522},[516,4567,4427],{"class":643},[516,4569,1242],{"class":529},[516,4571,4572],{"class":518,"line":759},[516,4573,664],{"class":529},[459,4575,4576],{},"A collection's identity is its namespace (or none) plus its name, so the same collection name can appear in different namespaces.",[616,4578,4580],{"id":4579},"canonicalcollection",[462,4581,4582],{},"CanonicalCollection",[459,4584,4585],{},"One collection: its fields, indexes, and the operations it serves.",[506,4587,4589],{"className":508,"code":4588,"filename":633,"language":511,"meta":512,"style":512},"interface CanonicalCollection {\n    name: Identifier;\n    apiName?: Identifier;\n    fields?: CanonicalField[];\n    indexes?: CanonicalIndex[];\n    isReadonly: boolean;\n    operations: SupportedOperations;\n}\n",[462,4590,4591,4599,4607,4616,4626,4636,4645,4655],{"__ignoreMap":512},[516,4592,4593,4595,4597],{"class":518,"line":519},[516,4594,640],{"class":522},[516,4596,4427],{"class":643},[516,4598,647],{"class":529},[516,4600,4601,4603,4605],{"class":518,"line":650},[516,4602,4557],{"class":522},[516,4604,1221],{"class":643},[516,4606,578],{"class":529},[516,4608,4609,4612,4614],{"class":518,"line":661},[516,4610,4611],{"class":522},"    apiName?:",[516,4613,1221],{"class":643},[516,4615,578],{"class":529},[516,4617,4618,4621,4624],{"class":518,"line":759},[516,4619,4620],{"class":522},"    fields?:",[516,4622,4623],{"class":643}," CanonicalField",[516,4625,1242],{"class":529},[516,4627,4628,4631,4634],{"class":518,"line":765},[516,4629,4630],{"class":522},"    indexes?:",[516,4632,4633],{"class":643}," CanonicalIndex",[516,4635,1242],{"class":529},[516,4637,4638,4641,4643],{"class":518,"line":1245},[516,4639,4640],{"class":522},"    isReadonly:",[516,4642,1295],{"class":1273},[516,4644,578],{"class":529},[516,4646,4647,4650,4653],{"class":518,"line":1256},[516,4648,4649],{"class":522},"    operations:",[516,4651,4652],{"class":643}," SupportedOperations",[516,4654,578],{"class":529},[516,4656,4657],{"class":518,"line":1267},[516,4658,664],{"class":529},[459,4660,4661,4664,4665,4668,4669,4671,4672,4675,4676,4680],{},[462,4662,4663],{},"operations"," is required, and ",[462,4666,4667],{},"isReadonly: true"," blocks every create, update and delete. The ",[484,4670,4450],{"href":4449}," derive ",[462,4673,4674],{},"isReadonly",": a collection is read-only when it declares no member that writes. See ",[484,4677,4679],{"href":4678},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#collections","Collections"," for each property. The full Art Institute connector reads its own declaration back from the document, to check every filter and sort it receives:",[506,4682,4685],{"className":508,"code":4683,"filename":4684,"language":511,"meta":512,"style":512},"\u002F\u002F Engine offers callers what the declaration it stored for the data source declares, and doesn't\n\u002F\u002F check the filters it sends against it. That stored declaration is the one from when the data source\n\u002F\u002F was created or last refreshed: after an extension update that narrows `schema.ts`, it can still\n\u002F\u002F offer what this code no longer translates. So the translation below checks each filter and sort\n\u002F\u002F against `schema.ts` itself. A field, operator or sort it doesn't declare is not the caller's to\n\u002F\u002F fix: a plain error, which Engine reports as a failed query.\nconst DECLARATIONS = new Map\u003Cstring, Declaration>((schema.toSchemaDocument().collections ?? []).map((collection) => [\n    collection.name,\n    {\n        read: collection.operations.readMany ?? {},\n        types: new Map(collection.fields?.map((field) => [field.name, field.type.name])),\n    },\n]));\n","src\u002Fdata-connectors\u002Fartic\u002Fsearch.ts",[462,4686,4687,4692,4697,4702,4707,4712,4717,4774,4785,4790,4810,4864,4869],{"__ignoreMap":512},[516,4688,4689],{"class":518,"line":519},[516,4690,4691],{"class":2327},"\u002F\u002F Engine offers callers what the declaration it stored for the data source declares, and doesn't\n",[516,4693,4694],{"class":518,"line":650},[516,4695,4696],{"class":2327},"\u002F\u002F check the filters it sends against it. That stored declaration is the one from when the data source\n",[516,4698,4699],{"class":518,"line":661},[516,4700,4701],{"class":2327},"\u002F\u002F was created or last refreshed: after an extension update that narrows `schema.ts`, it can still\n",[516,4703,4704],{"class":518,"line":759},[516,4705,4706],{"class":2327},"\u002F\u002F offer what this code no longer translates. So the translation below checks each filter and sort\n",[516,4708,4709],{"class":518,"line":765},[516,4710,4711],{"class":2327},"\u002F\u002F against `schema.ts` itself. A field, operator or sort it doesn't declare is not the caller's to\n",[516,4713,4714],{"class":518,"line":1245},[516,4715,4716],{"class":2327},"\u002F\u002F fix: a plain error, which Engine reports as a failed query.\n",[516,4718,4719,4721,4724,4726,4728,4731,4733,4735,4737,4740,4743,4746,4748,4750,4753,4755,4758,4761,4763,4765,4767,4769,4771],{"class":518,"line":1256},[516,4720,4172],{"class":522},[516,4722,4723],{"class":643}," DECLARATIONS",[516,4725,853],{"class":522},[516,4727,2572],{"class":522},[516,4729,4730],{"class":643}," Map",[516,4732,720],{"class":529},[516,4734,3207],{"class":1273},[516,4736,537],{"class":529},[516,4738,4739],{"class":643},"Declaration",[516,4741,4742],{"class":529},">((",[516,4744,4745],{"class":533},"schema",[516,4747,497],{"class":529},[516,4749,4511],{"class":643},[516,4751,4752],{"class":529},"().",[516,4754,487],{"class":533},[516,4756,4757],{"class":522}," ??",[516,4759,4760],{"class":529}," []).",[516,4762,2178],{"class":643},[516,4764,2181],{"class":529},[516,4766,1080],{"class":522},[516,4768,2187],{"class":529},[516,4770,2190],{"class":522},[516,4772,4773],{"class":529}," [\n",[516,4775,4776,4779,4781,4783],{"class":518,"line":1267},[516,4777,4778],{"class":533},"    collection",[516,4780,497],{"class":529},[516,4782,2525],{"class":533},[516,4784,2812],{"class":529},[516,4786,4787],{"class":518,"line":1279},[516,4788,4789],{"class":529},"    {\n",[516,4791,4792,4795,4797,4799,4801,4803,4805,4807],{"class":518,"line":1289},[516,4793,4794],{"class":529},"        read: ",[516,4796,1080],{"class":533},[516,4798,497],{"class":529},[516,4800,4663],{"class":533},[516,4802,497],{"class":529},[516,4804,914],{"class":533},[516,4806,4757],{"class":522},[516,4808,4809],{"class":529}," {},\n",[516,4811,4812,4815,4818,4820,4822,4824,4826,4828,4830,4832,4834,4836,4838,4840,4843,4845,4847,4849,4851,4853,4855,4857,4859,4861],{"class":518,"line":1300},[516,4813,4814],{"class":529},"        types: ",[516,4816,4817],{"class":522},"new",[516,4819,4730],{"class":643},[516,4821,1143],{"class":529},[516,4823,1080],{"class":533},[516,4825,497],{"class":529},[516,4827,496],{"class":533},[516,4829,2293],{"class":529},[516,4831,2178],{"class":643},[516,4833,2181],{"class":529},[516,4835,2296],{"class":522},[516,4837,2187],{"class":529},[516,4839,2190],{"class":522},[516,4841,4842],{"class":529}," [",[516,4844,2296],{"class":533},[516,4846,497],{"class":529},[516,4848,2525],{"class":533},[516,4850,537],{"class":529},[516,4852,2296],{"class":533},[516,4854,497],{"class":529},[516,4856,848],{"class":533},[516,4858,497],{"class":529},[516,4860,2525],{"class":533},[516,4862,4863],{"class":529},"])),\n",[516,4865,4866],{"class":518,"line":2331},[516,4867,4868],{"class":529},"    },\n",[516,4870,4871],{"class":518,"line":2337},[516,4872,4873],{"class":529},"]));\n",[616,4875,4877],{"id":4876},"canonicalfield",[462,4878,4879],{},"CanonicalField",[459,4881,4882],{},"One field of a collection.",[506,4884,4886],{"className":508,"code":4885,"filename":633,"language":511,"meta":512,"style":512},"interface CanonicalField {\n    name: Identifier;\n    apiName?: Identifier;\n    type: PrimitiveFieldType;\n    isNullable: boolean;\n    isList: boolean;\n    defaultValue?: DefaultValue;\n    isReadonly: boolean;\n}\n",[462,4887,4888,4896,4904,4912,4922,4931,4940,4950,4958],{"__ignoreMap":512},[516,4889,4890,4892,4894],{"class":518,"line":519},[516,4891,640],{"class":522},[516,4893,4623],{"class":643},[516,4895,647],{"class":529},[516,4897,4898,4900,4902],{"class":518,"line":650},[516,4899,4557],{"class":522},[516,4901,1221],{"class":643},[516,4903,578],{"class":529},[516,4905,4906,4908,4910],{"class":518,"line":661},[516,4907,4611],{"class":522},[516,4909,1221],{"class":643},[516,4911,578],{"class":529},[516,4913,4914,4917,4920],{"class":518,"line":759},[516,4915,4916],{"class":522},"    type:",[516,4918,4919],{"class":643}," PrimitiveFieldType",[516,4921,578],{"class":529},[516,4923,4924,4927,4929],{"class":518,"line":765},[516,4925,4926],{"class":522},"    isNullable:",[516,4928,1295],{"class":1273},[516,4930,578],{"class":529},[516,4932,4933,4936,4938],{"class":518,"line":1245},[516,4934,4935],{"class":522},"    isList:",[516,4937,1295],{"class":1273},[516,4939,578],{"class":529},[516,4941,4942,4945,4948],{"class":518,"line":1256},[516,4943,4944],{"class":522},"    defaultValue?:",[516,4946,4947],{"class":643}," DefaultValue",[516,4949,578],{"class":529},[516,4951,4952,4954,4956],{"class":518,"line":1267},[516,4953,4640],{"class":522},[516,4955,1295],{"class":1273},[516,4957,578],{"class":529},[516,4959,4960],{"class":518,"line":1279},[516,4961,664],{"class":529},[459,4963,4964,4966,4967,4969,4970,4972,4973,497],{},[462,4965,4667],{}," keeps the field out of create and update ",[462,4968,983],{},". The schema helpers derive it: a field is read-only when no ",[462,4971,983],{}," list names it. See ",[484,4974,4976],{"href":4975},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#fields","Fields",[616,4978,4980],{"id":4979},"primitivefieldtype",[462,4981,4982],{},"PrimitiveFieldType",[459,4984,4985,4986,4989,4990,1171,4993,4995],{},"A field's type: a name from a closed set, with ",[462,4987,4988],{},"params"," for ",[462,4991,4992],{},"decimal",[462,4994,3207],{}," only.",[506,4997,4999],{"className":508,"code":4998,"filename":633,"language":511,"meta":512,"style":512},"type PrimitiveFieldType = {\n    name: ParameterlessPrimitiveName;\n    params?: never;\n} | {\n    name: 'decimal';\n    params: DecimalPrecision;\n} | {\n    name: 'string';\n    params: {\n        length: 'unlimited';\n        value?: never;\n    } | {\n        length: 'fixed';\n        value: number;\n    };\n};\n",[462,5000,5001,5011,5020,5030,5038,5047,5057,5065,5074,5080,5090,5099,5108,5117,5126,5131],{"__ignoreMap":512},[516,5002,5003,5005,5007,5009],{"class":518,"line":519},[516,5004,848],{"class":522},[516,5006,4919],{"class":643},[516,5008,853],{"class":522},[516,5010,647],{"class":529},[516,5012,5013,5015,5018],{"class":518,"line":650},[516,5014,4557],{"class":522},[516,5016,5017],{"class":643}," ParameterlessPrimitiveName",[516,5019,578],{"class":529},[516,5021,5022,5025,5028],{"class":518,"line":661},[516,5023,5024],{"class":522},"    params?:",[516,5026,5027],{"class":1273}," never",[516,5029,578],{"class":529},[516,5031,5032,5034,5036],{"class":518,"line":759},[516,5033,2963],{"class":529},[516,5035,2966],{"class":522},[516,5037,647],{"class":529},[516,5039,5040,5042,5045],{"class":518,"line":765},[516,5041,4557],{"class":522},[516,5043,5044],{"class":574}," 'decimal'",[516,5046,578],{"class":529},[516,5048,5049,5052,5055],{"class":518,"line":1245},[516,5050,5051],{"class":522},"    params:",[516,5053,5054],{"class":643}," DecimalPrecision",[516,5056,578],{"class":529},[516,5058,5059,5061,5063],{"class":518,"line":1256},[516,5060,2963],{"class":529},[516,5062,2966],{"class":522},[516,5064,647],{"class":529},[516,5066,5067,5069,5072],{"class":518,"line":1267},[516,5068,4557],{"class":522},[516,5070,5071],{"class":574}," 'string'",[516,5073,578],{"class":529},[516,5075,5076,5078],{"class":518,"line":1279},[516,5077,5051],{"class":522},[516,5079,647],{"class":529},[516,5081,5082,5085,5088],{"class":518,"line":1289},[516,5083,5084],{"class":522},"        length:",[516,5086,5087],{"class":574}," 'unlimited'",[516,5089,578],{"class":529},[516,5091,5092,5095,5097],{"class":518,"line":1300},[516,5093,5094],{"class":522},"        value?:",[516,5096,5027],{"class":1273},[516,5098,578],{"class":529},[516,5100,5101,5104,5106],{"class":518,"line":2331},[516,5102,5103],{"class":529},"    } ",[516,5105,2966],{"class":522},[516,5107,647],{"class":529},[516,5109,5110,5112,5115],{"class":518,"line":2337},[516,5111,5084],{"class":522},[516,5113,5114],{"class":574}," 'fixed'",[516,5116,578],{"class":529},[516,5118,5119,5122,5124],{"class":518,"line":2393},[516,5120,5121],{"class":522},"        value:",[516,5123,1274],{"class":1273},[516,5125,578],{"class":529},[516,5127,5128],{"class":518,"line":2398},[516,5129,5130],{"class":529},"    };\n",[516,5132,5133],{"class":518,"line":2403},[516,5134,4294],{"class":529},[459,5136,5137,5138,5140,5141,5143],{},"An unrecognized ",[462,5139,2525],{}," rejects the schema. See ",[484,5142,4320],{"href":4319}," for how each type travels on the wire.",[616,5145,5147],{"id":5146},"parameterlessprimitivename",[462,5148,5149],{},"ParameterlessPrimitiveName",[459,5151,5152,5153,497],{},"The field type names that take no ",[462,5154,4988],{},[506,5156,5158],{"className":508,"code":5157,"filename":633,"language":511,"meta":512,"style":512},"type ParameterlessPrimitiveName = 'boolean' | 'bytes' | 'date' | 'dateTime' | 'dateTimeWithTimezone' | 'float32' | 'float64' | 'geometry' | 'int16' | 'int32' | 'int64' | 'int8' | 'json' | 'time' | 'uint16' | 'uint32' | 'uint64' | 'uint8' | 'unsupported' | 'uuid';\n",[462,5159,5160],{"__ignoreMap":512},[516,5161,5162,5164,5166,5168,5171,5173,5176,5178,5181,5183,5186,5188,5191,5193,5196,5198,5201,5203,5206,5208,5211,5213,5216,5218,5221,5223,5226,5228,5231,5233,5236,5238,5241,5243,5246,5248,5251,5253,5256,5258,5261,5263,5266],{"class":518,"line":519},[516,5163,848],{"class":522},[516,5165,5017],{"class":643},[516,5167,853],{"class":522},[516,5169,5170],{"class":574}," 'boolean'",[516,5172,859],{"class":522},[516,5174,5175],{"class":574}," 'bytes'",[516,5177,859],{"class":522},[516,5179,5180],{"class":574}," 'date'",[516,5182,859],{"class":522},[516,5184,5185],{"class":574}," 'dateTime'",[516,5187,859],{"class":522},[516,5189,5190],{"class":574}," 'dateTimeWithTimezone'",[516,5192,859],{"class":522},[516,5194,5195],{"class":574}," 'float32'",[516,5197,859],{"class":522},[516,5199,5200],{"class":574}," 'float64'",[516,5202,859],{"class":522},[516,5204,5205],{"class":574}," 'geometry'",[516,5207,859],{"class":522},[516,5209,5210],{"class":574}," 'int16'",[516,5212,859],{"class":522},[516,5214,5215],{"class":574}," 'int32'",[516,5217,859],{"class":522},[516,5219,5220],{"class":574}," 'int64'",[516,5222,859],{"class":522},[516,5224,5225],{"class":574}," 'int8'",[516,5227,859],{"class":522},[516,5229,5230],{"class":574}," 'json'",[516,5232,859],{"class":522},[516,5234,5235],{"class":574}," 'time'",[516,5237,859],{"class":522},[516,5239,5240],{"class":574}," 'uint16'",[516,5242,859],{"class":522},[516,5244,5245],{"class":574}," 'uint32'",[516,5247,859],{"class":522},[516,5249,5250],{"class":574}," 'uint64'",[516,5252,859],{"class":522},[516,5254,5255],{"class":574}," 'uint8'",[516,5257,859],{"class":522},[516,5259,5260],{"class":574}," 'unsupported'",[516,5262,859],{"class":522},[516,5264,5265],{"class":574}," 'uuid'",[516,5267,578],{"class":529},[616,5269,5271],{"id":5270},"decimalprecision",[462,5272,5273],{},"DecimalPrecision",[459,5275,695,5276,5278,5279,5281],{},[462,5277,4988],{}," of a ",[462,5280,4992],{}," field: unconstrained, or a declared precision and scale.",[506,5283,5285],{"className":508,"code":5284,"filename":633,"language":511,"meta":512,"style":512},"type DecimalPrecision = {\n    kind: 'unconstrained';\n    precision?: never;\n    scale?: never;\n} | {\n    kind: 'constrained';\n    precision: number;\n    scale: number;\n};\n",[462,5286,5287,5297,5307,5316,5325,5333,5342,5351,5360],{"__ignoreMap":512},[516,5288,5289,5291,5293,5295],{"class":518,"line":519},[516,5290,848],{"class":522},[516,5292,5054],{"class":643},[516,5294,853],{"class":522},[516,5296,647],{"class":529},[516,5298,5299,5302,5305],{"class":518,"line":650},[516,5300,5301],{"class":522},"    kind:",[516,5303,5304],{"class":574}," 'unconstrained'",[516,5306,578],{"class":529},[516,5308,5309,5312,5314],{"class":518,"line":661},[516,5310,5311],{"class":522},"    precision?:",[516,5313,5027],{"class":1273},[516,5315,578],{"class":529},[516,5317,5318,5321,5323],{"class":518,"line":759},[516,5319,5320],{"class":522},"    scale?:",[516,5322,5027],{"class":1273},[516,5324,578],{"class":529},[516,5326,5327,5329,5331],{"class":518,"line":765},[516,5328,2963],{"class":529},[516,5330,2966],{"class":522},[516,5332,647],{"class":529},[516,5334,5335,5337,5340],{"class":518,"line":1245},[516,5336,5301],{"class":522},[516,5338,5339],{"class":574}," 'constrained'",[516,5341,578],{"class":529},[516,5343,5344,5347,5349],{"class":518,"line":1256},[516,5345,5346],{"class":522},"    precision:",[516,5348,1274],{"class":1273},[516,5350,578],{"class":529},[516,5352,5353,5356,5358],{"class":518,"line":1267},[516,5354,5355],{"class":522},"    scale:",[516,5357,1274],{"class":1273},[516,5359,578],{"class":529},[516,5361,5362],{"class":518,"line":1279},[516,5363,4294],{"class":529},[616,5365,5367],{"id":5366},"defaultvalue",[462,5368,5369],{},"DefaultValue",[459,5371,5372],{},"A field's default: supplied by the connector, or evaluated by Engine.",[506,5374,5376],{"className":508,"code":5375,"filename":633,"language":511,"meta":512,"style":512},"type DefaultValue = {\n    source: 'connectorManaged';\n    isAutoincrement?: boolean;\n} | {\n    source: 'engineManaged';\n    onCreate?: EngineDefaultSource;\n    onUpdate?: EngineDefaultSource;\n};\n",[462,5377,5378,5388,5398,5407,5415,5424,5434,5443],{"__ignoreMap":512},[516,5379,5380,5382,5384,5386],{"class":518,"line":519},[516,5381,848],{"class":522},[516,5383,4947],{"class":643},[516,5385,853],{"class":522},[516,5387,647],{"class":529},[516,5389,5390,5393,5396],{"class":518,"line":650},[516,5391,5392],{"class":522},"    source:",[516,5394,5395],{"class":574}," 'connectorManaged'",[516,5397,578],{"class":529},[516,5399,5400,5403,5405],{"class":518,"line":661},[516,5401,5402],{"class":522},"    isAutoincrement?:",[516,5404,1295],{"class":1273},[516,5406,578],{"class":529},[516,5408,5409,5411,5413],{"class":518,"line":759},[516,5410,2963],{"class":529},[516,5412,2966],{"class":522},[516,5414,647],{"class":529},[516,5416,5417,5419,5422],{"class":518,"line":765},[516,5418,5392],{"class":522},[516,5420,5421],{"class":574}," 'engineManaged'",[516,5423,578],{"class":529},[516,5425,5426,5429,5432],{"class":518,"line":1245},[516,5427,5428],{"class":522},"    onCreate?:",[516,5430,5431],{"class":643}," EngineDefaultSource",[516,5433,578],{"class":529},[516,5435,5436,5439,5441],{"class":518,"line":1256},[516,5437,5438],{"class":522},"    onUpdate?:",[516,5440,5431],{"class":643},[516,5442,578],{"class":529},[516,5444,5445],{"class":518,"line":1267},[516,5446,4294],{"class":529},[459,5448,5449,5452,5453,5456,5457,497],{},[462,5450,5451],{},"connectorManaged"," means your connector or the external data source supplies the value. Engine evaluates an ",[462,5454,5455],{},"engineManaged"," default before it calls your connector, for a field the operation's input offers and the caller omits. See ",[484,5458,5460],{"href":5459},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#defaults","Defaults",[616,5462,5464],{"id":5463},"enginedefaultsource",[462,5465,5466],{},"EngineDefaultSource",[459,5468,5469,5470,5472],{},"Where an ",[462,5471,5455],{}," default's value comes from.",[506,5474,5476],{"className":508,"code":5475,"filename":633,"language":511,"meta":512,"style":512},"type EngineDefaultSource = {\n    kind: 'currentTimestamp';\n} | {\n    kind: 'currentUser';\n} | {\n    kind: 'randomUuid';\n    version: 'v4' | 'v7';\n} | {\n    kind: 'static';\n    valueEncoded: Value;\n};\n",[462,5477,5478,5488,5497,5505,5514,5522,5531,5546,5554,5563,5572],{"__ignoreMap":512},[516,5479,5480,5482,5484,5486],{"class":518,"line":519},[516,5481,848],{"class":522},[516,5483,5431],{"class":643},[516,5485,853],{"class":522},[516,5487,647],{"class":529},[516,5489,5490,5492,5495],{"class":518,"line":650},[516,5491,5301],{"class":522},[516,5493,5494],{"class":574}," 'currentTimestamp'",[516,5496,578],{"class":529},[516,5498,5499,5501,5503],{"class":518,"line":661},[516,5500,2963],{"class":529},[516,5502,2966],{"class":522},[516,5504,647],{"class":529},[516,5506,5507,5509,5512],{"class":518,"line":759},[516,5508,5301],{"class":522},[516,5510,5511],{"class":574}," 'currentUser'",[516,5513,578],{"class":529},[516,5515,5516,5518,5520],{"class":518,"line":765},[516,5517,2963],{"class":529},[516,5519,2966],{"class":522},[516,5521,647],{"class":529},[516,5523,5524,5526,5529],{"class":518,"line":1245},[516,5525,5301],{"class":522},[516,5527,5528],{"class":574}," 'randomUuid'",[516,5530,578],{"class":529},[516,5532,5533,5536,5539,5541,5544],{"class":518,"line":1256},[516,5534,5535],{"class":522},"    version:",[516,5537,5538],{"class":574}," 'v4'",[516,5540,859],{"class":522},[516,5542,5543],{"class":574}," 'v7'",[516,5545,578],{"class":529},[516,5547,5548,5550,5552],{"class":518,"line":1267},[516,5549,2963],{"class":529},[516,5551,2966],{"class":522},[516,5553,647],{"class":529},[516,5555,5556,5558,5561],{"class":518,"line":1279},[516,5557,5301],{"class":522},[516,5559,5560],{"class":574}," 'static'",[516,5562,578],{"class":529},[516,5564,5565,5568,5570],{"class":518,"line":1289},[516,5566,5567],{"class":522},"    valueEncoded:",[516,5569,2976],{"class":643},[516,5571,578],{"class":529},[516,5573,5574],{"class":518,"line":1300},[516,5575,4294],{"class":529},[459,5577,5578,1171,5581,5584,5585,5588,5589,5592,5593,5596],{},[462,5579,5580],{},"currentUser",[462,5582,5583],{},"randomUuid"," need a ",[462,5586,5587],{},"uuid"," field, ",[462,5590,5591],{},"currentTimestamp"," a date or time field, and a ",[462,5594,5595],{},"static"," value must fit the field's type.",[616,5598,5600],{"id":5599},"canonicalindex",[462,5601,5602],{},"CanonicalIndex",[459,5604,5605],{},"One index of a collection.",[506,5607,5609],{"className":508,"code":5608,"filename":633,"language":511,"meta":512,"style":512},"interface CanonicalIndex {\n    name: Identifier;\n    fields: Identifier[];\n    kind: IndexKind;\n}\n",[462,5610,5611,5619,5627,5636,5645],{"__ignoreMap":512},[516,5612,5613,5615,5617],{"class":518,"line":519},[516,5614,640],{"class":522},[516,5616,4633],{"class":643},[516,5618,647],{"class":529},[516,5620,5621,5623,5625],{"class":518,"line":650},[516,5622,4557],{"class":522},[516,5624,1221],{"class":643},[516,5626,578],{"class":529},[516,5628,5629,5632,5634],{"class":518,"line":661},[516,5630,5631],{"class":522},"    fields:",[516,5633,1221],{"class":643},[516,5635,1242],{"class":529},[516,5637,5638,5640,5643],{"class":518,"line":759},[516,5639,5301],{"class":522},[516,5641,5642],{"class":643}," IndexKind",[516,5644,578],{"class":529},[516,5646,5647],{"class":518,"line":765},[516,5648,664],{"class":529},[459,5650,5651,5653,5654,497],{},[462,5652,496],{}," lists field names in order. The primary index decides which keyed operations a collection can offer. See ",[484,5655,5657],{"href":5656},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#use-keys-and-the-stable-id","Keys and the Stable ID",[616,5659,5661],{"id":5660},"indexkind",[462,5662,5663],{},"IndexKind",[459,5665,5666],{},"The kind of an index.",[506,5668,5670],{"className":508,"code":5669,"filename":633,"language":511,"meta":512,"style":512},"type IndexKind = 'primary' | 'unique' | 'normal';\n",[462,5671,5672],{"__ignoreMap":512},[516,5673,5674,5676,5678,5680,5683,5685,5688,5690,5693],{"class":518,"line":519},[516,5675,848],{"class":522},[516,5677,5642],{"class":643},[516,5679,853],{"class":522},[516,5681,5682],{"class":574}," 'primary'",[516,5684,859],{"class":522},[516,5686,5687],{"class":574}," 'unique'",[516,5689,859],{"class":522},[516,5691,5692],{"class":574}," 'normal'",[516,5694,578],{"class":529},[616,5696,5698],{"id":5697},"canonicalrelation",[462,5699,5700],{},"CanonicalRelation",[459,5702,5703],{},"A link from a constrained collection, which holds the fields that point at the other side, to a referenced collection.",[506,5705,5707],{"className":508,"code":5706,"filename":633,"language":511,"meta":512,"style":512},"interface CanonicalRelation {\n    name: Identifier;\n    constrainedNamespace?: Identifier;\n    constrainedCollection: Identifier;\n    constrainedFields: Identifier[];\n    constrainedRelationFieldName?: Identifier;\n    referencedNamespace?: Identifier;\n    referencedCollection: Identifier;\n    referencedFields: Identifier[];\n    referencedRelationFieldName?: Identifier;\n    onDelete: ReferentialAction;\n    onUpdate: ReferentialAction;\n}\n",[462,5708,5709,5717,5725,5734,5743,5752,5761,5770,5779,5788,5797,5807,5816],{"__ignoreMap":512},[516,5710,5711,5713,5715],{"class":518,"line":519},[516,5712,640],{"class":522},[516,5714,4437],{"class":643},[516,5716,647],{"class":529},[516,5718,5719,5721,5723],{"class":518,"line":650},[516,5720,4557],{"class":522},[516,5722,1221],{"class":643},[516,5724,578],{"class":529},[516,5726,5727,5730,5732],{"class":518,"line":661},[516,5728,5729],{"class":522},"    constrainedNamespace?:",[516,5731,1221],{"class":643},[516,5733,578],{"class":529},[516,5735,5736,5739,5741],{"class":518,"line":759},[516,5737,5738],{"class":522},"    constrainedCollection:",[516,5740,1221],{"class":643},[516,5742,578],{"class":529},[516,5744,5745,5748,5750],{"class":518,"line":765},[516,5746,5747],{"class":522},"    constrainedFields:",[516,5749,1221],{"class":643},[516,5751,1242],{"class":529},[516,5753,5754,5757,5759],{"class":518,"line":1245},[516,5755,5756],{"class":522},"    constrainedRelationFieldName?:",[516,5758,1221],{"class":643},[516,5760,578],{"class":529},[516,5762,5763,5766,5768],{"class":518,"line":1256},[516,5764,5765],{"class":522},"    referencedNamespace?:",[516,5767,1221],{"class":643},[516,5769,578],{"class":529},[516,5771,5772,5775,5777],{"class":518,"line":1267},[516,5773,5774],{"class":522},"    referencedCollection:",[516,5776,1221],{"class":643},[516,5778,578],{"class":529},[516,5780,5781,5784,5786],{"class":518,"line":1279},[516,5782,5783],{"class":522},"    referencedFields:",[516,5785,1221],{"class":643},[516,5787,1242],{"class":529},[516,5789,5790,5793,5795],{"class":518,"line":1289},[516,5791,5792],{"class":522},"    referencedRelationFieldName?:",[516,5794,1221],{"class":643},[516,5796,578],{"class":529},[516,5798,5799,5802,5805],{"class":518,"line":1300},[516,5800,5801],{"class":522},"    onDelete:",[516,5803,5804],{"class":643}," ReferentialAction",[516,5806,578],{"class":529},[516,5808,5809,5812,5814],{"class":518,"line":2331},[516,5810,5811],{"class":522},"    onUpdate:",[516,5813,5804],{"class":643},[516,5815,578],{"class":529},[516,5817,5818],{"class":518,"line":2337},[516,5819,664],{"class":529},[459,5821,5822,1171,5825,5828,5829,5833,5834,5838],{},[462,5823,5824],{},"constrainedFields",[462,5826,5827],{},"referencedFields"," pair up by position. See ",[484,5830,5832],{"href":5831},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Fapi#relations","Relations"," for each property and ",[484,5835,5837],{"href":5836},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#resolve-relations","Resolve Relations"," for what a relation needs to be offered.",[616,5840,5842],{"id":5841},"referentialaction",[462,5843,5844],{},"ReferentialAction",[459,5846,695,5847,1171,5850,5853],{},[462,5848,5849],{},"onDelete",[462,5851,5852],{},"onUpdate"," action of a relation.",[506,5855,5857],{"className":508,"code":5856,"filename":633,"language":511,"meta":512,"style":512},"type ReferentialAction = 'noAction' | 'restrict' | 'cascade' | 'setNull' | 'setDefault';\n",[462,5858,5859],{"__ignoreMap":512},[516,5860,5861,5863,5865,5867,5870,5872,5875,5877,5880,5882,5885,5887,5890],{"class":518,"line":519},[516,5862,848],{"class":522},[516,5864,5804],{"class":643},[516,5866,853],{"class":522},[516,5868,5869],{"class":574}," 'noAction'",[516,5871,859],{"class":522},[516,5873,5874],{"class":574}," 'restrict'",[516,5876,859],{"class":522},[516,5878,5879],{"class":574}," 'cascade'",[516,5881,859],{"class":522},[516,5883,5884],{"class":574}," 'setNull'",[516,5886,859],{"class":522},[516,5888,5889],{"class":574}," 'setDefault'",[516,5891,578],{"class":529},[455,5893,5895],{"id":5894},"declare-operations","Declare Operations",[459,5897,5898,5899,5901,5902,497],{},"A collection's ",[462,5900,4663],{}," declare what it serves: which members it offers, and for each member the filters, sorts, paging and fields it accepts. Engine offers callers nothing more. See ",[484,5903,414],{"href":588},[616,5905,5907],{"id":5906},"supportedoperations",[462,5908,5909],{},"SupportedOperations",[459,5911,5912],{},"The operations a collection serves. An absent member isn't offered.",[506,5914,5916],{"className":508,"code":5915,"filename":633,"language":511,"meta":512,"style":512},"interface SupportedOperations {\n    readMany?: ReadArguments;\n    readOne?: ReadOneArguments;\n    create?: CreateArguments;\n    updateMany?: UpdateArguments;\n    updateOne?: UpdateArguments;\n    deleteMany?: DeleteArguments;\n    deleteOne?: DeleteArguments;\n}\n",[462,5917,5918,5926,5936,5946,5956,5966,5975,5985,5994],{"__ignoreMap":512},[516,5919,5920,5922,5924],{"class":518,"line":519},[516,5921,640],{"class":522},[516,5923,4652],{"class":643},[516,5925,647],{"class":529},[516,5927,5928,5931,5934],{"class":518,"line":650},[516,5929,5930],{"class":522},"    readMany?:",[516,5932,5933],{"class":643}," ReadArguments",[516,5935,578],{"class":529},[516,5937,5938,5941,5944],{"class":518,"line":661},[516,5939,5940],{"class":522},"    readOne?:",[516,5942,5943],{"class":643}," ReadOneArguments",[516,5945,578],{"class":529},[516,5947,5948,5951,5954],{"class":518,"line":759},[516,5949,5950],{"class":522},"    create?:",[516,5952,5953],{"class":643}," CreateArguments",[516,5955,578],{"class":529},[516,5957,5958,5961,5964],{"class":518,"line":765},[516,5959,5960],{"class":522},"    updateMany?:",[516,5962,5963],{"class":643}," UpdateArguments",[516,5965,578],{"class":529},[516,5967,5968,5971,5973],{"class":518,"line":1245},[516,5969,5970],{"class":522},"    updateOne?:",[516,5972,5963],{"class":643},[516,5974,578],{"class":529},[516,5976,5977,5980,5983],{"class":518,"line":1256},[516,5978,5979],{"class":522},"    deleteMany?:",[516,5981,5982],{"class":643}," DeleteArguments",[516,5984,578],{"class":529},[516,5986,5987,5990,5992],{"class":518,"line":1267},[516,5988,5989],{"class":522},"    deleteOne?:",[516,5991,5982],{"class":643},[516,5993,578],{"class":529},[516,5995,5996],{"class":518,"line":1279},[516,5997,664],{"class":529},[459,5999,6000,6001,537,6003,537,6005,6007,6008,6010,6011,3250,6015,6017,6018,6020,6021,3250,6023,6025,6026,6030,6031,3250,6033,482,6035,3250,6037,6039,6040,6043,6044,1171,6048,497],{},"Declaring a keyed member (",[462,6002,812],{},[462,6004,1017],{},[462,6006,1059],{},") means accepting it with a ",[462,6009,958],{}," for the collection's single-field primary key, and answering it with one ",[484,6012,6013],{"href":1918},[462,6014,965],{},[462,6016,969],{},"; its ",[462,6019,1189],{}," governs only the guard. Without the connector's ",[462,6022,1629],{},[462,6024,1762],{}," ",[484,6027,6029],{"href":6028},"\u002Freference\u002Fextensions\u002Fmanifest#capabilities","capability",", Engine sends a declared ",[462,6032,1017],{},[462,6034,1059],{},[462,6036,996],{},[462,6038,1041],{}," by stable ID, with ",[462,6041,6042],{},"select: []",", and takes nothing from the answer. See ",[484,6045,6047],{"href":6046},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#choose-members","Choose Members",[484,6049,6051],{"href":6050},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#what-engine-sends","What Engine Sends",[459,6053,6054,6055,6058,6059,497],{},"Engine checks every declaration when a data source is created or reintrospected. For example, a field list can't repeat a name, and ",[462,6056,6057],{},"output"," can't be empty. See ",[484,6060,6062],{"href":6061},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#follow-the-declaration-rules","Follow the Declaration Rules",[616,6064,6066],{"id":6065},"readarguments",[462,6067,6068],{},"ReadArguments",[459,6070,6071,6072,6074],{},"What a ",[462,6073,914],{}," accepts. Callers can't pass an argument the declaration leaves out.",[506,6076,6078],{"className":508,"code":6077,"filename":633,"language":511,"meta":512,"style":512},"interface ReadArguments {\n    filter?: FilterContract;\n    sort?: Record\u003CIdentifier, SortField>;\n    limit?: Record\u003Cstring, never>;\n    offset?: Record\u003Cstring, never>;\n    output?: Identifier[];\n    meta?: {\n        totalCount?: boolean;\n    };\n}\n",[462,6079,6080,6088,6097,6114,6131,6147,6156,6163,6172,6176],{"__ignoreMap":512},[516,6081,6082,6084,6086],{"class":518,"line":519},[516,6083,640],{"class":522},[516,6085,5933],{"class":643},[516,6087,647],{"class":529},[516,6089,6090,6092,6095],{"class":518,"line":650},[516,6091,1248],{"class":522},[516,6093,6094],{"class":643}," FilterContract",[516,6096,578],{"class":529},[516,6098,6099,6101,6103,6105,6107,6109,6112],{"class":518,"line":661},[516,6100,1259],{"class":522},[516,6102,1883],{"class":643},[516,6104,720],{"class":529},[516,6106,1888],{"class":643},[516,6108,537],{"class":529},[516,6110,6111],{"class":643},"SortField",[516,6113,1895],{"class":529},[516,6115,6116,6118,6120,6122,6124,6126,6129],{"class":518,"line":759},[516,6117,1270],{"class":522},[516,6119,1883],{"class":643},[516,6121,720],{"class":529},[516,6123,3207],{"class":1273},[516,6125,537],{"class":529},[516,6127,6128],{"class":1273},"never",[516,6130,1895],{"class":529},[516,6132,6133,6135,6137,6139,6141,6143,6145],{"class":518,"line":765},[516,6134,1282],{"class":522},[516,6136,1883],{"class":643},[516,6138,720],{"class":529},[516,6140,3207],{"class":1273},[516,6142,537],{"class":529},[516,6144,6128],{"class":1273},[516,6146,1895],{"class":529},[516,6148,6149,6152,6154],{"class":518,"line":1245},[516,6150,6151],{"class":522},"    output?:",[516,6153,1221],{"class":643},[516,6155,1242],{"class":529},[516,6157,6158,6161],{"class":518,"line":1256},[516,6159,6160],{"class":522},"    meta?:",[516,6162,647],{"class":529},[516,6164,6165,6168,6170],{"class":518,"line":1267},[516,6166,6167],{"class":522},"        totalCount?:",[516,6169,1295],{"class":1273},[516,6171,578],{"class":529},[516,6173,6174],{"class":518,"line":1279},[516,6175,5130],{"class":529},[516,6177,6178],{"class":518,"line":1289},[516,6179,664],{"class":529},[459,6181,6182,1171,6184,6186,6187,6189,6190,6192,6193,6195,6196,6198,6199,6202,6203,497],{},[462,6183,3652],{},[462,6185,3655],{}," are ",[462,6188,3761],{}," when present, and a connector can't set a ceiling on either. Without ",[462,6191,3652],{},", a ",[462,6194,914],{}," still carries Engine's default ",[462,6197,3652],{}," when the caller sets none. ",[462,6200,6201],{},"meta.totalCount"," offers count reads. See ",[484,6204,6206],{"href":6205},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#arguments","Arguments",[616,6208,6210],{"id":6209},"readonearguments",[462,6211,6212],{},"ReadOneArguments",[459,6214,6071,6215,6217],{},[462,6216,812],{}," accepts: the guard filter and the output fields.",[506,6219,6221],{"className":508,"code":6220,"filename":633,"language":511,"meta":512,"style":512},"interface ReadOneArguments {\n    filter?: FilterContract;\n    output?: Identifier[];\n}\n",[462,6222,6223,6231,6239,6247],{"__ignoreMap":512},[516,6224,6225,6227,6229],{"class":518,"line":519},[516,6226,640],{"class":522},[516,6228,5943],{"class":643},[516,6230,647],{"class":529},[516,6232,6233,6235,6237],{"class":518,"line":650},[516,6234,1248],{"class":522},[516,6236,6094],{"class":643},[516,6238,578],{"class":529},[516,6240,6241,6243,6245],{"class":518,"line":661},[516,6242,6151],{"class":522},[516,6244,1221],{"class":643},[516,6246,1242],{"class":529},[516,6248,6249],{"class":518,"line":759},[516,6250,664],{"class":529},[616,6252,6254],{"id":6253},"createarguments",[462,6255,6256],{},"CreateArguments",[459,6258,6071,6259,6261],{},[462,6260,976],{}," accepts: the fields callers may set, and the output fields.",[506,6263,6265],{"className":508,"code":6264,"filename":633,"language":511,"meta":512,"style":512},"interface CreateArguments {\n    data?: Identifier[];\n    output?: Identifier[];\n}\n",[462,6266,6267,6275,6284,6292],{"__ignoreMap":512},[516,6268,6269,6271,6273],{"class":518,"line":519},[516,6270,640],{"class":522},[516,6272,5953],{"class":643},[516,6274,647],{"class":529},[516,6276,6277,6280,6282],{"class":518,"line":650},[516,6278,6279],{"class":522},"    data?:",[516,6281,1221],{"class":643},[516,6283,1242],{"class":529},[516,6285,6286,6288,6290],{"class":518,"line":661},[516,6287,6151],{"class":522},[516,6289,1221],{"class":643},[516,6291,1242],{"class":529},[516,6293,6294],{"class":518,"line":759},[516,6295,664],{"class":529},[459,6297,6298,6299,1171,6301,6304,6305,497],{},"An absent ",[462,6300,983],{},[462,6302,6303],{},"[]"," mean the same: callers set no field, and each created item arrives as ",[462,6306,3761],{},[616,6308,6310],{"id":6309},"updatearguments",[462,6311,6312],{},"UpdateArguments",[459,6314,1826,6315,1171,6317,6319],{},[462,6316,996],{},[462,6318,1017],{}," accept.",[506,6321,6323],{"className":508,"code":6322,"filename":633,"language":511,"meta":512,"style":512},"interface UpdateArguments {\n    filter?: FilterContract;\n    data?: Identifier[];\n    output?: Identifier[];\n}\n",[462,6324,6325,6333,6341,6349,6357],{"__ignoreMap":512},[516,6326,6327,6329,6331],{"class":518,"line":519},[516,6328,640],{"class":522},[516,6330,5963],{"class":643},[516,6332,647],{"class":529},[516,6334,6335,6337,6339],{"class":518,"line":650},[516,6336,1248],{"class":522},[516,6338,6094],{"class":643},[516,6340,578],{"class":529},[516,6342,6343,6345,6347],{"class":518,"line":661},[516,6344,6279],{"class":522},[516,6346,1221],{"class":643},[516,6348,1242],{"class":529},[516,6350,6351,6353,6355],{"class":518,"line":759},[516,6352,6151],{"class":522},[516,6354,1221],{"class":643},[516,6356,1242],{"class":529},[516,6358,6359],{"class":518,"line":765},[516,6360,664],{"class":529},[459,6362,6298,6363,1171,6365,6367],{},[462,6364,983],{},[462,6366,6303],{}," mean the same: the update sets no field. When it also offers no nested relation write, it sets nothing, so Engine doesn't offer it.",[616,6369,6371],{"id":6370},"deletearguments",[462,6372,6373],{},"DeleteArguments",[459,6375,1826,6376,1171,6378,6319],{},[462,6377,1041],{},[462,6379,1059],{},[506,6381,6383],{"className":508,"code":6382,"filename":633,"language":511,"meta":512,"style":512},"interface DeleteArguments {\n    filter?: FilterContract;\n    output?: Identifier[];\n}\n",[462,6384,6385,6393,6401,6409],{"__ignoreMap":512},[516,6386,6387,6389,6391],{"class":518,"line":519},[516,6388,640],{"class":522},[516,6390,5982],{"class":643},[516,6392,647],{"class":529},[516,6394,6395,6397,6399],{"class":518,"line":650},[516,6396,1248],{"class":522},[516,6398,6094],{"class":643},[516,6400,578],{"class":529},[516,6402,6403,6405,6407],{"class":518,"line":661},[516,6404,6151],{"class":522},[516,6406,1221],{"class":643},[516,6408,1242],{"class":529},[516,6410,6411],{"class":518,"line":759},[516,6412,664],{"class":529},[616,6414,6416],{"id":6415},"filtercontract",[462,6417,6418],{},"FilterContract",[459,6420,6421],{},"The filters a member accepts: operators per field, and the logical operators that join them.",[506,6423,6425],{"className":508,"code":6424,"filename":633,"language":511,"meta":512,"style":512},"interface FilterContract {\n    fields: Record\u003CIdentifier, FilterField>;\n    logicalOperators?: Partial\u003CRecord\u003CLogicalOperator, LogicalOperatorOptions>>;\n}\n",[462,6426,6427,6435,6452,6478],{"__ignoreMap":512},[516,6428,6429,6431,6433],{"class":518,"line":519},[516,6430,640],{"class":522},[516,6432,6094],{"class":643},[516,6434,647],{"class":529},[516,6436,6437,6439,6441,6443,6445,6447,6450],{"class":518,"line":650},[516,6438,5631],{"class":522},[516,6440,1883],{"class":643},[516,6442,720],{"class":529},[516,6444,1888],{"class":643},[516,6446,537],{"class":529},[516,6448,6449],{"class":643},"FilterField",[516,6451,1895],{"class":529},[516,6453,6454,6457,6460,6462,6465,6467,6470,6472,6475],{"class":518,"line":661},[516,6455,6456],{"class":522},"    logicalOperators?:",[516,6458,6459],{"class":643}," Partial",[516,6461,720],{"class":529},[516,6463,6464],{"class":643},"Record",[516,6466,720],{"class":529},[516,6468,6469],{"class":643},"LogicalOperator",[516,6471,537],{"class":529},[516,6473,6474],{"class":643},"LogicalOperatorOptions",[516,6476,6477],{"class":529},">>;\n",[516,6479,6480],{"class":518,"line":759},[516,6481,664],{"class":529},[459,6483,6484],{},"No field is required in a filter, and every declared operator can occur any number of times anywhere in the tree. Filters name only the collection's own fields. The full Art Institute connector checks each comparison it receives against its contract:",[506,6486,6488],{"className":508,"code":6487,"filename":4684,"language":511,"meta":512,"style":512},"\u002F** Refuses `operator` on `field` unless `contract` declares it. A value in the field's place is a shape `translate` refuses. *\u002F\nfunction requireOperator(contract: FilterContract | undefined, field: string | undefined, operator: DeclaredOperator): void {\n    if (field === undefined) return;\n    const operators = contract?.fields[field]?.operators;\n\n    if (operators === undefined || !Object.hasOwn(operators, operator)) {\n        throw new Error(`The Art Institute connector can't filter \\`${field}\\` with \\`${operator}\\`.`);\n    }\n}\n",[462,6489,6490,6495,6540,6558,6586,6590,6626,6667,6671],{"__ignoreMap":512},[516,6491,6492],{"class":518,"line":519},[516,6493,6494],{"class":2327},"\u002F** Refuses `operator` on `field` unless `contract` declares it. A value in the field's place is a shape `translate` refuses. *\u002F\n",[516,6496,6497,6499,6502,6504,6507,6509,6511,6513,6515,6517,6519,6521,6523,6525,6528,6531,6533,6535,6538],{"class":518,"line":650},[516,6498,2795],{"class":522},[516,6500,6501],{"class":643}," requireOperator",[516,6503,1143],{"class":529},[516,6505,6506],{"class":522},"contract:",[516,6508,6094],{"class":643},[516,6510,859],{"class":522},[516,6512,2156],{"class":1273},[516,6514,537],{"class":529},[516,6516,4063],{"class":522},[516,6518,4066],{"class":1273},[516,6520,859],{"class":522},[516,6522,2156],{"class":1273},[516,6524,537],{"class":529},[516,6526,6527],{"class":522},"operator:",[516,6529,6530],{"class":643}," DeclaredOperator",[516,6532,1151],{"class":529},[516,6534,1154],{"class":522},[516,6536,6537],{"class":1273}," void",[516,6539,647],{"class":529},[516,6541,6542,6544,6546,6548,6550,6552,6554,6556],{"class":518,"line":661},[516,6543,2140],{"class":522},[516,6545,2143],{"class":529},[516,6547,2296],{"class":533},[516,6549,2417],{"class":522},[516,6551,2156],{"class":643},[516,6553,2187],{"class":529},[516,6555,2519],{"class":522},[516,6557,578],{"class":529},[516,6559,6560,6562,6565,6567,6570,6572,6574,6576,6578,6581,6584],{"class":518,"line":759},[516,6561,4150],{"class":522},[516,6563,6564],{"class":643}," operators",[516,6566,853],{"class":522},[516,6568,6569],{"class":533}," contract",[516,6571,2293],{"class":529},[516,6573,496],{"class":533},[516,6575,1793],{"class":529},[516,6577,2296],{"class":533},[516,6579,6580],{"class":529},"]?.",[516,6582,6583],{"class":533},"operators",[516,6585,578],{"class":529},[516,6587,6588],{"class":518,"line":765},[516,6589,2210],{"emptyLinePlaceholder":2209},[516,6591,6592,6594,6596,6598,6600,6602,6605,6608,6611,6613,6616,6618,6620,6622,6624],{"class":518,"line":1245},[516,6593,2140],{"class":522},[516,6595,2143],{"class":529},[516,6597,6583],{"class":533},[516,6599,2417],{"class":522},[516,6601,2156],{"class":643},[516,6603,6604],{"class":522}," ||",[516,6606,6607],{"class":522}," !",[516,6609,6610],{"class":533},"Object",[516,6612,497],{"class":529},[516,6614,6615],{"class":643},"hasOwn",[516,6617,1143],{"class":529},[516,6619,6583],{"class":533},[516,6621,537],{"class":529},[516,6623,2824],{"class":533},[516,6625,2322],{"class":529},[516,6627,6628,6631,6633,6635,6637,6640,6642,6644,6646,6648,6650,6653,6655,6657,6659,6661,6663,6665],{"class":518,"line":1256},[516,6629,6630],{"class":522},"        throw",[516,6632,2572],{"class":522},[516,6634,3426],{"class":643},[516,6636,1143],{"class":529},[516,6638,6639],{"class":574},"`The Art Institute connector can't filter ",[516,6641,3434],{"class":643},[516,6643,3437],{"class":574},[516,6645,2296],{"class":533},[516,6647,3442],{"class":574},[516,6649,3434],{"class":643},[516,6651,6652],{"class":574}," with ",[516,6654,3434],{"class":643},[516,6656,3437],{"class":574},[516,6658,2824],{"class":533},[516,6660,3442],{"class":574},[516,6662,3434],{"class":643},[516,6664,3447],{"class":574},[516,6666,2486],{"class":529},[516,6668,6669],{"class":518,"line":1267},[516,6670,2204],{"class":529},[516,6672,6673],{"class":518,"line":1279},[516,6674,664],{"class":529},[459,6676,6677,6678,1171,6684,497],{},"Build these maps with ",[484,6679,6681],{"href":6680},"\u002Freference\u002Fextensions\u002Fextension-kit\u002Fexperimental#filterfield",[462,6682,6683],{},"filter.field",[484,6685,6687],{"href":6686},"\u002Freference\u002Fextensions\u002Fextension-kit\u002Fexperimental#filterlogical",[462,6688,6689],{},"filter.logical",[616,6691,6693],{"id":6692},"filterfield",[462,6694,6449],{},[459,6696,6697],{},"The operators a filter may apply to one field, each with its options.",[506,6699,6701],{"className":508,"code":6700,"filename":633,"language":511,"meta":512,"style":512},"interface FilterField {\n    operators: Partial\u003CRecord\u003CDeclaredOperator, DeclaredOperatorOptions>>;\n}\n",[462,6702,6703,6712,6735],{"__ignoreMap":512},[516,6704,6705,6707,6710],{"class":518,"line":519},[516,6706,640],{"class":522},[516,6708,6709],{"class":643}," FilterField",[516,6711,647],{"class":529},[516,6713,6714,6717,6719,6721,6723,6725,6728,6730,6733],{"class":518,"line":650},[516,6715,6716],{"class":522},"    operators:",[516,6718,6459],{"class":643},[516,6720,720],{"class":529},[516,6722,6464],{"class":643},[516,6724,720],{"class":529},[516,6726,6727],{"class":643},"DeclaredOperator",[516,6729,537],{"class":529},[516,6731,6732],{"class":643},"DeclaredOperatorOptions",[516,6734,6477],{"class":529},[516,6736,6737],{"class":518,"line":661},[516,6738,664],{"class":529},[616,6740,6742],{"id":6741},"declaredoperator",[462,6743,6727],{},[459,6745,6746,6747,6751,6752,497],{},"An operator a field can declare: every ",[484,6748,6749],{"href":2042},[462,6750,2045],{},", plus ",[462,6753,2290],{},[506,6755,6757],{"className":508,"code":6756,"filename":633,"language":511,"meta":512,"style":512},"type DeclaredOperator = FilterOperator | 'in';\n",[462,6758,6759],{"__ignoreMap":512},[516,6760,6761,6763,6765,6767,6769,6771,6774],{"class":518,"line":519},[516,6762,848],{"class":522},[516,6764,6530],{"class":643},[516,6766,853],{"class":522},[516,6768,2756],{"class":643},[516,6770,859],{"class":522},[516,6772,6773],{"class":574}," 'in'",[516,6775,578],{"class":529},[459,6777,6778,6779,497],{},"Which operators a field can declare depends on its type. See ",[484,6780,6782],{"href":6781},"\u002Freference\u002Fextensions\u002Fdata-connectors\u002Foperations#match-operators-to-field-types","Match Operators to Field Types",[616,6784,6786],{"id":6785},"declaredoperatoroptions",[462,6787,6732],{},[459,6789,6790,6791,497],{},"The options of one declared operator. None exist yet: declare ",[462,6792,3761],{},[506,6794,6796],{"className":508,"code":6795,"filename":633,"language":511,"meta":512,"style":512},"type DeclaredOperatorOptions = Record\u003Cstring, never>;\n",[462,6797,6798],{"__ignoreMap":512},[516,6799,6800,6802,6805,6807,6809,6811,6813,6815,6817],{"class":518,"line":519},[516,6801,848],{"class":522},[516,6803,6804],{"class":643}," DeclaredOperatorOptions",[516,6806,853],{"class":522},[516,6808,1883],{"class":643},[516,6810,720],{"class":529},[516,6812,3207],{"class":1273},[516,6814,537],{"class":529},[516,6816,6128],{"class":1273},[516,6818,1895],{"class":529},[616,6820,6822],{"id":6821},"logicaloperator",[462,6823,6469],{},[459,6825,6826],{},"The logical operators a filter can declare.",[506,6828,6830],{"className":508,"code":6829,"filename":633,"language":511,"meta":512,"style":512},"type LogicalOperator = 'and' | 'not' | 'or';\n",[462,6831,6832],{"__ignoreMap":512},[516,6833,6834,6836,6839,6841,6844,6846,6849,6851,6854],{"class":518,"line":519},[516,6835,848],{"class":522},[516,6837,6838],{"class":643}," LogicalOperator",[516,6840,853],{"class":522},[516,6842,6843],{"class":574}," 'and'",[516,6845,859],{"class":522},[516,6847,6848],{"class":574}," 'not'",[516,6850,859],{"class":522},[516,6852,6853],{"class":574}," 'or'",[516,6855,578],{"class":529},[616,6857,6859],{"id":6858},"logicaloperatoroptions",[462,6860,6474],{},[459,6862,6863,6864,497],{},"The options of one declared logical operator. None exist yet: declare ",[462,6865,3761],{},[506,6867,6869],{"className":508,"code":6868,"filename":633,"language":511,"meta":512,"style":512},"type LogicalOperatorOptions = Record\u003Cstring, never>;\n",[462,6870,6871],{"__ignoreMap":512},[516,6872,6873,6875,6878,6880,6882,6884,6886,6888,6890],{"class":518,"line":519},[516,6874,848],{"class":522},[516,6876,6877],{"class":643}," LogicalOperatorOptions",[516,6879,853],{"class":522},[516,6881,1883],{"class":643},[516,6883,720],{"class":529},[516,6885,3207],{"class":1273},[516,6887,537],{"class":529},[516,6889,6128],{"class":1273},[516,6891,1895],{"class":529},[616,6893,6895],{"id":6894},"sortfield",[462,6896,6111],{},[459,6898,6899],{},"The directions one field can be sorted in.",[506,6901,6903],{"className":508,"code":6902,"filename":633,"language":511,"meta":512,"style":512},"interface SortField {\n    directions: SortDirection[];\n}\n",[462,6904,6905,6914,6923],{"__ignoreMap":512},[516,6906,6907,6909,6912],{"class":518,"line":519},[516,6908,640],{"class":522},[516,6910,6911],{"class":643}," SortField",[516,6913,647],{"class":529},[516,6915,6916,6919,6921],{"class":518,"line":650},[516,6917,6918],{"class":522},"    directions:",[516,6920,3164],{"class":643},[516,6922,1242],{"class":529},[516,6924,6925],{"class":518,"line":661},[516,6926,664],{"class":529},[459,6928,6929,6930,497],{},"Build it with ",[484,6931,6933],{"href":6932},"\u002Freference\u002Fextensions\u002Fextension-kit\u002Fexperimental#sortfield",[462,6934,6935],{},"sort.field",[455,6937,6939],{"id":6938},"see-also","See Also",[6941,6942,6943,6949,6954,6964],"ul",{},[6944,6945,6946,6948],"li",{},[484,6947,410],{"href":584},": what Engine sends in each request and expects in each answer",[6944,6950,6951,6953],{},[484,6952,414],{"href":588},": declare what each collection serves, and the rules Engine enforces",[6944,6955,6956,1922,6960,6963],{},[484,6957,6959],{"href":6958},"\u002Freference\u002Fextensions\u002Fextension-kit\u002Fdata-connector","Data Connector Module",[462,6961,6962],{},"defineDataConnector",", the handlers and the error classes",[6944,6965,6966,6968],{},[484,6967,401],{"href":4449},": build the schema document from typed definitions",[6970,6971,6972],"style",{},"html pre.shiki code .sLVBU, html code.shiki .sLVBU{--shiki-light:#0891B2;--shiki-default:#0891B2;--shiki-dark:#22D3EE}html pre.shiki code .sTMul, html code.shiki .sTMul{--shiki-light:#1F2937;--shiki-default:#1F2937;--shiki-dark:#94A3B8}html pre.shiki code .sNJ9c, html code.shiki .sNJ9c{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E2E8F0}html pre.shiki code .suKVh, html code.shiki .suKVh{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#F8FAFC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .ssBNi, html code.shiki .ssBNi{--shiki-light:#1659E9;--shiki-default:#1659E9;--shiki-dark:#94B3F5}html pre.shiki code .snHjA, html code.shiki .snHjA{--shiki-light:#124BC4;--shiki-default:#124BC4;--shiki-dark:#5B8EF4}html pre.shiki code .seNfP, html code.shiki .seNfP{--shiki-light:#64748B;--shiki-default:#64748B;--shiki-dark:#94A3B8}",{"title":512,"searchDepth":650,"depth":650,"links":6974},[6975,6976,7002,7012,7027,7042],{"id":457,"depth":650,"text":143},{"id":613,"depth":650,"text":614,"children":6977},[6978,6979,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,6998,6999,7000,7001],{"id":618,"depth":661,"text":621},{"id":690,"depth":661,"text":676},{"id":831,"depth":661,"text":743},{"id":1178,"depth":661,"text":550},{"id":1317,"depth":661,"text":555},{"id":1384,"depth":661,"text":1387},{"id":1478,"depth":661,"text":1481},{"id":1566,"depth":661,"text":1569},{"id":1634,"depth":661,"text":1637},{"id":1712,"depth":661,"text":1110},{"id":1767,"depth":661,"text":802},{"id":1821,"depth":661,"text":1364},{"id":1936,"depth":661,"text":1939},{"id":2609,"depth":661,"text":1963},{"id":2647,"depth":661,"text":2650},{"id":2684,"depth":661,"text":2687},{"id":2719,"depth":661,"text":2722},{"id":2874,"depth":661,"text":2092},{"id":2925,"depth":661,"text":2928},{"id":2989,"depth":661,"text":2992},{"id":3035,"depth":661,"text":2045},{"id":3123,"depth":661,"text":560},{"id":3487,"depth":661,"text":3225},{"id":3517,"depth":661,"text":3243},{"id":3551,"depth":650,"text":3552,"children":7003},[7004,7005,7006,7007,7008,7009,7010,7011],{"id":3555,"depth":661,"text":545},{"id":3672,"depth":661,"text":1921},{"id":3778,"depth":661,"text":3781},{"id":3888,"depth":661,"text":540},{"id":4037,"depth":661,"text":534},{"id":2375,"depth":661,"text":565},{"id":4323,"depth":661,"text":4326},{"id":4349,"depth":661,"text":1888},{"id":4383,"depth":650,"text":4384,"children":7013},[7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026],{"id":4387,"depth":661,"text":4390},{"id":4533,"depth":661,"text":4536},{"id":4579,"depth":661,"text":4582},{"id":4876,"depth":661,"text":4879},{"id":4979,"depth":661,"text":4982},{"id":5146,"depth":661,"text":5149},{"id":5270,"depth":661,"text":5273},{"id":5366,"depth":661,"text":5369},{"id":5463,"depth":661,"text":5466},{"id":5599,"depth":661,"text":5602},{"id":5660,"depth":661,"text":5663},{"id":5697,"depth":661,"text":5700},{"id":5841,"depth":661,"text":5844},{"id":5894,"depth":650,"text":5895,"children":7028},[7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041],{"id":5906,"depth":661,"text":5909},{"id":6065,"depth":661,"text":6068},{"id":6209,"depth":661,"text":6212},{"id":6253,"depth":661,"text":6256},{"id":6309,"depth":661,"text":6312},{"id":6370,"depth":661,"text":6373},{"id":6415,"depth":661,"text":6418},{"id":6692,"depth":661,"text":6449},{"id":6741,"depth":661,"text":6727},{"id":6785,"depth":661,"text":6732},{"id":6821,"depth":661,"text":6469},{"id":6858,"depth":661,"text":6474},{"id":6894,"depth":661,"text":6111},{"id":6938,"depth":650,"text":6939},"Reference for every type in @monospace\u002Fextension-kit\u002Fdata-connector\u002Fprotocol, the schema document and query wire format a data connector extension answers with and receives.","md",null,{},{"title":396,"icon":399},{"title":447,"description":7043},"jlzdWyY1NtMeKsrSykS9Do15hSZxp3ww3YvSMxZc3JU",[7051,7053],{"title":392,"path":393,"stem":394,"description":7052,"icon":81,"children":-1},"Reference for every export of @monospace\u002Fextension-kit\u002Fdata-connector, the module a data connector extension's entrypoint imports.",{"title":401,"path":402,"stem":403,"description":7054,"icon":404,"children":-1},"Reference for every export of @monospace\u002Fextension-kit\u002Fdata-connector\u002Fexperimental, the helpers that build a data connector's schema document from typed definitions.",1790840137777]