[{"data":1,"prerenderedAt":1446},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fv1\u002Fadvanced\u002Fpayload-mapping":121,"\u002Fdocs\u002Fv1\u002Fadvanced\u002Fpayload-mapping-surround":1441},[4],{"title":5,"path":6,"stem":7,"children":8,"page":44},"Docs","\u002Fdocs","docs",[9],{"title":10,"path":11,"stem":12,"children":13,"page":44},"V1","\u002Fdocs\u002Fv1","docs\u002Fv1",[14,18,22,45,58,80,93,111],{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fv1\u002Fintroduction","docs\u002Fv1\u002F0.introduction",{"title":19,"path":20,"stem":21},"How It Works","\u002Fdocs\u002Fv1\u002Fhow-it-works","docs\u002Fv1\u002F1.how-it-works",{"title":23,"icon":24,"path":25,"stem":26,"children":27,"page":44},"Client","i-lucide-laptop","\u002Fdocs\u002Fv1\u002Fclient","docs\u002Fv1\u002F2.client",[28,32,36,40],{"title":29,"path":30,"stem":31},"Client Setup","\u002Fdocs\u002Fv1\u002Fclient\u002Fsetup","docs\u002Fv1\u002F2.client\u002F1.setup",{"title":33,"path":34,"stem":35},"Syncing","\u002Fdocs\u002Fv1\u002Fclient\u002Fsyncing","docs\u002Fv1\u002F2.client\u002F2.syncing",{"title":37,"path":38,"stem":39},"Events","\u002Fdocs\u002Fv1\u002Fclient\u002Fevents","docs\u002Fv1\u002F2.client\u002F3.events",{"title":41,"path":42,"stem":43},"Configuration","\u002Fdocs\u002Fv1\u002Fclient\u002Fconfiguration","docs\u002Fv1\u002F2.client\u002F4.configuration",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Server","i-lucide-server","\u002Fdocs\u002Fv1\u002Fserver","docs\u002Fv1\u002F3.server",[51,55],{"title":52,"path":53,"stem":54},"Server Setup","\u002Fdocs\u002Fv1\u002Fserver\u002Fsetup","docs\u002Fv1\u002F3.server\u002F1.setup",{"title":41,"path":56,"stem":57},"\u002Fdocs\u002Fv1\u002Fserver\u002Fconfiguration","docs\u002Fv1\u002F3.server\u002F2.configuration",{"title":59,"icon":60,"badge":61,"path":62,"stem":63,"children":64,"page":44},"NativePHP","i-lucide-smartphone","Commercial","\u002Fdocs\u002Fv1\u002Fnativephp","docs\u002Fv1\u002F4.nativephp",[65,69,73,76],{"title":66,"path":67,"stem":68},"Overview","\u002Fdocs\u002Fv1\u002Fnativephp\u002Foverview","docs\u002Fv1\u002F4.nativephp\u002F1.overview",{"title":70,"path":71,"stem":72},"Setup","\u002Fdocs\u002Fv1\u002Fnativephp\u002Fsetup","docs\u002Fv1\u002F4.nativephp\u002F2.setup",{"title":41,"path":74,"stem":75},"\u002Fdocs\u002Fv1\u002Fnativephp\u002Fconfiguration","docs\u002Fv1\u002F4.nativephp\u002F3.configuration",{"title":77,"path":78,"stem":79},"Lifecycle & Events","\u002Fdocs\u002Fv1\u002Fnativephp\u002Flifecycle","docs\u002Fv1\u002F4.nativephp\u002F4.lifecycle",{"title":81,"icon":82,"badge":61,"path":83,"stem":84,"children":85,"page":44},"Server Pro","i-lucide-bar-chart-2","\u002Fdocs\u002Fv1\u002Fserver-pro","docs\u002Fv1\u002F5.server-pro",[86,89],{"title":66,"path":87,"stem":88},"\u002Fdocs\u002Fv1\u002Fserver-pro\u002Foverview","docs\u002Fv1\u002F5.server-pro\u002F1.overview",{"title":90,"path":91,"stem":92},"Features","\u002Fdocs\u002Fv1\u002Fserver-pro\u002Ffeatures","docs\u002Fv1\u002F5.server-pro\u002F2.features",{"title":94,"icon":95,"path":96,"stem":97,"children":98,"page":44},"Advanced","i-lucide-settings-2","\u002Fdocs\u002Fv1\u002Fadvanced","docs\u002Fv1\u002F6.advanced",[99,103,107],{"title":100,"path":101,"stem":102},"Service Container","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fservice-container","docs\u002Fv1\u002F6.advanced\u002F0.service-container",{"title":104,"path":105,"stem":106},"Conflict Resolution","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fconflict-resolution","docs\u002Fv1\u002F6.advanced\u002F1.conflict-resolution",{"title":108,"path":109,"stem":110},"Payload Mapping","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fpayload-mapping","docs\u002Fv1\u002F6.advanced\u002F2.payload-mapping",{"title":112,"icon":113,"path":114,"stem":115,"children":116,"page":44},"Examples","i-lucide-book-open","\u002Fdocs\u002Fv1\u002Fexamples","docs\u002Fv1\u002F7.examples",[117],{"title":118,"path":119,"stem":120},"Task Manager","\u002Fdocs\u002Fv1\u002Fexamples\u002Ftask-manager","docs\u002Fv1\u002F7.examples\u002F1.task-manager",{"id":122,"title":108,"body":123,"description":1434,"extension":1435,"links":1436,"meta":1437,"navigation":299,"path":109,"seo":1438,"stem":110,"__hash__":1440},"docs\u002Fdocs\u002Fv1\u002F6.advanced\u002F2.payload-mapping.md",{"type":124,"value":125,"toc":1423},"minimark",[126,130,202,205,210,217,223,236,496,501,524,526,530,540,544,555,560,760,764,952,956,985,987,991,999,1003,1014,1017,1217,1220,1385,1389,1419],[127,128,129],"p",{},"Payload mapping lets you transform Laravel offline sync data at the boundary between client and server. Use it when client-local fields, server database fields, or public sync payloads need to differ without changing the core sync protocol. There are three distinct mappers:",[131,132,133,152],"table",{},[134,135,136],"thead",{},[137,138,139,143,146,149],"tr",{},[140,141,142],"th",{},"Mapper",[140,144,145],{},"Runs on",[140,147,148],{},"Direction",[140,150,151],{},"Purpose",[153,154,155,172,187],"tbody",{},[137,156,157,164,166,169],{},[158,159,160],"td",{},[161,162,163],"code",{},"mutationMapper",[158,165,23],{},[158,167,168],{},"Outbound push",[158,170,171],{},"Transform a mutation's payload before it is sent to the server",[137,173,174,179,181,184],{},[158,175,176],{},[161,177,178],{},"pushMutationMapper",[158,180,46],{},[158,182,183],{},"Inbound push",[158,185,186],{},"Transform a mutation's payload before it is applied to the database",[137,188,189,194,196,199],{},[158,190,191],{},[161,192,193],{},"pullSnapshotMapper",[158,195,46],{},[158,197,198],{},"Outbound pull",[158,200,201],{},"Transform model attributes before they are sent to the client",[203,204],"hr",{},[206,207,209],"h2",{"id":208},"client-side-mutation-mapper","Client-side mutation mapper",[127,211,212,213,216],{},"Registered via ",[161,214,215],{},"ClientSyncRegistry",". Transforms the payload of an outbound mutation before it leaves the client.",[127,218,219],{},[220,221,222],"strong",{},"Use when:",[224,225,226,230,233],"ul",{},[227,228,229],"li",{},"Adding client-side metadata (e.g. app version, device fingerprint)",[227,231,232],{},"Converting client-local field names to server-expected names",[227,234,235],{},"Filtering fields that should never be sent to the server",[237,238,243],"pre",{"className":239,"code":240,"language":241,"meta":242,"style":242},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use Tether\\Client\\ClientSyncRegistry;\nuse Tether\\Core\\Mutation\\Mutation;\n\npublic function boot(): void\n{\n    app(ClientSyncRegistry::class)->register(\n        modelClass: Task::class,\n        mutationMapper: function (Mutation $mutation): Mutation {\n            return $mutation->withPayload(array_merge($mutation->getPayload(), [\n                'client_app_version' => config('app.version'),\n            ]));\n        },\n    );\n}\n","php","",[161,244,245,271,294,301,321,327,354,373,403,441,472,478,484,490],{"__ignoreMap":242},[246,247,250,254,258,262,264,266,268],"span",{"class":248,"line":249},"line",1,[246,251,253],{"class":252},"sbssI","use",[246,255,257],{"class":256},"sTEyZ"," Tether",[246,259,261],{"class":260},"sMK4o","\\",[246,263,23],{"class":256},[246,265,261],{"class":260},[246,267,215],{"class":256},[246,269,270],{"class":260},";\n",[246,272,274,276,278,280,283,285,288,290,292],{"class":248,"line":273},2,[246,275,253],{"class":252},[246,277,257],{"class":256},[246,279,261],{"class":260},[246,281,282],{"class":256},"Core",[246,284,261],{"class":260},[246,286,287],{"class":256},"Mutation",[246,289,261],{"class":260},[246,291,287],{"class":256},[246,293,270],{"class":260},[246,295,297],{"class":248,"line":296},3,[246,298,300],{"emptyLinePlaceholder":299},true,"\n",[246,302,304,308,311,315,318],{"class":248,"line":303},4,[246,305,307],{"class":306},"spNyl","public",[246,309,310],{"class":306}," function",[246,312,314],{"class":313},"s2Zo4"," boot",[246,316,317],{"class":260},"():",[246,319,320],{"class":252}," void\n",[246,322,324],{"class":248,"line":323},5,[246,325,326],{"class":260},"{\n",[246,328,330,333,336,339,342,345,348,351],{"class":248,"line":329},6,[246,331,332],{"class":313},"    app",[246,334,335],{"class":260},"(",[246,337,215],{"class":338},"sBMFI",[246,340,341],{"class":260},"::",[246,343,344],{"class":252},"class",[246,346,347],{"class":260},")->",[246,349,350],{"class":313},"register",[246,352,353],{"class":260},"(\n",[246,355,357,360,363,366,368,370],{"class":248,"line":356},7,[246,358,359],{"class":338},"        modelClass",[246,361,362],{"class":260},":",[246,364,365],{"class":338}," Task",[246,367,341],{"class":260},[246,369,344],{"class":252},[246,371,372],{"class":260},",\n",[246,374,376,379,381,383,386,388,391,394,397,400],{"class":248,"line":375},8,[246,377,378],{"class":338},"        mutationMapper",[246,380,362],{"class":260},[246,382,310],{"class":306},[246,384,385],{"class":260}," (",[246,387,287],{"class":338},[246,389,390],{"class":260}," $",[246,392,393],{"class":256},"mutation",[246,395,396],{"class":260},"):",[246,398,399],{"class":338}," Mutation",[246,401,402],{"class":260}," {\n",[246,404,406,410,412,414,417,420,422,425,428,430,432,435,438],{"class":248,"line":405},9,[246,407,409],{"class":408},"s7zQu","            return",[246,411,390],{"class":260},[246,413,393],{"class":256},[246,415,416],{"class":260},"->",[246,418,419],{"class":313},"withPayload",[246,421,335],{"class":260},[246,423,424],{"class":313},"array_merge",[246,426,427],{"class":260},"($",[246,429,393],{"class":256},[246,431,416],{"class":260},[246,433,434],{"class":313},"getPayload",[246,436,437],{"class":260},"(),",[246,439,440],{"class":260}," [\n",[246,442,444,447,451,454,457,460,462,464,467,469],{"class":248,"line":443},10,[246,445,446],{"class":260},"                '",[246,448,450],{"class":449},"sfazB","client_app_version",[246,452,453],{"class":260},"'",[246,455,456],{"class":260}," =>",[246,458,459],{"class":313}," config",[246,461,335],{"class":260},[246,463,453],{"class":260},[246,465,466],{"class":449},"app.version",[246,468,453],{"class":260},[246,470,471],{"class":260},"),\n",[246,473,475],{"class":248,"line":474},11,[246,476,477],{"class":260},"            ]));\n",[246,479,481],{"class":248,"line":480},12,[246,482,483],{"class":260},"        },\n",[246,485,487],{"class":248,"line":486},13,[246,488,489],{"class":260},"    );\n",[246,491,493],{"class":248,"line":492},14,[246,494,495],{"class":260},"}\n",[127,497,498],{},[220,499,500],{},"Callback signature:",[237,502,504],{"className":239,"code":503,"language":241,"meta":242,"style":242},"function (Mutation $mutation): Mutation\n",[161,505,506],{"__ignoreMap":242},[246,507,508,511,513,515,517,519,521],{"class":248,"line":249},[246,509,510],{"class":306},"function",[246,512,385],{"class":260},[246,514,287],{"class":338},[246,516,390],{"class":260},[246,518,393],{"class":256},[246,520,396],{"class":260},[246,522,523],{"class":338}," Mutation\n",[203,525],{},[206,527,529],{"id":528},"server-side-push-mutation-mapper","Server-side push mutation mapper",[127,531,212,532,535,536,539],{},[161,533,534],{},"SyncRegistry"," or as ",[161,537,538],{},"tetherPushMutationMapper"," on the model. Transforms a mutation's payload after it arrives on the server but before it is applied to the database or checked for conflicts.",[127,541,542],{},[220,543,222],{},[224,545,546,549,552],{},[227,547,548],{},"Stamping the authenticated user ID onto every mutation (prevents clients writing records for other users)",[227,550,551],{},"Renaming or converting fields between client and server schema",[227,553,554],{},"Adding server-computed values the client doesn't know",[556,557,559],"h3",{"id":558},"via-syncregistry","Via SyncRegistry",[237,561,563],{"className":239,"code":562,"language":241,"meta":242,"style":242},"use Tether\\Server\\SyncRegistry;\nuse Tether\\Core\\Mutation\\Mutation;\n\npublic function boot(): void\n{\n    app(SyncRegistry::class)->register(\n        modelClass: Task::class,\n        pushMutationMapper: fn (Mutation $mutation, Request $request) => $mutation->withPayload(array_merge(\n            $mutation->getPayload(),\n            ['user_id' => $request->user()->id],\n        )),\n    );\n}\n",[161,564,565,581,601,605,617,621,639,653,701,715,747,752,756],{"__ignoreMap":242},[246,566,567,569,571,573,575,577,579],{"class":248,"line":249},[246,568,253],{"class":252},[246,570,257],{"class":256},[246,572,261],{"class":260},[246,574,46],{"class":256},[246,576,261],{"class":260},[246,578,534],{"class":256},[246,580,270],{"class":260},[246,582,583,585,587,589,591,593,595,597,599],{"class":248,"line":273},[246,584,253],{"class":252},[246,586,257],{"class":256},[246,588,261],{"class":260},[246,590,282],{"class":256},[246,592,261],{"class":260},[246,594,287],{"class":256},[246,596,261],{"class":260},[246,598,287],{"class":256},[246,600,270],{"class":260},[246,602,603],{"class":248,"line":296},[246,604,300],{"emptyLinePlaceholder":299},[246,606,607,609,611,613,615],{"class":248,"line":303},[246,608,307],{"class":306},[246,610,310],{"class":306},[246,612,314],{"class":313},[246,614,317],{"class":260},[246,616,320],{"class":252},[246,618,619],{"class":248,"line":323},[246,620,326],{"class":260},[246,622,623,625,627,629,631,633,635,637],{"class":248,"line":329},[246,624,332],{"class":313},[246,626,335],{"class":260},[246,628,534],{"class":338},[246,630,341],{"class":260},[246,632,344],{"class":252},[246,634,347],{"class":260},[246,636,350],{"class":313},[246,638,353],{"class":260},[246,640,641,643,645,647,649,651],{"class":248,"line":356},[246,642,359],{"class":338},[246,644,362],{"class":260},[246,646,365],{"class":338},[246,648,341],{"class":260},[246,650,344],{"class":252},[246,652,372],{"class":260},[246,654,655,658,660,663,665,667,669,671,674,677,679,682,685,687,689,691,693,695,697,699],{"class":248,"line":375},[246,656,657],{"class":338},"        pushMutationMapper",[246,659,362],{"class":260},[246,661,662],{"class":306}," fn",[246,664,385],{"class":260},[246,666,287],{"class":338},[246,668,390],{"class":260},[246,670,393],{"class":256},[246,672,673],{"class":260},",",[246,675,676],{"class":338}," Request",[246,678,390],{"class":260},[246,680,681],{"class":256},"request",[246,683,684],{"class":260},")",[246,686,456],{"class":260},[246,688,390],{"class":260},[246,690,393],{"class":256},[246,692,416],{"class":260},[246,694,419],{"class":313},[246,696,335],{"class":260},[246,698,424],{"class":313},[246,700,353],{"class":260},[246,702,703,706,708,710,712],{"class":248,"line":405},[246,704,705],{"class":260},"            $",[246,707,393],{"class":256},[246,709,416],{"class":260},[246,711,434],{"class":313},[246,713,714],{"class":260},"(),\n",[246,716,717,720,722,725,727,729,731,733,735,738,741,744],{"class":248,"line":443},[246,718,719],{"class":260},"            [",[246,721,453],{"class":260},[246,723,724],{"class":449},"user_id",[246,726,453],{"class":260},[246,728,456],{"class":260},[246,730,390],{"class":260},[246,732,681],{"class":256},[246,734,416],{"class":260},[246,736,737],{"class":313},"user",[246,739,740],{"class":260},"()->",[246,742,743],{"class":256},"id",[246,745,746],{"class":260},"],\n",[246,748,749],{"class":248,"line":474},[246,750,751],{"class":260},"        )),\n",[246,753,754],{"class":248,"line":480},[246,755,489],{"class":260},[246,757,758],{"class":248,"line":486},[246,759,495],{"class":260},[556,761,763],{"id":762},"via-model-method-syncable","Via model method (Syncable)",[237,765,767],{"className":239,"code":766,"language":241,"meta":242,"style":242},"use Tether\\Server\\Traits\\Syncable;\nuse Illuminate\\Http\\Request;\n\nclass Task extends Model\n{\n    use Syncable;\n\n    public static function tetherPushMutationMapper(\n        Mutation $mutation,\n        Request $request,\n    ): Mutation {\n        return $mutation->withPayload(array_merge($mutation->getPayload(), ['user_id' => $request->user()->id]));\n    }\n}\n",[161,768,769,791,810,814,826,830,840,844,859,870,881,890,943,948],{"__ignoreMap":242},[246,770,771,773,775,777,779,781,784,786,789],{"class":248,"line":249},[246,772,253],{"class":252},[246,774,257],{"class":256},[246,776,261],{"class":260},[246,778,46],{"class":256},[246,780,261],{"class":260},[246,782,783],{"class":256},"Traits",[246,785,261],{"class":260},[246,787,788],{"class":256},"Syncable",[246,790,270],{"class":260},[246,792,793,795,798,800,803,805,808],{"class":248,"line":273},[246,794,253],{"class":252},[246,796,797],{"class":256}," Illuminate",[246,799,261],{"class":260},[246,801,802],{"class":256},"Http",[246,804,261],{"class":260},[246,806,807],{"class":256},"Request",[246,809,270],{"class":260},[246,811,812],{"class":248,"line":296},[246,813,300],{"emptyLinePlaceholder":299},[246,815,816,818,820,823],{"class":248,"line":303},[246,817,344],{"class":306},[246,819,365],{"class":338},[246,821,822],{"class":306}," extends",[246,824,825],{"class":338}," Model\n",[246,827,828],{"class":248,"line":323},[246,829,326],{"class":260},[246,831,832,835,838],{"class":248,"line":329},[246,833,834],{"class":252},"    use",[246,836,837],{"class":256}," Syncable",[246,839,270],{"class":260},[246,841,842],{"class":248,"line":356},[246,843,300],{"emptyLinePlaceholder":299},[246,845,846,849,852,854,857],{"class":248,"line":375},[246,847,848],{"class":306},"    public",[246,850,851],{"class":306}," static",[246,853,310],{"class":306},[246,855,856],{"class":313}," tetherPushMutationMapper",[246,858,353],{"class":260},[246,860,861,864,866,868],{"class":248,"line":405},[246,862,863],{"class":338},"        Mutation",[246,865,390],{"class":260},[246,867,393],{"class":256},[246,869,372],{"class":260},[246,871,872,875,877,879],{"class":248,"line":443},[246,873,874],{"class":338},"        Request",[246,876,390],{"class":260},[246,878,681],{"class":256},[246,880,372],{"class":260},[246,882,883,886,888],{"class":248,"line":474},[246,884,885],{"class":260},"    ):",[246,887,399],{"class":338},[246,889,402],{"class":260},[246,891,892,895,897,899,901,903,905,907,909,911,913,915,917,920,922,924,926,928,930,932,934,936,938,940],{"class":248,"line":480},[246,893,894],{"class":408},"        return",[246,896,390],{"class":260},[246,898,393],{"class":256},[246,900,416],{"class":260},[246,902,419],{"class":313},[246,904,335],{"class":260},[246,906,424],{"class":313},[246,908,427],{"class":260},[246,910,393],{"class":256},[246,912,416],{"class":260},[246,914,434],{"class":313},[246,916,437],{"class":260},[246,918,919],{"class":260}," [",[246,921,453],{"class":260},[246,923,724],{"class":449},[246,925,453],{"class":260},[246,927,456],{"class":260},[246,929,390],{"class":260},[246,931,681],{"class":256},[246,933,416],{"class":260},[246,935,737],{"class":313},[246,937,740],{"class":260},[246,939,743],{"class":256},[246,941,942],{"class":260},"]));\n",[246,944,945],{"class":248,"line":486},[246,946,947],{"class":260},"    }\n",[246,949,950],{"class":248,"line":492},[246,951,495],{"class":260},[127,953,954],{},[220,955,500],{},[237,957,959],{"className":239,"code":958,"language":241,"meta":242,"style":242},"function (Mutation $mutation, Request $request): Mutation\n",[161,960,961],{"__ignoreMap":242},[246,962,963,965,967,969,971,973,975,977,979,981,983],{"class":248,"line":249},[246,964,510],{"class":306},[246,966,385],{"class":260},[246,968,287],{"class":338},[246,970,390],{"class":260},[246,972,393],{"class":256},[246,974,673],{"class":260},[246,976,676],{"class":338},[246,978,390],{"class":260},[246,980,681],{"class":256},[246,982,396],{"class":260},[246,984,523],{"class":338},[203,986],{},[206,988,990],{"id":989},"server-side-pull-snapshot-mapper","Server-side pull snapshot mapper",[127,992,212,993,535,995,998],{},[161,994,534],{},[161,996,997],{},"tetherPullSnapshotMapper"," on the model. Transforms a model's attributes before they are serialised into a pull snapshot and sent to the client.",[127,1000,1001],{},[220,1002,222],{},[224,1004,1005,1008,1011],{},[227,1006,1007],{},"Stripping sensitive server-only fields before clients receive them",[227,1009,1010],{},"Adding computed or derived values the client needs",[227,1012,1013],{},"Renaming server field names to client-expected names",[556,1015,559],{"id":1016},"via-syncregistry-1",[237,1018,1020],{"className":239,"code":1019,"language":241,"meta":242,"style":242},"use Tether\\Server\\SyncRegistry;\nuse Tether\\Core\\Sync\\Snapshot;\nuse Illuminate\\Support\\Arr;\n\npublic function boot(): void\n{\n    app(SyncRegistry::class)->register(\n        modelClass: Task::class,\n        pullSnapshotMapper: fn (Snapshot $snapshot, $row) => $snapshot->withPayload(Arr::except($snapshot->payload, ['internal_notes', 'admin_flag'])),\n    );\n}\n",[161,1021,1022,1038,1060,1078,1082,1094,1098,1116,1130,1209,1213],{"__ignoreMap":242},[246,1023,1024,1026,1028,1030,1032,1034,1036],{"class":248,"line":249},[246,1025,253],{"class":252},[246,1027,257],{"class":256},[246,1029,261],{"class":260},[246,1031,46],{"class":256},[246,1033,261],{"class":260},[246,1035,534],{"class":256},[246,1037,270],{"class":260},[246,1039,1040,1042,1044,1046,1048,1050,1053,1055,1058],{"class":248,"line":273},[246,1041,253],{"class":252},[246,1043,257],{"class":256},[246,1045,261],{"class":260},[246,1047,282],{"class":256},[246,1049,261],{"class":260},[246,1051,1052],{"class":256},"Sync",[246,1054,261],{"class":260},[246,1056,1057],{"class":256},"Snapshot",[246,1059,270],{"class":260},[246,1061,1062,1064,1066,1068,1071,1073,1076],{"class":248,"line":296},[246,1063,253],{"class":252},[246,1065,797],{"class":256},[246,1067,261],{"class":260},[246,1069,1070],{"class":256},"Support",[246,1072,261],{"class":260},[246,1074,1075],{"class":256},"Arr",[246,1077,270],{"class":260},[246,1079,1080],{"class":248,"line":303},[246,1081,300],{"emptyLinePlaceholder":299},[246,1083,1084,1086,1088,1090,1092],{"class":248,"line":323},[246,1085,307],{"class":306},[246,1087,310],{"class":306},[246,1089,314],{"class":313},[246,1091,317],{"class":260},[246,1093,320],{"class":252},[246,1095,1096],{"class":248,"line":329},[246,1097,326],{"class":260},[246,1099,1100,1102,1104,1106,1108,1110,1112,1114],{"class":248,"line":356},[246,1101,332],{"class":313},[246,1103,335],{"class":260},[246,1105,534],{"class":338},[246,1107,341],{"class":260},[246,1109,344],{"class":252},[246,1111,347],{"class":260},[246,1113,350],{"class":313},[246,1115,353],{"class":260},[246,1117,1118,1120,1122,1124,1126,1128],{"class":248,"line":375},[246,1119,359],{"class":338},[246,1121,362],{"class":260},[246,1123,365],{"class":338},[246,1125,341],{"class":260},[246,1127,344],{"class":252},[246,1129,372],{"class":260},[246,1131,1132,1135,1137,1139,1141,1143,1145,1148,1150,1152,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1176,1178,1180,1182,1185,1187,1189,1191,1194,1196,1198,1201,1204,1206],{"class":248,"line":405},[246,1133,1134],{"class":338},"        pullSnapshotMapper",[246,1136,362],{"class":260},[246,1138,662],{"class":306},[246,1140,385],{"class":260},[246,1142,1057],{"class":338},[246,1144,390],{"class":260},[246,1146,1147],{"class":256},"snapshot",[246,1149,673],{"class":260},[246,1151,390],{"class":260},[246,1153,1154],{"class":256},"row",[246,1156,684],{"class":260},[246,1158,456],{"class":260},[246,1160,390],{"class":260},[246,1162,1147],{"class":256},[246,1164,416],{"class":260},[246,1166,419],{"class":313},[246,1168,335],{"class":260},[246,1170,1075],{"class":338},[246,1172,341],{"class":260},[246,1174,1175],{"class":313},"except",[246,1177,427],{"class":260},[246,1179,1147],{"class":256},[246,1181,416],{"class":260},[246,1183,1184],{"class":256},"payload",[246,1186,673],{"class":260},[246,1188,919],{"class":260},[246,1190,453],{"class":260},[246,1192,1193],{"class":449},"internal_notes",[246,1195,453],{"class":260},[246,1197,673],{"class":260},[246,1199,1200],{"class":260}," '",[246,1202,1203],{"class":449},"admin_flag",[246,1205,453],{"class":260},[246,1207,1208],{"class":260},"])),\n",[246,1210,1211],{"class":248,"line":443},[246,1212,489],{"class":260},[246,1214,1215],{"class":248,"line":474},[246,1216,495],{"class":260},[556,1218,763],{"id":1219},"via-model-method-syncable-1",[237,1221,1223],{"className":239,"code":1222,"language":241,"meta":242,"style":242},"use Tether\\Server\\Traits\\Syncable;\nuse Illuminate\\Support\\Arr;\n\nclass Task extends Model\n{\n    use Syncable;\n\n    public static function tetherPullSnapshotMapper(Snapshot $snapshot, self $row): Snapshot\n    {\n        return $snapshot->withPayload(Arr::except($snapshot->payload, ['internal_notes', 'admin_flag']));\n    }\n}\n",[161,1224,1225,1245,1261,1265,1275,1279,1287,1291,1324,1329,1377,1381],{"__ignoreMap":242},[246,1226,1227,1229,1231,1233,1235,1237,1239,1241,1243],{"class":248,"line":249},[246,1228,253],{"class":252},[246,1230,257],{"class":256},[246,1232,261],{"class":260},[246,1234,46],{"class":256},[246,1236,261],{"class":260},[246,1238,783],{"class":256},[246,1240,261],{"class":260},[246,1242,788],{"class":256},[246,1244,270],{"class":260},[246,1246,1247,1249,1251,1253,1255,1257,1259],{"class":248,"line":273},[246,1248,253],{"class":252},[246,1250,797],{"class":256},[246,1252,261],{"class":260},[246,1254,1070],{"class":256},[246,1256,261],{"class":260},[246,1258,1075],{"class":256},[246,1260,270],{"class":260},[246,1262,1263],{"class":248,"line":296},[246,1264,300],{"emptyLinePlaceholder":299},[246,1266,1267,1269,1271,1273],{"class":248,"line":303},[246,1268,344],{"class":306},[246,1270,365],{"class":338},[246,1272,822],{"class":306},[246,1274,825],{"class":338},[246,1276,1277],{"class":248,"line":323},[246,1278,326],{"class":260},[246,1280,1281,1283,1285],{"class":248,"line":329},[246,1282,834],{"class":252},[246,1284,837],{"class":256},[246,1286,270],{"class":260},[246,1288,1289],{"class":248,"line":356},[246,1290,300],{"emptyLinePlaceholder":299},[246,1292,1293,1295,1297,1299,1302,1304,1306,1308,1310,1312,1315,1317,1319,1321],{"class":248,"line":375},[246,1294,848],{"class":306},[246,1296,851],{"class":306},[246,1298,310],{"class":306},[246,1300,1301],{"class":313}," tetherPullSnapshotMapper",[246,1303,335],{"class":260},[246,1305,1057],{"class":338},[246,1307,390],{"class":260},[246,1309,1147],{"class":256},[246,1311,673],{"class":260},[246,1313,1314],{"class":306}," self",[246,1316,390],{"class":260},[246,1318,1154],{"class":256},[246,1320,396],{"class":260},[246,1322,1323],{"class":338}," Snapshot\n",[246,1325,1326],{"class":248,"line":405},[246,1327,1328],{"class":260},"    {\n",[246,1330,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375],{"class":248,"line":443},[246,1332,894],{"class":408},[246,1334,390],{"class":260},[246,1336,1147],{"class":256},[246,1338,416],{"class":260},[246,1340,419],{"class":313},[246,1342,335],{"class":260},[246,1344,1075],{"class":338},[246,1346,341],{"class":260},[246,1348,1175],{"class":313},[246,1350,427],{"class":260},[246,1352,1147],{"class":256},[246,1354,416],{"class":260},[246,1356,1184],{"class":256},[246,1358,673],{"class":260},[246,1360,919],{"class":260},[246,1362,453],{"class":260},[246,1364,1193],{"class":449},[246,1366,453],{"class":260},[246,1368,673],{"class":260},[246,1370,1200],{"class":260},[246,1372,1203],{"class":449},[246,1374,453],{"class":260},[246,1376,942],{"class":260},[246,1378,1379],{"class":248,"line":474},[246,1380,947],{"class":260},[246,1382,1383],{"class":248,"line":480},[246,1384,495],{"class":260},[127,1386,1387],{},[220,1388,500],{},[237,1390,1392],{"className":239,"code":1391,"language":241,"meta":242,"style":242},"function (Snapshot $snapshot, Model $row): Snapshot\n",[161,1393,1394],{"__ignoreMap":242},[246,1395,1396,1398,1400,1402,1404,1406,1408,1411,1413,1415,1417],{"class":248,"line":249},[246,1397,510],{"class":306},[246,1399,385],{"class":260},[246,1401,1057],{"class":338},[246,1403,390],{"class":260},[246,1405,1147],{"class":256},[246,1407,673],{"class":260},[246,1409,1410],{"class":338}," Model",[246,1412,390],{"class":260},[246,1414,1154],{"class":256},[246,1416,396],{"class":260},[246,1418,1323],{"class":338},[1420,1421,1422],"style",{},"html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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);}",{"title":242,"searchDepth":249,"depth":273,"links":1424},[1425,1426,1430],{"id":208,"depth":273,"text":209},{"id":528,"depth":273,"text":529,"children":1427},[1428,1429],{"id":558,"depth":296,"text":559},{"id":762,"depth":296,"text":763},{"id":989,"depth":273,"text":990,"children":1431},[1432,1433],{"id":1016,"depth":296,"text":559},{"id":1219,"depth":296,"text":763},"Transform Tether mutation and snapshot payloads between client and server using client mutation mappers, push mappers, and pull snapshot mappers.","md",null,{},{"title":1439,"description":1434},"Payload Mapping for Laravel Offline Sync","2rb948J8c_--jzAQE9F3EvXk-wnOTAJcfxBzOBDNnuI",[1442,1444],{"title":104,"path":105,"stem":106,"description":1443,"children":-1},"Learn how Laravel Tether detects offline sync conflicts, applies server-wins defaults, returns server state, and supports custom conflict resolvers.",{"title":118,"path":119,"stem":120,"description":1445,"children":-1},"Follow a practical Laravel Tether example that builds a task manager with local offline writes, server sync endpoints, scoped pull, and conflicts.",1780481015236]