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