[{"data":1,"prerenderedAt":3260},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fpackages\u002Fpapr":176,"\u002Fdocs\u002Fpackages\u002Fpapr-surround":3255},[4,21,86,158],{"title":5,"path":6,"stem":7,"children":8,"status":11,"icon":20},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[9,12,16],{"title":10,"path":6,"stem":7,"status":11},"Introduction",null,{"title":13,"path":14,"stem":15,"status":11},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation",{"title":17,"path":18,"stem":19,"status":11},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","1.docs\u002F1.getting-started\u002F3.quick-start",false,{"title":22,"path":23,"stem":24,"children":25,"status":11,"icon":20},"Core Concepts","\u002Fdocs\u002Fcore-concepts","1.docs\u002F2.core-concepts\u002F1.index",[26,28,32,36,46,50,54,58,62,66,70,74,78,82],{"title":27,"path":23,"stem":24,"status":11},"Overview",{"title":29,"path":30,"stem":31,"status":11},"Response","\u002Fdocs\u002Fcore-concepts\u002Fresponse","1.docs\u002F2.core-concepts\u002F10.response",{"title":33,"path":34,"stem":35,"status":11},"Testing","\u002Fdocs\u002Fcore-concepts\u002Ftesting","1.docs\u002F2.core-concepts\u002F12.testing",{"title":37,"path":38,"stem":39,"children":40,"status":11,"icon":20,"defaultOpen":20},"Decorators","\u002Fdocs\u002Fcore-concepts\u002Fdecorators","1.docs\u002F2.core-concepts\u002F13.decorators\u002F1.index",[41,42],{"title":27,"path":38,"stem":39,"status":11},{"title":43,"path":44,"stem":45,"status":11},"Custom","\u002Fdocs\u002Fcore-concepts\u002Fdecorators\u002Fcustom","1.docs\u002F2.core-concepts\u002F13.decorators\u002F2.custom",{"title":47,"path":48,"stem":49,"status":11},"Discovery Service","\u002Fdocs\u002Fcore-concepts\u002Fdiscovery","1.docs\u002F2.core-concepts\u002F14.discovery",{"title":51,"path":52,"stem":53,"status":11},"Application Lifecycle","\u002Fdocs\u002Fcore-concepts\u002Fapp-lifecycle","1.docs\u002F2.core-concepts\u002F15.app-lifecycle",{"title":55,"path":56,"stem":57,"status":11},"Controllers","\u002Fdocs\u002Fcore-concepts\u002Fcontrollers","1.docs\u002F2.core-concepts\u002F2.controllers",{"title":59,"path":60,"stem":61,"status":11},"Routing","\u002Fdocs\u002Fcore-concepts\u002Frouting","1.docs\u002F2.core-concepts\u002F3.routing",{"title":63,"path":64,"stem":65,"status":11},"Providers","\u002Fdocs\u002Fcore-concepts\u002Fproviders","1.docs\u002F2.core-concepts\u002F4.providers",{"title":67,"path":68,"stem":69,"status":11},"Modules","\u002Fdocs\u002Fcore-concepts\u002Fmodules","1.docs\u002F2.core-concepts\u002F5.modules",{"title":71,"path":72,"stem":73,"status":11},"Configuration","\u002Fdocs\u002Fcore-concepts\u002Fconfiguration","1.docs\u002F2.core-concepts\u002F6.configuration",{"title":75,"path":76,"stem":77,"status":11},"Middleware","\u002Fdocs\u002Fcore-concepts\u002Fmiddleware","1.docs\u002F2.core-concepts\u002F7.middleware",{"title":79,"path":80,"stem":81,"status":11},"Guards","\u002Fdocs\u002Fcore-concepts\u002Fguards","1.docs\u002F2.core-concepts\u002F8.guards",{"title":83,"path":84,"stem":85,"status":11},"Exceptions","\u002Fdocs\u002Fcore-concepts\u002Fexceptions","1.docs\u002F2.core-concepts\u002F9.exceptions",{"title":87,"path":88,"stem":89,"children":90,"status":11,"icon":20},"Packages","\u002Fdocs\u002Fpackages","1.docs\u002F3.packages\u002F1.index",[91,92,97,108,112,130,134,138,142,146,150,154],{"title":27,"path":88,"stem":89,"status":11},{"title":93,"path":94,"stem":95,"status":96},"CLI","\u002Fdocs\u002Fpackages\u002Fcli","1.docs\u002F3.packages\u002F10.cli","experimental",{"title":98,"path":99,"stem":100,"children":101,"status":11,"icon":20,"defaultOpen":20},"Events","\u002Fdocs\u002Fpackages\u002Fmessaging","1.docs\u002F3.packages\u002F11.messaging\u002F1.index",[102,104],{"title":27,"path":99,"stem":100,"status":103},"beta",{"title":105,"path":106,"stem":107,"status":96},"Redis","\u002Fdocs\u002Fpackages\u002Fmessaging\u002Fredis","1.docs\u002F3.packages\u002F11.messaging\u002F2.redis",{"title":109,"path":110,"stem":111,"status":103},"Serve Static","\u002Fdocs\u002Fpackages\u002Fserve-static","1.docs\u002F3.packages\u002F12.serve-static",{"title":113,"path":114,"stem":115,"children":116,"status":11,"icon":20,"defaultOpen":20},"Auth","\u002Fdocs\u002Fpackages\u002Fauth","1.docs\u002F3.packages\u002F2.auth\u002F1.index",[117,118,122,126],{"title":27,"path":114,"stem":115,"status":103},{"title":119,"path":120,"stem":121,"status":103},"JWT Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Fjwt","1.docs\u002F3.packages\u002F2.auth\u002F2.jwt",{"title":123,"path":124,"stem":125,"status":103},"Local Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Flocal","1.docs\u002F3.packages\u002F2.auth\u002F3.local",{"title":127,"path":128,"stem":129,"status":96},"OAuth2 Provider","\u002Fdocs\u002Fpackages\u002Fauth\u002Foauth2","1.docs\u002F3.packages\u002F2.auth\u002F4.oauth2",{"title":131,"path":132,"stem":133,"status":103},"JWT","\u002Fdocs\u002Fpackages\u002Fjwt","1.docs\u002F3.packages\u002F3.jwt",{"title":135,"path":136,"stem":137,"status":103},"Drizzle","\u002Fdocs\u002Fpackages\u002Fdrizzle","1.docs\u002F3.packages\u002F4.drizzle",{"title":139,"path":140,"stem":141,"status":103},"Papr","\u002Fdocs\u002Fpackages\u002Fpapr","1.docs\u002F3.packages\u002F5.papr",{"title":143,"path":144,"stem":145,"status":103},"Mongoose","\u002Fdocs\u002Fpackages\u002Fmongoose","1.docs\u002F3.packages\u002F6.mongoose",{"title":147,"path":148,"stem":149,"status":103},"Swagger","\u002Fdocs\u002Fpackages\u002Fswagger","1.docs\u002F3.packages\u002F7.swagger",{"title":151,"path":152,"stem":153,"status":103},"Node Server","\u002Fdocs\u002Fpackages\u002Fnode-server","1.docs\u002F3.packages\u002F8.node-server",{"title":155,"path":156,"stem":157,"status":103},"uWS Server","\u002Fdocs\u002Fpackages\u002Fuws-server","1.docs\u002F3.packages\u002F9.uws-server",{"title":159,"path":160,"stem":161,"children":162,"status":11,"icon":20},"Roadmap","\u002Fdocs\u002Froadmap","1.docs\u002F4.roadmap\u002F1.index",[163,164,168,172],{"title":27,"path":160,"stem":161,"status":11},{"title":165,"path":166,"stem":167,"status":11},"Short term (0-3 months)","\u002Fdocs\u002Froadmap\u002Fshort-term","1.docs\u002F4.roadmap\u002F2.short-term",{"title":169,"path":170,"stem":171,"status":11},"Mid term (3-9 months)","\u002Fdocs\u002Froadmap\u002Fmid-term","1.docs\u002F4.roadmap\u002F3.mid-term",{"title":173,"path":174,"stem":175,"status":11},"Long term (9-12+ months)","\u002Fdocs\u002Froadmap\u002Flong-term","1.docs\u002F4.roadmap\u002F4.long-term",{"id":177,"title":139,"body":178,"description":3250,"extension":3251,"meta":3252,"navigation":443,"path":140,"seo":3253,"status":103,"stem":141,"__hash__":3254},"docs\u002F1.docs\u002F3.packages\u002F5.papr.md",{"type":179,"value":180,"toc":3234},"minimark",[181,185,220,239,242,331,334,378,382,584,595,785,790,884,904,908,920,1234,1253,1257,1260,1393,1402,1406,1414,2041,2054,2058,2063,2317,2323,2326,2340,2512,2515,2567,2575,2700,2714,2717,2746,2750,2775,2778,2784,3118,3127,3131,3203,3207,3230],[182,183,27],"h2",{"id":184},"overview",[186,187,188,192,193,199,200,203,204,207,208,211,212,215,216,219],"p",{},[189,190,191],"code",{},"@miiajs\u002Fpapr"," wires ",[194,195,139],"a",{"href":196,"rel":197},"https:\u002F\u002Fgithub.com\u002Fplexinc\u002Fpapr",[198],"nofollow"," into MiiaJS. You declare collections with ",[189,201,202],{},"defineModel()",", register them per feature module via ",[189,205,206],{},"PaprModule.register()",", and inject them in services as plain DI tokens with ",[189,209,210],{},"inject(User)",". Raw mongodb ",[189,213,214],{},"Db"," is available through ",[189,217,218],{},"inject(paprDb())"," when you need to drop down to driver-level operations (aggregations, transactions, etc).",[186,221,222,223,226,227,230,231,234,235,238],{},"The package owns the connection lifecycle (",[189,224,225],{},"onInit","\u002F",[189,228,229],{},"onDestroy","), retry logic for transient connection errors, and Papr's ",[189,232,233],{},"updateSchemas()"," call. The internal ",[189,236,237],{},"PaprService"," is an implementation detail - users never inject it directly.",[182,240,13],{"id":241},"installation",[243,244,245,276,295,313],"code-group",{},[246,247,253],"pre",{"className":248,"code":249,"filename":250,"language":251,"meta":252,"style":252},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add @miiajs\u002Fpapr mongodb papr\n","bun","bash","",[189,254,255],{"__ignoreMap":252},[256,257,260,263,267,270,273],"span",{"class":258,"line":259},"line",1,[256,261,250],{"class":262},"sBMFI",[256,264,266],{"class":265},"sfazB"," add",[256,268,269],{"class":265}," @miiajs\u002Fpapr",[256,271,272],{"class":265}," mongodb",[256,274,275],{"class":265}," papr\n",[246,277,280],{"className":248,"code":278,"filename":279,"language":251,"meta":252,"style":252},"npm install @miiajs\u002Fpapr mongodb papr\n","npm",[189,281,282],{"__ignoreMap":252},[256,283,284,286,289,291,293],{"class":258,"line":259},[256,285,279],{"class":262},[256,287,288],{"class":265}," install",[256,290,269],{"class":265},[256,292,272],{"class":265},[256,294,275],{"class":265},[246,296,299],{"className":248,"code":297,"filename":298,"language":251,"meta":252,"style":252},"pnpm add @miiajs\u002Fpapr mongodb papr\n","pnpm",[189,300,301],{"__ignoreMap":252},[256,302,303,305,307,309,311],{"class":258,"line":259},[256,304,298],{"class":262},[256,306,266],{"class":265},[256,308,269],{"class":265},[256,310,272],{"class":265},[256,312,275],{"class":265},[246,314,317],{"className":248,"code":315,"filename":316,"language":251,"meta":252,"style":252},"yarn add @miiajs\u002Fpapr mongodb papr\n","yarn",[189,318,319],{"__ignoreMap":252},[256,320,321,323,325,327,329],{"class":258,"line":259},[256,322,316],{"class":262},[256,324,266],{"class":265},[256,326,269],{"class":265},[256,328,272],{"class":265},[256,330,275],{"class":265},[186,332,333],{},"Peer dependencies:",[335,336,337,350],"table",{},[338,339,340],"thead",{},[341,342,343,347],"tr",{},[344,345,346],"th",{},"Package",[344,348,349],{},"Version",[351,352,353,366],"tbody",{},[341,354,355,361],{},[356,357,358],"td",{},[189,359,360],{},"mongodb",[356,362,363],{},[189,364,365],{},"^7.1.1",[341,367,368,373],{},[356,369,370],{},[189,371,372],{},"papr",[356,374,375],{},[189,376,377],{},"^17.0.0",[182,379,381],{"id":380},"setup","Setup",[246,383,387],{"className":384,"code":385,"language":386,"meta":252,"style":252},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Module } from '@miiajs\u002Fcore'\nimport { PaprModule } from '@miiajs\u002Fpapr'\n\n@Module({\n  imports: [\n    PaprModule.configure({\n      connection: {\n        url: 'mongodb:\u002F\u002Flocalhost:27017',\n        dbName: 'myapp',\n      },\n    }),\n  ],\n})\nclass AppModule {}\n","typescript",[189,388,389,418,438,445,461,474,490,501,520,537,543,554,562,571],{"__ignoreMap":252},[256,390,391,395,399,403,406,409,412,415],{"class":258,"line":259},[256,392,394],{"class":393},"s7zQu","import",[256,396,398],{"class":397},"sMK4o"," {",[256,400,402],{"class":401},"sTEyZ"," Module",[256,404,405],{"class":397}," }",[256,407,408],{"class":393}," from",[256,410,411],{"class":397}," '",[256,413,414],{"class":265},"@miiajs\u002Fcore",[256,416,417],{"class":397},"'\n",[256,419,421,423,425,428,430,432,434,436],{"class":258,"line":420},2,[256,422,394],{"class":393},[256,424,398],{"class":397},[256,426,427],{"class":401}," PaprModule",[256,429,405],{"class":397},[256,431,408],{"class":393},[256,433,411],{"class":397},[256,435,191],{"class":265},[256,437,417],{"class":397},[256,439,441],{"class":258,"line":440},3,[256,442,444],{"emptyLinePlaceholder":443},true,"\n",[256,446,448,451,455,458],{"class":258,"line":447},4,[256,449,450],{"class":397},"@",[256,452,454],{"class":453},"s2Zo4","Module",[256,456,457],{"class":401},"(",[256,459,460],{"class":397},"{\n",[256,462,464,468,471],{"class":258,"line":463},5,[256,465,467],{"class":466},"swJcz","  imports",[256,469,470],{"class":397},":",[256,472,473],{"class":401}," [\n",[256,475,477,480,483,486,488],{"class":258,"line":476},6,[256,478,479],{"class":401},"    PaprModule",[256,481,482],{"class":397},".",[256,484,485],{"class":453},"configure",[256,487,457],{"class":401},[256,489,460],{"class":397},[256,491,493,496,498],{"class":258,"line":492},7,[256,494,495],{"class":466},"      connection",[256,497,470],{"class":397},[256,499,500],{"class":397}," {\n",[256,502,504,507,509,511,514,517],{"class":258,"line":503},8,[256,505,506],{"class":466},"        url",[256,508,470],{"class":397},[256,510,411],{"class":397},[256,512,513],{"class":265},"mongodb:\u002F\u002Flocalhost:27017",[256,515,516],{"class":397},"'",[256,518,519],{"class":397},",\n",[256,521,523,526,528,530,533,535],{"class":258,"line":522},9,[256,524,525],{"class":466},"        dbName",[256,527,470],{"class":397},[256,529,411],{"class":397},[256,531,532],{"class":265},"myapp",[256,534,516],{"class":397},[256,536,519],{"class":397},[256,538,540],{"class":258,"line":539},10,[256,541,542],{"class":397},"      },\n",[256,544,546,549,552],{"class":258,"line":545},11,[256,547,548],{"class":397},"    }",[256,550,551],{"class":401},")",[256,553,519],{"class":397},[256,555,557,560],{"class":258,"line":556},12,[256,558,559],{"class":401},"  ]",[256,561,519],{"class":397},[256,563,565,568],{"class":258,"line":564},13,[256,566,567],{"class":397},"}",[256,569,570],{"class":401},")\n",[256,572,574,578,581],{"class":258,"line":573},14,[256,575,577],{"class":576},"spNyl","class",[256,579,580],{"class":262}," AppModule",[256,582,583],{"class":397}," {}\n",[186,585,586,587,590,591,594],{},"With ",[189,588,589],{},"ConfigService"," (from ",[189,592,593],{},"@miiajs\u002Fconfig","):",[246,596,598],{"className":384,"code":597,"language":386,"meta":252,"style":252},"import { ConfigService } from '@miiajs\u002Fconfig'\n\nPaprModule.configure((resolve) => {\n  const config = resolve(ConfigService)\n  return {\n    connection: {\n      url: config.getOrThrow('MONGODB_URL'),\n      dbName: config.get('MONGODB_DB'),\n      retry: { attempts: 5, delay: 2_000 },\n    },\n  }\n})\n",[189,599,600,619,623,647,667,674,683,710,737,769,774,779],{"__ignoreMap":252},[256,601,602,604,606,609,611,613,615,617],{"class":258,"line":259},[256,603,394],{"class":393},[256,605,398],{"class":397},[256,607,608],{"class":401}," ConfigService",[256,610,405],{"class":397},[256,612,408],{"class":393},[256,614,411],{"class":397},[256,616,593],{"class":265},[256,618,417],{"class":397},[256,620,621],{"class":258,"line":420},[256,622,444],{"emptyLinePlaceholder":443},[256,624,625,628,630,632,634,636,640,642,645],{"class":258,"line":440},[256,626,627],{"class":401},"PaprModule",[256,629,482],{"class":397},[256,631,485],{"class":453},[256,633,457],{"class":401},[256,635,457],{"class":397},[256,637,639],{"class":638},"sHdIc","resolve",[256,641,551],{"class":397},[256,643,644],{"class":576}," =>",[256,646,500],{"class":397},[256,648,649,652,655,658,661,663,665],{"class":258,"line":447},[256,650,651],{"class":576},"  const",[256,653,654],{"class":401}," config",[256,656,657],{"class":397}," =",[256,659,660],{"class":453}," resolve",[256,662,457],{"class":466},[256,664,589],{"class":401},[256,666,570],{"class":466},[256,668,669,672],{"class":258,"line":463},[256,670,671],{"class":393},"  return",[256,673,500],{"class":397},[256,675,676,679,681],{"class":258,"line":476},[256,677,678],{"class":466},"    connection",[256,680,470],{"class":397},[256,682,500],{"class":397},[256,684,685,688,690,692,694,697,699,701,704,706,708],{"class":258,"line":492},[256,686,687],{"class":466},"      url",[256,689,470],{"class":397},[256,691,654],{"class":401},[256,693,482],{"class":397},[256,695,696],{"class":453},"getOrThrow",[256,698,457],{"class":466},[256,700,516],{"class":397},[256,702,703],{"class":265},"MONGODB_URL",[256,705,516],{"class":397},[256,707,551],{"class":466},[256,709,519],{"class":397},[256,711,712,715,717,719,721,724,726,728,731,733,735],{"class":258,"line":503},[256,713,714],{"class":466},"      dbName",[256,716,470],{"class":397},[256,718,654],{"class":401},[256,720,482],{"class":397},[256,722,723],{"class":453},"get",[256,725,457],{"class":466},[256,727,516],{"class":397},[256,729,730],{"class":265},"MONGODB_DB",[256,732,516],{"class":397},[256,734,551],{"class":466},[256,736,519],{"class":397},[256,738,739,742,744,746,749,751,755,758,761,763,766],{"class":258,"line":522},[256,740,741],{"class":466},"      retry",[256,743,470],{"class":397},[256,745,398],{"class":397},[256,747,748],{"class":466}," attempts",[256,750,470],{"class":397},[256,752,754],{"class":753},"sbssI"," 5",[256,756,757],{"class":397},",",[256,759,760],{"class":466}," delay",[256,762,470],{"class":397},[256,764,765],{"class":753}," 2_000",[256,767,768],{"class":397}," },\n",[256,770,771],{"class":258,"line":539},[256,772,773],{"class":397},"    },\n",[256,775,776],{"class":258,"line":545},[256,777,778],{"class":397},"  }\n",[256,780,781,783],{"class":258,"line":556},[256,782,567],{"class":397},[256,784,570],{"class":401},[786,787,789],"h3",{"id":788},"configuration-options","Configuration options",[335,791,792,808],{},[338,793,794],{},[341,795,796,799,802,805],{},[344,797,798],{},"Option",[344,800,801],{},"Type",[344,803,804],{},"Default",[344,806,807],{},"Description",[351,809,810,828,845,865],{},[341,811,812,817,822,825],{},[356,813,814],{},[189,815,816],{},"connection.url",[356,818,819],{},[189,820,821],{},"string",[356,823,824],{},"required",[356,826,827],{},"MongoDB connection URI",[341,829,830,835,839,842],{},[356,831,832],{},[189,833,834],{},"connection.dbName",[356,836,837],{},[189,838,821],{},[356,840,841],{},"from URI",[356,843,844],{},"Database name override",[341,846,847,852,857,862],{},[356,848,849],{},[189,850,851],{},"connection.retry.attempts",[356,853,854],{},[189,855,856],{},"number",[356,858,859],{},[189,860,861],{},"3",[356,863,864],{},"Connection attempts before giving up",[341,866,867,872,876,881],{},[356,868,869],{},[189,870,871],{},"connection.retry.delay",[356,873,874],{},[189,875,856],{},[356,877,878],{},[189,879,880],{},"2_000",[356,882,883],{},"Delay (ms) between attempts",[186,885,886,887,890,891,890,894,890,897,890,900,903],{},"Only network-level errors (",[189,888,889],{},"ECONNREFUSED",", ",[189,892,893],{},"ECONNRESET",[189,895,896],{},"ETIMEDOUT",[189,898,899],{},"ENOTFOUND",[189,901,902],{},"EAI_AGAIN",") are retried. Auth and schema errors abort immediately.",[182,905,907],{"id":906},"define-models","Define models",[186,909,910,913,914,916,917,470],{},[189,911,912],{},"defineModel(collection, schema)"," returns a class-token that doubles as a typed DI token for the model. Pass it to ",[189,915,206],{}," and to ",[189,918,919],{},"inject()",[246,921,923],{"className":384,"code":922,"language":386,"meta":252,"style":252},"import { schema, types } from 'papr'\nimport { defineModel } from '@miiajs\u002Fpapr'\n\nexport const userSchema = schema(\n  {\n    name: types.string({ required: true }),\n    email: types.string({ required: true }),\n    role: types.string({ required: true }),\n    password: types.string({ required: true }),\n  },\n  {\n    defaults: { role: 'user' },\n    timestamps: true,\n  },\n)\n\nexport const User = defineModel('users', userSchema)\n\nexport type UserDocument = (typeof userSchema)[0]\n",[189,924,925,949,968,972,991,996,1029,1058,1087,1116,1121,1125,1148,1159,1163,1168,1173,1201,1206],{"__ignoreMap":252},[256,926,927,929,931,934,936,939,941,943,945,947],{"class":258,"line":259},[256,928,394],{"class":393},[256,930,398],{"class":397},[256,932,933],{"class":401}," schema",[256,935,757],{"class":397},[256,937,938],{"class":401}," types",[256,940,405],{"class":397},[256,942,408],{"class":393},[256,944,411],{"class":397},[256,946,372],{"class":265},[256,948,417],{"class":397},[256,950,951,953,955,958,960,962,964,966],{"class":258,"line":420},[256,952,394],{"class":393},[256,954,398],{"class":397},[256,956,957],{"class":401}," defineModel",[256,959,405],{"class":397},[256,961,408],{"class":393},[256,963,411],{"class":397},[256,965,191],{"class":265},[256,967,417],{"class":397},[256,969,970],{"class":258,"line":440},[256,971,444],{"emptyLinePlaceholder":443},[256,973,974,977,980,983,986,988],{"class":258,"line":447},[256,975,976],{"class":393},"export",[256,978,979],{"class":576}," const",[256,981,982],{"class":401}," userSchema ",[256,984,985],{"class":397},"=",[256,987,933],{"class":453},[256,989,990],{"class":401},"(\n",[256,992,993],{"class":258,"line":463},[256,994,995],{"class":397},"  {\n",[256,997,998,1001,1003,1005,1007,1009,1011,1014,1017,1019,1023,1025,1027],{"class":258,"line":476},[256,999,1000],{"class":466},"    name",[256,1002,470],{"class":397},[256,1004,938],{"class":401},[256,1006,482],{"class":397},[256,1008,821],{"class":453},[256,1010,457],{"class":401},[256,1012,1013],{"class":397},"{",[256,1015,1016],{"class":466}," required",[256,1018,470],{"class":397},[256,1020,1022],{"class":1021},"sfNiH"," true",[256,1024,405],{"class":397},[256,1026,551],{"class":401},[256,1028,519],{"class":397},[256,1030,1031,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056],{"class":258,"line":492},[256,1032,1033],{"class":466},"    email",[256,1035,470],{"class":397},[256,1037,938],{"class":401},[256,1039,482],{"class":397},[256,1041,821],{"class":453},[256,1043,457],{"class":401},[256,1045,1013],{"class":397},[256,1047,1016],{"class":466},[256,1049,470],{"class":397},[256,1051,1022],{"class":1021},[256,1053,405],{"class":397},[256,1055,551],{"class":401},[256,1057,519],{"class":397},[256,1059,1060,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085],{"class":258,"line":503},[256,1061,1062],{"class":466},"    role",[256,1064,470],{"class":397},[256,1066,938],{"class":401},[256,1068,482],{"class":397},[256,1070,821],{"class":453},[256,1072,457],{"class":401},[256,1074,1013],{"class":397},[256,1076,1016],{"class":466},[256,1078,470],{"class":397},[256,1080,1022],{"class":1021},[256,1082,405],{"class":397},[256,1084,551],{"class":401},[256,1086,519],{"class":397},[256,1088,1089,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114],{"class":258,"line":522},[256,1090,1091],{"class":466},"    password",[256,1093,470],{"class":397},[256,1095,938],{"class":401},[256,1097,482],{"class":397},[256,1099,821],{"class":453},[256,1101,457],{"class":401},[256,1103,1013],{"class":397},[256,1105,1016],{"class":466},[256,1107,470],{"class":397},[256,1109,1022],{"class":1021},[256,1111,405],{"class":397},[256,1113,551],{"class":401},[256,1115,519],{"class":397},[256,1117,1118],{"class":258,"line":539},[256,1119,1120],{"class":397},"  },\n",[256,1122,1123],{"class":258,"line":545},[256,1124,995],{"class":397},[256,1126,1127,1130,1132,1134,1137,1139,1141,1144,1146],{"class":258,"line":556},[256,1128,1129],{"class":466},"    defaults",[256,1131,470],{"class":397},[256,1133,398],{"class":397},[256,1135,1136],{"class":466}," role",[256,1138,470],{"class":397},[256,1140,411],{"class":397},[256,1142,1143],{"class":265},"user",[256,1145,516],{"class":397},[256,1147,768],{"class":397},[256,1149,1150,1153,1155,1157],{"class":258,"line":564},[256,1151,1152],{"class":466},"    timestamps",[256,1154,470],{"class":397},[256,1156,1022],{"class":1021},[256,1158,519],{"class":397},[256,1160,1161],{"class":258,"line":573},[256,1162,1120],{"class":397},[256,1164,1166],{"class":258,"line":1165},15,[256,1167,570],{"class":401},[256,1169,1171],{"class":258,"line":1170},16,[256,1172,444],{"emptyLinePlaceholder":443},[256,1174,1176,1178,1180,1183,1185,1187,1189,1191,1194,1196,1198],{"class":258,"line":1175},17,[256,1177,976],{"class":393},[256,1179,979],{"class":576},[256,1181,1182],{"class":401}," User ",[256,1184,985],{"class":397},[256,1186,957],{"class":453},[256,1188,457],{"class":401},[256,1190,516],{"class":397},[256,1192,1193],{"class":265},"users",[256,1195,516],{"class":397},[256,1197,757],{"class":397},[256,1199,1200],{"class":401}," userSchema)\n",[256,1202,1204],{"class":258,"line":1203},18,[256,1205,444],{"emptyLinePlaceholder":443},[256,1207,1209,1211,1214,1217,1219,1222,1225,1228,1231],{"class":258,"line":1208},19,[256,1210,976],{"class":393},[256,1212,1213],{"class":576}," type",[256,1215,1216],{"class":262}," UserDocument",[256,1218,657],{"class":397},[256,1220,1221],{"class":401}," (",[256,1223,1224],{"class":397},"typeof",[256,1226,1227],{"class":401}," userSchema)[",[256,1229,1230],{"class":753},"0",[256,1232,1233],{"class":401},"]\n",[1235,1236,1237],"note",{},[186,1238,1239,1240,1243,1244,1247,1248,1252],{},"The token returned by ",[189,1241,1242],{},"defineModel"," is a class. Each call returns a fresh class, so two ",[189,1245,1246],{},"defineModel('users', schema)"," calls produce two distinct tokens - this is the supported way to point one collection at two different connections (see ",[194,1249,1251],{"href":1250},"#multiple-connections","Multiple connections",").",[182,1254,1256],{"id":1255},"register-models","Register models",[186,1258,1259],{},"Register models in the feature module that owns them:",[246,1261,1263],{"className":384,"code":1262,"language":386,"meta":252,"style":252},"import { Module } from '@miiajs\u002Fcore'\nimport { PaprModule } from '@miiajs\u002Fpapr'\nimport { User } from '.\u002Fuser.schema.js'\n\n@Module({\n  imports: [PaprModule.register([User])],\n  controllers: [UserController],\n  providers: [UserService],\n})\nclass UserModule {}\n",[189,1264,1265,1283,1301,1321,1325,1335,1354,1366,1378,1384],{"__ignoreMap":252},[256,1266,1267,1269,1271,1273,1275,1277,1279,1281],{"class":258,"line":259},[256,1268,394],{"class":393},[256,1270,398],{"class":397},[256,1272,402],{"class":401},[256,1274,405],{"class":397},[256,1276,408],{"class":393},[256,1278,411],{"class":397},[256,1280,414],{"class":265},[256,1282,417],{"class":397},[256,1284,1285,1287,1289,1291,1293,1295,1297,1299],{"class":258,"line":420},[256,1286,394],{"class":393},[256,1288,398],{"class":397},[256,1290,427],{"class":401},[256,1292,405],{"class":397},[256,1294,408],{"class":393},[256,1296,411],{"class":397},[256,1298,191],{"class":265},[256,1300,417],{"class":397},[256,1302,1303,1305,1307,1310,1312,1314,1316,1319],{"class":258,"line":440},[256,1304,394],{"class":393},[256,1306,398],{"class":397},[256,1308,1309],{"class":401}," User",[256,1311,405],{"class":397},[256,1313,408],{"class":393},[256,1315,411],{"class":397},[256,1317,1318],{"class":265},".\u002Fuser.schema.js",[256,1320,417],{"class":397},[256,1322,1323],{"class":258,"line":447},[256,1324,444],{"emptyLinePlaceholder":443},[256,1326,1327,1329,1331,1333],{"class":258,"line":463},[256,1328,450],{"class":397},[256,1330,454],{"class":453},[256,1332,457],{"class":401},[256,1334,460],{"class":397},[256,1336,1337,1339,1341,1344,1346,1349,1352],{"class":258,"line":476},[256,1338,467],{"class":466},[256,1340,470],{"class":397},[256,1342,1343],{"class":401}," [PaprModule",[256,1345,482],{"class":397},[256,1347,1348],{"class":453},"register",[256,1350,1351],{"class":401},"([User])]",[256,1353,519],{"class":397},[256,1355,1356,1359,1361,1364],{"class":258,"line":492},[256,1357,1358],{"class":466},"  controllers",[256,1360,470],{"class":397},[256,1362,1363],{"class":401}," [UserController]",[256,1365,519],{"class":397},[256,1367,1368,1371,1373,1376],{"class":258,"line":503},[256,1369,1370],{"class":466},"  providers",[256,1372,470],{"class":397},[256,1374,1375],{"class":401}," [UserService]",[256,1377,519],{"class":397},[256,1379,1380,1382],{"class":258,"line":522},[256,1381,567],{"class":397},[256,1383,570],{"class":401},[256,1385,1386,1388,1391],{"class":258,"line":539},[256,1387,577],{"class":576},[256,1389,1390],{"class":262}," UserModule",[256,1392,583],{"class":397},[186,1394,1395,1396,1399,1400,482],{},"Each registered token becomes its own DI provider keyed by the token class. Multiple ",[189,1397,1398],{},"register()"," calls accumulate into the same connection registry; the model is compiled by Papr during ",[189,1401,225],{},[182,1403,1405],{"id":1404},"use-in-services","Use in services",[186,1407,1408,1409,1411,1412,470],{},"Inject models with the standard ",[189,1410,919],{}," from ",[189,1413,414],{},[246,1415,1417],{"className":384,"code":1416,"language":386,"meta":252,"style":252},"import { Injectable, inject } from '@miiajs\u002Fcore'\nimport { User } from '.\u002Fuser.schema.js'\n\n@Injectable()\nclass UserService {\n  private users = inject(User)\n\n  async findAll() {\n    return this.users.find({})\n  }\n\n  async findById(id: string) {\n    const { ObjectId } = await import('mongodb')\n    return this.users.findOne({ _id: new ObjectId(id) })\n  }\n\n  async create(data: { name: string; email: string; password: string }) {\n    return this.users.insertOne({\n      ...data,\n      role: 'user',\n      createdAt: new Date(),\n    })\n  }\n\n  async update(id: string, data: Record\u003Cstring, any>) {\n    const { ObjectId } = await import('mongodb')\n    return this.users.findOneAndUpdate(\n      { _id: new ObjectId(id) },\n      { $set: data },\n      { returnDocument: 'after' },\n    )\n  }\n\n  async delete(id: string) {\n    const { ObjectId } = await import('mongodb')\n    const result = await this.users.deleteOne({ _id: new ObjectId(id) })\n    return result.deletedCount > 0\n  }\n}\n",[189,1418,1419,1443,1461,1465,1475,1484,1499,1503,1516,1538,1542,1546,1567,1597,1635,1639,1643,1690,1707,1716,1732,1749,1756,1761,1766,1807,1834,1850,1873,1887,1906,1912,1917,1922,1942,1969,2012,2030,2035],{"__ignoreMap":252},[256,1420,1421,1423,1425,1428,1430,1433,1435,1437,1439,1441],{"class":258,"line":259},[256,1422,394],{"class":393},[256,1424,398],{"class":397},[256,1426,1427],{"class":401}," Injectable",[256,1429,757],{"class":397},[256,1431,1432],{"class":401}," inject",[256,1434,405],{"class":397},[256,1436,408],{"class":393},[256,1438,411],{"class":397},[256,1440,414],{"class":265},[256,1442,417],{"class":397},[256,1444,1445,1447,1449,1451,1453,1455,1457,1459],{"class":258,"line":420},[256,1446,394],{"class":393},[256,1448,398],{"class":397},[256,1450,1309],{"class":401},[256,1452,405],{"class":397},[256,1454,408],{"class":393},[256,1456,411],{"class":397},[256,1458,1318],{"class":265},[256,1460,417],{"class":397},[256,1462,1463],{"class":258,"line":440},[256,1464,444],{"emptyLinePlaceholder":443},[256,1466,1467,1469,1472],{"class":258,"line":447},[256,1468,450],{"class":397},[256,1470,1471],{"class":453},"Injectable",[256,1473,1474],{"class":401},"()\n",[256,1476,1477,1479,1482],{"class":258,"line":463},[256,1478,577],{"class":576},[256,1480,1481],{"class":262}," UserService",[256,1483,500],{"class":397},[256,1485,1486,1489,1492,1494,1496],{"class":258,"line":476},[256,1487,1488],{"class":576},"  private",[256,1490,1491],{"class":466}," users",[256,1493,657],{"class":397},[256,1495,1432],{"class":466},[256,1497,1498],{"class":401},"(User)\n",[256,1500,1501],{"class":258,"line":492},[256,1502,444],{"emptyLinePlaceholder":443},[256,1504,1505,1508,1511,1514],{"class":258,"line":503},[256,1506,1507],{"class":576},"  async",[256,1509,1510],{"class":466}," findAll",[256,1512,1513],{"class":397},"()",[256,1515,500],{"class":397},[256,1517,1518,1521,1524,1526,1528,1531,1533,1536],{"class":258,"line":522},[256,1519,1520],{"class":393},"    return",[256,1522,1523],{"class":397}," this.",[256,1525,1193],{"class":401},[256,1527,482],{"class":397},[256,1529,1530],{"class":453},"find",[256,1532,457],{"class":466},[256,1534,1535],{"class":397},"{}",[256,1537,570],{"class":466},[256,1539,1540],{"class":258,"line":539},[256,1541,778],{"class":397},[256,1543,1544],{"class":258,"line":545},[256,1545,444],{"emptyLinePlaceholder":443},[256,1547,1548,1550,1553,1555,1558,1560,1563,1565],{"class":258,"line":556},[256,1549,1507],{"class":576},[256,1551,1552],{"class":466}," findById",[256,1554,457],{"class":397},[256,1556,1557],{"class":638},"id",[256,1559,470],{"class":397},[256,1561,1562],{"class":262}," string",[256,1564,551],{"class":397},[256,1566,500],{"class":397},[256,1568,1569,1572,1574,1577,1579,1581,1584,1587,1589,1591,1593,1595],{"class":258,"line":564},[256,1570,1571],{"class":576},"    const",[256,1573,398],{"class":397},[256,1575,1576],{"class":401}," ObjectId",[256,1578,405],{"class":397},[256,1580,657],{"class":397},[256,1582,1583],{"class":393}," await",[256,1585,1586],{"class":397}," import",[256,1588,457],{"class":466},[256,1590,516],{"class":397},[256,1592,360],{"class":265},[256,1594,516],{"class":397},[256,1596,570],{"class":466},[256,1598,1599,1601,1603,1605,1607,1610,1612,1614,1617,1619,1622,1624,1626,1628,1631,1633],{"class":258,"line":573},[256,1600,1520],{"class":393},[256,1602,1523],{"class":397},[256,1604,1193],{"class":401},[256,1606,482],{"class":397},[256,1608,1609],{"class":453},"findOne",[256,1611,457],{"class":466},[256,1613,1013],{"class":397},[256,1615,1616],{"class":466}," _id",[256,1618,470],{"class":397},[256,1620,1621],{"class":397}," new",[256,1623,1576],{"class":453},[256,1625,457],{"class":466},[256,1627,1557],{"class":401},[256,1629,1630],{"class":466},") ",[256,1632,567],{"class":397},[256,1634,570],{"class":466},[256,1636,1637],{"class":258,"line":1165},[256,1638,778],{"class":397},[256,1640,1641],{"class":258,"line":1170},[256,1642,444],{"emptyLinePlaceholder":443},[256,1644,1645,1647,1650,1652,1655,1657,1659,1662,1664,1666,1669,1672,1674,1676,1678,1681,1683,1685,1688],{"class":258,"line":1175},[256,1646,1507],{"class":576},[256,1648,1649],{"class":466}," create",[256,1651,457],{"class":397},[256,1653,1654],{"class":638},"data",[256,1656,470],{"class":397},[256,1658,398],{"class":397},[256,1660,1661],{"class":466}," name",[256,1663,470],{"class":397},[256,1665,1562],{"class":262},[256,1667,1668],{"class":397},";",[256,1670,1671],{"class":466}," email",[256,1673,470],{"class":397},[256,1675,1562],{"class":262},[256,1677,1668],{"class":397},[256,1679,1680],{"class":466}," password",[256,1682,470],{"class":397},[256,1684,1562],{"class":262},[256,1686,1687],{"class":397}," })",[256,1689,500],{"class":397},[256,1691,1692,1694,1696,1698,1700,1703,1705],{"class":258,"line":1203},[256,1693,1520],{"class":393},[256,1695,1523],{"class":397},[256,1697,1193],{"class":401},[256,1699,482],{"class":397},[256,1701,1702],{"class":453},"insertOne",[256,1704,457],{"class":466},[256,1706,460],{"class":397},[256,1708,1709,1712,1714],{"class":258,"line":1208},[256,1710,1711],{"class":397},"      ...",[256,1713,1654],{"class":401},[256,1715,519],{"class":397},[256,1717,1719,1722,1724,1726,1728,1730],{"class":258,"line":1718},20,[256,1720,1721],{"class":466},"      role",[256,1723,470],{"class":397},[256,1725,411],{"class":397},[256,1727,1143],{"class":265},[256,1729,516],{"class":397},[256,1731,519],{"class":397},[256,1733,1735,1738,1740,1742,1745,1747],{"class":258,"line":1734},21,[256,1736,1737],{"class":466},"      createdAt",[256,1739,470],{"class":397},[256,1741,1621],{"class":397},[256,1743,1744],{"class":453}," Date",[256,1746,1513],{"class":466},[256,1748,519],{"class":397},[256,1750,1752,1754],{"class":258,"line":1751},22,[256,1753,548],{"class":397},[256,1755,570],{"class":466},[256,1757,1759],{"class":258,"line":1758},23,[256,1760,778],{"class":397},[256,1762,1764],{"class":258,"line":1763},24,[256,1765,444],{"emptyLinePlaceholder":443},[256,1767,1769,1771,1774,1776,1778,1780,1782,1784,1787,1789,1792,1795,1797,1799,1802,1805],{"class":258,"line":1768},25,[256,1770,1507],{"class":576},[256,1772,1773],{"class":466}," update",[256,1775,457],{"class":397},[256,1777,1557],{"class":638},[256,1779,470],{"class":397},[256,1781,1562],{"class":262},[256,1783,757],{"class":397},[256,1785,1786],{"class":638}," data",[256,1788,470],{"class":397},[256,1790,1791],{"class":262}," Record",[256,1793,1794],{"class":397},"\u003C",[256,1796,821],{"class":262},[256,1798,757],{"class":397},[256,1800,1801],{"class":262}," any",[256,1803,1804],{"class":397},">)",[256,1806,500],{"class":397},[256,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832],{"class":258,"line":1809},26,[256,1811,1571],{"class":576},[256,1813,398],{"class":397},[256,1815,1576],{"class":401},[256,1817,405],{"class":397},[256,1819,657],{"class":397},[256,1821,1583],{"class":393},[256,1823,1586],{"class":397},[256,1825,457],{"class":466},[256,1827,516],{"class":397},[256,1829,360],{"class":265},[256,1831,516],{"class":397},[256,1833,570],{"class":466},[256,1835,1837,1839,1841,1843,1845,1848],{"class":258,"line":1836},27,[256,1838,1520],{"class":393},[256,1840,1523],{"class":397},[256,1842,1193],{"class":401},[256,1844,482],{"class":397},[256,1846,1847],{"class":453},"findOneAndUpdate",[256,1849,990],{"class":466},[256,1851,1853,1856,1858,1860,1862,1864,1866,1868,1870],{"class":258,"line":1852},28,[256,1854,1855],{"class":397},"      {",[256,1857,1616],{"class":466},[256,1859,470],{"class":397},[256,1861,1621],{"class":397},[256,1863,1576],{"class":453},[256,1865,457],{"class":466},[256,1867,1557],{"class":401},[256,1869,1630],{"class":466},[256,1871,1872],{"class":397},"},\n",[256,1874,1876,1878,1881,1883,1885],{"class":258,"line":1875},29,[256,1877,1855],{"class":397},[256,1879,1880],{"class":466}," $set",[256,1882,470],{"class":397},[256,1884,1786],{"class":401},[256,1886,768],{"class":397},[256,1888,1890,1892,1895,1897,1899,1902,1904],{"class":258,"line":1889},30,[256,1891,1855],{"class":397},[256,1893,1894],{"class":466}," returnDocument",[256,1896,470],{"class":397},[256,1898,411],{"class":397},[256,1900,1901],{"class":265},"after",[256,1903,516],{"class":397},[256,1905,768],{"class":397},[256,1907,1909],{"class":258,"line":1908},31,[256,1910,1911],{"class":466},"    )\n",[256,1913,1915],{"class":258,"line":1914},32,[256,1916,778],{"class":397},[256,1918,1920],{"class":258,"line":1919},33,[256,1921,444],{"emptyLinePlaceholder":443},[256,1923,1925,1927,1930,1932,1934,1936,1938,1940],{"class":258,"line":1924},34,[256,1926,1507],{"class":576},[256,1928,1929],{"class":466}," delete",[256,1931,457],{"class":397},[256,1933,1557],{"class":638},[256,1935,470],{"class":397},[256,1937,1562],{"class":262},[256,1939,551],{"class":397},[256,1941,500],{"class":397},[256,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967],{"class":258,"line":1944},35,[256,1946,1571],{"class":576},[256,1948,398],{"class":397},[256,1950,1576],{"class":401},[256,1952,405],{"class":397},[256,1954,657],{"class":397},[256,1956,1583],{"class":393},[256,1958,1586],{"class":397},[256,1960,457],{"class":466},[256,1962,516],{"class":397},[256,1964,360],{"class":265},[256,1966,516],{"class":397},[256,1968,570],{"class":466},[256,1970,1972,1974,1977,1979,1981,1983,1985,1987,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010],{"class":258,"line":1971},36,[256,1973,1571],{"class":576},[256,1975,1976],{"class":401}," result",[256,1978,657],{"class":397},[256,1980,1583],{"class":393},[256,1982,1523],{"class":397},[256,1984,1193],{"class":401},[256,1986,482],{"class":397},[256,1988,1989],{"class":453},"deleteOne",[256,1991,457],{"class":466},[256,1993,1013],{"class":397},[256,1995,1616],{"class":466},[256,1997,470],{"class":397},[256,1999,1621],{"class":397},[256,2001,1576],{"class":453},[256,2003,457],{"class":466},[256,2005,1557],{"class":401},[256,2007,1630],{"class":466},[256,2009,567],{"class":397},[256,2011,570],{"class":466},[256,2013,2015,2017,2019,2021,2024,2027],{"class":258,"line":2014},37,[256,2016,1520],{"class":393},[256,2018,1976],{"class":401},[256,2020,482],{"class":397},[256,2022,2023],{"class":401},"deletedCount",[256,2025,2026],{"class":397}," >",[256,2028,2029],{"class":753}," 0\n",[256,2031,2033],{"class":258,"line":2032},38,[256,2034,778],{"class":397},[256,2036,2038],{"class":258,"line":2037},39,[256,2039,2040],{"class":397},"}\n",[186,2042,2043,2045,2046,2049,2050,2053],{},[189,2044,210],{}," returns a typed ",[189,2047,2048],{},"Model\u003CTDoc, TOpts>"," proxy. The underlying Papr model is created during ",[189,2051,2052],{},"app.init()","; until then the proxy is dormant - the first method call resolves it from the internal service.",[182,2055,2057],{"id":2056},"raw-database-access","Raw database access",[186,2059,2060,2061,470],{},"For aggregations, transactions, or other driver-level operations, inject the raw mongodb ",[189,2062,214],{},[246,2064,2066],{"className":384,"code":2065,"language":386,"meta":252,"style":252},"import { Injectable, inject } from '@miiajs\u002Fcore'\nimport { paprDb } from '@miiajs\u002Fpapr'\n\n@Injectable()\nclass StatsService {\n  private db = inject(paprDb())\n\n  async dailyActiveUsers() {\n    return this.db\n      .collection('events')\n      .aggregate([\n        { $match: { type: 'login', createdAt: { $gte: startOfDay() } } },\n        { $group: { _id: '$userId' } },\n        { $count: 'count' },\n      ])\n      .toArray()\n  }\n}\n",[189,2067,2068,2090,2109,2113,2121,2130,2149,2153,2164,2173,2192,2202,2251,2277,2295,2300,2309,2313],{"__ignoreMap":252},[256,2069,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088],{"class":258,"line":259},[256,2071,394],{"class":393},[256,2073,398],{"class":397},[256,2075,1427],{"class":401},[256,2077,757],{"class":397},[256,2079,1432],{"class":401},[256,2081,405],{"class":397},[256,2083,408],{"class":393},[256,2085,411],{"class":397},[256,2087,414],{"class":265},[256,2089,417],{"class":397},[256,2091,2092,2094,2096,2099,2101,2103,2105,2107],{"class":258,"line":420},[256,2093,394],{"class":393},[256,2095,398],{"class":397},[256,2097,2098],{"class":401}," paprDb",[256,2100,405],{"class":397},[256,2102,408],{"class":393},[256,2104,411],{"class":397},[256,2106,191],{"class":265},[256,2108,417],{"class":397},[256,2110,2111],{"class":258,"line":440},[256,2112,444],{"emptyLinePlaceholder":443},[256,2114,2115,2117,2119],{"class":258,"line":447},[256,2116,450],{"class":397},[256,2118,1471],{"class":453},[256,2120,1474],{"class":401},[256,2122,2123,2125,2128],{"class":258,"line":463},[256,2124,577],{"class":576},[256,2126,2127],{"class":262}," StatsService",[256,2129,500],{"class":397},[256,2131,2132,2134,2137,2139,2141,2143,2146],{"class":258,"line":476},[256,2133,1488],{"class":576},[256,2135,2136],{"class":466}," db",[256,2138,657],{"class":397},[256,2140,1432],{"class":466},[256,2142,457],{"class":401},[256,2144,2145],{"class":466},"paprDb",[256,2147,2148],{"class":401},"())\n",[256,2150,2151],{"class":258,"line":492},[256,2152,444],{"emptyLinePlaceholder":443},[256,2154,2155,2157,2160,2162],{"class":258,"line":503},[256,2156,1507],{"class":576},[256,2158,2159],{"class":466}," dailyActiveUsers",[256,2161,1513],{"class":397},[256,2163,500],{"class":397},[256,2165,2166,2168,2170],{"class":258,"line":522},[256,2167,1520],{"class":393},[256,2169,1523],{"class":397},[256,2171,2172],{"class":401},"db\n",[256,2174,2175,2178,2181,2183,2185,2188,2190],{"class":258,"line":539},[256,2176,2177],{"class":397},"      .",[256,2179,2180],{"class":453},"collection",[256,2182,457],{"class":466},[256,2184,516],{"class":397},[256,2186,2187],{"class":265},"events",[256,2189,516],{"class":397},[256,2191,570],{"class":466},[256,2193,2194,2196,2199],{"class":258,"line":545},[256,2195,2177],{"class":397},[256,2197,2198],{"class":453},"aggregate",[256,2200,2201],{"class":466},"([\n",[256,2203,2204,2207,2210,2212,2214,2216,2218,2220,2223,2225,2227,2230,2232,2234,2237,2239,2242,2245,2247,2249],{"class":258,"line":556},[256,2205,2206],{"class":397},"        {",[256,2208,2209],{"class":466}," $match",[256,2211,470],{"class":397},[256,2213,398],{"class":397},[256,2215,1213],{"class":466},[256,2217,470],{"class":397},[256,2219,411],{"class":397},[256,2221,2222],{"class":265},"login",[256,2224,516],{"class":397},[256,2226,757],{"class":397},[256,2228,2229],{"class":466}," createdAt",[256,2231,470],{"class":397},[256,2233,398],{"class":397},[256,2235,2236],{"class":466}," $gte",[256,2238,470],{"class":397},[256,2240,2241],{"class":453}," startOfDay",[256,2243,2244],{"class":466},"() ",[256,2246,567],{"class":397},[256,2248,405],{"class":397},[256,2250,768],{"class":397},[256,2252,2253,2255,2258,2260,2262,2264,2266,2268,2271,2273,2275],{"class":258,"line":564},[256,2254,2206],{"class":397},[256,2256,2257],{"class":466}," $group",[256,2259,470],{"class":397},[256,2261,398],{"class":397},[256,2263,1616],{"class":466},[256,2265,470],{"class":397},[256,2267,411],{"class":397},[256,2269,2270],{"class":265},"$userId",[256,2272,516],{"class":397},[256,2274,405],{"class":397},[256,2276,768],{"class":397},[256,2278,2279,2281,2284,2286,2288,2291,2293],{"class":258,"line":573},[256,2280,2206],{"class":397},[256,2282,2283],{"class":466}," $count",[256,2285,470],{"class":397},[256,2287,411],{"class":397},[256,2289,2290],{"class":265},"count",[256,2292,516],{"class":397},[256,2294,768],{"class":397},[256,2296,2297],{"class":258,"line":1165},[256,2298,2299],{"class":466},"      ])\n",[256,2301,2302,2304,2307],{"class":258,"line":1170},[256,2303,2177],{"class":397},[256,2305,2306],{"class":453},"toArray",[256,2308,1474],{"class":466},[256,2310,2311],{"class":258,"line":1175},[256,2312,778],{"class":397},[256,2314,2315],{"class":258,"line":1203},[256,2316,2040],{"class":397},[186,2318,2319,2322],{},[189,2320,2321],{},"paprDb(name?)"," is memoized: the same name (including the default empty name) always returns the same token, so DI identity is stable across files.",[182,2324,1251],{"id":2325},"multiple-connections",[186,2327,2328,2329,2332,2333,2336,2337,2339],{},"Pass a ",[189,2330,2331],{},"name"," to ",[189,2334,2335],{},"configure()"," and ",[189,2338,1398],{}," for each additional database:",[246,2341,2343],{"className":384,"code":2342,"language":386,"meta":252,"style":252},"@Module({\n  imports: [\n    PaprModule.configure({\n      connection: { url: MAIN_DB, dbName: 'app' },\n    }),\n    PaprModule.configure(\n      { connection: { url: ANALYTICS_DB, dbName: 'analytics' } },\n      'analytics',\n    ),\n    UserModule,\n    EventModule,\n  ],\n})\nclass AppModule {}\n",[189,2344,2345,2355,2363,2375,2407,2415,2425,2460,2471,2478,2485,2492,2498,2504],{"__ignoreMap":252},[256,2346,2347,2349,2351,2353],{"class":258,"line":259},[256,2348,450],{"class":397},[256,2350,454],{"class":453},[256,2352,457],{"class":401},[256,2354,460],{"class":397},[256,2356,2357,2359,2361],{"class":258,"line":420},[256,2358,467],{"class":466},[256,2360,470],{"class":397},[256,2362,473],{"class":401},[256,2364,2365,2367,2369,2371,2373],{"class":258,"line":440},[256,2366,479],{"class":401},[256,2368,482],{"class":397},[256,2370,485],{"class":453},[256,2372,457],{"class":401},[256,2374,460],{"class":397},[256,2376,2377,2379,2381,2383,2386,2388,2391,2393,2396,2398,2400,2403,2405],{"class":258,"line":447},[256,2378,495],{"class":466},[256,2380,470],{"class":397},[256,2382,398],{"class":397},[256,2384,2385],{"class":466}," url",[256,2387,470],{"class":397},[256,2389,2390],{"class":401}," MAIN_DB",[256,2392,757],{"class":397},[256,2394,2395],{"class":466}," dbName",[256,2397,470],{"class":397},[256,2399,411],{"class":397},[256,2401,2402],{"class":265},"app",[256,2404,516],{"class":397},[256,2406,768],{"class":397},[256,2408,2409,2411,2413],{"class":258,"line":463},[256,2410,548],{"class":397},[256,2412,551],{"class":401},[256,2414,519],{"class":397},[256,2416,2417,2419,2421,2423],{"class":258,"line":476},[256,2418,479],{"class":401},[256,2420,482],{"class":397},[256,2422,485],{"class":453},[256,2424,990],{"class":401},[256,2426,2427,2429,2432,2434,2436,2438,2440,2443,2445,2447,2449,2451,2454,2456,2458],{"class":258,"line":492},[256,2428,1855],{"class":397},[256,2430,2431],{"class":466}," connection",[256,2433,470],{"class":397},[256,2435,398],{"class":397},[256,2437,2385],{"class":466},[256,2439,470],{"class":397},[256,2441,2442],{"class":401}," ANALYTICS_DB",[256,2444,757],{"class":397},[256,2446,2395],{"class":466},[256,2448,470],{"class":397},[256,2450,411],{"class":397},[256,2452,2453],{"class":265},"analytics",[256,2455,516],{"class":397},[256,2457,405],{"class":397},[256,2459,768],{"class":397},[256,2461,2462,2465,2467,2469],{"class":258,"line":503},[256,2463,2464],{"class":397},"      '",[256,2466,2453],{"class":265},[256,2468,516],{"class":397},[256,2470,519],{"class":397},[256,2472,2473,2476],{"class":258,"line":522},[256,2474,2475],{"class":401},"    )",[256,2477,519],{"class":397},[256,2479,2480,2483],{"class":258,"line":539},[256,2481,2482],{"class":401},"    UserModule",[256,2484,519],{"class":397},[256,2486,2487,2490],{"class":258,"line":545},[256,2488,2489],{"class":401},"    EventModule",[256,2491,519],{"class":397},[256,2493,2494,2496],{"class":258,"line":556},[256,2495,559],{"class":401},[256,2497,519],{"class":397},[256,2499,2500,2502],{"class":258,"line":564},[256,2501,567],{"class":397},[256,2503,570],{"class":401},[256,2505,2506,2508,2510],{"class":258,"line":573},[256,2507,577],{"class":576},[256,2509,580],{"class":262},[256,2511,583],{"class":397},[186,2513,2514],{},"Register each model under the connection it belongs to:",[246,2516,2518],{"className":384,"code":2517,"language":386,"meta":252,"style":252},"\u002F\u002F UserModule - default connection\nPaprModule.register([User])\n\n\u002F\u002F EventModule - named connection\nPaprModule.register([Event], 'analytics')\n",[189,2519,2520,2526,2537,2541,2546],{"__ignoreMap":252},[256,2521,2522],{"class":258,"line":259},[256,2523,2525],{"class":2524},"sHwdD","\u002F\u002F UserModule - default connection\n",[256,2527,2528,2530,2532,2534],{"class":258,"line":420},[256,2529,627],{"class":401},[256,2531,482],{"class":397},[256,2533,1348],{"class":453},[256,2535,2536],{"class":401},"([User])\n",[256,2538,2539],{"class":258,"line":440},[256,2540,444],{"emptyLinePlaceholder":443},[256,2542,2543],{"class":258,"line":447},[256,2544,2545],{"class":2524},"\u002F\u002F EventModule - named connection\n",[256,2547,2548,2550,2552,2554,2557,2559,2561,2563,2565],{"class":258,"line":463},[256,2549,627],{"class":401},[256,2551,482],{"class":397},[256,2553,1348],{"class":453},[256,2555,2556],{"class":401},"([Event]",[256,2558,757],{"class":397},[256,2560,411],{"class":397},[256,2562,2453],{"class":265},[256,2564,516],{"class":397},[256,2566,570],{"class":401},[186,2568,2569,2570,2574],{},"If you need the ",[2571,2572,2573],"strong",{},"same collection"," on two connections, declare two distinct tokens. They look identical to the user but DI sees them as separate providers:",[246,2576,2578],{"className":384,"code":2577,"language":386,"meta":252,"style":252},"export const User = defineModel('users', userSchema)\nexport const AnalyticsUser = defineModel('users', userSchema)\n\nPaprModule.register([User])                     \u002F\u002F default\nPaprModule.register([AnalyticsUser], 'analytics')\n\n\u002F\u002F In services:\nprivate users = inject(User)\nprivate analyticsUsers = inject(AnalyticsUser)\n",[189,2579,2580,2604,2629,2633,2647,2668,2672,2677,2688],{"__ignoreMap":252},[256,2581,2582,2584,2586,2588,2590,2592,2594,2596,2598,2600,2602],{"class":258,"line":259},[256,2583,976],{"class":393},[256,2585,979],{"class":576},[256,2587,1182],{"class":401},[256,2589,985],{"class":397},[256,2591,957],{"class":453},[256,2593,457],{"class":401},[256,2595,516],{"class":397},[256,2597,1193],{"class":265},[256,2599,516],{"class":397},[256,2601,757],{"class":397},[256,2603,1200],{"class":401},[256,2605,2606,2608,2610,2613,2615,2617,2619,2621,2623,2625,2627],{"class":258,"line":420},[256,2607,976],{"class":393},[256,2609,979],{"class":576},[256,2611,2612],{"class":401}," AnalyticsUser ",[256,2614,985],{"class":397},[256,2616,957],{"class":453},[256,2618,457],{"class":401},[256,2620,516],{"class":397},[256,2622,1193],{"class":265},[256,2624,516],{"class":397},[256,2626,757],{"class":397},[256,2628,1200],{"class":401},[256,2630,2631],{"class":258,"line":440},[256,2632,444],{"emptyLinePlaceholder":443},[256,2634,2635,2637,2639,2641,2644],{"class":258,"line":447},[256,2636,627],{"class":401},[256,2638,482],{"class":397},[256,2640,1348],{"class":453},[256,2642,2643],{"class":401},"([User])                     ",[256,2645,2646],{"class":2524},"\u002F\u002F default\n",[256,2648,2649,2651,2653,2655,2658,2660,2662,2664,2666],{"class":258,"line":463},[256,2650,627],{"class":401},[256,2652,482],{"class":397},[256,2654,1348],{"class":453},[256,2656,2657],{"class":401},"([AnalyticsUser]",[256,2659,757],{"class":397},[256,2661,411],{"class":397},[256,2663,2453],{"class":265},[256,2665,516],{"class":397},[256,2667,570],{"class":401},[256,2669,2670],{"class":258,"line":476},[256,2671,444],{"emptyLinePlaceholder":443},[256,2673,2674],{"class":258,"line":492},[256,2675,2676],{"class":2524},"\u002F\u002F In services:\n",[256,2678,2679,2682,2684,2686],{"class":258,"line":503},[256,2680,2681],{"class":401},"private users ",[256,2683,985],{"class":397},[256,2685,1432],{"class":453},[256,2687,1498],{"class":401},[256,2689,2690,2693,2695,2697],{"class":258,"line":522},[256,2691,2692],{"class":401},"private analyticsUsers ",[256,2694,985],{"class":397},[256,2696,1432],{"class":453},[256,2698,2699],{"class":401},"(AnalyticsUser)\n",[2701,2702,2703],"warning",{},[186,2704,2705,2706,2709,2710,2713],{},"Registering the ",[2571,2707,2708],{},"same"," token under two different connection names will log a warning and resolve to whichever provider was registered first. Always create a separate ",[189,2711,2712],{},"defineModel(...)"," per connection.",[186,2715,2716],{},"For raw db access on the named connection:",[246,2718,2720],{"className":384,"code":2719,"language":386,"meta":252,"style":252},"private analyticsDb = inject(paprDb('analytics'))\n",[189,2721,2722],{"__ignoreMap":252},[256,2723,2724,2727,2729,2731,2733,2735,2737,2739,2741,2743],{"class":258,"line":259},[256,2725,2726],{"class":401},"private analyticsDb ",[256,2728,985],{"class":397},[256,2730,1432],{"class":453},[256,2732,457],{"class":401},[256,2734,2145],{"class":453},[256,2736,457],{"class":401},[256,2738,516],{"class":397},[256,2740,2453],{"class":265},[256,2742,516],{"class":397},[256,2744,2745],{"class":401},"))\n",[182,2747,2749],{"id":2748},"connection-lifecycle","Connection lifecycle",[2751,2752,2753,2770],"ul",{},[2754,2755,2756,2758,2759,2336,2762,2765,2766,2769],"li",{},[2571,2757,225],{}," - validates that no two distinct tokens claim the same collection name, connects to MongoDB with retry on transient errors, registers all models with Papr, calls ",[189,2760,2761],{},"papr.initialize()",[189,2763,2764],{},"papr.updateSchemas()",". If any step after ",[189,2767,2768],{},"client.connect()"," fails, the client is closed before the error is rethrown (no leaked sockets).",[2754,2771,2772,2774],{},[2571,2773,229],{}," - closes the MongoDB client and clears all model references.",[182,2776,33],{"id":2777},"testing",[186,2779,2780,2781,470],{},"Because models are DI tokens, you override them directly in tests with ",[189,2782,2783],{},"TestApp.override()",[246,2785,2787],{"className":384,"code":2786,"language":386,"meta":252,"style":252},"import { TestApp } from '@miiajs\u002Fcore\u002Ftesting'\nimport { AppModule } from '.\u002Fapp.module.js'\nimport { User } from '.\u002Fuser\u002Fuser.schema.js'\n\nconst fakeUserModel = {\n  find: () => Promise.resolve([{ _id: '1', name: 'Alice' }]),\n  insertOne: async (doc: any) => ({ acknowledged: true, insertedId: 'fake' }),\n} as any\n\nconst app = await TestApp.create(AppModule)\n  .override(User, fakeUserModel)\n  .compile()\n\nconst res = await app.request('GET', '\u002Fusers')\nexpect(res.status).toBe(200)\n\nawait app.close()\n",[189,2788,2789,2809,2828,2847,2851,2863,2918,2972,2982,2986,3007,3023,3032,3036,3075,3100,3104],{"__ignoreMap":252},[256,2790,2791,2793,2795,2798,2800,2802,2804,2807],{"class":258,"line":259},[256,2792,394],{"class":393},[256,2794,398],{"class":397},[256,2796,2797],{"class":401}," TestApp",[256,2799,405],{"class":397},[256,2801,408],{"class":393},[256,2803,411],{"class":397},[256,2805,2806],{"class":265},"@miiajs\u002Fcore\u002Ftesting",[256,2808,417],{"class":397},[256,2810,2811,2813,2815,2817,2819,2821,2823,2826],{"class":258,"line":420},[256,2812,394],{"class":393},[256,2814,398],{"class":397},[256,2816,580],{"class":401},[256,2818,405],{"class":397},[256,2820,408],{"class":393},[256,2822,411],{"class":397},[256,2824,2825],{"class":265},".\u002Fapp.module.js",[256,2827,417],{"class":397},[256,2829,2830,2832,2834,2836,2838,2840,2842,2845],{"class":258,"line":440},[256,2831,394],{"class":393},[256,2833,398],{"class":397},[256,2835,1309],{"class":401},[256,2837,405],{"class":397},[256,2839,408],{"class":393},[256,2841,411],{"class":397},[256,2843,2844],{"class":265},".\u002Fuser\u002Fuser.schema.js",[256,2846,417],{"class":397},[256,2848,2849],{"class":258,"line":447},[256,2850,444],{"emptyLinePlaceholder":443},[256,2852,2853,2856,2859,2861],{"class":258,"line":463},[256,2854,2855],{"class":576},"const",[256,2857,2858],{"class":401}," fakeUserModel ",[256,2860,985],{"class":397},[256,2862,500],{"class":397},[256,2864,2865,2868,2870,2873,2875,2878,2880,2882,2885,2887,2889,2891,2893,2896,2898,2900,2902,2904,2906,2909,2911,2913,2916],{"class":258,"line":476},[256,2866,2867],{"class":453},"  find",[256,2869,470],{"class":397},[256,2871,2872],{"class":397}," ()",[256,2874,644],{"class":576},[256,2876,2877],{"class":262}," Promise",[256,2879,482],{"class":397},[256,2881,639],{"class":453},[256,2883,2884],{"class":401},"([",[256,2886,1013],{"class":397},[256,2888,1616],{"class":466},[256,2890,470],{"class":397},[256,2892,411],{"class":397},[256,2894,2895],{"class":265},"1",[256,2897,516],{"class":397},[256,2899,757],{"class":397},[256,2901,1661],{"class":466},[256,2903,470],{"class":397},[256,2905,411],{"class":397},[256,2907,2908],{"class":265},"Alice",[256,2910,516],{"class":397},[256,2912,405],{"class":397},[256,2914,2915],{"class":401},"])",[256,2917,519],{"class":397},[256,2919,2920,2923,2925,2928,2930,2933,2935,2937,2939,2941,2943,2945,2948,2950,2952,2954,2957,2959,2961,2964,2966,2968,2970],{"class":258,"line":492},[256,2921,2922],{"class":453},"  insertOne",[256,2924,470],{"class":397},[256,2926,2927],{"class":576}," async",[256,2929,1221],{"class":397},[256,2931,2932],{"class":638},"doc",[256,2934,470],{"class":397},[256,2936,1801],{"class":262},[256,2938,551],{"class":397},[256,2940,644],{"class":576},[256,2942,1221],{"class":401},[256,2944,1013],{"class":397},[256,2946,2947],{"class":466}," acknowledged",[256,2949,470],{"class":397},[256,2951,1022],{"class":1021},[256,2953,757],{"class":397},[256,2955,2956],{"class":466}," insertedId",[256,2958,470],{"class":397},[256,2960,411],{"class":397},[256,2962,2963],{"class":265},"fake",[256,2965,516],{"class":397},[256,2967,405],{"class":397},[256,2969,551],{"class":401},[256,2971,519],{"class":397},[256,2973,2974,2976,2979],{"class":258,"line":503},[256,2975,567],{"class":397},[256,2977,2978],{"class":393}," as",[256,2980,2981],{"class":262}," any\n",[256,2983,2984],{"class":258,"line":522},[256,2985,444],{"emptyLinePlaceholder":443},[256,2987,2988,2990,2993,2995,2997,2999,3001,3004],{"class":258,"line":539},[256,2989,2855],{"class":576},[256,2991,2992],{"class":401}," app ",[256,2994,985],{"class":397},[256,2996,1583],{"class":393},[256,2998,2797],{"class":401},[256,3000,482],{"class":397},[256,3002,3003],{"class":453},"create",[256,3005,3006],{"class":401},"(AppModule)\n",[256,3008,3009,3012,3015,3018,3020],{"class":258,"line":545},[256,3010,3011],{"class":397},"  .",[256,3013,3014],{"class":453},"override",[256,3016,3017],{"class":401},"(User",[256,3019,757],{"class":397},[256,3021,3022],{"class":401}," fakeUserModel)\n",[256,3024,3025,3027,3030],{"class":258,"line":556},[256,3026,3011],{"class":397},[256,3028,3029],{"class":453},"compile",[256,3031,1474],{"class":401},[256,3033,3034],{"class":258,"line":564},[256,3035,444],{"emptyLinePlaceholder":443},[256,3037,3038,3040,3043,3045,3047,3050,3052,3055,3057,3059,3062,3064,3066,3068,3071,3073],{"class":258,"line":573},[256,3039,2855],{"class":576},[256,3041,3042],{"class":401}," res ",[256,3044,985],{"class":397},[256,3046,1583],{"class":393},[256,3048,3049],{"class":401}," app",[256,3051,482],{"class":397},[256,3053,3054],{"class":453},"request",[256,3056,457],{"class":401},[256,3058,516],{"class":397},[256,3060,3061],{"class":265},"GET",[256,3063,516],{"class":397},[256,3065,757],{"class":397},[256,3067,411],{"class":397},[256,3069,3070],{"class":265},"\u002Fusers",[256,3072,516],{"class":397},[256,3074,570],{"class":401},[256,3076,3077,3080,3083,3085,3088,3090,3093,3095,3098],{"class":258,"line":1165},[256,3078,3079],{"class":453},"expect",[256,3081,3082],{"class":401},"(res",[256,3084,482],{"class":397},[256,3086,3087],{"class":401},"status)",[256,3089,482],{"class":397},[256,3091,3092],{"class":453},"toBe",[256,3094,457],{"class":401},[256,3096,3097],{"class":753},"200",[256,3099,570],{"class":401},[256,3101,3102],{"class":258,"line":1170},[256,3103,444],{"emptyLinePlaceholder":443},[256,3105,3106,3109,3111,3113,3116],{"class":258,"line":1175},[256,3107,3108],{"class":393},"await",[256,3110,3049],{"class":401},[256,3112,482],{"class":397},[256,3114,3115],{"class":453},"close",[256,3117,1474],{"class":401},[186,3119,3120,3121,3124,3125,482],{},"For higher-level overrides (replace the whole service), use the standard ",[189,3122,3123],{},"TestApp.override(UserService, mock)"," pattern from ",[189,3126,414],{},[182,3128,3130],{"id":3129},"exports","Exports",[246,3132,3134],{"className":384,"code":3133,"language":386,"meta":252,"style":252},"import {\n  PaprModule,\n  defineModel,\n  paprDb,\n  type PaprModuleOptions,\n  type ModelToken,\n  type PaprDbToken,\n} from '@miiajs\u002Fpapr'\n",[189,3135,3136,3142,3149,3156,3163,3173,3182,3191],{"__ignoreMap":252},[256,3137,3138,3140],{"class":258,"line":259},[256,3139,394],{"class":393},[256,3141,500],{"class":397},[256,3143,3144,3147],{"class":258,"line":420},[256,3145,3146],{"class":401},"  PaprModule",[256,3148,519],{"class":397},[256,3150,3151,3154],{"class":258,"line":440},[256,3152,3153],{"class":401},"  defineModel",[256,3155,519],{"class":397},[256,3157,3158,3161],{"class":258,"line":447},[256,3159,3160],{"class":401},"  paprDb",[256,3162,519],{"class":397},[256,3164,3165,3168,3171],{"class":258,"line":463},[256,3166,3167],{"class":393},"  type",[256,3169,3170],{"class":401}," PaprModuleOptions",[256,3172,519],{"class":397},[256,3174,3175,3177,3180],{"class":258,"line":476},[256,3176,3167],{"class":393},[256,3178,3179],{"class":401}," ModelToken",[256,3181,519],{"class":397},[256,3183,3184,3186,3189],{"class":258,"line":492},[256,3185,3167],{"class":393},[256,3187,3188],{"class":401}," PaprDbToken",[256,3190,519],{"class":397},[256,3192,3193,3195,3197,3199,3201],{"class":258,"line":503},[256,3194,567],{"class":397},[256,3196,408],{"class":393},[256,3198,411],{"class":397},[256,3200,191],{"class":265},[256,3202,417],{"class":397},[182,3204,3206],{"id":3205},"see-also","See also",[2751,3208,3209,3217,3225],{},[2754,3210,3211,3216],{},[194,3212,3213],{"href":144},[189,3214,3215],{},"@miiajs\u002Fmongoose"," - Mongoose-based MongoDB integration with the same shape",[2754,3218,3219,3224],{},[194,3220,3221],{"href":136},[189,3222,3223],{},"@miiajs\u002Fdrizzle"," - SQL ORM integration following a similar pattern",[2754,3226,3227,3229],{},[194,3228,67],{"href":68}," - DI scoping and module composition",[3231,3232,3233],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":252,"searchDepth":420,"depth":420,"links":3235},[3236,3237,3238,3241,3242,3243,3244,3245,3246,3247,3248,3249],{"id":184,"depth":420,"text":27},{"id":241,"depth":420,"text":13},{"id":380,"depth":420,"text":381,"children":3239},[3240],{"id":788,"depth":440,"text":789},{"id":906,"depth":420,"text":907},{"id":1255,"depth":420,"text":1256},{"id":1404,"depth":420,"text":1405},{"id":2056,"depth":420,"text":2057},{"id":2325,"depth":420,"text":1251},{"id":2748,"depth":420,"text":2749},{"id":2777,"depth":420,"text":33},{"id":3129,"depth":420,"text":3130},{"id":3205,"depth":420,"text":3206},"MongoDB integration via Papr with schema validation, model registration, and standard `inject()` API.","md",{},{"title":139,"description":3250},"m12jCVdvD877nO_bsSPZmXyp2vBGeBygOQl3z4PdjXM",[3256,3258],{"title":135,"path":136,"stem":137,"description":3257,"children":-1},"Drizzle ORM integration for PostgreSQL, MySQL, and SQLite.",{"title":143,"path":144,"stem":145,"description":3259,"children":-1},"MongoDB integration via Mongoose with injectable models, multi-connection support, and standard `inject()` API.",1778575274092]