[{"data":1,"prerenderedAt":3727},["ShallowReactive",2],{"navigation_docs":3,"-guides-controller":101,"-guides-controller-surround":3722},[4,55,73,91],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":54},"Guides","i-lucide-book-open","\u002Fguides","1.guides",[10,14,18,22,26,30,34,38,42,46,50],{"title":11,"path":12,"stem":13},"Introduction","\u002Fguides\u002Fintroduction","1.guides\u002F0.introduction",{"title":15,"path":16,"stem":17},"Data","\u002Fguides\u002Fdata","1.guides\u002F1.data",{"title":19,"path":20,"stem":21},"Forms","\u002Fguides\u002Fform","1.guides\u002F2.form",{"title":23,"path":24,"stem":25},"List","\u002Fguides\u002Flist","1.guides\u002F3.list",{"title":27,"path":28,"stem":29},"Authentication","\u002Fguides\u002Fauthentication","1.guides\u002F4.authentication",{"title":31,"path":32,"stem":33},"Authorization","\u002Fguides\u002Fauthorization","1.guides\u002F5.authorization",{"title":35,"path":36,"stem":37},"Notifications","\u002Fguides\u002Fnotifications","1.guides\u002F6.notifications",{"title":39,"path":40,"stem":41},"Realtime","\u002Fguides\u002Frealtime","1.guides\u002F7.realtime",{"title":43,"path":44,"stem":45},"Router","\u002Fguides\u002Frouter","1.guides\u002F8.router",{"title":47,"path":48,"stem":49},"I18n","\u002Fguides\u002Fi18n","1.guides\u002F9.i18n",{"title":51,"path":52,"stem":53},"Controller","\u002Fguides\u002Fcontroller","1.guides\u002F99.controller",false,{"title":56,"icon":57,"path":58,"stem":59,"children":60,"page":54},"Integrations","i-lucide-blocks","\u002Fintegrations","2.integrations",[61,65,69],{"title":62,"path":63,"stem":64},"Vue","\u002Fintegrations\u002Fvue","2.integrations\u002F0.vue",{"title":66,"path":67,"stem":68},"Nuxt","\u002Fintegrations\u002Fnuxt","2.integrations\u002F1.nuxt",{"title":70,"path":71,"stem":72},"Svelte","\u002Fintegrations\u002Fsvelte","2.integrations\u002F2.svelte",{"title":74,"icon":75,"path":76,"stem":77,"children":78,"page":54},"Backend","i-lucide-server","\u002Fbackend","3.backend",[79,83,87],{"title":80,"path":81,"stem":82},"Directus","\u002Fbackend\u002Fdirectus","3.backend\u002F0.directus",{"title":84,"path":85,"stem":86},"Supabase","\u002Fbackend\u002Fsupabase","3.backend\u002F1.supabase",{"title":88,"path":89,"stem":90},"RESTful API","\u002Fbackend\u002Frest-api","3.backend\u002F9.rest-api",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":54},"AI","i-lucide-sparkles","\u002Fai","4.ai",[97],{"title":98,"path":99,"stem":100},"Agent Skills","\u002Fai\u002Fskills","4.ai\u002F0.skills",{"id":102,"title":51,"body":103,"description":3716,"extension":3717,"links":3718,"meta":3719,"navigation":867,"path":52,"seo":3720,"stem":53,"__hash__":3721},"docs\u002F1.guides\u002F99.controller.md",{"type":104,"value":105,"toc":3705},"minimark",[106,110,113,116,217,222,225,228,233,612,616,640,645,717,720,775,1196,1200,1216,1219,1229,1369,1387,1478,1482,1489,1503,1506,1551,1554,1557,1923,1929,2250,2265,2269,2279,2282,2314,2619,2622,2633,2637,2643,2652,2700,2706,3160,3168,3172,3178,3181,3235,3241,3657,3693,3698,3701],[107,108,109],"p",{},"Controller context is the shared model behind route-aware controllers and resource path helpers.",[107,111,112],{},"It tells Ginjou what each resource is called, which paths belong to each action, and which defaults should be reused for that resource.",[107,114,115],{},"Router context is only needed when Ginjou must read or write the current location, such as resource inference or controller route sync.",[117,118,119,132],"table",{},[120,121,122],"thead",{},[123,124,125,129],"tr",{},[126,127,128],"th",{},"Controller or helper",[126,130,131],{},"How it uses resource data",[133,134,135,147,157,167,177,187,197,207],"tbody",{},[123,136,137,144],{},[138,139,140],"td",{},[141,142,143],"code",{},"useCreate",[138,145,146],{},"Resolve the resource name and default fetcher for create flows.",[123,148,149,154],{},[138,150,151],{},[141,152,153],{},"useEdit",[138,155,156],{},"Resolve the resource name, default id, and default fetcher for edit flows.",[123,158,159,164],{},[138,160,161],{},[141,162,163],{},"useShow",[138,165,166],{},"Resolve the resource name, default id, and default fetcher for detail pages.",[123,168,169,174],{},[138,170,171],{},[141,172,173],{},"useList",[138,175,176],{},"Resolve the resource name and default fetcher for list pages.",[123,178,179,184],{},[138,180,181],{},[141,182,183],{},"useInfiniteList",[138,185,186],{},"Resolve the resource name and default fetcher for infinite lists.",[123,188,189,194],{},[138,190,191],{},[141,192,193],{},"useSelect",[138,195,196],{},"Resolve the resource name and default fetcher for select data.",[123,198,199,204],{},[138,200,201],{},[141,202,203],{},"useResource",[138,205,206],{},"Resolve the current resource from an explicit name or from the current location.",[123,208,209,214],{},[138,210,211],{},[141,212,213],{},"useResourcePath",[138,215,216],{},"Build action paths from the resource definition.",[218,219,221],"h2",{"id":220},"controller-context","Controller Context",[107,223,224],{},"Controller context is the registry of resource definitions for your app.",[107,226,227],{},"Each definition names one resource, declares its action paths, and can attach resource-level metadata.",[229,230,232],"h3",{"id":231},"interface","Interface",[234,235,236],"code-group",{},[237,238,243],"pre",{"className":239,"code":240,"filename":51,"language":241,"meta":242,"style":242},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark monokai","interface Controller {\n    resources: Array\u003C{\n        name: string\n        list?:\n            | string\n            | {\n                pattern: string\n                parse: (location: any) => any\n            }\n        create?:\n            | string\n            | {\n                pattern: string\n                parse: (location: any) => any\n            }\n        show?:\n            | string\n            | {\n                pattern: string\n                parse: (location: any) => any\n            }\n        edit?:\n            | string\n            | {\n                pattern: string\n                parse: (location: any) => any\n            }\n        meta?: {\n            parent?: string\n            hide?: boolean\n            deletable?: boolean\n            fetcherName?: string\n            [key: string]: any\n        }\n    }>\n}\n","ts","",[141,244,245,261,278,290,299,307,314,324,354,360,368,375,382,391,412,417,425,432,439,448,469,474,482,489,496,505,526,531,542,552,563,573,583,594,600,606],{"__ignoreMap":242},[246,247,250,253,257],"span",{"class":248,"line":249},"line",1,[246,251,231],{"class":252},"srJo8",[246,254,256],{"class":255},"sKvfc"," Controller",[246,258,260],{"class":259},"swvn1"," {\n",[246,262,264,268,272,275],{"class":248,"line":263},2,[246,265,267],{"class":266},"sIDdj","    resources",[246,269,271],{"class":270},"sGXK2",":",[246,273,274],{"class":255}," Array",[246,276,277],{"class":259},"\u003C{\n",[246,279,281,284,286],{"class":248,"line":280},3,[246,282,283],{"class":266},"        name",[246,285,271],{"class":270},[246,287,289],{"class":288},"s_MOj"," string\n",[246,291,293,296],{"class":248,"line":292},4,[246,294,295],{"class":266},"        list",[246,297,298],{"class":270},"?:\n",[246,300,302,305],{"class":248,"line":301},5,[246,303,304],{"class":270},"            |",[246,306,289],{"class":288},[246,308,310,312],{"class":248,"line":309},6,[246,311,304],{"class":270},[246,313,260],{"class":259},[246,315,317,320,322],{"class":248,"line":316},7,[246,318,319],{"class":266},"                pattern",[246,321,271],{"class":270},[246,323,289],{"class":288},[246,325,327,331,333,336,340,342,345,348,351],{"class":248,"line":326},8,[246,328,330],{"class":329},"sY_X6","                parse",[246,332,271],{"class":270},[246,334,335],{"class":259}," (",[246,337,339],{"class":338},"sQgqH","location",[246,341,271],{"class":270},[246,343,344],{"class":288}," any",[246,346,347],{"class":259},")",[246,349,350],{"class":252}," =>",[246,352,353],{"class":288}," any\n",[246,355,357],{"class":248,"line":356},9,[246,358,359],{"class":259},"            }\n",[246,361,363,366],{"class":248,"line":362},10,[246,364,365],{"class":255},"        create",[246,367,298],{"class":270},[246,369,371,373],{"class":248,"line":370},11,[246,372,304],{"class":270},[246,374,289],{"class":288},[246,376,378,380],{"class":248,"line":377},12,[246,379,304],{"class":270},[246,381,260],{"class":259},[246,383,385,387,389],{"class":248,"line":384},13,[246,386,319],{"class":266},[246,388,271],{"class":270},[246,390,289],{"class":288},[246,392,394,396,398,400,402,404,406,408,410],{"class":248,"line":393},14,[246,395,330],{"class":329},[246,397,271],{"class":270},[246,399,335],{"class":259},[246,401,339],{"class":338},[246,403,271],{"class":270},[246,405,344],{"class":288},[246,407,347],{"class":259},[246,409,350],{"class":252},[246,411,353],{"class":288},[246,413,415],{"class":248,"line":414},15,[246,416,359],{"class":259},[246,418,420,423],{"class":248,"line":419},16,[246,421,422],{"class":255},"        show",[246,424,298],{"class":270},[246,426,428,430],{"class":248,"line":427},17,[246,429,304],{"class":270},[246,431,289],{"class":288},[246,433,435,437],{"class":248,"line":434},18,[246,436,304],{"class":270},[246,438,260],{"class":259},[246,440,442,444,446],{"class":248,"line":441},19,[246,443,319],{"class":266},[246,445,271],{"class":270},[246,447,289],{"class":288},[246,449,451,453,455,457,459,461,463,465,467],{"class":248,"line":450},20,[246,452,330],{"class":329},[246,454,271],{"class":270},[246,456,335],{"class":259},[246,458,339],{"class":338},[246,460,271],{"class":270},[246,462,344],{"class":288},[246,464,347],{"class":259},[246,466,350],{"class":252},[246,468,353],{"class":288},[246,470,472],{"class":248,"line":471},21,[246,473,359],{"class":259},[246,475,477,480],{"class":248,"line":476},22,[246,478,479],{"class":255},"        edit",[246,481,298],{"class":270},[246,483,485,487],{"class":248,"line":484},23,[246,486,304],{"class":270},[246,488,289],{"class":288},[246,490,492,494],{"class":248,"line":491},24,[246,493,304],{"class":270},[246,495,260],{"class":259},[246,497,499,501,503],{"class":248,"line":498},25,[246,500,319],{"class":266},[246,502,271],{"class":270},[246,504,289],{"class":288},[246,506,508,510,512,514,516,518,520,522,524],{"class":248,"line":507},26,[246,509,330],{"class":329},[246,511,271],{"class":270},[246,513,335],{"class":259},[246,515,339],{"class":338},[246,517,271],{"class":270},[246,519,344],{"class":288},[246,521,347],{"class":259},[246,523,350],{"class":252},[246,525,353],{"class":288},[246,527,529],{"class":248,"line":528},27,[246,530,359],{"class":259},[246,532,534,537,540],{"class":248,"line":533},28,[246,535,536],{"class":255},"        meta",[246,538,539],{"class":270},"?:",[246,541,260],{"class":259},[246,543,545,548,550],{"class":248,"line":544},29,[246,546,547],{"class":266},"            parent",[246,549,539],{"class":270},[246,551,289],{"class":288},[246,553,555,558,560],{"class":248,"line":554},30,[246,556,557],{"class":266},"            hide",[246,559,539],{"class":270},[246,561,562],{"class":288}," boolean\n",[246,564,566,569,571],{"class":248,"line":565},31,[246,567,568],{"class":266},"            deletable",[246,570,539],{"class":270},[246,572,562],{"class":288},[246,574,576,579,581],{"class":248,"line":575},32,[246,577,578],{"class":266},"            fetcherName",[246,580,539],{"class":270},[246,582,289],{"class":288},[246,584,586,590,592],{"class":248,"line":585},33,[246,587,589],{"class":588},"ss--_","            [key: string]",[246,591,271],{"class":270},[246,593,353],{"class":288},[246,595,597],{"class":248,"line":596},34,[246,598,599],{"class":259},"        }\n",[246,601,603],{"class":248,"line":602},35,[246,604,605],{"class":259},"    }>\n",[246,607,609],{"class":248,"line":608},36,[246,610,611],{"class":259},"}\n",[229,613,615],{"id":614},"properties","Properties",[117,617,618,628],{},[120,619,620],{},[123,621,622,625],{},[126,623,624],{},"Property",[126,626,627],{},"Meaning",[133,629,630],{},[123,631,632,637],{},[138,633,634],{},[141,635,636],{},"resources",[138,638,639],{},"The full list of resource definitions.",[641,642,644],"h4",{"id":643},"resource-item","Resource Item",[117,646,647,655],{},[120,648,649],{},[123,650,651,653],{},[126,652,624],{},[126,654,627],{},[133,656,657,667,677,687,697,707],{},[123,658,659,664],{},[138,660,661],{},[141,662,663],{},"name",[138,665,666],{},"The stable identifier for one resource.",[123,668,669,674],{},[138,670,671],{},[141,672,673],{},"list",[138,675,676],{},"The route definition for list pages.",[123,678,679,684],{},[138,680,681],{},[141,682,683],{},"create",[138,685,686],{},"The route definition for create pages.",[123,688,689,694],{},[138,690,691],{},[141,692,693],{},"show",[138,695,696],{},"The route definition for detail pages.",[123,698,699,704],{},[138,700,701],{},[141,702,703],{},"edit",[138,705,706],{},"The route definition for edit pages.",[123,708,709,714],{},[138,710,711],{},[141,712,713],{},"meta",[138,715,716],{},"Extra resource-level settings and metadata.",[641,718,719],{"id":713},"Meta",[117,721,722,730],{},[120,723,724],{},[123,725,726,728],{},[126,727,624],{},[126,729,627],{},[133,731,732,742,752,762],{},[123,733,734,739],{},[138,735,736],{},[141,737,738],{},"parent",[138,740,741],{},"Optional parent resource name.",[123,743,744,749],{},[138,745,746],{},[141,747,748],{},"hide",[138,750,751],{},"Optional UI hint to hide a resource.",[123,753,754,759],{},[138,755,756],{},[141,757,758],{},"deletable",[138,760,761],{},"Optional flag for delete support.",[123,763,764,769],{},[138,765,766],{},[141,767,768],{},"fetcherName",[138,770,771,772,774],{},"The default fetcher used when a composable does not pass its own ",[141,773,768],{},".",[234,776,778,1012],{"sync":777},"guide-example",[237,779,783],{"className":780,"code":781,"filename":62,"language":782,"meta":242,"style":242},"language-vue shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u003Cscript setup lang=\"ts\">\nimport { defineController } from '@ginjou\u002Fcore'\nimport { defineControllerContext } from '@ginjou\u002Fvue'\n\ndefineControllerContext(defineController({\n    resources: [\n        {\n            name: 'posts',\n            list: '\u002Fposts',\n            create: '\u002Fposts\u002Fcreate',\n            show: '\u002Fposts\u002F:id',\n            edit: '\u002Fposts\u002F:id\u002Fedit',\n        },\n    ],\n}))\n\u003C\u002Fscript>\n","vue",[141,784,785,816,843,863,869,886,896,901,919,935,951,967,983,988,995,1003],{"__ignoreMap":242},[246,786,787,790,794,798,801,804,808,811,813],{"class":248,"line":249},[246,788,789],{"class":259},"\u003C",[246,791,793],{"class":792},"sHsBP","script",[246,795,797],{"class":796},"s_lYk"," setup",[246,799,800],{"class":796}," lang",[246,802,803],{"class":259},"=",[246,805,807],{"class":806},"siCPE","\"",[246,809,241],{"class":810},"sLACW",[246,812,807],{"class":806},[246,814,815],{"class":259},">\n",[246,817,818,822,825,828,831,834,837,840],{"class":248,"line":263},[246,819,821],{"class":820},"sRxSC","import",[246,823,824],{"class":259}," {",[246,826,827],{"class":588}," defineController",[246,829,830],{"class":259}," }",[246,832,833],{"class":820}," from",[246,835,836],{"class":806}," '",[246,838,839],{"class":810},"@ginjou\u002Fcore",[246,841,842],{"class":806},"'\n",[246,844,845,847,849,852,854,856,858,861],{"class":248,"line":280},[246,846,821],{"class":820},[246,848,824],{"class":259},[246,850,851],{"class":588}," defineControllerContext",[246,853,830],{"class":259},[246,855,833],{"class":820},[246,857,836],{"class":806},[246,859,860],{"class":810},"@ginjou\u002Fvue",[246,862,842],{"class":806},[246,864,865],{"class":248,"line":292},[246,866,868],{"emptyLinePlaceholder":867},true,"\n",[246,870,871,875,878,881,883],{"class":248,"line":301},[246,872,874],{"class":873},"sD0ED","defineControllerContext",[246,876,877],{"class":588},"(",[246,879,880],{"class":873},"defineController",[246,882,877],{"class":588},[246,884,885],{"class":259},"{\n",[246,887,888,891,893],{"class":248,"line":309},[246,889,267],{"class":890},"squCx",[246,892,271],{"class":259},[246,894,895],{"class":588}," [\n",[246,897,898],{"class":248,"line":316},[246,899,900],{"class":259},"        {\n",[246,902,903,906,908,910,913,916],{"class":248,"line":326},[246,904,905],{"class":890},"            name",[246,907,271],{"class":259},[246,909,836],{"class":806},[246,911,912],{"class":810},"posts",[246,914,915],{"class":806},"'",[246,917,918],{"class":259},",\n",[246,920,921,924,926,928,931,933],{"class":248,"line":356},[246,922,923],{"class":890},"            list",[246,925,271],{"class":259},[246,927,836],{"class":806},[246,929,930],{"class":810},"\u002Fposts",[246,932,915],{"class":806},[246,934,918],{"class":259},[246,936,937,940,942,944,947,949],{"class":248,"line":362},[246,938,939],{"class":890},"            create",[246,941,271],{"class":259},[246,943,836],{"class":806},[246,945,946],{"class":810},"\u002Fposts\u002Fcreate",[246,948,915],{"class":806},[246,950,918],{"class":259},[246,952,953,956,958,960,963,965],{"class":248,"line":370},[246,954,955],{"class":890},"            show",[246,957,271],{"class":259},[246,959,836],{"class":806},[246,961,962],{"class":810},"\u002Fposts\u002F:id",[246,964,915],{"class":806},[246,966,918],{"class":259},[246,968,969,972,974,976,979,981],{"class":248,"line":377},[246,970,971],{"class":890},"            edit",[246,973,271],{"class":259},[246,975,836],{"class":806},[246,977,978],{"class":810},"\u002Fposts\u002F:id\u002Fedit",[246,980,915],{"class":806},[246,982,918],{"class":259},[246,984,985],{"class":248,"line":384},[246,986,987],{"class":259},"        },\n",[246,989,990,993],{"class":248,"line":393},[246,991,992],{"class":588},"    ]",[246,994,918],{"class":259},[246,996,997,1000],{"class":248,"line":414},[246,998,999],{"class":259},"}",[246,1001,1002],{"class":588},"))\n",[246,1004,1005,1008,1010],{"class":248,"line":419},[246,1006,1007],{"class":259},"\u003C\u002F",[246,1009,793],{"class":792},[246,1011,815],{"class":259},[237,1013,1017],{"className":1014,"code":1015,"filename":70,"language":1016,"meta":242,"style":242},"language-svelte shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u003Cscript lang=\"ts\">\nimport { defineController } from '@ginjou\u002Fcore'\nimport { defineControllerContext } from '@ginjou\u002Fsvelte'\n\ndefineControllerContext(defineController({\n    resources: [\n        {\n            name: 'posts',\n            list: '\u002Fposts',\n            create: '\u002Fposts\u002Fcreate',\n            show: '\u002Fposts\u002F:id',\n            edit: '\u002Fposts\u002F:id\u002Fedit',\n        },\n    ],\n}))\n\u003C\u002Fscript>\n","svelte",[141,1018,1019,1037,1055,1074,1078,1090,1098,1102,1116,1130,1144,1158,1172,1176,1182,1188],{"__ignoreMap":242},[246,1020,1021,1023,1025,1027,1029,1031,1033,1035],{"class":248,"line":249},[246,1022,789],{"class":259},[246,1024,793],{"class":792},[246,1026,800],{"class":796},[246,1028,803],{"class":259},[246,1030,807],{"class":806},[246,1032,241],{"class":810},[246,1034,807],{"class":806},[246,1036,815],{"class":259},[246,1038,1039,1041,1043,1045,1047,1049,1051,1053],{"class":248,"line":263},[246,1040,821],{"class":820},[246,1042,824],{"class":259},[246,1044,827],{"class":588},[246,1046,830],{"class":259},[246,1048,833],{"class":820},[246,1050,836],{"class":806},[246,1052,839],{"class":810},[246,1054,842],{"class":806},[246,1056,1057,1059,1061,1063,1065,1067,1069,1072],{"class":248,"line":280},[246,1058,821],{"class":820},[246,1060,824],{"class":259},[246,1062,851],{"class":588},[246,1064,830],{"class":259},[246,1066,833],{"class":820},[246,1068,836],{"class":806},[246,1070,1071],{"class":810},"@ginjou\u002Fsvelte",[246,1073,842],{"class":806},[246,1075,1076],{"class":248,"line":292},[246,1077,868],{"emptyLinePlaceholder":867},[246,1079,1080,1082,1084,1086,1088],{"class":248,"line":301},[246,1081,874],{"class":873},[246,1083,877],{"class":588},[246,1085,880],{"class":873},[246,1087,877],{"class":588},[246,1089,885],{"class":259},[246,1091,1092,1094,1096],{"class":248,"line":309},[246,1093,267],{"class":890},[246,1095,271],{"class":259},[246,1097,895],{"class":588},[246,1099,1100],{"class":248,"line":316},[246,1101,900],{"class":259},[246,1103,1104,1106,1108,1110,1112,1114],{"class":248,"line":326},[246,1105,905],{"class":890},[246,1107,271],{"class":259},[246,1109,836],{"class":806},[246,1111,912],{"class":810},[246,1113,915],{"class":806},[246,1115,918],{"class":259},[246,1117,1118,1120,1122,1124,1126,1128],{"class":248,"line":356},[246,1119,923],{"class":890},[246,1121,271],{"class":259},[246,1123,836],{"class":806},[246,1125,930],{"class":810},[246,1127,915],{"class":806},[246,1129,918],{"class":259},[246,1131,1132,1134,1136,1138,1140,1142],{"class":248,"line":362},[246,1133,939],{"class":890},[246,1135,271],{"class":259},[246,1137,836],{"class":806},[246,1139,946],{"class":810},[246,1141,915],{"class":806},[246,1143,918],{"class":259},[246,1145,1146,1148,1150,1152,1154,1156],{"class":248,"line":370},[246,1147,955],{"class":890},[246,1149,271],{"class":259},[246,1151,836],{"class":806},[246,1153,962],{"class":810},[246,1155,915],{"class":806},[246,1157,918],{"class":259},[246,1159,1160,1162,1164,1166,1168,1170],{"class":248,"line":377},[246,1161,971],{"class":890},[246,1163,271],{"class":259},[246,1165,836],{"class":806},[246,1167,978],{"class":810},[246,1169,915],{"class":806},[246,1171,918],{"class":259},[246,1173,1174],{"class":248,"line":384},[246,1175,987],{"class":259},[246,1177,1178,1180],{"class":248,"line":393},[246,1179,992],{"class":588},[246,1181,918],{"class":259},[246,1183,1184,1186],{"class":248,"line":414},[246,1185,999],{"class":259},[246,1187,1002],{"class":588},[246,1189,1190,1192,1194],{"class":248,"line":419},[246,1191,1007],{"class":259},[246,1193,793],{"class":792},[246,1195,815],{"class":259},[218,1197,1199],{"id":1198},"name-and-action-paths","Name and Action Paths",[107,1201,1202,1204,1205,1207,1208,1207,1210,1212,1213,1215],{},[141,1203,663],{}," is the stable resource identifier used by higher-level composables. Action paths such as ",[141,1206,673],{},", ",[141,1209,683],{},[141,1211,693],{},", and ",[141,1214,703],{}," tell Ginjou how to match or build URLs for that resource.",[107,1217,1218],{},"String patterns are enough for standard CRUD pages. When router context exists, route-aware controllers compare the current location against the registered action paths.",[107,1220,1221,1222,1224,1225,1228],{},"With the ",[141,1223,912],{}," definition above, ",[141,1226,1227],{},"useShow()"," can infer the current resource and record id without passing either one explicitly.",[234,1230,1231,1304],{"sync":777},[237,1232,1234],{"className":780,"code":1233,"filename":62,"language":782,"meta":242,"style":242},"\u003Cscript setup lang=\"ts\">\nimport { useShow } from '@ginjou\u002Fvue'\n\nconst post = useShow()\n\u003C\u002Fscript>\n",[141,1235,1236,1256,1275,1279,1296],{"__ignoreMap":242},[246,1237,1238,1240,1242,1244,1246,1248,1250,1252,1254],{"class":248,"line":249},[246,1239,789],{"class":259},[246,1241,793],{"class":792},[246,1243,797],{"class":796},[246,1245,800],{"class":796},[246,1247,803],{"class":259},[246,1249,807],{"class":806},[246,1251,241],{"class":810},[246,1253,807],{"class":806},[246,1255,815],{"class":259},[246,1257,1258,1260,1262,1265,1267,1269,1271,1273],{"class":248,"line":263},[246,1259,821],{"class":820},[246,1261,824],{"class":259},[246,1263,1264],{"class":588}," useShow",[246,1266,830],{"class":259},[246,1268,833],{"class":820},[246,1270,836],{"class":806},[246,1272,860],{"class":810},[246,1274,842],{"class":806},[246,1276,1277],{"class":248,"line":280},[246,1278,868],{"emptyLinePlaceholder":867},[246,1280,1281,1284,1288,1291,1293],{"class":248,"line":292},[246,1282,1283],{"class":252},"const",[246,1285,1287],{"class":1286},"s91G_"," post",[246,1289,1290],{"class":270}," =",[246,1292,1264],{"class":873},[246,1294,1295],{"class":588},"()\n",[246,1297,1298,1300,1302],{"class":248,"line":301},[246,1299,1007],{"class":259},[246,1301,793],{"class":792},[246,1303,815],{"class":259},[237,1305,1307],{"className":1014,"code":1306,"filename":70,"language":1016,"meta":242,"style":242},"\u003Cscript lang=\"ts\">\nimport { useShow } from '@ginjou\u002Fsvelte'\n\nconst post = useShow()\n\u003C\u002Fscript>\n",[141,1308,1309,1327,1345,1349,1361],{"__ignoreMap":242},[246,1310,1311,1313,1315,1317,1319,1321,1323,1325],{"class":248,"line":249},[246,1312,789],{"class":259},[246,1314,793],{"class":792},[246,1316,800],{"class":796},[246,1318,803],{"class":259},[246,1320,807],{"class":806},[246,1322,241],{"class":810},[246,1324,807],{"class":806},[246,1326,815],{"class":259},[246,1328,1329,1331,1333,1335,1337,1339,1341,1343],{"class":248,"line":263},[246,1330,821],{"class":820},[246,1332,824],{"class":259},[246,1334,1264],{"class":588},[246,1336,830],{"class":259},[246,1338,833],{"class":820},[246,1340,836],{"class":806},[246,1342,1071],{"class":810},[246,1344,842],{"class":806},[246,1346,1347],{"class":248,"line":280},[246,1348,868],{"emptyLinePlaceholder":867},[246,1350,1351,1353,1355,1357,1359],{"class":248,"line":292},[246,1352,1283],{"class":252},[246,1354,1287],{"class":1286},[246,1356,1290],{"class":270},[246,1358,1264],{"class":873},[246,1360,1295],{"class":588},[246,1362,1363,1365,1367],{"class":248,"line":301},[246,1364,1007],{"class":259},[246,1366,793],{"class":792},[246,1368,815],{"class":259},[107,1370,1371,1372,1207,1375,1377,1378,1380,1381,1383,1384,774],{},"If the current route is ",[141,1373,1374],{},"\u002Fposts\u002F42",[141,1376,1227],{}," resolves the ",[141,1379,912],{}," resource, the ",[141,1382,693],{}," action, and the current ",[141,1385,1386],{},"id",[117,1388,1389,1405],{},[120,1390,1391],{},[123,1392,1393,1396,1399,1402],{},[126,1394,1395],{},"Current route",[126,1397,1398],{},"Resolved resource",[126,1400,1401],{},"Resolved action",[126,1403,1404],{},"Resolved id",[133,1406,1407,1424,1440,1459],{},[123,1408,1409,1413,1417,1421],{},[138,1410,1411],{},[141,1412,930],{},[138,1414,1415],{},[141,1416,912],{},[138,1418,1419],{},[141,1420,673],{},[138,1422,1423],{},"-",[123,1425,1426,1430,1434,1438],{},[138,1427,1428],{},[141,1429,946],{},[138,1431,1432],{},[141,1433,912],{},[138,1435,1436],{},[141,1437,683],{},[138,1439,1423],{},[123,1441,1442,1446,1450,1454],{},[138,1443,1444],{},[141,1445,1374],{},[138,1447,1448],{},[141,1449,912],{},[138,1451,1452],{},[141,1453,693],{},[138,1455,1456],{},[141,1457,1458],{},"42",[123,1460,1461,1466,1470,1474],{},[138,1462,1463],{},[141,1464,1465],{},"\u002Fposts\u002F42\u002Fedit",[138,1467,1468],{},[141,1469,912],{},[138,1471,1472],{},[141,1473,703],{},[138,1475,1476],{},[141,1477,1458],{},[218,1479,1481],{"id":1480},"fetcher-selection","Fetcher Selection",[107,1483,1484,1485,1488],{},"Each resource can define ",[141,1486,1487],{},"meta.fetcherName"," as its default fetcher.",[107,1490,1491,1492,1207,1494,1207,1496,1207,1498,1212,1500,1502],{},"Controllers such as ",[141,1493,173],{},[141,1495,163],{},[141,1497,143],{},[141,1499,153],{},[141,1501,193],{}," read that value automatically.",[107,1504,1505],{},"Fetcher selection follows this order.",[117,1507,1508,1521],{},[120,1509,1510],{},[123,1511,1512,1515,1518],{},[126,1513,1514],{},"Priority",[126,1516,1517],{},"Source",[126,1519,1520],{},"Used when",[133,1522,1523,1536],{},[123,1524,1525,1528,1533],{},[138,1526,1527],{},"1",[138,1529,1530,1532],{},[141,1531,768],{}," passed directly to a composable",[138,1534,1535],{},"Always wins.",[123,1537,1538,1541,1546],{},[138,1539,1540],{},"2",[138,1542,1543],{},[141,1544,1545],{},"resource.meta.fetcherName",[138,1547,1548,1549,774],{},"Used when the composable does not pass ",[141,1550,768],{},[107,1552,1553],{},"This lets you set one backend per resource without repeating it in every composable call.",[107,1555,1556],{},"Register the resource with a default fetcher.",[234,1558,1559,1744],{"sync":777},[237,1560,1562],{"className":780,"code":1561,"filename":62,"language":782,"meta":242,"style":242},"\u003Cscript setup lang=\"ts\">\nimport { defineController } from '@ginjou\u002Fcore'\nimport { defineControllerContext } from '@ginjou\u002Fvue'\n\ndefineControllerContext(defineController({\n    resources: [\n        {\n            name: 'posts',\n            list: '\u002Fposts',\n            show: '\u002Fposts\u002F:id',\n            meta: {\n                fetcherName: 'cms',\n            },\n        },\n    ],\n}))\n\u003C\u002Fscript>\n",[141,1563,1564,1584,1602,1620,1624,1636,1644,1648,1662,1676,1690,1699,1715,1720,1724,1730,1736],{"__ignoreMap":242},[246,1565,1566,1568,1570,1572,1574,1576,1578,1580,1582],{"class":248,"line":249},[246,1567,789],{"class":259},[246,1569,793],{"class":792},[246,1571,797],{"class":796},[246,1573,800],{"class":796},[246,1575,803],{"class":259},[246,1577,807],{"class":806},[246,1579,241],{"class":810},[246,1581,807],{"class":806},[246,1583,815],{"class":259},[246,1585,1586,1588,1590,1592,1594,1596,1598,1600],{"class":248,"line":263},[246,1587,821],{"class":820},[246,1589,824],{"class":259},[246,1591,827],{"class":588},[246,1593,830],{"class":259},[246,1595,833],{"class":820},[246,1597,836],{"class":806},[246,1599,839],{"class":810},[246,1601,842],{"class":806},[246,1603,1604,1606,1608,1610,1612,1614,1616,1618],{"class":248,"line":280},[246,1605,821],{"class":820},[246,1607,824],{"class":259},[246,1609,851],{"class":588},[246,1611,830],{"class":259},[246,1613,833],{"class":820},[246,1615,836],{"class":806},[246,1617,860],{"class":810},[246,1619,842],{"class":806},[246,1621,1622],{"class":248,"line":292},[246,1623,868],{"emptyLinePlaceholder":867},[246,1625,1626,1628,1630,1632,1634],{"class":248,"line":301},[246,1627,874],{"class":873},[246,1629,877],{"class":588},[246,1631,880],{"class":873},[246,1633,877],{"class":588},[246,1635,885],{"class":259},[246,1637,1638,1640,1642],{"class":248,"line":309},[246,1639,267],{"class":890},[246,1641,271],{"class":259},[246,1643,895],{"class":588},[246,1645,1646],{"class":248,"line":316},[246,1647,900],{"class":259},[246,1649,1650,1652,1654,1656,1658,1660],{"class":248,"line":326},[246,1651,905],{"class":890},[246,1653,271],{"class":259},[246,1655,836],{"class":806},[246,1657,912],{"class":810},[246,1659,915],{"class":806},[246,1661,918],{"class":259},[246,1663,1664,1666,1668,1670,1672,1674],{"class":248,"line":356},[246,1665,923],{"class":890},[246,1667,271],{"class":259},[246,1669,836],{"class":806},[246,1671,930],{"class":810},[246,1673,915],{"class":806},[246,1675,918],{"class":259},[246,1677,1678,1680,1682,1684,1686,1688],{"class":248,"line":362},[246,1679,955],{"class":890},[246,1681,271],{"class":259},[246,1683,836],{"class":806},[246,1685,962],{"class":810},[246,1687,915],{"class":806},[246,1689,918],{"class":259},[246,1691,1692,1695,1697],{"class":248,"line":370},[246,1693,1694],{"class":890},"            meta",[246,1696,271],{"class":259},[246,1698,260],{"class":259},[246,1700,1701,1704,1706,1708,1711,1713],{"class":248,"line":377},[246,1702,1703],{"class":890},"                fetcherName",[246,1705,271],{"class":259},[246,1707,836],{"class":806},[246,1709,1710],{"class":810},"cms",[246,1712,915],{"class":806},[246,1714,918],{"class":259},[246,1716,1717],{"class":248,"line":384},[246,1718,1719],{"class":259},"            },\n",[246,1721,1722],{"class":248,"line":393},[246,1723,987],{"class":259},[246,1725,1726,1728],{"class":248,"line":414},[246,1727,992],{"class":588},[246,1729,918],{"class":259},[246,1731,1732,1734],{"class":248,"line":419},[246,1733,999],{"class":259},[246,1735,1002],{"class":588},[246,1737,1738,1740,1742],{"class":248,"line":427},[246,1739,1007],{"class":259},[246,1741,793],{"class":792},[246,1743,815],{"class":259},[237,1745,1747],{"className":1014,"code":1746,"filename":70,"language":1016,"meta":242,"style":242},"\u003Cscript lang=\"ts\">\nimport { defineController } from '@ginjou\u002Fcore'\nimport { defineControllerContext } from '@ginjou\u002Fsvelte'\n\ndefineControllerContext(defineController({\n    resources: [\n        {\n            name: 'posts',\n            list: '\u002Fposts',\n            show: '\u002Fposts\u002F:id',\n            meta: {\n                fetcherName: 'cms',\n            },\n        },\n    ],\n}))\n\u003C\u002Fscript>\n",[141,1748,1749,1767,1785,1803,1807,1819,1827,1831,1845,1859,1873,1881,1895,1899,1903,1909,1915],{"__ignoreMap":242},[246,1750,1751,1753,1755,1757,1759,1761,1763,1765],{"class":248,"line":249},[246,1752,789],{"class":259},[246,1754,793],{"class":792},[246,1756,800],{"class":796},[246,1758,803],{"class":259},[246,1760,807],{"class":806},[246,1762,241],{"class":810},[246,1764,807],{"class":806},[246,1766,815],{"class":259},[246,1768,1769,1771,1773,1775,1777,1779,1781,1783],{"class":248,"line":263},[246,1770,821],{"class":820},[246,1772,824],{"class":259},[246,1774,827],{"class":588},[246,1776,830],{"class":259},[246,1778,833],{"class":820},[246,1780,836],{"class":806},[246,1782,839],{"class":810},[246,1784,842],{"class":806},[246,1786,1787,1789,1791,1793,1795,1797,1799,1801],{"class":248,"line":280},[246,1788,821],{"class":820},[246,1790,824],{"class":259},[246,1792,851],{"class":588},[246,1794,830],{"class":259},[246,1796,833],{"class":820},[246,1798,836],{"class":806},[246,1800,1071],{"class":810},[246,1802,842],{"class":806},[246,1804,1805],{"class":248,"line":292},[246,1806,868],{"emptyLinePlaceholder":867},[246,1808,1809,1811,1813,1815,1817],{"class":248,"line":301},[246,1810,874],{"class":873},[246,1812,877],{"class":588},[246,1814,880],{"class":873},[246,1816,877],{"class":588},[246,1818,885],{"class":259},[246,1820,1821,1823,1825],{"class":248,"line":309},[246,1822,267],{"class":890},[246,1824,271],{"class":259},[246,1826,895],{"class":588},[246,1828,1829],{"class":248,"line":316},[246,1830,900],{"class":259},[246,1832,1833,1835,1837,1839,1841,1843],{"class":248,"line":326},[246,1834,905],{"class":890},[246,1836,271],{"class":259},[246,1838,836],{"class":806},[246,1840,912],{"class":810},[246,1842,915],{"class":806},[246,1844,918],{"class":259},[246,1846,1847,1849,1851,1853,1855,1857],{"class":248,"line":356},[246,1848,923],{"class":890},[246,1850,271],{"class":259},[246,1852,836],{"class":806},[246,1854,930],{"class":810},[246,1856,915],{"class":806},[246,1858,918],{"class":259},[246,1860,1861,1863,1865,1867,1869,1871],{"class":248,"line":362},[246,1862,955],{"class":890},[246,1864,271],{"class":259},[246,1866,836],{"class":806},[246,1868,962],{"class":810},[246,1870,915],{"class":806},[246,1872,918],{"class":259},[246,1874,1875,1877,1879],{"class":248,"line":370},[246,1876,1694],{"class":890},[246,1878,271],{"class":259},[246,1880,260],{"class":259},[246,1882,1883,1885,1887,1889,1891,1893],{"class":248,"line":377},[246,1884,1703],{"class":890},[246,1886,271],{"class":259},[246,1888,836],{"class":806},[246,1890,1710],{"class":810},[246,1892,915],{"class":806},[246,1894,918],{"class":259},[246,1896,1897],{"class":248,"line":384},[246,1898,1719],{"class":259},[246,1900,1901],{"class":248,"line":393},[246,1902,987],{"class":259},[246,1904,1905,1907],{"class":248,"line":414},[246,1906,992],{"class":588},[246,1908,918],{"class":259},[246,1910,1911,1913],{"class":248,"line":419},[246,1912,999],{"class":259},[246,1914,1002],{"class":588},[246,1916,1917,1919,1921],{"class":248,"line":427},[246,1918,1007],{"class":259},[246,1920,793],{"class":792},[246,1922,815],{"class":259},[107,1924,1925,1926,1928],{},"Then consume it from a controller. Passing ",[141,1927,768],{}," locally still overrides the resource default.",[234,1930,1931,2097],{"sync":777},[237,1932,1934],{"className":780,"code":1933,"filename":62,"language":782,"meta":242,"style":242},"\u003Cscript setup lang=\"ts\">\nimport { useList, useShow } from '@ginjou\u002Fvue'\n\nconst posts = useList({\n    resource: 'posts',\n})\n\nconst preview = useShow({\n    resource: 'posts',\n    id: 1,\n    fetcherName: 'preview',\n})\n\u003C\u002Fscript>\n",[141,1935,1936,1956,1980,1984,1999,2014,2021,2025,2040,2054,2067,2083,2089],{"__ignoreMap":242},[246,1937,1938,1940,1942,1944,1946,1948,1950,1952,1954],{"class":248,"line":249},[246,1939,789],{"class":259},[246,1941,793],{"class":792},[246,1943,797],{"class":796},[246,1945,800],{"class":796},[246,1947,803],{"class":259},[246,1949,807],{"class":806},[246,1951,241],{"class":810},[246,1953,807],{"class":806},[246,1955,815],{"class":259},[246,1957,1958,1960,1962,1965,1968,1970,1972,1974,1976,1978],{"class":248,"line":263},[246,1959,821],{"class":820},[246,1961,824],{"class":259},[246,1963,1964],{"class":588}," useList",[246,1966,1967],{"class":259},",",[246,1969,1264],{"class":588},[246,1971,830],{"class":259},[246,1973,833],{"class":820},[246,1975,836],{"class":806},[246,1977,860],{"class":810},[246,1979,842],{"class":806},[246,1981,1982],{"class":248,"line":280},[246,1983,868],{"emptyLinePlaceholder":867},[246,1985,1986,1988,1991,1993,1995,1997],{"class":248,"line":292},[246,1987,1283],{"class":252},[246,1989,1990],{"class":1286}," posts",[246,1992,1290],{"class":270},[246,1994,1964],{"class":873},[246,1996,877],{"class":588},[246,1998,885],{"class":259},[246,2000,2001,2004,2006,2008,2010,2012],{"class":248,"line":301},[246,2002,2003],{"class":890},"    resource",[246,2005,271],{"class":259},[246,2007,836],{"class":806},[246,2009,912],{"class":810},[246,2011,915],{"class":806},[246,2013,918],{"class":259},[246,2015,2016,2018],{"class":248,"line":309},[246,2017,999],{"class":259},[246,2019,2020],{"class":588},")\n",[246,2022,2023],{"class":248,"line":316},[246,2024,868],{"emptyLinePlaceholder":867},[246,2026,2027,2029,2032,2034,2036,2038],{"class":248,"line":326},[246,2028,1283],{"class":252},[246,2030,2031],{"class":1286}," preview",[246,2033,1290],{"class":270},[246,2035,1264],{"class":873},[246,2037,877],{"class":588},[246,2039,885],{"class":259},[246,2041,2042,2044,2046,2048,2050,2052],{"class":248,"line":356},[246,2043,2003],{"class":890},[246,2045,271],{"class":259},[246,2047,836],{"class":806},[246,2049,912],{"class":810},[246,2051,915],{"class":806},[246,2053,918],{"class":259},[246,2055,2056,2059,2061,2065],{"class":248,"line":362},[246,2057,2058],{"class":890},"    id",[246,2060,271],{"class":259},[246,2062,2064],{"class":2063},"sYThS"," 1",[246,2066,918],{"class":259},[246,2068,2069,2072,2074,2076,2079,2081],{"class":248,"line":370},[246,2070,2071],{"class":890},"    fetcherName",[246,2073,271],{"class":259},[246,2075,836],{"class":806},[246,2077,2078],{"class":810},"preview",[246,2080,915],{"class":806},[246,2082,918],{"class":259},[246,2084,2085,2087],{"class":248,"line":377},[246,2086,999],{"class":259},[246,2088,2020],{"class":588},[246,2090,2091,2093,2095],{"class":248,"line":384},[246,2092,1007],{"class":259},[246,2094,793],{"class":792},[246,2096,815],{"class":259},[237,2098,2100],{"className":1014,"code":2099,"filename":70,"language":1016,"meta":242,"style":242},"\u003Cscript lang=\"ts\">\nimport { useList, useShow } from '@ginjou\u002Fsvelte'\n\nconst posts = useList({\n    resource: 'posts',\n})\n\nconst preview = useShow({\n    resource: 'posts',\n    id: 1,\n    fetcherName: 'preview',\n})\n\u003C\u002Fscript>\n",[141,2101,2102,2120,2142,2146,2160,2174,2180,2184,2198,2212,2222,2236,2242],{"__ignoreMap":242},[246,2103,2104,2106,2108,2110,2112,2114,2116,2118],{"class":248,"line":249},[246,2105,789],{"class":259},[246,2107,793],{"class":792},[246,2109,800],{"class":796},[246,2111,803],{"class":259},[246,2113,807],{"class":806},[246,2115,241],{"class":810},[246,2117,807],{"class":806},[246,2119,815],{"class":259},[246,2121,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140],{"class":248,"line":263},[246,2123,821],{"class":820},[246,2125,824],{"class":259},[246,2127,1964],{"class":588},[246,2129,1967],{"class":259},[246,2131,1264],{"class":588},[246,2133,830],{"class":259},[246,2135,833],{"class":820},[246,2137,836],{"class":806},[246,2139,1071],{"class":810},[246,2141,842],{"class":806},[246,2143,2144],{"class":248,"line":280},[246,2145,868],{"emptyLinePlaceholder":867},[246,2147,2148,2150,2152,2154,2156,2158],{"class":248,"line":292},[246,2149,1283],{"class":252},[246,2151,1990],{"class":1286},[246,2153,1290],{"class":270},[246,2155,1964],{"class":873},[246,2157,877],{"class":588},[246,2159,885],{"class":259},[246,2161,2162,2164,2166,2168,2170,2172],{"class":248,"line":301},[246,2163,2003],{"class":890},[246,2165,271],{"class":259},[246,2167,836],{"class":806},[246,2169,912],{"class":810},[246,2171,915],{"class":806},[246,2173,918],{"class":259},[246,2175,2176,2178],{"class":248,"line":309},[246,2177,999],{"class":259},[246,2179,2020],{"class":588},[246,2181,2182],{"class":248,"line":316},[246,2183,868],{"emptyLinePlaceholder":867},[246,2185,2186,2188,2190,2192,2194,2196],{"class":248,"line":326},[246,2187,1283],{"class":252},[246,2189,2031],{"class":1286},[246,2191,1290],{"class":270},[246,2193,1264],{"class":873},[246,2195,877],{"class":588},[246,2197,885],{"class":259},[246,2199,2200,2202,2204,2206,2208,2210],{"class":248,"line":356},[246,2201,2003],{"class":890},[246,2203,271],{"class":259},[246,2205,836],{"class":806},[246,2207,912],{"class":810},[246,2209,915],{"class":806},[246,2211,918],{"class":259},[246,2213,2214,2216,2218,2220],{"class":248,"line":362},[246,2215,2058],{"class":890},[246,2217,271],{"class":259},[246,2219,2064],{"class":2063},[246,2221,918],{"class":259},[246,2223,2224,2226,2228,2230,2232,2234],{"class":248,"line":370},[246,2225,2071],{"class":890},[246,2227,271],{"class":259},[246,2229,836],{"class":806},[246,2231,2078],{"class":810},[246,2233,915],{"class":806},[246,2235,918],{"class":259},[246,2237,2238,2240],{"class":248,"line":377},[246,2239,999],{"class":259},[246,2241,2020],{"class":588},[246,2243,2244,2246,2248],{"class":248,"line":384},[246,2245,1007],{"class":259},[246,2247,793],{"class":792},[246,2249,815],{"class":259},[107,2251,2252,2253,2256,2257,2259,2260,2256,2262,2264],{},"In that example, ",[141,2254,2255],{},"useList()"," uses ",[141,2258,1710],{},", while ",[141,2261,1227],{},[141,2263,2078],{}," because the local prop has higher priority.",[218,2266,2268],{"id":2267},"custom-parsing","Custom Parsing",[107,2270,2271,2272,2275,2276,774],{},"Each action path can also use an object with ",[141,2273,2274],{},"pattern"," and ",[141,2277,2278],{},"parse",[107,2280,2281],{},"Use this when plain path matching is not enough and the current route needs custom interpretation.",[117,2283,2284,2294],{},[120,2285,2286],{},[123,2287,2288,2291],{},[126,2289,2290],{},"Field",[126,2292,2293],{},"Used for",[133,2295,2296,2305],{},[123,2297,2298,2302],{},[138,2299,2300],{},[141,2301,2274],{},[138,2303,2304],{},"Defines the path shape and is still used for path creation.",[123,2306,2307,2311],{},[138,2308,2309],{},[141,2310,2278],{},[138,2312,2313],{},"Adds custom route inference when pathname matching alone is not enough.",[237,2315,2317],{"className":239,"code":2316,"language":241,"meta":242,"style":242},"import { defineController, ResourceAction } from '@ginjou\u002Fcore'\n\ndefineController({\n    resources: [\n        {\n            name: 'posts',\n            show: {\n                pattern: '\u002Fposts\u002F:id',\n                parse(location) {\n                    if (location.query?.mode !== 'detail')\n                        return\n\n                    const matched = \u002F^\\\u002Fposts\\\u002F([^\u002F]+)$\u002F.exec(location.path)\n                    if (!matched)\n                        return\n\n                    return {\n                        action: ResourceAction.Type.Show,\n                        id: matched[1],\n                    }\n                },\n            },\n        },\n    ],\n})\n",[141,2318,2319,2342,2346,2354,2362,2366,2380,2388,2402,2414,2446,2451,2455,2522,2536,2540,2544,2551,2572,2589,2594,2599,2603,2607,2613],{"__ignoreMap":242},[246,2320,2321,2323,2325,2327,2329,2332,2334,2336,2338,2340],{"class":248,"line":249},[246,2322,821],{"class":820},[246,2324,824],{"class":259},[246,2326,827],{"class":588},[246,2328,1967],{"class":259},[246,2330,2331],{"class":588}," ResourceAction",[246,2333,830],{"class":259},[246,2335,833],{"class":820},[246,2337,836],{"class":806},[246,2339,839],{"class":810},[246,2341,842],{"class":806},[246,2343,2344],{"class":248,"line":263},[246,2345,868],{"emptyLinePlaceholder":867},[246,2347,2348,2350,2352],{"class":248,"line":280},[246,2349,880],{"class":873},[246,2351,877],{"class":588},[246,2353,885],{"class":259},[246,2355,2356,2358,2360],{"class":248,"line":292},[246,2357,267],{"class":890},[246,2359,271],{"class":259},[246,2361,895],{"class":588},[246,2363,2364],{"class":248,"line":301},[246,2365,900],{"class":259},[246,2367,2368,2370,2372,2374,2376,2378],{"class":248,"line":309},[246,2369,905],{"class":890},[246,2371,271],{"class":259},[246,2373,836],{"class":806},[246,2375,912],{"class":810},[246,2377,915],{"class":806},[246,2379,918],{"class":259},[246,2381,2382,2384,2386],{"class":248,"line":316},[246,2383,955],{"class":890},[246,2385,271],{"class":259},[246,2387,260],{"class":259},[246,2389,2390,2392,2394,2396,2398,2400],{"class":248,"line":326},[246,2391,319],{"class":890},[246,2393,271],{"class":259},[246,2395,836],{"class":806},[246,2397,962],{"class":810},[246,2399,915],{"class":806},[246,2401,918],{"class":259},[246,2403,2404,2406,2408,2410,2412],{"class":248,"line":356},[246,2405,330],{"class":329},[246,2407,877],{"class":259},[246,2409,339],{"class":338},[246,2411,347],{"class":259},[246,2413,260],{"class":259},[246,2415,2416,2419,2421,2423,2425,2428,2431,2434,2437,2439,2442,2444],{"class":248,"line":362},[246,2417,2418],{"class":820},"                    if",[246,2420,335],{"class":890},[246,2422,339],{"class":588},[246,2424,774],{"class":259},[246,2426,2427],{"class":588},"query",[246,2429,2430],{"class":259},"?.",[246,2432,2433],{"class":588},"mode",[246,2435,2436],{"class":270}," !==",[246,2438,836],{"class":806},[246,2440,2441],{"class":810},"detail",[246,2443,915],{"class":806},[246,2445,2020],{"class":890},[246,2447,2448],{"class":248,"line":370},[246,2449,2450],{"class":820},"                        return\n",[246,2452,2453],{"class":248,"line":377},[246,2454,868],{"emptyLinePlaceholder":867},[246,2456,2457,2460,2463,2465,2468,2471,2475,2478,2480,2483,2487,2489,2493,2496,2499,2501,2504,2506,2508,2511,2513,2515,2517,2520],{"class":248,"line":384},[246,2458,2459],{"class":252},"                    const",[246,2461,2462],{"class":1286}," matched",[246,2464,1290],{"class":270},[246,2466,2467],{"class":806}," \u002F",[246,2469,2470],{"class":820},"^",[246,2472,2474],{"class":2473},"sqxi8","\\\u002F",[246,2476,912],{"class":2477},"sVXcq",[246,2479,2474],{"class":2473},[246,2481,877],{"class":2482},"s4BAt",[246,2484,2486],{"class":2485},"sMTiH","[",[246,2488,2470],{"class":270},[246,2490,2492],{"class":2491},"sFhLe","\u002F",[246,2494,2495],{"class":2485},"]",[246,2497,2498],{"class":270},"+",[246,2500,347],{"class":2482},[246,2502,2503],{"class":820},"$",[246,2505,2492],{"class":806},[246,2507,774],{"class":259},[246,2509,2510],{"class":873},"exec",[246,2512,877],{"class":890},[246,2514,339],{"class":588},[246,2516,774],{"class":259},[246,2518,2519],{"class":588},"path",[246,2521,2020],{"class":890},[246,2523,2524,2526,2528,2531,2534],{"class":248,"line":393},[246,2525,2418],{"class":820},[246,2527,335],{"class":890},[246,2529,2530],{"class":270},"!",[246,2532,2533],{"class":588},"matched",[246,2535,2020],{"class":890},[246,2537,2538],{"class":248,"line":414},[246,2539,2450],{"class":820},[246,2541,2542],{"class":248,"line":419},[246,2543,868],{"emptyLinePlaceholder":867},[246,2545,2546,2549],{"class":248,"line":427},[246,2547,2548],{"class":820},"                    return",[246,2550,260],{"class":259},[246,2552,2553,2556,2558,2560,2562,2565,2567,2570],{"class":248,"line":434},[246,2554,2555],{"class":890},"                        action",[246,2557,271],{"class":259},[246,2559,2331],{"class":588},[246,2561,774],{"class":259},[246,2563,2564],{"class":588},"Type",[246,2566,774],{"class":259},[246,2568,2569],{"class":588},"Show",[246,2571,918],{"class":259},[246,2573,2574,2577,2579,2581,2583,2585,2587],{"class":248,"line":441},[246,2575,2576],{"class":890},"                        id",[246,2578,271],{"class":259},[246,2580,2462],{"class":588},[246,2582,2486],{"class":890},[246,2584,1527],{"class":2063},[246,2586,2495],{"class":890},[246,2588,918],{"class":259},[246,2590,2591],{"class":248,"line":450},[246,2592,2593],{"class":259},"                    }\n",[246,2595,2596],{"class":248,"line":471},[246,2597,2598],{"class":259},"                },\n",[246,2600,2601],{"class":248,"line":476},[246,2602,1719],{"class":259},[246,2604,2605],{"class":248,"line":484},[246,2606,987],{"class":259},[246,2608,2609,2611],{"class":248,"line":491},[246,2610,992],{"class":588},[246,2612,918],{"class":259},[246,2614,2615,2617],{"class":248,"line":498},[246,2616,999],{"class":259},[246,2618,2020],{"class":588},[107,2620,2621],{},"That lets route inference depend on more than the pathname.",[107,2623,2624,2625,2627,2628,2630,2631,774],{},"Path creation still uses ",[141,2626,962],{},", because path creation reads ",[141,2629,2274],{},", not ",[141,2632,2278],{},[218,2634,2636],{"id":2635},"current-resource","Current Resource",[107,2638,2639,2642],{},[141,2640,2641],{},"useResource()"," resolves one resource definition and its parsed route state.",[107,2644,2645,2646,2648,2649,2651],{},"When you pass ",[141,2647,663],{},", Ginjou resolves that resource directly. If router context also exists, it still parses the current location against that resource. When you omit ",[141,2650,663],{},", Ginjou checks the registered resources in order and returns the first one that matches the current location.",[117,2653,2654,2662],{},[120,2655,2656],{},[123,2657,2658,2660],{},[126,2659,2290],{},[126,2661,627],{},[133,2663,2664,2674,2691],{},[123,2665,2666,2671],{},[138,2667,2668],{},[141,2669,2670],{},"resource",[138,2672,2673],{},"The matched resource definition.",[123,2675,2676,2681],{},[138,2677,2678],{},[141,2679,2680],{},"action",[138,2682,2683,2684,1207,2686,2688,2689,774],{},"The matched action such as ",[141,2685,673],{},[141,2687,693],{},", or ",[141,2690,703],{},[123,2692,2693,2697],{},[138,2694,2695],{},[141,2696,1386],{},[138,2698,2699],{},"The parsed record id when the route includes one.",[107,2701,2702,2703,774],{},"If resource context is missing, or no definition matches, the result is ",[141,2704,2705],{},"undefined",[234,2707,2708,2922],{"sync":777},[237,2709,2711],{"className":780,"code":2710,"filename":62,"language":782,"meta":242,"style":242},"\u003Cscript setup lang=\"ts\">\nimport { useResource } from '@ginjou\u002Fvue'\n\nconst inferred = useResource()\nconst posts = useResource({\n    name: 'posts',\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n    \u003Cdiv>\n        \u003Cp>Current resource: {{ inferred?.resource.name }}\u003C\u002Fp>\n        \u003Cp>Current action: {{ inferred?.action }}\u003C\u002Fp>\n        \u003Cp>Current id: {{ inferred?.id }}\u003C\u002Fp>\n        \u003Cp>Explicit resource: {{ posts?.resource.name }}\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n",[141,2712,2713,2733,2752,2756,2769,2783,2798,2804,2812,2816,2825,2835,2854,2871,2888,2905,2914],{"__ignoreMap":242},[246,2714,2715,2717,2719,2721,2723,2725,2727,2729,2731],{"class":248,"line":249},[246,2716,789],{"class":259},[246,2718,793],{"class":792},[246,2720,797],{"class":796},[246,2722,800],{"class":796},[246,2724,803],{"class":259},[246,2726,807],{"class":806},[246,2728,241],{"class":810},[246,2730,807],{"class":806},[246,2732,815],{"class":259},[246,2734,2735,2737,2739,2742,2744,2746,2748,2750],{"class":248,"line":263},[246,2736,821],{"class":820},[246,2738,824],{"class":259},[246,2740,2741],{"class":588}," useResource",[246,2743,830],{"class":259},[246,2745,833],{"class":820},[246,2747,836],{"class":806},[246,2749,860],{"class":810},[246,2751,842],{"class":806},[246,2753,2754],{"class":248,"line":280},[246,2755,868],{"emptyLinePlaceholder":867},[246,2757,2758,2760,2763,2765,2767],{"class":248,"line":292},[246,2759,1283],{"class":252},[246,2761,2762],{"class":1286}," inferred",[246,2764,1290],{"class":270},[246,2766,2741],{"class":873},[246,2768,1295],{"class":588},[246,2770,2771,2773,2775,2777,2779,2781],{"class":248,"line":301},[246,2772,1283],{"class":252},[246,2774,1990],{"class":1286},[246,2776,1290],{"class":270},[246,2778,2741],{"class":873},[246,2780,877],{"class":588},[246,2782,885],{"class":259},[246,2784,2785,2788,2790,2792,2794,2796],{"class":248,"line":309},[246,2786,2787],{"class":890},"    name",[246,2789,271],{"class":259},[246,2791,836],{"class":806},[246,2793,912],{"class":810},[246,2795,915],{"class":806},[246,2797,918],{"class":259},[246,2799,2800,2802],{"class":248,"line":316},[246,2801,999],{"class":259},[246,2803,2020],{"class":588},[246,2805,2806,2808,2810],{"class":248,"line":326},[246,2807,1007],{"class":259},[246,2809,793],{"class":792},[246,2811,815],{"class":259},[246,2813,2814],{"class":248,"line":356},[246,2815,868],{"emptyLinePlaceholder":867},[246,2817,2818,2820,2823],{"class":248,"line":362},[246,2819,789],{"class":259},[246,2821,2822],{"class":792},"template",[246,2824,815],{"class":259},[246,2826,2827,2830,2833],{"class":248,"line":370},[246,2828,2829],{"class":259},"    \u003C",[246,2831,2832],{"class":792},"div",[246,2834,815],{"class":259},[246,2836,2837,2840,2842,2845,2848,2850,2852],{"class":248,"line":377},[246,2838,2839],{"class":259},"        \u003C",[246,2841,107],{"class":792},[246,2843,2844],{"class":259},">",[246,2846,2847],{"class":588},"Current resource: {{ inferred?.resource.name }}",[246,2849,1007],{"class":259},[246,2851,107],{"class":792},[246,2853,815],{"class":259},[246,2855,2856,2858,2860,2862,2865,2867,2869],{"class":248,"line":384},[246,2857,2839],{"class":259},[246,2859,107],{"class":792},[246,2861,2844],{"class":259},[246,2863,2864],{"class":588},"Current action: {{ inferred?.action }}",[246,2866,1007],{"class":259},[246,2868,107],{"class":792},[246,2870,815],{"class":259},[246,2872,2873,2875,2877,2879,2882,2884,2886],{"class":248,"line":393},[246,2874,2839],{"class":259},[246,2876,107],{"class":792},[246,2878,2844],{"class":259},[246,2880,2881],{"class":588},"Current id: {{ inferred?.id }}",[246,2883,1007],{"class":259},[246,2885,107],{"class":792},[246,2887,815],{"class":259},[246,2889,2890,2892,2894,2896,2899,2901,2903],{"class":248,"line":414},[246,2891,2839],{"class":259},[246,2893,107],{"class":792},[246,2895,2844],{"class":259},[246,2897,2898],{"class":588},"Explicit resource: {{ posts?.resource.name }}",[246,2900,1007],{"class":259},[246,2902,107],{"class":792},[246,2904,815],{"class":259},[246,2906,2907,2910,2912],{"class":248,"line":419},[246,2908,2909],{"class":259},"    \u003C\u002F",[246,2911,2832],{"class":792},[246,2913,815],{"class":259},[246,2915,2916,2918,2920],{"class":248,"line":427},[246,2917,1007],{"class":259},[246,2919,2822],{"class":792},[246,2921,815],{"class":259},[237,2923,2925],{"className":1014,"code":2924,"filename":70,"language":1016,"meta":242,"style":242},"\u003Cscript lang=\"ts\">\nimport { useResource } from '@ginjou\u002Fsvelte'\n\nconst inferred = useResource()\nconst posts = useResource({\n    name: 'posts',\n})\n\u003C\u002Fscript>\n\n\u003Cdiv>\n    \u003Cp>Current resource: {inferred?.resource.name}\u003C\u002Fp>\n    \u003Cp>Current action: {inferred?.action}\u003C\u002Fp>\n    \u003Cp>Current id: {inferred?.id}\u003C\u002Fp>\n    \u003Cp>Explicit resource: {posts?.resource.name}\u003C\u002Fp>\n\u003C\u002Fdiv>\n",[141,2926,2927,2945,2963,2967,2979,2993,3007,3013,3021,3025,3033,3067,3094,3121,3152],{"__ignoreMap":242},[246,2928,2929,2931,2933,2935,2937,2939,2941,2943],{"class":248,"line":249},[246,2930,789],{"class":259},[246,2932,793],{"class":792},[246,2934,800],{"class":796},[246,2936,803],{"class":259},[246,2938,807],{"class":806},[246,2940,241],{"class":810},[246,2942,807],{"class":806},[246,2944,815],{"class":259},[246,2946,2947,2949,2951,2953,2955,2957,2959,2961],{"class":248,"line":263},[246,2948,821],{"class":820},[246,2950,824],{"class":259},[246,2952,2741],{"class":588},[246,2954,830],{"class":259},[246,2956,833],{"class":820},[246,2958,836],{"class":806},[246,2960,1071],{"class":810},[246,2962,842],{"class":806},[246,2964,2965],{"class":248,"line":280},[246,2966,868],{"emptyLinePlaceholder":867},[246,2968,2969,2971,2973,2975,2977],{"class":248,"line":292},[246,2970,1283],{"class":252},[246,2972,2762],{"class":1286},[246,2974,1290],{"class":270},[246,2976,2741],{"class":873},[246,2978,1295],{"class":588},[246,2980,2981,2983,2985,2987,2989,2991],{"class":248,"line":301},[246,2982,1283],{"class":252},[246,2984,1990],{"class":1286},[246,2986,1290],{"class":270},[246,2988,2741],{"class":873},[246,2990,877],{"class":588},[246,2992,885],{"class":259},[246,2994,2995,2997,2999,3001,3003,3005],{"class":248,"line":309},[246,2996,2787],{"class":890},[246,2998,271],{"class":259},[246,3000,836],{"class":806},[246,3002,912],{"class":810},[246,3004,915],{"class":806},[246,3006,918],{"class":259},[246,3008,3009,3011],{"class":248,"line":316},[246,3010,999],{"class":259},[246,3012,2020],{"class":588},[246,3014,3015,3017,3019],{"class":248,"line":326},[246,3016,1007],{"class":259},[246,3018,793],{"class":792},[246,3020,815],{"class":259},[246,3022,3023],{"class":248,"line":356},[246,3024,868],{"emptyLinePlaceholder":867},[246,3026,3027,3029,3031],{"class":248,"line":362},[246,3028,789],{"class":259},[246,3030,2832],{"class":792},[246,3032,815],{"class":259},[246,3034,3035,3037,3039,3041,3044,3048,3051,3053,3055,3057,3059,3061,3063,3065],{"class":248,"line":370},[246,3036,2829],{"class":259},[246,3038,107],{"class":792},[246,3040,2844],{"class":259},[246,3042,3043],{"class":588},"Current resource: ",[246,3045,3047],{"class":3046},"sW3yT","{",[246,3049,3050],{"class":588},"inferred",[246,3052,2430],{"class":259},[246,3054,2670],{"class":588},[246,3056,774],{"class":259},[246,3058,663],{"class":588},[246,3060,999],{"class":3046},[246,3062,1007],{"class":259},[246,3064,107],{"class":792},[246,3066,815],{"class":259},[246,3068,3069,3071,3073,3075,3078,3080,3082,3084,3086,3088,3090,3092],{"class":248,"line":377},[246,3070,2829],{"class":259},[246,3072,107],{"class":792},[246,3074,2844],{"class":259},[246,3076,3077],{"class":588},"Current action: ",[246,3079,3047],{"class":3046},[246,3081,3050],{"class":588},[246,3083,2430],{"class":259},[246,3085,2680],{"class":588},[246,3087,999],{"class":3046},[246,3089,1007],{"class":259},[246,3091,107],{"class":792},[246,3093,815],{"class":259},[246,3095,3096,3098,3100,3102,3105,3107,3109,3111,3113,3115,3117,3119],{"class":248,"line":384},[246,3097,2829],{"class":259},[246,3099,107],{"class":792},[246,3101,2844],{"class":259},[246,3103,3104],{"class":588},"Current id: ",[246,3106,3047],{"class":3046},[246,3108,3050],{"class":588},[246,3110,2430],{"class":259},[246,3112,1386],{"class":588},[246,3114,999],{"class":3046},[246,3116,1007],{"class":259},[246,3118,107],{"class":792},[246,3120,815],{"class":259},[246,3122,3123,3125,3127,3129,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150],{"class":248,"line":393},[246,3124,2829],{"class":259},[246,3126,107],{"class":792},[246,3128,2844],{"class":259},[246,3130,3131],{"class":588},"Explicit resource: ",[246,3133,3047],{"class":3046},[246,3135,912],{"class":588},[246,3137,2430],{"class":259},[246,3139,2670],{"class":588},[246,3141,774],{"class":259},[246,3143,663],{"class":588},[246,3145,999],{"class":3046},[246,3147,1007],{"class":259},[246,3149,107],{"class":792},[246,3151,815],{"class":259},[246,3153,3154,3156,3158],{"class":248,"line":414},[246,3155,1007],{"class":259},[246,3157,2832],{"class":792},[246,3159,815],{"class":259},[107,3161,3162,3163,2275,3165,774],{},"This is the lower-level primitive behind route-aware controllers such as ",[141,3164,1227],{},[141,3166,3167],{},"useEdit()",[218,3169,3171],{"id":3170},"build-resource-paths","Build Resource Paths",[107,3173,3174,3177],{},[141,3175,3176],{},"useResourcePath()"," builds one action path from the resolved resource definition.",[107,3179,3180],{},"You can pass a resource name explicitly, or let Ginjou start from the current resolved resource.",[117,3182,3183,3193],{},[120,3184,3185],{},[123,3186,3187,3190],{},[126,3188,3189],{},"Input",[126,3191,3192],{},"Effect",[133,3194,3195,3212,3221],{},[123,3196,3197,3201],{},[138,3198,3199],{},[141,3200,2680],{},[138,3202,3203,3204,1207,3206,1207,3208,2688,3210,774],{},"Picks the target action path such as ",[141,3205,673],{},[141,3207,683],{},[141,3209,693],{},[141,3211,703],{},[123,3213,3214,3218],{},[138,3215,3216],{},[141,3217,2670],{},[138,3219,3220],{},"Resolves that resource instead of using the current one.",[123,3222,3223,3228],{},[138,3224,3225],{},[141,3226,3227],{},"params",[138,3229,3230,3231,3234],{},"Fills route params such as ",[141,3232,3233],{},":id"," and overrides inferred values when both exist.",[107,3236,3237,3238,3240],{},"When the current resource already includes an ",[141,3239,1386],{},", path creation can reuse it.",[234,3242,3243,3456],{"sync":777},[237,3244,3246],{"className":780,"code":3245,"filename":62,"language":782,"meta":242,"style":242},"\u003Cscript setup lang=\"ts\">\nimport { ResourceAction } from '@ginjou\u002Fcore'\nimport { useResourcePath } from '@ginjou\u002Fvue'\n\nconst resourcePath = useResourcePath({\n    action: ResourceAction.Type.Create,\n    resource: 'posts',\n})\n\nconst editPath = useResourcePath({\n    action: ResourceAction.Type.Edit,\n    resource: 'posts',\n    params: {\n        id: 42,\n    },\n})\n\u003C\u002Fscript>\n",[141,3247,3248,3268,3286,3305,3309,3324,3344,3358,3364,3368,3383,3402,3416,3425,3437,3442,3448],{"__ignoreMap":242},[246,3249,3250,3252,3254,3256,3258,3260,3262,3264,3266],{"class":248,"line":249},[246,3251,789],{"class":259},[246,3253,793],{"class":792},[246,3255,797],{"class":796},[246,3257,800],{"class":796},[246,3259,803],{"class":259},[246,3261,807],{"class":806},[246,3263,241],{"class":810},[246,3265,807],{"class":806},[246,3267,815],{"class":259},[246,3269,3270,3272,3274,3276,3278,3280,3282,3284],{"class":248,"line":263},[246,3271,821],{"class":820},[246,3273,824],{"class":259},[246,3275,2331],{"class":588},[246,3277,830],{"class":259},[246,3279,833],{"class":820},[246,3281,836],{"class":806},[246,3283,839],{"class":810},[246,3285,842],{"class":806},[246,3287,3288,3290,3292,3295,3297,3299,3301,3303],{"class":248,"line":280},[246,3289,821],{"class":820},[246,3291,824],{"class":259},[246,3293,3294],{"class":588}," useResourcePath",[246,3296,830],{"class":259},[246,3298,833],{"class":820},[246,3300,836],{"class":806},[246,3302,860],{"class":810},[246,3304,842],{"class":806},[246,3306,3307],{"class":248,"line":292},[246,3308,868],{"emptyLinePlaceholder":867},[246,3310,3311,3313,3316,3318,3320,3322],{"class":248,"line":301},[246,3312,1283],{"class":252},[246,3314,3315],{"class":1286}," resourcePath",[246,3317,1290],{"class":270},[246,3319,3294],{"class":873},[246,3321,877],{"class":588},[246,3323,885],{"class":259},[246,3325,3326,3329,3331,3333,3335,3337,3339,3342],{"class":248,"line":309},[246,3327,3328],{"class":890},"    action",[246,3330,271],{"class":259},[246,3332,2331],{"class":588},[246,3334,774],{"class":259},[246,3336,2564],{"class":588},[246,3338,774],{"class":259},[246,3340,3341],{"class":588},"Create",[246,3343,918],{"class":259},[246,3345,3346,3348,3350,3352,3354,3356],{"class":248,"line":316},[246,3347,2003],{"class":890},[246,3349,271],{"class":259},[246,3351,836],{"class":806},[246,3353,912],{"class":810},[246,3355,915],{"class":806},[246,3357,918],{"class":259},[246,3359,3360,3362],{"class":248,"line":326},[246,3361,999],{"class":259},[246,3363,2020],{"class":588},[246,3365,3366],{"class":248,"line":356},[246,3367,868],{"emptyLinePlaceholder":867},[246,3369,3370,3372,3375,3377,3379,3381],{"class":248,"line":362},[246,3371,1283],{"class":252},[246,3373,3374],{"class":1286}," editPath",[246,3376,1290],{"class":270},[246,3378,3294],{"class":873},[246,3380,877],{"class":588},[246,3382,885],{"class":259},[246,3384,3385,3387,3389,3391,3393,3395,3397,3400],{"class":248,"line":370},[246,3386,3328],{"class":890},[246,3388,271],{"class":259},[246,3390,2331],{"class":588},[246,3392,774],{"class":259},[246,3394,2564],{"class":588},[246,3396,774],{"class":259},[246,3398,3399],{"class":588},"Edit",[246,3401,918],{"class":259},[246,3403,3404,3406,3408,3410,3412,3414],{"class":248,"line":377},[246,3405,2003],{"class":890},[246,3407,271],{"class":259},[246,3409,836],{"class":806},[246,3411,912],{"class":810},[246,3413,915],{"class":806},[246,3415,918],{"class":259},[246,3417,3418,3421,3423],{"class":248,"line":384},[246,3419,3420],{"class":890},"    params",[246,3422,271],{"class":259},[246,3424,260],{"class":259},[246,3426,3427,3430,3432,3435],{"class":248,"line":393},[246,3428,3429],{"class":890},"        id",[246,3431,271],{"class":259},[246,3433,3434],{"class":2063}," 42",[246,3436,918],{"class":259},[246,3438,3439],{"class":248,"line":414},[246,3440,3441],{"class":259},"    },\n",[246,3443,3444,3446],{"class":248,"line":419},[246,3445,999],{"class":259},[246,3447,2020],{"class":588},[246,3449,3450,3452,3454],{"class":248,"line":427},[246,3451,1007],{"class":259},[246,3453,793],{"class":792},[246,3455,815],{"class":259},[237,3457,3459],{"className":1014,"code":3458,"filename":70,"language":1016,"meta":242,"style":242},"\u003Cscript lang=\"ts\">\nimport { ResourceAction } from '@ginjou\u002Fcore'\nimport { useResourcePath } from '@ginjou\u002Fsvelte'\n\nconst resourcePath = useResourcePath({\n    action: ResourceAction.Type.Create,\n    resource: 'posts',\n})\n\nconst editPath = useResourcePath({\n    action: ResourceAction.Type.Edit,\n    resource: 'posts',\n    params: {\n        id: 42,\n    },\n})\n\u003C\u002Fscript>\n",[141,3460,3461,3479,3497,3515,3519,3533,3551,3565,3571,3575,3589,3607,3621,3629,3639,3643,3649],{"__ignoreMap":242},[246,3462,3463,3465,3467,3469,3471,3473,3475,3477],{"class":248,"line":249},[246,3464,789],{"class":259},[246,3466,793],{"class":792},[246,3468,800],{"class":796},[246,3470,803],{"class":259},[246,3472,807],{"class":806},[246,3474,241],{"class":810},[246,3476,807],{"class":806},[246,3478,815],{"class":259},[246,3480,3481,3483,3485,3487,3489,3491,3493,3495],{"class":248,"line":263},[246,3482,821],{"class":820},[246,3484,824],{"class":259},[246,3486,2331],{"class":588},[246,3488,830],{"class":259},[246,3490,833],{"class":820},[246,3492,836],{"class":806},[246,3494,839],{"class":810},[246,3496,842],{"class":806},[246,3498,3499,3501,3503,3505,3507,3509,3511,3513],{"class":248,"line":280},[246,3500,821],{"class":820},[246,3502,824],{"class":259},[246,3504,3294],{"class":588},[246,3506,830],{"class":259},[246,3508,833],{"class":820},[246,3510,836],{"class":806},[246,3512,1071],{"class":810},[246,3514,842],{"class":806},[246,3516,3517],{"class":248,"line":292},[246,3518,868],{"emptyLinePlaceholder":867},[246,3520,3521,3523,3525,3527,3529,3531],{"class":248,"line":301},[246,3522,1283],{"class":252},[246,3524,3315],{"class":1286},[246,3526,1290],{"class":270},[246,3528,3294],{"class":873},[246,3530,877],{"class":588},[246,3532,885],{"class":259},[246,3534,3535,3537,3539,3541,3543,3545,3547,3549],{"class":248,"line":309},[246,3536,3328],{"class":890},[246,3538,271],{"class":259},[246,3540,2331],{"class":588},[246,3542,774],{"class":259},[246,3544,2564],{"class":588},[246,3546,774],{"class":259},[246,3548,3341],{"class":588},[246,3550,918],{"class":259},[246,3552,3553,3555,3557,3559,3561,3563],{"class":248,"line":316},[246,3554,2003],{"class":890},[246,3556,271],{"class":259},[246,3558,836],{"class":806},[246,3560,912],{"class":810},[246,3562,915],{"class":806},[246,3564,918],{"class":259},[246,3566,3567,3569],{"class":248,"line":326},[246,3568,999],{"class":259},[246,3570,2020],{"class":588},[246,3572,3573],{"class":248,"line":356},[246,3574,868],{"emptyLinePlaceholder":867},[246,3576,3577,3579,3581,3583,3585,3587],{"class":248,"line":362},[246,3578,1283],{"class":252},[246,3580,3374],{"class":1286},[246,3582,1290],{"class":270},[246,3584,3294],{"class":873},[246,3586,877],{"class":588},[246,3588,885],{"class":259},[246,3590,3591,3593,3595,3597,3599,3601,3603,3605],{"class":248,"line":370},[246,3592,3328],{"class":890},[246,3594,271],{"class":259},[246,3596,2331],{"class":588},[246,3598,774],{"class":259},[246,3600,2564],{"class":588},[246,3602,774],{"class":259},[246,3604,3399],{"class":588},[246,3606,918],{"class":259},[246,3608,3609,3611,3613,3615,3617,3619],{"class":248,"line":377},[246,3610,2003],{"class":890},[246,3612,271],{"class":259},[246,3614,836],{"class":806},[246,3616,912],{"class":810},[246,3618,915],{"class":806},[246,3620,918],{"class":259},[246,3622,3623,3625,3627],{"class":248,"line":384},[246,3624,3420],{"class":890},[246,3626,271],{"class":259},[246,3628,260],{"class":259},[246,3630,3631,3633,3635,3637],{"class":248,"line":393},[246,3632,3429],{"class":890},[246,3634,271],{"class":259},[246,3636,3434],{"class":2063},[246,3638,918],{"class":259},[246,3640,3641],{"class":248,"line":414},[246,3642,3441],{"class":259},[246,3644,3645,3647],{"class":248,"line":419},[246,3646,999],{"class":259},[246,3648,2020],{"class":588},[246,3650,3651,3653,3655],{"class":248,"line":427},[246,3652,1007],{"class":259},[246,3654,793],{"class":792},[246,3656,815],{"class":259},[117,3658,3659,3669],{},[120,3660,3661],{},[123,3662,3663,3666],{},[126,3664,3665],{},"Variable",[126,3667,3668],{},"Result",[133,3670,3671,3682],{},[123,3672,3673,3678],{},[138,3674,3675],{},[141,3676,3677],{},"resourcePath",[138,3679,3680],{},[141,3681,946],{},[123,3683,3684,3689],{},[138,3685,3686],{},[141,3687,3688],{},"editPath",[138,3690,3691],{},[141,3692,1465],{},[107,3694,3695,3696,774],{},"If the resource cannot be resolved, or the target action path is missing, the result is ",[141,3697,2705],{},[107,3699,3700],{},"This keeps links aligned with the same resource definitions that power your controllers.",[3702,3703,3704],"style",{},"html pre.shiki code .srJo8, html code.shiki .srJo8{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sKvfc, html code.shiki .sKvfc{--shiki-light:#E2931D;--shiki-light-text-decoration:inherit;--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sIDdj, html code.shiki .sIDdj{--shiki-light:#E53935;--shiki-default:#E36209;--shiki-dark:#FFAB70;--shiki-sepia:#F8F8F2}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .s_MOj, html code.shiki .s_MOj{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sY_X6, html code.shiki .sY_X6{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sQgqH, html code.shiki .sQgqH{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sHsBP, html code.shiki .sHsBP{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D;--shiki-sepia:#F92672}html pre.shiki code .s_lYk, html code.shiki .s_lYk{--shiki-light:#9C3EDA;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sRxSC, html code.shiki .sRxSC{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}html pre.shiki code .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .squCx, html code.shiki .squCx{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .s91G_, html code.shiki .s91G_{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html pre.shiki code .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sqxi8, html code.shiki .sqxi8{--shiki-light:#90A4AE;--shiki-light-font-weight:inherit;--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold;--shiki-sepia:#AE81FF;--shiki-sepia-font-weight:inherit}html pre.shiki code .sVXcq, html code.shiki .sVXcq{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#DBEDFF;--shiki-sepia:#E6DB74}html pre.shiki code .s4BAt, html code.shiki .s4BAt{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#DBEDFF;--shiki-sepia:#E6DB74}html pre.shiki code .sMTiH, html code.shiki .sMTiH{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sFhLe, html code.shiki .sFhLe{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sW3yT, html code.shiki .sW3yT{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F92672}",{"title":242,"searchDepth":263,"depth":263,"links":3706},[3707,3711,3712,3713,3714,3715],{"id":220,"depth":263,"text":221,"children":3708},[3709,3710],{"id":231,"depth":280,"text":232},{"id":614,"depth":280,"text":615},{"id":1198,"depth":263,"text":1199},{"id":1480,"depth":263,"text":1481},{"id":2267,"depth":263,"text":2268},{"id":2635,"depth":263,"text":2636},{"id":3170,"depth":263,"text":3171},"Explain resource definitions, action paths, and the model behind route-aware controllers.","md",null,{},{"title":51,"description":3716},"u7CQHwKReol9xRLOFKUOtch0XtO4Dp05UXK1FSrVe48",[3723,3725],{"title":47,"path":48,"stem":49,"description":3724,"children":-1},"Explain the i18n contract, locale state, and translation composables.",{"title":62,"path":63,"stem":64,"description":3726,"children":-1},"Explain the minimal setup, provider registration, and ecosystem adapters in @ginjou\u002Fvue.",1784626527255]