[{"data":1,"prerenderedAt":1556},["ShallowReactive",2],{"navigation":3,"\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started\u002Fintroduction":273,"\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started\u002Fintroduction-surround":1502,"packages-data":1507},[4,23],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-tabler-home",{"title":13,"path":14,"stem":15,"icon":16},"Manifest","\u002Fgetting-started\u002Fmanifest","1.getting-started\u002F2.manifest","i-tabler-file-diff",{"title":18,"path":19,"stem":20,"icon":21},"Contributing","\u002Fgetting-started\u002Fcontributing","1.getting-started\u002F3.contributing","i-tabler-git-fork",false,{"title":24,"path":25,"stem":26,"children":27,"icon":30},"Packages","\u002Fpackages","2.packages\u002F1.index",[28,31,108,194,247],{"title":29,"path":25,"stem":26,"icon":30},"Overview","i-tabler-packages",{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":22},"AdonisJS API Query","i-tabler-filter-search","\u002Fpackages\u002Fadonisjs-api-query","2.packages\u002Fadonisjs-api-query",[37,56,87],{"title":5,"icon":38,"path":39,"stem":40,"children":41,"page":22},"i-tabler-rocket","\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started","2.packages\u002Fadonisjs-api-query\u002F1.getting-started",[42,46,51],{"title":10,"path":43,"stem":44,"icon":45},"\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-api-query\u002F1.getting-started\u002F1.introduction","i-tabler-book",{"title":47,"path":48,"stem":49,"icon":50},"Installation","\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-api-query\u002F1.getting-started\u002F2.installation","i-tabler-download",{"title":52,"path":53,"stem":54,"icon":55},"Configuration","\u002Fpackages\u002Fadonisjs-api-query\u002Fgetting-started\u002Fconfiguration","2.packages\u002Fadonisjs-api-query\u002F1.getting-started\u002F3.configuration","i-tabler-settings",{"title":57,"icon":58,"path":59,"stem":60,"children":61,"page":22},"Features","i-tabler-sparkles","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures","2.packages\u002Fadonisjs-api-query\u002F2.features",[62,67,72,77,82],{"title":63,"path":64,"stem":65,"icon":66},"Filtering","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Ffiltering","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F1.filtering","i-tabler-filter",{"title":68,"path":69,"stem":70,"icon":71},"Sorting","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Fsorting","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F2.sorting","i-tabler-arrows-sort",{"title":73,"path":74,"stem":75,"icon":76},"Including Relationships","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Fincluding-relationships","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F3.including-relationships","i-tabler-hierarchy-2",{"title":78,"path":79,"stem":80,"icon":81},"Filterable Classes","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Ffilterable-classes","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F4.filterable-classes","i-tabler-box-model",{"title":83,"path":84,"stem":85,"icon":86},"Validation","\u002Fpackages\u002Fadonisjs-api-query\u002Ffeatures\u002Fvalidation","2.packages\u002Fadonisjs-api-query\u002F2.features\u002F5.validation","i-tabler-shield-check",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":22},"Advanced Usage","i-tabler-adjustments","\u002Fpackages\u002Fadonisjs-api-query\u002Fadvanced","2.packages\u002Fadonisjs-api-query\u002F3.advanced",[93,98,103],{"title":94,"path":95,"stem":96,"icon":97},"Custom Filters, Sorts & Includes","\u002Fpackages\u002Fadonisjs-api-query\u002Fadvanced\u002Fcustom-clauses","2.packages\u002Fadonisjs-api-query\u002F3.advanced\u002F1.custom-clauses","i-tabler-puzzle",{"title":99,"path":100,"stem":101,"icon":102},"Request & Delimiters","\u002Fpackages\u002Fadonisjs-api-query\u002Fadvanced\u002Frequest-and-delimiters","2.packages\u002Fadonisjs-api-query\u002F3.advanced\u002F2.request-and-delimiters","i-tabler-brackets-contain",{"title":104,"path":105,"stem":106,"icon":107},"Exceptions","\u002Fpackages\u002Fadonisjs-api-query\u002Fadvanced\u002Fexceptions","2.packages\u002Fadonisjs-api-query\u002F3.advanced\u002F3.exceptions","i-tabler-alert-triangle",{"title":109,"icon":110,"path":111,"stem":112,"children":113,"page":22},"AdonisJS Permission","i-tabler-shield-lock","\u002Fpackages\u002Fadonisjs-permission","2.packages\u002Fadonisjs-permission",[114,127,157,183],{"title":5,"icon":38,"path":115,"stem":116,"children":117,"page":22},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started","2.packages\u002Fadonisjs-permission\u002F1.getting-started",[118,121,124],{"title":10,"path":119,"stem":120,"icon":45},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F1.introduction",{"title":47,"path":122,"stem":123,"icon":50},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F2.installation",{"title":52,"path":125,"stem":126,"icon":55},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Fconfiguration","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F3.configuration",{"title":128,"icon":86,"path":129,"stem":130,"children":131,"page":22},"Basic Usage","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage","2.packages\u002Fadonisjs-permission\u002F2.basic-usage",[132,137,142,147,152],{"title":133,"path":134,"stem":135,"icon":136},"Roles & Permissions","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Froles-and-permissions","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F1.roles-and-permissions","i-tabler-users",{"title":138,"path":139,"stem":140,"icon":141},"Checking Access","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fchecking","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F2.checking","i-tabler-checks",{"title":143,"path":144,"stem":145,"icon":146},"Middleware","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fmiddleware","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F3.middleware","i-tabler-route",{"title":148,"path":149,"stem":150,"icon":151},"Wildcard Permissions","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fwildcard-permissions","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F4.wildcard-permissions","i-tabler-asterisk",{"title":153,"path":154,"stem":155,"icon":156},"Catalog & Sync","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fcatalog","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F5.catalog","i-tabler-refresh",{"title":158,"icon":159,"path":160,"stem":161,"children":162,"page":22},"Advanced","i-tabler-tool","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced","2.packages\u002Fadonisjs-permission\u002F3.advanced",[163,168,173,178],{"title":164,"path":165,"stem":166,"icon":167},"Teams","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fteams","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F1.teams","i-tabler-building",{"title":169,"path":170,"stem":171,"icon":172},"Super-Admin","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fsuper-admin","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F2.super-admin","i-tabler-crown",{"title":174,"path":175,"stem":176,"icon":177},"Events","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fevents","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F3.events","i-tabler-radio",{"title":179,"path":180,"stem":181,"icon":182},"Cache","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fcache","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F4.cache","i-tabler-database",{"title":184,"icon":185,"path":186,"stem":187,"children":188,"page":22},"Upgrading","i-tabler-circle-arrow-up","\u002Fpackages\u002Fadonisjs-permission\u002Fupgrading","2.packages\u002Fadonisjs-permission\u002F4.upgrading",[189],{"title":190,"path":191,"stem":192,"icon":193},"From adonis-lucid-permission","\u002Fpackages\u002Fadonisjs-permission\u002Fupgrading\u002Ffrom-adonis-lucid-permission","2.packages\u002Fadonisjs-permission\u002F4.upgrading\u002F1.from-adonis-lucid-permission","i-tabler-git-compare",{"title":195,"icon":196,"path":197,"stem":198,"children":199,"page":22},"Simple Auth","i-tabler-key","\u002Fpackages\u002Fadonisjs-simple-auth","2.packages\u002Fadonisjs-simple-auth",[200,214,233],{"title":5,"icon":38,"path":201,"stem":202,"children":203,"page":22},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fgetting-started","2.packages\u002Fadonisjs-simple-auth\u002F1.getting-started",[204,208,211],{"title":10,"path":205,"stem":206,"icon":207},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-simple-auth\u002F1.getting-started\u002F1.introduction","i-tabler-info-circle",{"title":47,"path":209,"stem":210,"icon":50},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-simple-auth\u002F1.getting-started\u002F2.installation",{"title":52,"path":212,"stem":213,"icon":55},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fgetting-started\u002Fconfiguration","2.packages\u002Fadonisjs-simple-auth\u002F1.getting-started\u002F3.configuration",{"title":215,"icon":110,"path":216,"stem":217,"children":218,"page":22},"Usage","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage","2.packages\u002Fadonisjs-simple-auth\u002F2.usage",[219,224,229],{"title":220,"path":221,"stem":222,"icon":223},"Generating API Keys","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage\u002Fgenerating-api-keys","2.packages\u002Fadonisjs-simple-auth\u002F2.usage\u002F1.generating-api-keys","i-tabler-terminal-2",{"title":225,"path":226,"stem":227,"icon":228},"Protecting Routes","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage\u002Fprotecting-routes","2.packages\u002Fadonisjs-simple-auth\u002F2.usage\u002F2.protecting-routes","i-tabler-lock",{"title":230,"path":231,"stem":232,"icon":107},"Error Handling & i18n","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fusage\u002Ferror-handling","2.packages\u002Fadonisjs-simple-auth\u002F2.usage\u002F3.error-handling",{"title":158,"icon":89,"path":234,"stem":235,"children":236,"page":22},"\u002Fpackages\u002Fadonisjs-simple-auth\u002Fadvanced","2.packages\u002Fadonisjs-simple-auth\u002F3.advanced",[237,242],{"title":238,"path":239,"stem":240,"icon":241},"Testing with Japa","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fadvanced\u002Ftesting-with-japa","2.packages\u002Fadonisjs-simple-auth\u002F3.advanced\u002F1.testing-with-japa","i-tabler-flask",{"title":243,"path":244,"stem":245,"icon":246},"API Reference","\u002Fpackages\u002Fadonisjs-simple-auth\u002Fadvanced\u002Fapi-reference","2.packages\u002Fadonisjs-simple-auth\u002F3.advanced\u002F2.api-reference","i-tabler-code",{"title":248,"icon":249,"path":250,"stem":251,"children":252,"page":22},"AdonisJS Soft Deletes","i-tabler-trash-off","\u002Fpackages\u002Fadonisjs-soft-deletes","2.packages\u002Fadonisjs-soft-deletes",[253,263],{"title":5,"icon":38,"path":254,"stem":255,"children":256,"page":22},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fgetting-started","2.packages\u002Fadonisjs-soft-deletes\u002F1.getting-started",[257,260],{"title":10,"path":258,"stem":259,"icon":207},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-soft-deletes\u002F1.getting-started\u002F1.introduction",{"title":47,"path":261,"stem":262,"icon":50},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-soft-deletes\u002F1.getting-started\u002F2.installation",{"title":215,"icon":45,"path":264,"stem":265,"children":266,"page":22},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fusage","2.packages\u002Fadonisjs-soft-deletes\u002F2.usage",[267,270],{"title":215,"path":268,"stem":269,"icon":246},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fusage\u002Fusage","2.packages\u002Fadonisjs-soft-deletes\u002F2.usage\u002F1.usage",{"title":243,"path":271,"stem":272,"icon":45},"\u002Fpackages\u002Fadonisjs-soft-deletes\u002Fusage\u002Fapi-reference","2.packages\u002Fadonisjs-soft-deletes\u002F2.usage\u002F2.api-reference",{"id":274,"title":10,"body":275,"description":1496,"extension":1497,"meta":1498,"navigation":1499,"path":43,"seo":1500,"stem":44,"__hash__":1501},"docs\u002F2.packages\u002Fadonisjs-api-query\u002F1.getting-started\u002F1.introduction.md",{"type":276,"value":277,"toc":1488},"minimark",[278,306,324,329,419,423,428,445,780,784,791,1459,1463,1484],[279,280,281,285,286,293,294,299,300,305],"p",{},[282,283,284],"code",{},"@eienjs\u002Fadonisjs-api-query"," allows you to easily build ",[287,288,292],"a",{"href":289,"rel":290},"https:\u002F\u002Flucid.adonisjs.com",[291],"nofollow","Lucid ORM"," queries from incoming API requests in your AdonisJS v7 application. Inspired by ",[287,295,298],{"href":296,"rel":297},"https:\u002F\u002Fgithub.com\u002Fspatie\u002Flaravel-query-builder",[291],"Spatie's Laravel Query Builder"," and follows the ",[287,301,304],{"href":302,"rel":303},"https:\u002F\u002Fjsonapi.org",[291],"JSON:API specification"," conventions for filtering, sorting, and including relationships.",[279,307,308,309,312,313,316,317,320,321,323],{},"Instead of manually inspecting request query parameters and conditionally chaining ",[282,310,311],{},".where()",", ",[282,314,315],{},".orderBy()",", and ",[282,318,319],{},".preload()"," calls inside your controllers, you declare which filters, sorts, and includes are allowed—either inline on the query builder or inside dedicated ",[287,322,78],{"href":79},".",[325,326,328],"h2",{"id":327},"key-features","Key Features",[330,331,332,359,364,377,393,413],"ul",{},[333,334,335,338,339,312,342,312,345,312,348,312,351,354,355,358],"li",{},[336,337,63],"strong",{},": Partial, exact, prefix\u002Fsuffix, comparison operators (",[282,340,341],{},">",[282,343,344],{},"\u003C",[282,346,347],{},">=",[282,349,350],{},"\u003C=",[282,352,353],{},"\u003C>","), Lucid query scopes, soft-deletes (",[282,356,357],{},"trashed","), callbacks, custom filter classes, nested relationship constraints, ignored values, and default values.",[333,360,361,363],{},[336,362,68],{},": Ascending and descending multi-column sorting, default sorts, aliased fields, callbacks, and custom sort classes.",[333,365,366,368,369,372,373,376],{},[336,367,73],{},": Preload top-level and nested relationships (",[282,370,371],{},"posts.comments","), relationship counts (",[282,374,375],{},"postsCount","), custom callbacks, and custom include classes.",[333,378,379,381,382,385,386,385,389,392],{},[336,380,78],{},": Encapsulate your query rules, default sorts, setup hooks, and custom ",[282,383,384],{},"filter\u003CName>"," \u002F ",[282,387,388],{},"sort\u003CName>",[282,390,391],{},"include\u003CName>"," methods in dedicated classes attached to your Lucid models.",[333,394,395,398,399,312,402,312,405,408,409,412],{},[336,396,397],{},"Optional VineJS Validation",": Automatically or explicitly validate incoming query parameters (",[282,400,401],{},"filter",[282,403,404],{},"sort",[282,406,407],{},"include",") using ",[282,410,411],{},"@vinejs\u002Fvine"," before hitting the database.",[333,414,415,418],{},[336,416,417],{},"Type-Safe",": Built from the ground up with TypeScript, providing autocomplete for model attributes, scopes, and relationships.",[325,420,422],{"id":421},"quick-example","Quick Example",[424,425,427],"h3",{"id":426},"inline-query-builder-usage","Inline Query Builder Usage",[279,429,430,431,312,434,316,437,440,441,444],{},"Chain ",[282,432,433],{},".allowedFilters()",[282,435,436],{},".allowedSorts()",[282,438,439],{},".allowedIncludes()"," directly on any Lucid ",[282,442,443],{},"ModelQueryBuilder",":",[446,447,453],"pre",{"className":448,"code":449,"filename":450,"language":451,"meta":452,"style":452},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { HttpContext } from '@adonisjs\u002Fcore\u002Fhttp';\nimport { AllowedFilter } from '@eienjs\u002Fadonisjs-api-query';\nimport User from '#models\u002Fuser';\n\nexport default class UsersController {\n  public async index({ request }: HttpContext) {\n    \u002F\u002F GET \u002Fusers?filter[name]=john&filter[status]=active&include=posts&sort=-createdAt\n    return await User.query()\n      .withRequest(request)\n      .allowedFilters(['name', AllowedFilter.exact('status')])\n      .allowedIncludes(['posts'])\n      .allowedSorts(['name', 'createdAt'])\n      .defaultSort('-createdAt')\n      .paginate(1, 15);\n  }\n}\n","app\u002Fcontrollers\u002Fusers_controller.ts","ts","",[282,454,455,494,516,536,543,563,593,600,621,639,679,699,726,745,768,774],{"__ignoreMap":452},[456,457,460,464,467,471,475,478,481,484,488,491],"span",{"class":458,"line":459},"line",1,[456,461,463],{"class":462},"s7zQu","import",[456,465,466],{"class":462}," type",[456,468,470],{"class":469},"sMK4o"," {",[456,472,474],{"class":473},"sTEyZ"," HttpContext",[456,476,477],{"class":469}," }",[456,479,480],{"class":462}," from",[456,482,483],{"class":469}," '",[456,485,487],{"class":486},"sfazB","@adonisjs\u002Fcore\u002Fhttp",[456,489,490],{"class":469},"'",[456,492,493],{"class":469},";\n",[456,495,497,499,501,504,506,508,510,512,514],{"class":458,"line":496},2,[456,498,463],{"class":462},[456,500,470],{"class":469},[456,502,503],{"class":473}," AllowedFilter",[456,505,477],{"class":469},[456,507,480],{"class":462},[456,509,483],{"class":469},[456,511,284],{"class":486},[456,513,490],{"class":469},[456,515,493],{"class":469},[456,517,519,521,524,527,529,532,534],{"class":458,"line":518},3,[456,520,463],{"class":462},[456,522,523],{"class":473}," User ",[456,525,526],{"class":462},"from",[456,528,483],{"class":469},[456,530,531],{"class":486},"#models\u002Fuser",[456,533,490],{"class":469},[456,535,493],{"class":469},[456,537,539],{"class":458,"line":538},4,[456,540,542],{"emptyLinePlaceholder":541},true,"\n",[456,544,546,549,552,556,560],{"class":458,"line":545},5,[456,547,548],{"class":462},"export",[456,550,551],{"class":462}," default",[456,553,555],{"class":554},"spNyl"," class",[456,557,559],{"class":558},"sBMFI"," UsersController",[456,561,562],{"class":469}," {\n",[456,564,566,569,572,576,579,583,586,588,591],{"class":458,"line":565},6,[456,567,568],{"class":554},"  public",[456,570,571],{"class":554}," async",[456,573,575],{"class":574},"swJcz"," index",[456,577,578],{"class":469},"({",[456,580,582],{"class":581},"sHdIc"," request",[456,584,585],{"class":469}," }:",[456,587,474],{"class":558},[456,589,590],{"class":469},")",[456,592,562],{"class":469},[456,594,596],{"class":458,"line":595},7,[456,597,599],{"class":598},"sHwdD","    \u002F\u002F GET \u002Fusers?filter[name]=john&filter[status]=active&include=posts&sort=-createdAt\n",[456,601,603,606,609,612,614,618],{"class":458,"line":602},8,[456,604,605],{"class":462},"    return",[456,607,608],{"class":462}," await",[456,610,611],{"class":473}," User",[456,613,323],{"class":469},[456,615,617],{"class":616},"s2Zo4","query",[456,619,620],{"class":574},"()\n",[456,622,624,627,630,633,636],{"class":458,"line":623},9,[456,625,626],{"class":469},"      .",[456,628,629],{"class":616},"withRequest",[456,631,632],{"class":574},"(",[456,634,635],{"class":473},"request",[456,637,638],{"class":574},")\n",[456,640,642,644,647,650,652,655,657,660,662,664,667,669,671,674,676],{"class":458,"line":641},10,[456,643,626],{"class":469},[456,645,646],{"class":616},"allowedFilters",[456,648,649],{"class":574},"([",[456,651,490],{"class":469},[456,653,654],{"class":486},"name",[456,656,490],{"class":469},[456,658,659],{"class":469},",",[456,661,503],{"class":473},[456,663,323],{"class":469},[456,665,666],{"class":616},"exact",[456,668,632],{"class":574},[456,670,490],{"class":469},[456,672,673],{"class":486},"status",[456,675,490],{"class":469},[456,677,678],{"class":574},")])\n",[456,680,682,684,687,689,691,694,696],{"class":458,"line":681},11,[456,683,626],{"class":469},[456,685,686],{"class":616},"allowedIncludes",[456,688,649],{"class":574},[456,690,490],{"class":469},[456,692,693],{"class":486},"posts",[456,695,490],{"class":469},[456,697,698],{"class":574},"])\n",[456,700,702,704,707,709,711,713,715,717,719,722,724],{"class":458,"line":701},12,[456,703,626],{"class":469},[456,705,706],{"class":616},"allowedSorts",[456,708,649],{"class":574},[456,710,490],{"class":469},[456,712,654],{"class":486},[456,714,490],{"class":469},[456,716,659],{"class":469},[456,718,483],{"class":469},[456,720,721],{"class":486},"createdAt",[456,723,490],{"class":469},[456,725,698],{"class":574},[456,727,729,731,734,736,738,741,743],{"class":458,"line":728},13,[456,730,626],{"class":469},[456,732,733],{"class":616},"defaultSort",[456,735,632],{"class":574},[456,737,490],{"class":469},[456,739,740],{"class":486},"-createdAt",[456,742,490],{"class":469},[456,744,638],{"class":574},[456,746,748,750,753,755,759,761,764,766],{"class":458,"line":747},14,[456,749,626],{"class":469},[456,751,752],{"class":616},"paginate",[456,754,632],{"class":574},[456,756,758],{"class":757},"sbssI","1",[456,760,659],{"class":469},[456,762,763],{"class":757}," 15",[456,765,590],{"class":574},[456,767,493],{"class":469},[456,769,771],{"class":458,"line":770},15,[456,772,773],{"class":469},"  }\n",[456,775,777],{"class":458,"line":776},16,[456,778,779],{"class":469},"}\n",[424,781,783],{"id":782},"filterable-class-usage","Filterable Class Usage",[279,785,786,787,790],{},"For cleaner controllers and reusable query logic, encapsulate your configuration in a ",[282,788,789],{},"BaseFilterable"," class:",[792,793,794,1111,1337],"code-group",{},[446,795,798],{"className":448,"code":796,"filename":797,"language":451,"meta":452,"style":452},"import { AllowedFilter, BaseFilterable } from '@eienjs\u002Fadonisjs-api-query';\nimport User from '#models\u002Fuser';\n\nexport default class UserFilterable extends BaseFilterable.for(() => User) {\n  public filters = [\n    'name',\n    AllowedFilter.exact('email'),\n    'status',\n  ];\n\n  public sorts = ['name', 'createdAt'];\n\n  public defaultSorts = '-createdAt';\n\n  public includes = ['posts', 'profile'];\n\n  public filterStatus(query, value: unknown) {\n    void query.where('status', String(value));\n  }\n}\n","app\u002Ffilters\u002Fuser_filterable.ts",[282,799,800,825,841,845,880,893,905,927,937,944,948,979,983,1000,1004,1034,1038,1064,1101,1106],{"__ignoreMap":452},[456,801,802,804,806,808,810,813,815,817,819,821,823],{"class":458,"line":459},[456,803,463],{"class":462},[456,805,470],{"class":469},[456,807,503],{"class":473},[456,809,659],{"class":469},[456,811,812],{"class":473}," BaseFilterable",[456,814,477],{"class":469},[456,816,480],{"class":462},[456,818,483],{"class":469},[456,820,284],{"class":486},[456,822,490],{"class":469},[456,824,493],{"class":469},[456,826,827,829,831,833,835,837,839],{"class":458,"line":496},[456,828,463],{"class":462},[456,830,523],{"class":473},[456,832,526],{"class":462},[456,834,483],{"class":469},[456,836,531],{"class":486},[456,838,490],{"class":469},[456,840,493],{"class":469},[456,842,843],{"class":458,"line":518},[456,844,542],{"emptyLinePlaceholder":541},[456,846,847,849,851,853,856,859,861,863,866,868,871,874,877],{"class":458,"line":538},[456,848,548],{"class":462},[456,850,551],{"class":462},[456,852,555],{"class":554},[456,854,855],{"class":558}," UserFilterable",[456,857,858],{"class":554}," extends",[456,860,812],{"class":473},[456,862,323],{"class":469},[456,864,865],{"class":616},"for",[456,867,632],{"class":473},[456,869,870],{"class":469},"()",[456,872,873],{"class":554}," =>",[456,875,876],{"class":473}," User) ",[456,878,879],{"class":469},"{\n",[456,881,882,884,887,890],{"class":458,"line":545},[456,883,568],{"class":554},[456,885,886],{"class":574}," filters",[456,888,889],{"class":469}," =",[456,891,892],{"class":473}," [\n",[456,894,895,898,900,902],{"class":458,"line":565},[456,896,897],{"class":469},"    '",[456,899,654],{"class":486},[456,901,490],{"class":469},[456,903,904],{"class":469},",\n",[456,906,907,910,912,914,916,918,921,923,925],{"class":458,"line":595},[456,908,909],{"class":473},"    AllowedFilter",[456,911,323],{"class":469},[456,913,666],{"class":574},[456,915,632],{"class":473},[456,917,490],{"class":469},[456,919,920],{"class":486},"email",[456,922,490],{"class":469},[456,924,590],{"class":473},[456,926,904],{"class":469},[456,928,929,931,933,935],{"class":458,"line":602},[456,930,897],{"class":469},[456,932,673],{"class":486},[456,934,490],{"class":469},[456,936,904],{"class":469},[456,938,939,942],{"class":458,"line":623},[456,940,941],{"class":473},"  ]",[456,943,493],{"class":469},[456,945,946],{"class":458,"line":641},[456,947,542],{"emptyLinePlaceholder":541},[456,949,950,952,955,957,960,962,964,966,968,970,972,974,977],{"class":458,"line":681},[456,951,568],{"class":554},[456,953,954],{"class":574}," sorts",[456,956,889],{"class":469},[456,958,959],{"class":473}," [",[456,961,490],{"class":469},[456,963,654],{"class":486},[456,965,490],{"class":469},[456,967,659],{"class":469},[456,969,483],{"class":469},[456,971,721],{"class":486},[456,973,490],{"class":469},[456,975,976],{"class":473},"]",[456,978,493],{"class":469},[456,980,981],{"class":458,"line":701},[456,982,542],{"emptyLinePlaceholder":541},[456,984,985,987,990,992,994,996,998],{"class":458,"line":728},[456,986,568],{"class":554},[456,988,989],{"class":574}," defaultSorts",[456,991,889],{"class":469},[456,993,483],{"class":469},[456,995,740],{"class":486},[456,997,490],{"class":469},[456,999,493],{"class":469},[456,1001,1002],{"class":458,"line":747},[456,1003,542],{"emptyLinePlaceholder":541},[456,1005,1006,1008,1011,1013,1015,1017,1019,1021,1023,1025,1028,1030,1032],{"class":458,"line":770},[456,1007,568],{"class":554},[456,1009,1010],{"class":574}," includes",[456,1012,889],{"class":469},[456,1014,959],{"class":473},[456,1016,490],{"class":469},[456,1018,693],{"class":486},[456,1020,490],{"class":469},[456,1022,659],{"class":469},[456,1024,483],{"class":469},[456,1026,1027],{"class":486},"profile",[456,1029,490],{"class":469},[456,1031,976],{"class":473},[456,1033,493],{"class":469},[456,1035,1036],{"class":458,"line":776},[456,1037,542],{"emptyLinePlaceholder":541},[456,1039,1041,1043,1046,1048,1050,1052,1055,1057,1060,1062],{"class":458,"line":1040},17,[456,1042,568],{"class":554},[456,1044,1045],{"class":574}," filterStatus",[456,1047,632],{"class":469},[456,1049,617],{"class":581},[456,1051,659],{"class":469},[456,1053,1054],{"class":581}," value",[456,1056,444],{"class":469},[456,1058,1059],{"class":558}," unknown",[456,1061,590],{"class":469},[456,1063,562],{"class":469},[456,1065,1067,1070,1073,1075,1078,1080,1082,1084,1086,1088,1091,1093,1096,1099],{"class":458,"line":1066},18,[456,1068,1069],{"class":469},"    void",[456,1071,1072],{"class":473}," query",[456,1074,323],{"class":469},[456,1076,1077],{"class":616},"where",[456,1079,632],{"class":574},[456,1081,490],{"class":469},[456,1083,673],{"class":486},[456,1085,490],{"class":469},[456,1087,659],{"class":469},[456,1089,1090],{"class":616}," String",[456,1092,632],{"class":574},[456,1094,1095],{"class":473},"value",[456,1097,1098],{"class":574},"))",[456,1100,493],{"class":469},[456,1102,1104],{"class":458,"line":1103},19,[456,1105,773],{"class":469},[456,1107,1109],{"class":458,"line":1108},20,[456,1110,779],{"class":469},[446,1112,1115],{"className":448,"code":1113,"filename":1114,"language":451,"meta":452,"style":452},"import { BaseModel, column } from '@adonisjs\u002Flucid\u002Form';\nimport UserFilterable from '#filters\u002Fuser_filterable';\n\nexport default class User extends BaseModel {\n  public static $filterable = () => UserFilterable;\n\n  @column({ isPrimary: true })\n  declare public id: number;\n\n  @column()\n  declare public name: string;\n\n  @column()\n  declare public email: string;\n\n  @column()\n  declare public status: string;\n}\n","app\u002Fmodels\u002Fuser.ts",[282,1116,1117,1144,1162,1166,1182,1203,1207,1233,1251,1255,1263,1279,1283,1291,1306,1310,1318,1333],{"__ignoreMap":452},[456,1118,1119,1121,1123,1126,1128,1131,1133,1135,1137,1140,1142],{"class":458,"line":459},[456,1120,463],{"class":462},[456,1122,470],{"class":469},[456,1124,1125],{"class":473}," BaseModel",[456,1127,659],{"class":469},[456,1129,1130],{"class":473}," column",[456,1132,477],{"class":469},[456,1134,480],{"class":462},[456,1136,483],{"class":469},[456,1138,1139],{"class":486},"@adonisjs\u002Flucid\u002Form",[456,1141,490],{"class":469},[456,1143,493],{"class":469},[456,1145,1146,1148,1151,1153,1155,1158,1160],{"class":458,"line":496},[456,1147,463],{"class":462},[456,1149,1150],{"class":473}," UserFilterable ",[456,1152,526],{"class":462},[456,1154,483],{"class":469},[456,1156,1157],{"class":486},"#filters\u002Fuser_filterable",[456,1159,490],{"class":469},[456,1161,493],{"class":469},[456,1163,1164],{"class":458,"line":518},[456,1165,542],{"emptyLinePlaceholder":541},[456,1167,1168,1170,1172,1174,1176,1178,1180],{"class":458,"line":538},[456,1169,548],{"class":462},[456,1171,551],{"class":462},[456,1173,555],{"class":554},[456,1175,611],{"class":558},[456,1177,858],{"class":554},[456,1179,1125],{"class":558},[456,1181,562],{"class":469},[456,1183,1184,1186,1189,1192,1194,1197,1199,1201],{"class":458,"line":545},[456,1185,568],{"class":554},[456,1187,1188],{"class":554}," static",[456,1190,1191],{"class":574}," $filterable",[456,1193,889],{"class":469},[456,1195,1196],{"class":469}," ()",[456,1198,873],{"class":554},[456,1200,855],{"class":473},[456,1202,493],{"class":469},[456,1204,1205],{"class":458,"line":565},[456,1206,542],{"emptyLinePlaceholder":541},[456,1208,1209,1212,1215,1217,1220,1223,1225,1229,1231],{"class":458,"line":595},[456,1210,1211],{"class":469},"  @",[456,1213,1214],{"class":616},"column",[456,1216,632],{"class":473},[456,1218,1219],{"class":469},"{",[456,1221,1222],{"class":574}," isPrimary",[456,1224,444],{"class":469},[456,1226,1228],{"class":1227},"sfNiH"," true",[456,1230,477],{"class":469},[456,1232,638],{"class":473},[456,1234,1235,1238,1241,1244,1246,1249],{"class":458,"line":602},[456,1236,1237],{"class":554},"  declare",[456,1239,1240],{"class":554}," public",[456,1242,1243],{"class":574}," id",[456,1245,444],{"class":469},[456,1247,1248],{"class":558}," number",[456,1250,493],{"class":469},[456,1252,1253],{"class":458,"line":623},[456,1254,542],{"emptyLinePlaceholder":541},[456,1256,1257,1259,1261],{"class":458,"line":641},[456,1258,1211],{"class":469},[456,1260,1214],{"class":616},[456,1262,620],{"class":473},[456,1264,1265,1267,1269,1272,1274,1277],{"class":458,"line":681},[456,1266,1237],{"class":554},[456,1268,1240],{"class":554},[456,1270,1271],{"class":574}," name",[456,1273,444],{"class":469},[456,1275,1276],{"class":558}," string",[456,1278,493],{"class":469},[456,1280,1281],{"class":458,"line":701},[456,1282,542],{"emptyLinePlaceholder":541},[456,1284,1285,1287,1289],{"class":458,"line":728},[456,1286,1211],{"class":469},[456,1288,1214],{"class":616},[456,1290,620],{"class":473},[456,1292,1293,1295,1297,1300,1302,1304],{"class":458,"line":747},[456,1294,1237],{"class":554},[456,1296,1240],{"class":554},[456,1298,1299],{"class":574}," email",[456,1301,444],{"class":469},[456,1303,1276],{"class":558},[456,1305,493],{"class":469},[456,1307,1308],{"class":458,"line":770},[456,1309,542],{"emptyLinePlaceholder":541},[456,1311,1312,1314,1316],{"class":458,"line":776},[456,1313,1211],{"class":469},[456,1315,1214],{"class":616},[456,1317,620],{"class":473},[456,1319,1320,1322,1324,1327,1329,1331],{"class":458,"line":1040},[456,1321,1237],{"class":554},[456,1323,1240],{"class":554},[456,1325,1326],{"class":574}," status",[456,1328,444],{"class":469},[456,1330,1276],{"class":558},[456,1332,493],{"class":469},[456,1334,1335],{"class":458,"line":1066},[456,1336,779],{"class":469},[446,1338,1340],{"className":448,"code":1339,"filename":450,"language":451,"meta":452,"style":452},"import type { HttpContext } from '@adonisjs\u002Fcore\u002Fhttp';\nimport User from '#models\u002Fuser';\n\nexport default class UsersController {\n  public async index({ request }: HttpContext) {\n    return await User.$filter(request).paginate(1, 15);\n  }\n}\n",[282,1341,1342,1364,1380,1384,1396,1416,1451,1455],{"__ignoreMap":452},[456,1343,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362],{"class":458,"line":459},[456,1345,463],{"class":462},[456,1347,466],{"class":462},[456,1349,470],{"class":469},[456,1351,474],{"class":473},[456,1353,477],{"class":469},[456,1355,480],{"class":462},[456,1357,483],{"class":469},[456,1359,487],{"class":486},[456,1361,490],{"class":469},[456,1363,493],{"class":469},[456,1365,1366,1368,1370,1372,1374,1376,1378],{"class":458,"line":496},[456,1367,463],{"class":462},[456,1369,523],{"class":473},[456,1371,526],{"class":462},[456,1373,483],{"class":469},[456,1375,531],{"class":486},[456,1377,490],{"class":469},[456,1379,493],{"class":469},[456,1381,1382],{"class":458,"line":518},[456,1383,542],{"emptyLinePlaceholder":541},[456,1385,1386,1388,1390,1392,1394],{"class":458,"line":538},[456,1387,548],{"class":462},[456,1389,551],{"class":462},[456,1391,555],{"class":554},[456,1393,559],{"class":558},[456,1395,562],{"class":469},[456,1397,1398,1400,1402,1404,1406,1408,1410,1412,1414],{"class":458,"line":545},[456,1399,568],{"class":554},[456,1401,571],{"class":554},[456,1403,575],{"class":574},[456,1405,578],{"class":469},[456,1407,582],{"class":581},[456,1409,585],{"class":469},[456,1411,474],{"class":558},[456,1413,590],{"class":469},[456,1415,562],{"class":469},[456,1417,1418,1420,1422,1424,1426,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449],{"class":458,"line":565},[456,1419,605],{"class":462},[456,1421,608],{"class":462},[456,1423,611],{"class":473},[456,1425,323],{"class":469},[456,1427,1428],{"class":616},"$filter",[456,1430,632],{"class":574},[456,1432,635],{"class":473},[456,1434,590],{"class":574},[456,1436,323],{"class":469},[456,1438,752],{"class":616},[456,1440,632],{"class":574},[456,1442,758],{"class":757},[456,1444,659],{"class":469},[456,1446,763],{"class":757},[456,1448,590],{"class":574},[456,1450,493],{"class":469},[456,1452,1453],{"class":458,"line":595},[456,1454,773],{"class":469},[456,1456,1457],{"class":458,"line":602},[456,1458,779],{"class":469},[325,1460,1462],{"id":1461},"next-steps","Next Steps",[330,1464,1465,1470,1475],{},[333,1466,1467,1468,323],{},"Learn how to install and configure the package in ",[287,1469,47],{"href":48},[333,1471,1472,1473,323],{},"Customize query parameter names and behavior in ",[287,1474,52],{"href":53},[333,1476,1477,1478,312,1480,316,1482,323],{},"Explore ",[287,1479,63],{"href":64},[287,1481,68],{"href":69},[287,1483,73],{"href":74},[1485,1486,1487],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":452,"searchDepth":459,"depth":496,"links":1489},[1490,1491,1495],{"id":327,"depth":496,"text":328},{"id":421,"depth":496,"text":422,"children":1492},[1493,1494],{"id":426,"depth":518,"text":427},{"id":782,"depth":518,"text":783},{"id":1461,"depth":496,"text":1462},"Easily build Lucid queries from API requests in AdonisJS v7.","md",{},{"icon":45},{"title":10,"description":1496},"_XBR65uE-zrIweMvKolgyeFHN2yJRjTrlXxwRc9dsGY",[1503,1505],{"title":29,"path":25,"stem":26,"description":1504,"icon":30,"children":-1},"Explore open source packages provided by the EienJS organization.",{"title":47,"path":48,"stem":49,"description":1506,"icon":50,"children":-1},"Install and configure @eienjs\u002Fadonisjs-api-query in your AdonisJS application.",{"id":1508,"extension":1509,"meta":1510,"packages":1511,"stem":1554,"__hash__":1555},"packages\u002Fdata\u002Fpackages.json","json",{},[1512,1519,1525,1531,1536,1542,1548],{"name":1513,"title":1514,"description":1515,"icon":86,"category":1516,"repo":1517,"version":1518,"docs":541},"adonisjs-permission","Permission","Associate users with roles and permissions in your AdonisJS app","adonisjs","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-permission","1.0.0",{"name":1520,"title":1521,"description":1522,"icon":33,"category":1516,"repo":1523,"version":1524,"docs":541},"adonisjs-api-query","API Query","Easily build Lucid queries from API requests","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-api-query","3.0.1",{"name":1526,"title":1527,"description":1528,"icon":249,"category":1516,"repo":1529,"version":1530,"docs":541},"adonisjs-soft-deletes","Soft Deletes","Provider-based Soft deletes for AdonisJS","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-soft-deletes","1.0.2",{"name":1532,"title":195,"description":1533,"icon":196,"category":1516,"repo":1534,"version":1535,"docs":541},"adonisjs-simple-auth","Single API key authentication for AdonisJS v7 applications","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-simple-auth","2.1.0",{"name":1537,"title":1538,"description":1539,"icon":1540,"category":1516,"repo":1541,"docs":22},"adonisjs-sentry","Sentry","Sentry service provider for AdonisJS v7.","i-tabler-bug","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-sentry",{"name":1543,"title":1544,"description":1545,"icon":141,"category":1546,"repo":1547,"docs":22},"eslint-config","ESLint Config","The EienJS ESLint config preset.","tooling","https:\u002F\u002Fgithub.com\u002Feienjs\u002Feslint-config",{"name":1549,"title":1550,"description":1551,"icon":1552,"category":1546,"repo":1553,"docs":22},"adonisjs-pkg-boilerplate","Package Boilerplate","A boilerplate for creating AdonisJS packages.","i-tabler-package","https:\u002F\u002Fgithub.com\u002Feienjs\u002Fadonisjs-pkg-boilerplate","data\u002Fpackages","5fILU7Jigsw2ib-NQg4Fr4sWgIkg0kLgpVm371gTzVY",1793868426719]