{"_id":"@cosmospro/cosmospro-msw","_rev":"6-f8f9bdeb80acd57a10d6bb3d9fafee7a","name":"@cosmospro/cosmospro-msw","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@cosmospro/cosmospro-msw","version":"1.0.0","keywords":["odata","msw","mock","testing","filter","pagination"],"author":{"name":"CosmosPro"},"license":"MIT","_id":"@cosmospro/cosmospro-msw@1.0.0","maintainers":[{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"}],"homepage":"https://github.com/cosmos-pro/cosmospro-lib#readme","bugs":{"url":"https://github.com/cosmos-pro/cosmospro-lib/issues"},"dist":{"shasum":"3a55c0db39a89f38030f83a79cdb83ea52dd1004","tarball":"https://registry.npmjs.org/@cosmospro/cosmospro-msw/-/cosmospro-msw-1.0.0.tgz","fileCount":20,"integrity":"sha512-oW7G5AWbLTtjBE6NU2hC3cg3Om1k84vgIxNPIeXLLvqlKB2HZxjkMHr3KvjsCKXN6Weppo7qnG+BiNLJMGOQUw==","signatures":[{"sig":"MEYCIQDpSgH+LPwfS5x3K4j8pee9FkTvzSyMZ7IqIcnGTJ7D+QIhAMa15nNjbC8o6VBt8f9hVHliUz9updT9v0b2PqA/qor3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3342769},"main":"dist/cosmos-pro-msw.js","types":"dist/cosmos-pro-msw.d.ts","module":"dist/cosmos-pro-msw.mjs","vitest":{"include":["src/tests/**/*.test.ts"],"outputFile":{"html":"./test-report/index.html"},"environment":"node"},"engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/cosmos-pro-msw.d.mts","default":"./dist/cosmos-pro-msw.mjs"},"require":{"types":"./dist/cosmos-pro-msw.d.ts","default":"./dist/cosmos-pro-msw.js"}}},"gitHead":"6db6ee21b9a4bcfc82f66899a3f5c121a8571837","scripts":{"dev":"tsup src/cosmos-pro-msw.ts --format cjs,esm --dts --watch","test":"vitest run","build":"tsup src/cosmos-pro-msw.ts --format cjs,esm --dts --sourcemap","test:ui":"vitest --ui","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"},"repository":{"url":"git+https://github.com/cosmos-pro/cosmospro-lib.git","type":"git","directory":"packages/cosmospro-msw-odata"},"_npmVersion":"11.8.0","description":"Biblioteca com a implementação odata para utilização dentro do MSW, permitindo mock de apis odata para teste.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@odata/parser":"^0.2.14","@cosmospro/msw-odata":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.2","tsup":"^8.5.1","vitest":"^4.1.4","@vitest/ui":"^4.1.4","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cosmospro-msw_1.0.0_1777563905225_0.971044500523992","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@cosmospro/cosmospro-msw","version":"1.0.1","keywords":["odata","msw","mock","testing","filter","pagination"],"author":{"name":"CosmosPro"},"license":"MIT","_id":"@cosmospro/cosmospro-msw@1.0.1","maintainers":[{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"}],"homepage":"https://github.com/cosmos-pro/cosmospro-lib#readme","bugs":{"url":"https://github.com/cosmos-pro/cosmospro-lib/issues"},"dist":{"shasum":"135d718d8210ff99f2581b8e8e862a8bff78babd","tarball":"https://registry.npmjs.org/@cosmospro/cosmospro-msw/-/cosmospro-msw-1.0.1.tgz","fileCount":20,"integrity":"sha512-qp30ZeL1tDn81eOkg4utgJH+jGweZexpryLj0vN26YPaYqaOSDW4ZwQtp/jFKuQpLV9lgQxZC70yQh8f/pTh8w==","signatures":[{"sig":"MEUCIQDU0vuoq8qV5kvPGOYCRXN3laadVjZsrPq3eh9XaiMCCAIgDRQYVm7JZzA4tiQMoeHw0BFEM/zwf/2DVC0tITanOsM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3342769},"main":"dist/cosmos-pro-msw.js","types":"dist/cosmos-pro-msw.d.ts","module":"dist/cosmos-pro-msw.mjs","vitest":{"include":["src/tests/**/*.test.ts"],"outputFile":{"html":"./test-report/index.html"},"environment":"node"},"engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/cosmos-pro-msw.d.mts","default":"./dist/cosmos-pro-msw.mjs"},"require":{"types":"./dist/cosmos-pro-msw.d.ts","default":"./dist/cosmos-pro-msw.js"}}},"gitHead":"515046b2365b6acc11644c65686e6b8579214f16","scripts":{"dev":"tsup src/cosmos-pro-msw.ts --format cjs,esm --dts --watch","test":"vitest run","build":"tsup src/cosmos-pro-msw.ts --format cjs,esm --dts --sourcemap","test:ui":"vitest --ui","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"},"repository":{"url":"git+https://github.com/cosmos-pro/cosmospro-lib.git","type":"git","directory":"packages/cosmospro-msw-odata"},"_npmVersion":"11.8.0","description":"Biblioteca com a implementação odata para utilização dentro do MSW, permitindo mock de apis odata para teste.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@odata/parser":"^0.2.14","@cosmospro/msw-odata":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.2","tsup":"^8.5.1","vitest":"^4.1.4","@vitest/ui":"^4.1.4","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cosmospro-msw_1.0.1_1777563993507_0.8867134541610164","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@cosmospro/cosmospro-msw","version":"1.0.2","keywords":["odata","msw","mock","testing","filter","pagination"],"author":{"name":"CosmosPro"},"license":"MIT","_id":"@cosmospro/cosmospro-msw@1.0.2","maintainers":[{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"}],"homepage":"https://github.com/cosmos-pro/cosmospro-lib#readme","bugs":{"url":"https://github.com/cosmos-pro/cosmospro-lib/issues"},"dist":{"shasum":"17f7ee44250546cd6ff6accdacfc0ffad5e53ca5","tarball":"https://registry.npmjs.org/@cosmospro/cosmospro-msw/-/cosmospro-msw-1.0.2.tgz","fileCount":20,"integrity":"sha512-9BedAjlkEqn7zbqZXqURqO/sSQQbRzWHo9o2XYWSQCq9IG02F9uRAp7Bmj8RS4dgMndhU5BQHIGP9u0vbUgU/g==","signatures":[{"sig":"MEUCIDoGdA2LkZT/JbrV9vJy5++tZ1sLgR9WVjildW+xIZTdAiEAyBP18c0SAogwWJ3hfuU4JPOAfIEcHD2xS04jYJV9IyU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3354946},"main":"dist/cosmos-pro-msw.js","types":"dist/cosmos-pro-msw.d.ts","module":"dist/cosmos-pro-msw.mjs","vitest":{"include":["src/tests/**/*.test.ts"],"outputFile":{"html":"./test-report/index.html"},"environment":"node"},"engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/cosmos-pro-msw.d.mts","default":"./dist/cosmos-pro-msw.mjs"},"require":{"types":"./dist/cosmos-pro-msw.d.ts","default":"./dist/cosmos-pro-msw.js"}}},"gitHead":"dacf3dc7576ef82b800bf56b45037b3fe8d06e2a","scripts":{"dev":"tsup src/cosmos-pro-msw.ts --format cjs,esm --dts --watch","test":"vitest run","build":"tsup src/cosmos-pro-msw.ts --format cjs,esm --dts --sourcemap","test:ui":"vitest --ui","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"},"repository":{"url":"git+https://github.com/cosmos-pro/cosmospro-lib.git","type":"git","directory":"packages/cosmospro-msw-odata"},"_npmVersion":"11.8.0","description":"Biblioteca com a implementação odata para utilização dentro do MSW, permitindo mock de apis odata para teste.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"@odata/parser":"^0.2.14","@cosmospro/msw-odata":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.2","tsup":"^8.5.1","vitest":"^4.1.4","@vitest/ui":"^4.1.4","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cosmospro-msw_1.0.2_1777901346831_0.5248519663466635","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@cosmospro/cosmospro-msw","version":"1.0.3","keywords":["odata","msw","mock","testing","filter","pagination"],"author":{"name":"CosmosPro"},"license":"MIT","_id":"@cosmospro/cosmospro-msw@1.0.3","maintainers":[{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"}],"homepage":"https://github.com/cosmos-pro/cosmospro-lib#readme","bugs":{"url":"https://github.com/cosmos-pro/cosmospro-lib/issues"},"dist":{"shasum":"7193d94cd9b65999c4edd37ef1a299063cb08aca","tarball":"https://registry.npmjs.org/@cosmospro/cosmospro-msw/-/cosmospro-msw-1.0.3.tgz","fileCount":20,"integrity":"sha512-w0IpA7BJpDV/vKZjNxnTNrunAtWu2YDWqXQxapVpbwWl2JObZN1VRLJAY1ZsrqMNfyUVNworA5JfK/YgtmyObQ==","signatures":[{"sig":"MEQCIGsOcZIRrN+lf0DNDsGYNQIhiIWNJ2kjEziAJfpOwin9AiAVME7uD/RbwDkfB4/toIVdgvaMbOJ6sEcoQXiy9LZJDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3388103},"main":"dist/cosmos-pro-msw.js","types":"dist/cosmos-pro-msw.d.ts","module":"dist/cosmos-pro-msw.mjs","vitest":{"include":["src/tests/**/*.test.ts"],"outputFile":{"html":"./test-report/index.html"},"environment":"node"},"engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/cosmos-pro-msw.d.mts","default":"./dist/cosmos-pro-msw.mjs"},"require":{"types":"./dist/cosmos-pro-msw.d.ts","default":"./dist/cosmos-pro-msw.js"}}},"gitHead":"044e7e9ba9e8179ba20d248fde5a1e8695eb12ee","scripts":{"dev":"tsup src/cosmos-pro-msw.ts --format cjs,esm --dts --watch","test":"vitest run","build":"tsup src/cosmos-pro-msw.ts --format cjs,esm --dts --sourcemap","test:ui":"vitest --ui","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"},"repository":{"url":"git+https://github.com/cosmos-pro/cosmospro-lib.git","type":"git","directory":"packages/cosmospro-msw-odata"},"_npmVersion":"10.8.2","description":"Biblioteca com a implementação odata para utilização dentro do MSW, permitindo mock de apis odata para teste.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@odata/parser":"^0.2.14","@cosmospro/msw-odata":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.2","tsup":"^8.5.1","vitest":"^4.1.4","@vitest/ui":"^4.1.4","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cosmospro-msw_1.0.3_1778769574038_0.017578853850998888","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@cosmospro/cosmospro-msw","version":"1.0.4","keywords":["odata","msw","mock","testing","filter","pagination"],"author":{"name":"CosmosPro"},"license":"MIT","_id":"@cosmospro/cosmospro-msw@1.0.4","maintainers":[{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"}],"homepage":"https://github.com/cosmos-pro/cosmospro-lib#readme","bugs":{"url":"https://github.com/cosmos-pro/cosmospro-lib/issues"},"dist":{"shasum":"cbfb9a78ca7443021bdbd5231ef69ac0b20716d7","tarball":"https://registry.npmjs.org/@cosmospro/cosmospro-msw/-/cosmospro-msw-1.0.4.tgz","fileCount":17,"integrity":"sha512-YQ70R4UNzBMkpb8iWQ1vT6k3YDbeSErYvwre4Dr0FtqKF4qqcxwmQXA1c8CeNsVCgE4fgjiGH47uLRydAB4Ccw==","signatures":[{"sig":"MEUCIQDE3kR0JjdbNL5jxkJdj/ManRKD18jEf6OJViKp+lNYtgIgFYwhehBgh1xIBXAlLeuznS0fgiPriuS+BtYPAmWSEvM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154923},"main":"dist/cosmos-pro-msw.js","types":"dist/cosmos-pro-msw.d.ts","module":"dist/cosmos-pro-msw.mjs","vitest":{"include":["src/tests/**/*.test.ts"],"outputFile":{"html":"./test-report/index.html"},"environment":"node"},"engines":{"node":">=18"},"exports":{".":{"import":{"types":"./dist/cosmos-pro-msw.d.mts","default":"./dist/cosmos-pro-msw.mjs"},"require":{"types":"./dist/cosmos-pro-msw.d.ts","default":"./dist/cosmos-pro-msw.js"}}},"gitHead":"daa9f00cea9df718cd46d275289ebe59d65a2c94","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","test:ui":"vitest --ui","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"},"repository":{"url":"git+https://github.com/cosmos-pro/cosmospro-lib.git","type":"git","directory":"packages/cosmospro-msw-odata"},"_npmVersion":"10.8.2","description":"Biblioteca com a implementação odata para utilização dentro do MSW, permitindo mock de apis odata para teste.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@odata/parser":"^0.2.14","@cosmospro/msw-odata":"^1.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.2","tsup":"^8.5.1","vitest":"^4.1.4","@vitest/ui":"^4.1.4","typescript":"^5.0.0"},"peerDependencies":{"msw":"^2.10.2"},"_npmOperationalInternal":{"tmp":"tmp/cosmospro-msw_1.0.4_1778847338714_0.8634834675400069","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@cosmospro/cosmospro-msw","version":"1.0.5","description":"Biblioteca com a implementação odata para utilização dentro do MSW, permitindo mock de apis odata para teste.","main":"dist/cosmos-pro-msw.js","module":"dist/cosmos-pro-msw.mjs","types":"dist/cosmos-pro-msw.d.ts","exports":{".":{"import":{"types":"./dist/cosmos-pro-msw.d.mts","default":"./dist/cosmos-pro-msw.mjs"},"require":{"types":"./dist/cosmos-pro-msw.d.ts","default":"./dist/cosmos-pro-msw.js"}}},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/cosmos-pro/cosmospro-lib.git","directory":"packages/cosmospro-msw-odata"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","test:ui":"vitest --ui"},"author":{"name":"CosmosPro"},"license":"MIT","devDependencies":{"@vitest/ui":"^4.1.4","msw":"^2.10.2","tsup":"^8.5.1","typescript":"^5.0.0","vitest":"^4.1.4"},"peerDependencies":{"msw":"^2.10.2"},"dependencies":{"@cosmospro/msw-odata":"^1.3.2","@odata/parser":"^0.2.14"},"engines":{"node":">=18"},"keywords":["odata","msw","mock","testing","filter","pagination"],"vitest":{"include":["src/tests/**/*.test.ts"],"environment":"node","outputFile":{"html":"./test-report/index.html"}},"_id":"@cosmospro/cosmospro-msw@1.0.5","gitHead":"88ed8ad7f03359bedaad7353256827a1588db40e","bugs":{"url":"https://github.com/cosmos-pro/cosmospro-lib/issues"},"homepage":"https://github.com/cosmos-pro/cosmospro-lib#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-ruSn6w+yB71wnS4x9HkL3w5EzgR5leqJluy2fnyRnJJ4WUde1NWhq3wy8uCc+8xIFnm4zq1W6CILC+dp4oBLkA==","shasum":"82551d2becedcf8edd120398eb6e8015674e3e39","tarball":"https://registry.npmjs.org/@cosmospro/cosmospro-msw/-/cosmospro-msw-1.0.5.tgz","fileCount":17,"unpackedSize":156045,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD1EUwMb9qQ/drpH7tRwpU05oFf/0O2kIwffqoyr8oUugIgOVcAoFCZ661s+euIktcaFDvKdChIY/zuvYqWoqAdEDU="}]},"_npmUser":{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"},"directories":{},"maintainers":[{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cosmospro-msw_1.0.5_1778858153771_0.7675170311732331"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-30T15:45:04.832Z","modified":"2026-05-15T15:15:54.046Z","1.0.0":"2026-04-30T15:45:05.467Z","1.0.1":"2026-04-30T15:46:33.780Z","1.0.2":"2026-05-04T13:29:07.068Z","1.0.3":"2026-05-14T14:39:34.269Z","1.0.4":"2026-05-15T12:15:38.872Z","1.0.5":"2026-05-15T15:15:53.917Z"},"bugs":{"url":"https://github.com/cosmos-pro/cosmospro-lib/issues"},"author":{"name":"CosmosPro"},"license":"MIT","homepage":"https://github.com/cosmos-pro/cosmospro-lib#readme","keywords":["odata","msw","mock","testing","filter","pagination"],"repository":{"type":"git","url":"git+https://github.com/cosmos-pro/cosmospro-lib.git","directory":"packages/cosmospro-msw-odata"},"description":"Biblioteca com a implementação odata para utilização dentro do MSW, permitindo mock de apis odata para teste.","maintainers":[{"name":"albertoneto","email":"alberto.vieira@procfit.com.br"}],"readme":"# @cosmospro/cosmospro-msw\n\nWrapper declarativo de [MSW](https://mswjs.io/) para mockar **Custom Views** e **Custom Actions** do Cosmos Pro em testes e desenvolvimento — sem precisar conhecer MSW ou OData diretamente.\n\nA biblioteca encapsula o protocolo OData v4 (filtros, paginação, ordenação, agregação) e o endpoint `ExecuteCustomAction` em duas funções declarativas: você informa o nome e os dados/handler, e a lib cuida do resto.\n\nInternamente apoia-se em [`@cosmospro/msw-odata`](../msw-odata) para o parser OData e os helpers de autenticação.\n\n---\n\n## Instalação\n\n```bash\nnpm i -D @cosmospro/cosmospro-msw msw\n```\n\n`msw` é uma peer dependency — instale a versão 2.x.\n\n---\n\n## Quickstart (Vitest + Node)\n\n```ts\nimport { setupServer } from 'msw/node';\nimport { mockCustomView, mockCustomAction } from '@cosmospro/cosmospro-msw';\n\ninterface Produto { id: number; nome: string; preco: number }\n\nconst produtos: Produto[] = [\n  { id: 1, nome: 'Notebook',  preco: 5000 },\n  { id: 2, nome: 'Mouse',     preco: 80 },\n];\n\nconst server = setupServer(\n  mockCustomView<Produto>('ProdutosMaisVendidos', produtos),\n  mockCustomAction('EnviarEmail', ({ body }) => ({ status: 'sent' })),\n);\n\nbeforeAll(() => server.listen());\nafterEach(() => server.resetHandlers());\nafterAll(() => server.close());\n```\n\nNo browser, troque por `setupWorker` de `msw/browser`.\n\n---\n\n## `mockCustomView<T>(name, data, options?)`\n\nIntercepta as Custom Views do Cosmos Pro nas **duas formas suportadas pelo backend real**:\n\n| Método | URL                                                                     | Fonte dos `Parameters`                  |\n|--------|-------------------------------------------------------------------------|-----------------------------------------|\n| POST   | `{baseUrl}/odata/CustomViews(Name='{name}')/ExecuteAndReceiveData`      | `body.Parameters` (JSON)                |\n| GET    | `{baseUrl}/rest/api/CustomViews(Name='{name}')/ExecuteAndReceiveData`   | chaves da query string sem prefixo `$`  |\n\nOs system query options OData (`$filter`, `$top`, `$skip`, `$orderby`, `$select`, `$count`, `$apply`, `$expand`) são lidos **igualmente** da query string nos dois modos. Por padrão a lib registra **os dois** simultaneamente — use `methods` se quiser restringir.\n\n```ts\nmockCustomView<Produto>('ProdutosMaisVendidos', produtos, {\n  baseUrl: 'http://api.example.com', // opcional - default: qualquer host\n  auth: 'meu-bearer-token',           // string => Bearer | AuthPredicate => custom\n  delay: 200,                         // ms de latencia simulada\n  onParams: (params) => {\n    // POST  -> recebe body.Parameters\n    // GET   -> recebe as chaves nao-$ da query string (valores sao strings)\n    return produtos.filter((p) => p.preco >= Number(params.MinPrice));\n  },\n  // Habilitar operadores $filter que a sua Custom View suporta (ver secao abaixo)\n  filterCapabilities: { allow: ['eq', 'ne', 'gt', 'lt', 'and', 'or', 'contains'] },\n  // Opcional — restringe os metodos/paths interceptados (default: ambos).\n  methods: ['GET', 'POST'],\n});\n```\n\n### Restringir métodos com `methods`\n\nPor padrão a lib intercepta GET e POST simultaneamente. Para mockar apenas uma forma:\n\n```ts\n// So GET (path /rest/api/CustomViews(...))\nmockCustomView('Produtos', produtos, { methods: 'GET' });\n\n// So POST (path /odata/CustomViews(...))\nmockCustomView('Produtos', produtos, { methods: 'POST' });\n```\n\nRequisições na combinação \"errada\" (ex.: POST em `/rest/api/...` ou GET em `/odata/...`) são repassadas adiante para outros handlers do worker — não são interceptadas.\n\nOData suportado (delegado ao `@cosmospro/msw-odata`):\n`$filter`, `$orderby`, `$top`, `$skip`, `$select`, `$count`, `$expand`, `$apply`.\n\nResposta:\n\n```json\n{\n  \"@odata.count\": 42,\n  \"value\": [ /* itens */ ]\n}\n```\n\n---\n\n## Filtros `$filter` — modelo opt-in\n\nPor padrao, **todos os operadores e funcoes de `$filter` estao desabilitados**. Qualquer query com `$filter` retorna `400 Bad Request` automaticamente — espelhando o comportamento do Cosmos Pro real, que nao suporta 100% da spec OData.\n\nHabilite explicitamente os operadores que a sua Custom View aceita usando `filterCapabilities`:\n\n```ts\nimport { mockCustomView } from '@cosmospro/cosmospro-msw';\nimport type { FilterCapabilities } from '@cosmospro/cosmospro-msw';\n\n// Apenas igualdade, comparacoes basicas e conjuncao/disjuncao\nmockCustomView('Produtos', produtos, {\n  filterCapabilities: { allow: ['eq', 'ne', 'gt', 'ge', 'lt', 'le', 'and', 'or'] },\n});\n\n// Inclui funcoes de string tambem\nmockCustomView('Clientes', clientes, {\n  filterCapabilities: {\n    allow: ['eq', 'ne', 'and', 'or', 'contains', 'startswith', 'endswith'],\n  },\n});\n\n// Permitir tudo (equivale ao comportamento antigo da lib)\nmockCustomView('Qualquer', dados, {\n  filterCapabilities: { deny: [] },\n});\n```\n\nOperadores disponíveis para allowlist/denylist:\n\n| Categoria | Tokens |\n| --- | --- |\n| Comparacao | `eq` `ne` `gt` `ge` `lt` `le` `in` `has` |\n| Logica | `and` `or` `not` |\n| Aritmetica | `add` `sub` `mul` `div` `mod` |\n| String | `contains` `startswith` `endswith` `length` `indexof` `substring` `tolower` `toupper` `trim` `concat` |\n| Data | `year` `month` `day` `hour` `minute` `second` `now` `date` `time` |\n| Matematica | `round` `floor` `ceiling` |\n\nQuando um operador nao permitido e usado, o mock responde:\n\n```json\n{ \"error\": \"Filter operator/function 'contains' is not supported by the configured capabilities\" }\n```\n\ncom status HTTP **400**.\n\n---\n\n## `mockCustomAction(name, handler, options?)`\n\nIntercepta `POST {baseUrl}/api/ExecuteCustomAction/ExecuteAction?ActionName={name}&api-version=1.0`. O handler recebe um contexto e devolve qualquer JSON-serializavel (ou um `Response` via `ctx.reply.*`).\n\n```ts\nmockCustomAction('AtualizarStatus', async ({ query, body, reply }) => {\n  if (!body || typeof body !== 'object') {\n    return reply.badRequest('body obrigatorio');\n  }\n  return { id: query.id, status: (body as any).novoStatus };\n});\n```\n\nContexto disponivel:\n\n| Campo | Tipo | Descricao |\n| --- | --- | --- |\n| `request` | `Request` | Requisicao original (Fetch API) |\n| `query` | `Record<string,string>` | Query params (sem `ActionName` nem `api-version`) |\n| `body` | `unknown` | JSON parseado do body, ou `null` se vazio/nao-JSON |\n| `reply` | `ReplyHelpers` | Atalhos: `json`, `ok`, `created`, `noContent`, `badRequest`, `unauthorized`, `forbidden`, `notFound` |\n\nO retorno do handler e envelopado automaticamente em `HttpResponse.json(...)`. Se voce quer controlar status/headers, retorne um `Response` diretamente (use os helpers de `ctx.reply`).\n\nMultiplas chamadas para `mockCustomAction` no mesmo `setupServer` convivem sem conflito: cada uma so responde quando o `ActionName` da query bate com o registrado.\n\n---\n\n## Autenticacao\n\nA opcao `auth` aceita:\n\n- **String** - tratada como Bearer token (match exato em `Authorization: Bearer <token>`).\n- **Funcao `AuthPredicate`** - `(request: Request) => boolean | Promise<boolean>`.\n\nQuando o predicado retorna `false`, a resposta e `401 Unauthorized`.\n\n```ts\nimport { authBearer } from '@cosmospro/cosmospro-msw';\n\nmockCustomView('X', data, { auth: 'token' });                                // bearer simples\nmockCustomView('X', data, { auth: authBearer((t) => t.startsWith('sk_')) }); // validacao custom\nmockCustomView('X', data, { auth: (req) => req.headers.has('x-key') });      // predicate custom\n```\n\n---\n\n## Limitacoes conhecidas\n\n- Custom Views sao tratadas exclusivamente como **OData v4** (formato real do Cosmos Pro).\n- Em modo GET, os `Parameters` chegam ao `onParams` como **strings** (assim como `URLSearchParams` entrega). Faça coerção (`Number`, `new Date`, etc.) dentro do callback — mesmo padrão que o POST já usava.\n- Chaves customizadas com prefixo `$` em modo GET seriam silenciosamente tratadas como system query options. Evite (o backend real do Cosmos Pro também reserva o `$`).\n- Custom Actions com upload multipart de arquivos ainda nao sao cobertas (apenas body JSON).\n- A regex de match assume URL absoluta na request - `setupWorker`/`setupServer` interceptam normalmente; em ambientes que reescrevem hosts, configure `baseUrl` explicitamente.\n","readmeFilename":"README.md"}