msw-dev-tool 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -16,7 +16,26 @@ const useFlattenHandlersTable = () => {
16
16
  cell: ({ row }) => (React.createElement("input", { type: "checkbox", checked: row.getIsSelected(), onChange: (e) => row.toggleSelected(e.target.checked) })),
17
17
  }),
18
18
  columnHelper.accessor("path", {
19
- header: "End point",
19
+ header: "Protocol",
20
+ cell: ({ row }) => {
21
+ console.log(row.original.path);
22
+ const protocol = new URL(row.original.path, location.href).protocol;
23
+ return React.createElement("div", { className: "msw-dev-tool-center" }, protocol);
24
+ },
25
+ }),
26
+ columnHelper.accessor("path", {
27
+ header: "Host",
28
+ cell: ({ row }) => {
29
+ const host = new URL(row.original.path, location.href).host;
30
+ return React.createElement("div", { className: "msw-dev-tool-center" }, host);
31
+ },
32
+ }),
33
+ columnHelper.accessor("path", {
34
+ header: "Path",
35
+ cell: ({ row }) => {
36
+ const path = new URL(row.original.path, location.href).pathname;
37
+ return React.createElement("div", { className: "msw-dev-tool-center" }, path);
38
+ },
20
39
  }),
21
40
  columnHelper.accessor("method", {
22
41
  header: "Method",
@@ -1 +1 @@
1
- {"version":3,"file":"useFlattenHandlersTable.js","sources":["../../../src/hook/useFlattenHandlersTable.tsx"],"sourcesContent":["import {\n ColumnDef,\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { useHandlerStore } from \"../lib/handlerStore\";\nimport { FlattenHandler } from \"../lib\";\nimport React, { useMemo, useState } from \"react\";\nimport { PreviewHandler } from \"../ui/Table/PreviewHandler\";\n\nexport const useFlattenHandlersTable = () => {\n const {\n flattenHandlers,\n handlerRowSelection,\n handleHandlerRowSelectionChange,\n } = useHandlerStore();\n\n const columnHelper = createColumnHelper<FlattenHandler>();\n const columns: ColumnDef<FlattenHandler, any>[] = useMemo(() => {\n return [\n columnHelper.accessor(\"enabled\", {\n header: ({ table }) => (\n <input\n type=\"checkbox\"\n checked={table.getIsAllRowsSelected()}\n onChange={(e) => table.toggleAllRowsSelected(e.target.checked)}\n />\n ),\n cell: ({ row }) => (\n <input\n type=\"checkbox\"\n checked={row.getIsSelected()}\n onChange={(e) => row.toggleSelected(e.target.checked)}\n />\n ),\n }),\n columnHelper.accessor(\"path\", {\n header: \"End point\",\n }),\n columnHelper.accessor(\"method\", {\n header: \"Method\",\n cell: ({ row }) => (\n <div className=\"msw-dev-tool-center\">{row.original.method}</div>\n ),\n }),\n columnHelper.accessor(\"handler\", {\n header: \"Preview\",\n cell: ({ row }) => {\n const handler = row.original.handler;\n const [isOpen, setIsOpen] = useState(false);\n return (\n <>\n <button onClick={() => setIsOpen(true)}>Preview</button>\n {isOpen && (\n <PreviewHandler\n handler={handler}\n onClose={() => setIsOpen(false)}\n />\n )}\n </>\n );\n },\n }),\n ];\n }, []);\n\n const table = useReactTable({\n columns,\n data: flattenHandlers,\n getCoreRowModel: getCoreRowModel(),\n state: {\n rowSelection: handlerRowSelection,\n },\n onRowSelectionChange: handleHandlerRowSelectionChange,\n getRowId: (row) => row.id,\n enableRowSelection: true,\n });\n\n return table;\n};\n"],"names":["useHandlerStore","createColumnHelper","useMemo","useState","PreviewHandler","useReactTable","getCoreRowModel"],"mappings":";;;;;;;;AAWO,MAAM,uBAAuB,GAAG,MAAK;IAC1C,MAAM,EACJ,eAAe,EACf,mBAAmB,EACnB,+BAA+B,GAChC,GAAGA,4BAAe,EAAE,CAAC;AAEtB,IAAA,MAAM,YAAY,GAAGC,0BAAkB,EAAkB,CAAC;AAC1D,IAAA,MAAM,OAAO,GAAqCC,aAAO,CAAC,MAAK;QAC7D,OAAO;AACL,YAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC/B,gBAAA,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAChB,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,EACrC,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAC9D,CACH;AACD,gBAAA,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MACZ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,EAC5B,QAAQ,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GACrD,CACH;aACF,CAAC;AACF,YAAA,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC5B,gBAAA,MAAM,EAAE,WAAW;aACpB,CAAC;AACF,YAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC9B,gBAAA,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MACZ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,IAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAO,CACjE;aACF,CAAC;AACF,YAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC/B,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAI;AAChB,oBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,oBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;wBACE,KAAQ,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,OAAO,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,EAAkB,EAAA,SAAA,CAAA;wBACvD,MAAM,KACL,KAAC,CAAA,aAAA,CAAAC,oBAAc,IACb,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,SAAS,CAAC,KAAK,CAAC,EAC/B,CAAA,CACH,CACA,EACH;iBACH;aACF,CAAC;SACH,CAAC;KACH,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAGC,qBAAa,CAAC;QAC1B,OAAO;AACP,QAAA,IAAI,EAAE,eAAe;QACrB,eAAe,EAAEC,uBAAe,EAAE;AAClC,QAAA,KAAK,EAAE;AACL,YAAA,YAAY,EAAE,mBAAmB;AAClC,SAAA;AACD,QAAA,oBAAoB,EAAE,+BAA+B;QACrD,QAAQ,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;AACzB,QAAA,kBAAkB,EAAE,IAAI;AACzB,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,KAAK,CAAC;AACf;;;;"}
1
+ {"version":3,"file":"useFlattenHandlersTable.js","sources":["../../../src/hook/useFlattenHandlersTable.tsx"],"sourcesContent":["import {\n ColumnDef,\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { useHandlerStore } from \"../lib/handlerStore\";\nimport { FlattenHandler } from \"../lib\";\nimport React, { useMemo, useState } from \"react\";\nimport { PreviewHandler } from \"../ui/Table/PreviewHandler\";\n\nexport const useFlattenHandlersTable = () => {\n const {\n flattenHandlers,\n handlerRowSelection,\n handleHandlerRowSelectionChange,\n } = useHandlerStore();\n\n const columnHelper = createColumnHelper<FlattenHandler>();\n const columns: ColumnDef<FlattenHandler, any>[] = useMemo(() => {\n return [\n columnHelper.accessor(\"enabled\", {\n header: ({ table }) => (\n <input\n type=\"checkbox\"\n checked={table.getIsAllRowsSelected()}\n onChange={(e) => table.toggleAllRowsSelected(e.target.checked)}\n />\n ),\n cell: ({ row }) => (\n <input\n type=\"checkbox\"\n checked={row.getIsSelected()}\n onChange={(e) => row.toggleSelected(e.target.checked)}\n />\n ),\n }),\n columnHelper.accessor(\"path\", {\n header: \"Protocol\",\n cell: ({ row }) => {\n console.log(row.original.path);\n const protocol = new URL(row.original.path, location.href).protocol;\n return <div className=\"msw-dev-tool-center\">{protocol}</div>;\n },\n }),\n columnHelper.accessor(\"path\", {\n header: \"Host\",\n cell: ({ row }) => {\n const host = new URL(row.original.path,location.href).host;\n return <div className=\"msw-dev-tool-center\">{host}</div>;\n },\n }),\n columnHelper.accessor(\"path\", {\n header: \"Path\",\n cell: ({ row }) => {\n const path = new URL(row.original.path, location.href).pathname;\n return <div className=\"msw-dev-tool-center\">{path}</div>;\n },\n }),\n columnHelper.accessor(\"method\", {\n header: \"Method\",\n cell: ({ row }) => (\n <div className=\"msw-dev-tool-center\">{row.original.method}</div>\n ),\n }),\n columnHelper.accessor(\"handler\", {\n header: \"Preview\",\n cell: ({ row }) => {\n const handler = row.original.handler;\n const [isOpen, setIsOpen] = useState(false);\n return (\n <>\n <button onClick={() => setIsOpen(true)}>Preview</button>\n {isOpen && (\n <PreviewHandler\n handler={handler}\n onClose={() => setIsOpen(false)}\n />\n )}\n </>\n );\n },\n }),\n ];\n }, []);\n\n const table = useReactTable({\n columns,\n data: flattenHandlers,\n getCoreRowModel: getCoreRowModel(),\n state: {\n rowSelection: handlerRowSelection,\n },\n onRowSelectionChange: handleHandlerRowSelectionChange,\n getRowId: (row) => row.id,\n enableRowSelection: true,\n });\n\n return table;\n};\n"],"names":["useHandlerStore","createColumnHelper","useMemo","useState","PreviewHandler","useReactTable","getCoreRowModel"],"mappings":"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"}
@@ -27,6 +27,7 @@ const KeyValueInputList = ({ items, setItems, }) => {
27
27
  display: "flex",
28
28
  gap: "8px",
29
29
  width: "100%",
30
+ alignItems: "center",
30
31
  } },
31
32
  React.createElement("input", { type: "text", value: key, onChange: (e) => setKey(e.target.value), placeholder: "Key", style: {
32
33
  padding: "8px",
@@ -1 +1 @@
1
- {"version":3,"file":"KeyValueInputList.js","sources":["../../../../../src/ui/Table/PreviewHandler/KeyValueInputList.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\ninterface KeyValueInputListProps {\n items: Record<string, string>;\n setItems: React.Dispatch<React.SetStateAction<Record<string, string>>>;\n}\n\nexport const KeyValueInputList = ({\n items,\n setItems,\n}: KeyValueInputListProps) => {\n const [key, setKey] = useState(\"\");\n const [value, setValue] = useState(\"\");\n\n const handleAdd = () => {\n if (!key.trim() || !value.trim()) return;\n\n setItems((prev) => ({\n ...prev,\n [key]: value,\n }));\n setKey(\"\");\n setValue(\"\");\n };\n\n const handleDelete = (keyToDelete: string) => {\n setItems((prev) => {\n const newItems = { ...prev };\n delete newItems[keyToDelete];\n return newItems;\n });\n };\n\n return (\n <div>\n <div\n style={{\n display: \"flex\",\n gap: \"8px\",\n width: \"100%\",\n }}\n >\n <input\n type=\"text\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n placeholder=\"Key\"\n style={{\n padding: \"8px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n width:\"100px\",\n }}\n />\n <input\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Value\"\n style={{\n padding: \"8px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n width: \"100px\",\n }}\n />\n <button\n onClick={handleAdd}\n style={{\n padding: \"8px 16px\",\n backgroundColor: \"#0066ff\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n }}\n >\n Add\n </button>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {Object.entries(items).map(([key, value]) => (\n <div\n key={key}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px\",\n backgroundColor: \"#f5f5f5\",\n borderRadius: \"4px\",\n gap: \"8px\",\n }}\n >\n <span style={{ flex: 1 }}>{key}</span>\n <span style={{ flex: 1 }}>{value}</span>\n <button\n onClick={() => handleDelete(key)}\n style={{\n padding: \"4px 8px\",\n backgroundColor: \"#ff4444\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n }}\n >\n Delete\n </button>\n </div>\n ))}\n </div>\n </div>\n );\n};\n"],"names":["useState"],"mappings":"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"}
1
+ {"version":3,"file":"KeyValueInputList.js","sources":["../../../../../src/ui/Table/PreviewHandler/KeyValueInputList.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\ninterface KeyValueInputListProps {\n items: Record<string, string>;\n setItems: React.Dispatch<React.SetStateAction<Record<string, string>>>;\n}\n\nexport const KeyValueInputList = ({\n items,\n setItems,\n}: KeyValueInputListProps) => {\n const [key, setKey] = useState(\"\");\n const [value, setValue] = useState(\"\");\n\n const handleAdd = () => {\n if (!key.trim() || !value.trim()) return;\n\n setItems((prev) => ({\n ...prev,\n [key]: value,\n }));\n setKey(\"\");\n setValue(\"\");\n };\n\n const handleDelete = (keyToDelete: string) => {\n setItems((prev) => {\n const newItems = { ...prev };\n delete newItems[keyToDelete];\n return newItems;\n });\n };\n\n return (\n <div>\n <div\n style={{\n display: \"flex\",\n gap: \"8px\",\n width: \"100%\",\n alignItems: \"center\",\n }}\n >\n <input\n type=\"text\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n placeholder=\"Key\"\n style={{\n padding: \"8px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n width: \"100px\",\n }}\n />\n <input\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Value\"\n style={{\n padding: \"8px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n width: \"100px\",\n }}\n />\n <button\n onClick={handleAdd}\n style={{\n padding: \"8px 16px\",\n backgroundColor: \"#0066ff\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n }}\n >\n Add\n </button>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {Object.entries(items).map(([key, value]) => (\n <div\n key={key}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px\",\n backgroundColor: \"#f5f5f5\",\n borderRadius: \"4px\",\n gap: \"8px\",\n }}\n >\n <span style={{ flex: 1 }}>{key}</span>\n <span style={{ flex: 1 }}>{value}</span>\n <button\n onClick={() => handleDelete(key)}\n style={{\n padding: \"4px 8px\",\n backgroundColor: \"#ff4444\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n }}\n >\n Delete\n </button>\n </div>\n ))}\n </div>\n </div>\n );\n};\n"],"names":["useState"],"mappings":"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"}
@@ -3,12 +3,13 @@
3
3
  var React = require('react');
4
4
  var url = require('../../../utils/url.js');
5
5
 
6
- const RequestPreview = ({ url: url$1, paramValues, headers = {}, }) => {
6
+ const RequestPreview = ({ url: url$1, paramValues, headers = {}, searchParams = {}, }) => {
7
7
  const [loading, setLoading] = React.useState(false);
8
8
  const [error, setError] = React.useState(null);
9
9
  const [response, setResponse] = React.useState(null);
10
10
  const finalPath = url.getPathWithParams(url$1, paramValues);
11
- const totalUrl = url.getTotalUrl(url$1.origin, finalPath);
11
+ const searchParamsString = url.getSearchParams(searchParams);
12
+ const totalUrl = url.getTotalUrl(url$1.origin, finalPath, searchParamsString);
12
13
  const handleFetch = () => {
13
14
  setLoading(true);
14
15
  setError(null);
@@ -1 +1 @@
1
- {"version":3,"file":"RequestPreview.js","sources":["../../../../../src/ui/Table/PreviewHandler/RequestPreview.tsx"],"sourcesContent":["import { PathParams } from \"msw\";\nimport React, { useState } from \"react\";\nimport { getPathWithParams, getTotalUrl } from \"../../../utils/url\";\n\nexport const RequestPreview = ({\n url,\n paramValues,\n headers = {},\n}: {\n url: URL;\n paramValues?: PathParams<string>;\n headers?: Record<string, string>;\n}) => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [response, setResponse] = useState<any>(null);\n\n const finalPath = getPathWithParams(url, paramValues);\n const totalUrl = getTotalUrl(url.origin, finalPath);\n\n const handleFetch = () => {\n setLoading(true);\n setError(null);\n\n fetch(totalUrl, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n })\n .then((res) => res.json())\n .then((data) => {\n setResponse(data);\n setLoading(false);\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(\"Failed to fetch\"));\n setLoading(false);\n });\n };\n\n return (\n <div style={{ marginTop: \"20px\" }}>\n <h3>Response</h3>\n <div\n style={{\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n }}\n >\n <button\n onClick={handleFetch}\n disabled={loading}\n style={{\n padding: \"4px 12px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n backgroundColor: loading ? \"#f5f5f5\" : \"white\",\n cursor: loading ? \"not-allowed\" : \"pointer\",\n }}\n >\n {loading ? \"Fetching...\" : \"Send Request\"}\n </button>\n\n {error && (\n <div\n style={{\n marginTop: \"8px\",\n color: \"#f44336\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n Error: {error.message}\n </div>\n )}\n\n {response && (\n <div\n style={{\n marginTop: \"8px\",\n maxHeight: \"200px\",\n overflow: \"scroll\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n <pre\n style={{\n margin: 0,\n overflow: \"auto\",\n borderRadius: \"4px\",\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n }}\n >\n {JSON.stringify(response, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["url","useState","getPathWithParams","getTotalUrl"],"mappings":"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"}
1
+ {"version":3,"file":"RequestPreview.js","sources":["../../../../../src/ui/Table/PreviewHandler/RequestPreview.tsx"],"sourcesContent":["import { PathParams } from \"msw\";\nimport React, { useState } from \"react\";\nimport { getPathWithParams, getSearchParams, getTotalUrl } from \"../../../utils/url\";\n\nexport const RequestPreview = ({\n url,\n paramValues,\n headers = {},\n searchParams = {},\n}: {\n url: URL;\n paramValues?: PathParams<string>;\n headers?: Record<string, string>;\n searchParams?: Record<string, string>;\n}) => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [response, setResponse] = useState<any>(null);\n\n const finalPath = getPathWithParams(url, paramValues);\n const searchParamsString = getSearchParams(searchParams);\n const totalUrl = getTotalUrl(url.origin, finalPath, searchParamsString);\n\n const handleFetch = () => {\n setLoading(true);\n setError(null);\n\n fetch(totalUrl, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n })\n .then((res) => res.json())\n .then((data) => {\n setResponse(data);\n setLoading(false);\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(\"Failed to fetch\"));\n setLoading(false);\n });\n };\n\n return (\n <div style={{ marginTop: \"20px\" }}>\n <h3>Response</h3>\n <div\n style={{\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n }}\n >\n <button\n onClick={handleFetch}\n disabled={loading}\n style={{\n padding: \"4px 12px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n backgroundColor: loading ? \"#f5f5f5\" : \"white\",\n cursor: loading ? \"not-allowed\" : \"pointer\",\n }}\n >\n {loading ? \"Fetching...\" : \"Send Request\"}\n </button>\n\n {error && (\n <div\n style={{\n marginTop: \"8px\",\n color: \"#f44336\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n Error: {error.message}\n </div>\n )}\n\n {response && (\n <div\n style={{\n marginTop: \"8px\",\n maxHeight: \"200px\",\n overflow: \"scroll\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n <pre\n style={{\n margin: 0,\n overflow: \"auto\",\n borderRadius: \"4px\",\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n }}\n >\n {JSON.stringify(response, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </div>\n );\n};"],"names":["url","useState","getPathWithParams","getSearchParams","getTotalUrl"],"mappings":"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"}
@@ -18,6 +18,7 @@ const PreviewHandler = ({ handler, onClose }) => {
18
18
  }), {})
19
19
  : undefined);
20
20
  const [headers, setHeaders] = React.useState({});
21
+ const [searchParams, setSearchParams] = React.useState({});
21
22
  const handleParamChange = (key, value) => {
22
23
  setParamValues((prev) => ({
23
24
  ...prev,
@@ -32,6 +33,8 @@ const PreviewHandler = ({ handler, onClose }) => {
32
33
  boxShadow: "0 2px 10px rgba(0, 0, 0, 0.1)",
33
34
  borderRadius: "8px",
34
35
  width: "320px",
36
+ maxHeight: "500px",
37
+ overflow: "scroll",
35
38
  } },
36
39
  React.createElement("div", { style: { position: "relative" } },
37
40
  React.createElement("button", { onClick: onClose, style: {
@@ -47,9 +50,11 @@ const PreviewHandler = ({ handler, onClose }) => {
47
50
  React.createElement("h2", { style: { marginBottom: "20px", paddingRight: "24px" } }, "Handler Preview"),
48
51
  React.createElement("p", { style: { fontSize: "0.8rem", color: "#666", overflow: "scroll" } }, url.toString()),
49
52
  React.createElement(PathParamSetter.PathParamSetter, { paramValues: paramValues, onParamChange: handleParamChange }),
53
+ React.createElement("h3", null, "Search Params"),
54
+ React.createElement(KeyValueInputList.KeyValueInputList, { items: searchParams, setItems: setSearchParams }),
50
55
  React.createElement("h3", null, "Headers"),
51
56
  React.createElement(KeyValueInputList.KeyValueInputList, { items: headers, setItems: setHeaders }),
52
- React.createElement(RequestPreview.RequestPreview, { url: url, paramValues: paramValues, headers: headers }))), document.body);
57
+ React.createElement(RequestPreview.RequestPreview, { url: url, paramValues: paramValues, headers: headers, searchParams: searchParams }))), document.body);
53
58
  };
54
59
 
55
60
  exports.PreviewHandler = PreviewHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/ui/Table/PreviewHandler/index.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { HttpHandler, matchRequestUrl, PathParams } from \"msw\";\nimport { PathParamSetter } from \"./PathParamSetter\";\nimport { RequestPreview } from \"./RequestPreview\";\nimport { KeyValueInputList } from \"./KeyValueInputList\";\n\ninterface PreviewHandlerProps {\n handler: HttpHandler;\n onClose: () => void;\n}\n\nexport const PreviewHandler = ({ handler, onClose }: PreviewHandlerProps) => {\n const path = handler.info.path;\n const url = new URL(String(path), location.href);\n const { params } = matchRequestUrl(url, path, url.origin);\n\n const [paramValues, setParamValues] = useState<\n PathParams<string> | undefined\n >(\n params\n ? Object.keys(params).reduce(\n (acc, key) => ({\n ...acc,\n [key]: \"\",\n }),\n {}\n )\n : undefined\n );\n const [headers, setHeaders] = useState<Record<string, string>>({});\n\n const handleParamChange = (key: string, value: string) => {\n setParamValues((prev) => ({\n ...prev,\n [key]: value,\n }));\n };\n\n return createPortal(\n <div\n style={{\n padding: \"20px\",\n position: \"fixed\",\n zIndex: 9999,\n backgroundColor: \"white\",\n boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\",\n borderRadius: \"8px\",\n width: \"320px\",\n }}\n >\n <div style={{ position: \"relative\" }}>\n <button\n onClick={onClose}\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: \"1.2rem\",\n padding: \"4px\",\n }}\n >\n ✕\n </button>\n\n <h2 style={{ marginBottom: \"20px\", paddingRight: \"24px\" }}>\n Handler Preview\n </h2>\n <p style={{ fontSize: \"0.8rem\", color: \"#666\", overflow: \"scroll\" }}>\n {url.toString()}\n </p>\n <PathParamSetter\n paramValues={paramValues}\n onParamChange={handleParamChange}\n />\n <h3>Headers</h3>\n <KeyValueInputList items={headers} setItems={setHeaders} />\n <RequestPreview url={url} paramValues={paramValues} headers={headers} />\n </div>\n </div>,\n document.body\n );\n};\n"],"names":["matchRequestUrl","useState","createPortal","PathParamSetter","KeyValueInputList","RequestPreview"],"mappings":";;;;;;;;;AAYa,MAAA,cAAc,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAuB,KAAI;AAC1E,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,IAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjD,IAAA,MAAM,EAAE,MAAM,EAAE,GAAGA,mBAAe,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE1D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAGC,cAAQ,CAG5C,MAAM;AACJ,UAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,GAAG,MAAM;AACb,YAAA,GAAG,GAAG;YACN,CAAC,GAAG,GAAG,EAAE;SACV,CAAC,EACF,EAAE,CACH;UACD,SAAS,CACd,CAAC;IACF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAyB,EAAE,CAAC,CAAC;AAEnE,IAAA,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,KAAa,KAAI;AACvD,QAAA,cAAc,CAAC,CAAC,IAAI,MAAM;AACxB,YAAA,GAAG,IAAI;YACP,CAAC,GAAG,GAAG,KAAK;AACb,SAAA,CAAC,CAAC,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,OAAOC,qBAAY,CACjB,KACE,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,eAAe,EAAE,OAAO;AACxB,YAAA,SAAS,EAAE,+BAA+B;AAC1C,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,KAAK,EAAE,OAAO;AACf,SAAA,EAAA;AAED,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAA;AAClC,YAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE;AACL,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,MAAM,EAAE,SAAS;AACjB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,OAAO,EAAE,KAAK;iBACf,EAGM,EAAA,QAAA,CAAA;YAET,KAAI,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAEpD,EAAA,iBAAA,CAAA;YACL,KAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAA,EAChE,GAAG,CAAC,QAAQ,EAAE,CACb;YACJ,KAAC,CAAA,aAAA,CAAAC,+BAAe,IACd,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,iBAAiB,EAChC,CAAA;YACF,KAAgB,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA,EAAA,SAAA,CAAA;YAChB,KAAC,CAAA,aAAA,CAAAC,mCAAiB,IAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAI,CAAA;YAC3D,KAAC,CAAA,aAAA,CAAAC,6BAAc,IAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAI,CACpE,CACF,EACN,QAAQ,CAAC,IAAI,CACd,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/ui/Table/PreviewHandler/index.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { HttpHandler, matchRequestUrl, PathParams } from \"msw\";\nimport { PathParamSetter } from \"./PathParamSetter\";\nimport { RequestPreview } from \"./RequestPreview\";\nimport { KeyValueInputList } from \"./KeyValueInputList\";\n\ninterface PreviewHandlerProps {\n handler: HttpHandler;\n onClose: () => void;\n}\n\nexport const PreviewHandler = ({ handler, onClose }: PreviewHandlerProps) => {\n const path = handler.info.path;\n const url = new URL(String(path), location.href);\n const { params } = matchRequestUrl(url, path, url.origin);\n\n const [paramValues, setParamValues] = useState<\n PathParams<string> | undefined\n >(\n params\n ? Object.keys(params).reduce(\n (acc, key) => ({\n ...acc,\n [key]: \"\",\n }),\n {}\n )\n : undefined\n );\n const [headers, setHeaders] = useState<Record<string, string>>({});\n const [searchParams, setSearchParams] = useState<Record<string, string>>({});\n\n const handleParamChange = (key: string, value: string) => {\n setParamValues((prev) => ({\n ...prev,\n [key]: value,\n }));\n };\n\n return createPortal(\n <div\n style={{\n padding: \"20px\",\n position: \"fixed\",\n zIndex: 9999,\n backgroundColor: \"white\",\n boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\",\n borderRadius: \"8px\",\n width: \"320px\",\n maxHeight: \"500px\",\n overflow: \"scroll\",\n }}\n >\n <div style={{ position: \"relative\" }}>\n <button\n onClick={onClose}\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: \"1.2rem\",\n padding: \"4px\",\n }}\n >\n ✕\n </button>\n\n <h2 style={{ marginBottom: \"20px\", paddingRight: \"24px\" }}>\n Handler Preview\n </h2>\n <p style={{ fontSize: \"0.8rem\", color: \"#666\", overflow: \"scroll\" }}>\n {url.toString()}\n </p>\n <PathParamSetter\n paramValues={paramValues}\n onParamChange={handleParamChange}\n />\n <h3>Search Params</h3>\n <KeyValueInputList items={searchParams} setItems={setSearchParams} />\n <h3>Headers</h3>\n <KeyValueInputList items={headers} setItems={setHeaders} />\n <RequestPreview\n url={url}\n paramValues={paramValues}\n headers={headers}\n searchParams={searchParams}\n />\n </div>\n </div>,\n document.body\n );\n};\n"],"names":["matchRequestUrl","useState","createPortal","PathParamSetter","KeyValueInputList","RequestPreview"],"mappings":"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"}
@@ -17,13 +17,27 @@ const getPathWithParams = (url, paramValues) => {
17
17
  })
18
18
  .join("/");
19
19
  };
20
+ const getSearchParams = (searchParams) => {
21
+ if (!searchParams || Object.keys(searchParams).length === 0)
22
+ return "";
23
+ const urlSearchParams = new URLSearchParams();
24
+ Object.entries(searchParams).forEach(([key, value]) => {
25
+ urlSearchParams.set(key, value);
26
+ });
27
+ return urlSearchParams.toString();
28
+ };
20
29
  /**
21
30
  * Create full URL string
22
31
  */
23
- const getTotalUrl = (origin, path) => {
24
- return `${origin}${path}`;
32
+ const getTotalUrl = (origin, path, searchParams) => {
33
+ const url = new URL(`${origin}${path}`);
34
+ if (searchParams) {
35
+ url.search = searchParams;
36
+ }
37
+ return url.toString();
25
38
  };
26
39
 
27
40
  exports.getPathWithParams = getPathWithParams;
41
+ exports.getSearchParams = getSearchParams;
28
42
  exports.getTotalUrl = getTotalUrl;
29
43
  //# sourceMappingURL=url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sources":["../../../src/utils/url.ts"],"sourcesContent":["import { PathParams } from \"msw\";\n\n/**\n * Replace path parameters with path object and formatted path\n */\nexport const getPathWithParams = (\n url: URL,\n paramValues?: PathParams<string>\n): string => {\n if (!paramValues) return url.pathname;\n\n return url.pathname\n .split(\"/\")\n .map((segment) => {\n if (segment.startsWith(\":\")) {\n const paramName = segment.slice(1); // remove ':'\n return paramValues[paramName] || \"undefined\"; // replace with param value if exists, otherwise \"undefined\"\n }\n return segment;\n })\n .join(\"/\");\n};\n\n/**\n * Create full URL string\n */\nexport const getTotalUrl = (origin: string, path: string): string => {\n return `${origin}${path}`;\n};\n"],"names":[],"mappings":";;AAEA;;AAEG;MACU,iBAAiB,GAAG,CAC/B,GAAQ,EACR,WAAgC,KACtB;AACV,IAAA,IAAI,CAAC,WAAW;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC;IAEtC,OAAO,GAAG,CAAC,QAAQ;SAChB,KAAK,CAAC,GAAG,CAAC;AACV,SAAA,GAAG,CAAC,CAAC,OAAO,KAAI;AACf,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC;SAC9C;AACD,QAAA,OAAO,OAAO,CAAC;AACjB,KAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,EAAE;AAEF;;AAEG;MACU,WAAW,GAAG,CAAC,MAAc,EAAE,IAAY,KAAY;AAClE,IAAA,OAAO,CAAG,EAAA,MAAM,CAAG,EAAA,IAAI,EAAE,CAAC;AAC5B;;;;;"}
1
+ {"version":3,"file":"url.js","sources":["../../../src/utils/url.ts"],"sourcesContent":["import { PathParams } from \"msw\";\n\n/**\n * Replace path parameters with path object and formatted path\n */\nexport const getPathWithParams = (\n url: URL,\n paramValues?: PathParams<string>\n): string => {\n if (!paramValues) return url.pathname;\n\n return url.pathname\n .split(\"/\")\n .map((segment) => {\n if (segment.startsWith(\":\")) {\n const paramName = segment.slice(1); // remove ':'\n return paramValues[paramName] || \"undefined\"; // replace with param value if exists, otherwise \"undefined\"\n }\n return segment;\n })\n .join(\"/\");\n};\n\nexport const getSearchParams = (\n searchParams?: Record<string, string>\n): string => {\n if (!searchParams || Object.keys(searchParams).length === 0) return \"\";\n\n const urlSearchParams = new URLSearchParams();\n Object.entries(searchParams).forEach(([key, value]) => {\n urlSearchParams.set(key, value);\n });\n\n return urlSearchParams.toString();\n};\n/**\n * Create full URL string\n */\nexport const getTotalUrl = (\n origin: string,\n path: string,\n searchParams: string\n): string => {\n const url = new URL(`${origin}${path}`);\n if (searchParams) {\n url.search = searchParams;\n }\n return url.toString();\n};\n"],"names":[],"mappings":";;AAEA;;AAEG;MACU,iBAAiB,GAAG,CAC/B,GAAQ,EACR,WAAgC,KACtB;AACV,IAAA,IAAI,CAAC,WAAW;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC;IAEtC,OAAO,GAAG,CAAC,QAAQ;SAChB,KAAK,CAAC,GAAG,CAAC;AACV,SAAA,GAAG,CAAC,CAAC,OAAO,KAAI;AACf,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC;SAC9C;AACD,QAAA,OAAO,OAAO,CAAC;AACjB,KAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,EAAE;AAEW,MAAA,eAAe,GAAG,CAC7B,YAAqC,KAC3B;AACV,IAAA,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE,CAAC;AAEvE,IAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAC9C,IAAA,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpD,QAAA,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClC,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,eAAe,CAAC,QAAQ,EAAE,CAAC;AACpC,EAAE;AACF;;AAEG;AACU,MAAA,WAAW,GAAG,CACzB,MAAc,EACd,IAAY,EACZ,YAAoB,KACV;IACV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAG,EAAA,MAAM,CAAG,EAAA,IAAI,CAAE,CAAA,CAAC,CAAC;IACxC,IAAI,YAAY,EAAE;AAChB,QAAA,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC;KAC3B;AACD,IAAA,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB;;;;;;"}
@@ -14,7 +14,26 @@ const useFlattenHandlersTable = () => {
14
14
  cell: ({ row }) => (React__default.createElement("input", { type: "checkbox", checked: row.getIsSelected(), onChange: (e) => row.toggleSelected(e.target.checked) })),
15
15
  }),
16
16
  columnHelper.accessor("path", {
17
- header: "End point",
17
+ header: "Protocol",
18
+ cell: ({ row }) => {
19
+ console.log(row.original.path);
20
+ const protocol = new URL(row.original.path, location.href).protocol;
21
+ return React__default.createElement("div", { className: "msw-dev-tool-center" }, protocol);
22
+ },
23
+ }),
24
+ columnHelper.accessor("path", {
25
+ header: "Host",
26
+ cell: ({ row }) => {
27
+ const host = new URL(row.original.path, location.href).host;
28
+ return React__default.createElement("div", { className: "msw-dev-tool-center" }, host);
29
+ },
30
+ }),
31
+ columnHelper.accessor("path", {
32
+ header: "Path",
33
+ cell: ({ row }) => {
34
+ const path = new URL(row.original.path, location.href).pathname;
35
+ return React__default.createElement("div", { className: "msw-dev-tool-center" }, path);
36
+ },
18
37
  }),
19
38
  columnHelper.accessor("method", {
20
39
  header: "Method",
@@ -1 +1 @@
1
- {"version":3,"file":"useFlattenHandlersTable.js","sources":["../../../src/hook/useFlattenHandlersTable.tsx"],"sourcesContent":["import {\n ColumnDef,\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { useHandlerStore } from \"../lib/handlerStore\";\nimport { FlattenHandler } from \"../lib\";\nimport React, { useMemo, useState } from \"react\";\nimport { PreviewHandler } from \"../ui/Table/PreviewHandler\";\n\nexport const useFlattenHandlersTable = () => {\n const {\n flattenHandlers,\n handlerRowSelection,\n handleHandlerRowSelectionChange,\n } = useHandlerStore();\n\n const columnHelper = createColumnHelper<FlattenHandler>();\n const columns: ColumnDef<FlattenHandler, any>[] = useMemo(() => {\n return [\n columnHelper.accessor(\"enabled\", {\n header: ({ table }) => (\n <input\n type=\"checkbox\"\n checked={table.getIsAllRowsSelected()}\n onChange={(e) => table.toggleAllRowsSelected(e.target.checked)}\n />\n ),\n cell: ({ row }) => (\n <input\n type=\"checkbox\"\n checked={row.getIsSelected()}\n onChange={(e) => row.toggleSelected(e.target.checked)}\n />\n ),\n }),\n columnHelper.accessor(\"path\", {\n header: \"End point\",\n }),\n columnHelper.accessor(\"method\", {\n header: \"Method\",\n cell: ({ row }) => (\n <div className=\"msw-dev-tool-center\">{row.original.method}</div>\n ),\n }),\n columnHelper.accessor(\"handler\", {\n header: \"Preview\",\n cell: ({ row }) => {\n const handler = row.original.handler;\n const [isOpen, setIsOpen] = useState(false);\n return (\n <>\n <button onClick={() => setIsOpen(true)}>Preview</button>\n {isOpen && (\n <PreviewHandler\n handler={handler}\n onClose={() => setIsOpen(false)}\n />\n )}\n </>\n );\n },\n }),\n ];\n }, []);\n\n const table = useReactTable({\n columns,\n data: flattenHandlers,\n getCoreRowModel: getCoreRowModel(),\n state: {\n rowSelection: handlerRowSelection,\n },\n onRowSelectionChange: handleHandlerRowSelectionChange,\n getRowId: (row) => row.id,\n enableRowSelection: true,\n });\n\n return table;\n};\n"],"names":["React"],"mappings":";;;;;;AAWO,MAAM,uBAAuB,GAAG,MAAK;IAC1C,MAAM,EACJ,eAAe,EACf,mBAAmB,EACnB,+BAA+B,GAChC,GAAG,eAAe,EAAE,CAAC;AAEtB,IAAA,MAAM,YAAY,GAAG,kBAAkB,EAAkB,CAAC;AAC1D,IAAA,MAAM,OAAO,GAAqC,OAAO,CAAC,MAAK;QAC7D,OAAO;AACL,YAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC/B,gBAAA,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAChBA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,KAAK,CAAC,oBAAoB,EAAE,EACrC,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAC9D,CACH;AACD,gBAAA,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MACZA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,EAC5B,QAAQ,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GACrD,CACH;aACF,CAAC;AACF,YAAA,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC5B,gBAAA,MAAM,EAAE,WAAW;aACpB,CAAC;AACF,YAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC9B,gBAAA,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MACZA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,IAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAO,CACjE;aACF,CAAC;AACF,YAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE;AAC/B,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAI;AAChB,oBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,oBAAA,QACEA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA;wBACEA,cAAQ,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,OAAO,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,EAAkB,EAAA,SAAA,CAAA;wBACvD,MAAM,KACLA,cAAC,CAAA,aAAA,CAAA,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,SAAS,CAAC,KAAK,CAAC,EAC/B,CAAA,CACH,CACA,EACH;iBACH;aACF,CAAC;SACH,CAAC;KACH,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,aAAa,CAAC;QAC1B,OAAO;AACP,QAAA,IAAI,EAAE,eAAe;QACrB,eAAe,EAAE,eAAe,EAAE;AAClC,QAAA,KAAK,EAAE;AACL,YAAA,YAAY,EAAE,mBAAmB;AAClC,SAAA;AACD,QAAA,oBAAoB,EAAE,+BAA+B;QACrD,QAAQ,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE;AACzB,QAAA,kBAAkB,EAAE,IAAI;AACzB,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,KAAK,CAAC;AACf;;;;"}
1
+ {"version":3,"file":"useFlattenHandlersTable.js","sources":["../../../src/hook/useFlattenHandlersTable.tsx"],"sourcesContent":["import {\n ColumnDef,\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { useHandlerStore } from \"../lib/handlerStore\";\nimport { FlattenHandler } from \"../lib\";\nimport React, { useMemo, useState } from \"react\";\nimport { PreviewHandler } from \"../ui/Table/PreviewHandler\";\n\nexport const useFlattenHandlersTable = () => {\n const {\n flattenHandlers,\n handlerRowSelection,\n handleHandlerRowSelectionChange,\n } = useHandlerStore();\n\n const columnHelper = createColumnHelper<FlattenHandler>();\n const columns: ColumnDef<FlattenHandler, any>[] = useMemo(() => {\n return [\n columnHelper.accessor(\"enabled\", {\n header: ({ table }) => (\n <input\n type=\"checkbox\"\n checked={table.getIsAllRowsSelected()}\n onChange={(e) => table.toggleAllRowsSelected(e.target.checked)}\n />\n ),\n cell: ({ row }) => (\n <input\n type=\"checkbox\"\n checked={row.getIsSelected()}\n onChange={(e) => row.toggleSelected(e.target.checked)}\n />\n ),\n }),\n columnHelper.accessor(\"path\", {\n header: \"Protocol\",\n cell: ({ row }) => {\n console.log(row.original.path);\n const protocol = new URL(row.original.path, location.href).protocol;\n return <div className=\"msw-dev-tool-center\">{protocol}</div>;\n },\n }),\n columnHelper.accessor(\"path\", {\n header: \"Host\",\n cell: ({ row }) => {\n const host = new URL(row.original.path,location.href).host;\n return <div className=\"msw-dev-tool-center\">{host}</div>;\n },\n }),\n columnHelper.accessor(\"path\", {\n header: \"Path\",\n cell: ({ row }) => {\n const path = new URL(row.original.path, location.href).pathname;\n return <div className=\"msw-dev-tool-center\">{path}</div>;\n },\n }),\n columnHelper.accessor(\"method\", {\n header: \"Method\",\n cell: ({ row }) => (\n <div className=\"msw-dev-tool-center\">{row.original.method}</div>\n ),\n }),\n columnHelper.accessor(\"handler\", {\n header: \"Preview\",\n cell: ({ row }) => {\n const handler = row.original.handler;\n const [isOpen, setIsOpen] = useState(false);\n return (\n <>\n <button onClick={() => setIsOpen(true)}>Preview</button>\n {isOpen && (\n <PreviewHandler\n handler={handler}\n onClose={() => setIsOpen(false)}\n />\n )}\n </>\n );\n },\n }),\n ];\n }, []);\n\n const table = useReactTable({\n columns,\n data: flattenHandlers,\n getCoreRowModel: getCoreRowModel(),\n state: {\n rowSelection: handlerRowSelection,\n },\n onRowSelectionChange: handleHandlerRowSelectionChange,\n getRowId: (row) => row.id,\n enableRowSelection: true,\n });\n\n return table;\n};\n"],"names":["React"],"mappings":"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"}
@@ -25,6 +25,7 @@ const KeyValueInputList = ({ items, setItems, }) => {
25
25
  display: "flex",
26
26
  gap: "8px",
27
27
  width: "100%",
28
+ alignItems: "center",
28
29
  } },
29
30
  React__default.createElement("input", { type: "text", value: key, onChange: (e) => setKey(e.target.value), placeholder: "Key", style: {
30
31
  padding: "8px",
@@ -1 +1 @@
1
- {"version":3,"file":"KeyValueInputList.js","sources":["../../../../../src/ui/Table/PreviewHandler/KeyValueInputList.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\ninterface KeyValueInputListProps {\n items: Record<string, string>;\n setItems: React.Dispatch<React.SetStateAction<Record<string, string>>>;\n}\n\nexport const KeyValueInputList = ({\n items,\n setItems,\n}: KeyValueInputListProps) => {\n const [key, setKey] = useState(\"\");\n const [value, setValue] = useState(\"\");\n\n const handleAdd = () => {\n if (!key.trim() || !value.trim()) return;\n\n setItems((prev) => ({\n ...prev,\n [key]: value,\n }));\n setKey(\"\");\n setValue(\"\");\n };\n\n const handleDelete = (keyToDelete: string) => {\n setItems((prev) => {\n const newItems = { ...prev };\n delete newItems[keyToDelete];\n return newItems;\n });\n };\n\n return (\n <div>\n <div\n style={{\n display: \"flex\",\n gap: \"8px\",\n width: \"100%\",\n }}\n >\n <input\n type=\"text\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n placeholder=\"Key\"\n style={{\n padding: \"8px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n width:\"100px\",\n }}\n />\n <input\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Value\"\n style={{\n padding: \"8px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n width: \"100px\",\n }}\n />\n <button\n onClick={handleAdd}\n style={{\n padding: \"8px 16px\",\n backgroundColor: \"#0066ff\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n }}\n >\n Add\n </button>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {Object.entries(items).map(([key, value]) => (\n <div\n key={key}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px\",\n backgroundColor: \"#f5f5f5\",\n borderRadius: \"4px\",\n gap: \"8px\",\n }}\n >\n <span style={{ flex: 1 }}>{key}</span>\n <span style={{ flex: 1 }}>{value}</span>\n <button\n onClick={() => handleDelete(key)}\n style={{\n padding: \"4px 8px\",\n backgroundColor: \"#ff4444\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n }}\n >\n Delete\n </button>\n </div>\n ))}\n </div>\n </div>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"KeyValueInputList.js","sources":["../../../../../src/ui/Table/PreviewHandler/KeyValueInputList.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\ninterface KeyValueInputListProps {\n items: Record<string, string>;\n setItems: React.Dispatch<React.SetStateAction<Record<string, string>>>;\n}\n\nexport const KeyValueInputList = ({\n items,\n setItems,\n}: KeyValueInputListProps) => {\n const [key, setKey] = useState(\"\");\n const [value, setValue] = useState(\"\");\n\n const handleAdd = () => {\n if (!key.trim() || !value.trim()) return;\n\n setItems((prev) => ({\n ...prev,\n [key]: value,\n }));\n setKey(\"\");\n setValue(\"\");\n };\n\n const handleDelete = (keyToDelete: string) => {\n setItems((prev) => {\n const newItems = { ...prev };\n delete newItems[keyToDelete];\n return newItems;\n });\n };\n\n return (\n <div>\n <div\n style={{\n display: \"flex\",\n gap: \"8px\",\n width: \"100%\",\n alignItems: \"center\",\n }}\n >\n <input\n type=\"text\"\n value={key}\n onChange={(e) => setKey(e.target.value)}\n placeholder=\"Key\"\n style={{\n padding: \"8px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n width: \"100px\",\n }}\n />\n <input\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Value\"\n style={{\n padding: \"8px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n width: \"100px\",\n }}\n />\n <button\n onClick={handleAdd}\n style={{\n padding: \"8px 16px\",\n backgroundColor: \"#0066ff\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n }}\n >\n Add\n </button>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {Object.entries(items).map(([key, value]) => (\n <div\n key={key}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px\",\n backgroundColor: \"#f5f5f5\",\n borderRadius: \"4px\",\n gap: \"8px\",\n }}\n >\n <span style={{ flex: 1 }}>{key}</span>\n <span style={{ flex: 1 }}>{value}</span>\n <button\n onClick={() => handleDelete(key)}\n style={{\n padding: \"4px 8px\",\n backgroundColor: \"#ff4444\",\n color: \"white\",\n border: \"none\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n }}\n >\n Delete\n </button>\n </div>\n ))}\n </div>\n </div>\n );\n};\n"],"names":["React"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import React__default, { useState } from 'react';
2
- import { getPathWithParams, getTotalUrl } from '../../../utils/url.js';
2
+ import { getPathWithParams, getSearchParams, getTotalUrl } from '../../../utils/url.js';
3
3
 
4
- const RequestPreview = ({ url, paramValues, headers = {}, }) => {
4
+ const RequestPreview = ({ url, paramValues, headers = {}, searchParams = {}, }) => {
5
5
  const [loading, setLoading] = useState(false);
6
6
  const [error, setError] = useState(null);
7
7
  const [response, setResponse] = useState(null);
8
8
  const finalPath = getPathWithParams(url, paramValues);
9
- const totalUrl = getTotalUrl(url.origin, finalPath);
9
+ const searchParamsString = getSearchParams(searchParams);
10
+ const totalUrl = getTotalUrl(url.origin, finalPath, searchParamsString);
10
11
  const handleFetch = () => {
11
12
  setLoading(true);
12
13
  setError(null);
@@ -1 +1 @@
1
- {"version":3,"file":"RequestPreview.js","sources":["../../../../../src/ui/Table/PreviewHandler/RequestPreview.tsx"],"sourcesContent":["import { PathParams } from \"msw\";\nimport React, { useState } from \"react\";\nimport { getPathWithParams, getTotalUrl } from \"../../../utils/url\";\n\nexport const RequestPreview = ({\n url,\n paramValues,\n headers = {},\n}: {\n url: URL;\n paramValues?: PathParams<string>;\n headers?: Record<string, string>;\n}) => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [response, setResponse] = useState<any>(null);\n\n const finalPath = getPathWithParams(url, paramValues);\n const totalUrl = getTotalUrl(url.origin, finalPath);\n\n const handleFetch = () => {\n setLoading(true);\n setError(null);\n\n fetch(totalUrl, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n })\n .then((res) => res.json())\n .then((data) => {\n setResponse(data);\n setLoading(false);\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(\"Failed to fetch\"));\n setLoading(false);\n });\n };\n\n return (\n <div style={{ marginTop: \"20px\" }}>\n <h3>Response</h3>\n <div\n style={{\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n }}\n >\n <button\n onClick={handleFetch}\n disabled={loading}\n style={{\n padding: \"4px 12px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n backgroundColor: loading ? \"#f5f5f5\" : \"white\",\n cursor: loading ? \"not-allowed\" : \"pointer\",\n }}\n >\n {loading ? \"Fetching...\" : \"Send Request\"}\n </button>\n\n {error && (\n <div\n style={{\n marginTop: \"8px\",\n color: \"#f44336\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n Error: {error.message}\n </div>\n )}\n\n {response && (\n <div\n style={{\n marginTop: \"8px\",\n maxHeight: \"200px\",\n overflow: \"scroll\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n <pre\n style={{\n margin: 0,\n overflow: \"auto\",\n borderRadius: \"4px\",\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n }}\n >\n {JSON.stringify(response, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"RequestPreview.js","sources":["../../../../../src/ui/Table/PreviewHandler/RequestPreview.tsx"],"sourcesContent":["import { PathParams } from \"msw\";\nimport React, { useState } from \"react\";\nimport { getPathWithParams, getSearchParams, getTotalUrl } from \"../../../utils/url\";\n\nexport const RequestPreview = ({\n url,\n paramValues,\n headers = {},\n searchParams = {},\n}: {\n url: URL;\n paramValues?: PathParams<string>;\n headers?: Record<string, string>;\n searchParams?: Record<string, string>;\n}) => {\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [response, setResponse] = useState<any>(null);\n\n const finalPath = getPathWithParams(url, paramValues);\n const searchParamsString = getSearchParams(searchParams);\n const totalUrl = getTotalUrl(url.origin, finalPath, searchParamsString);\n\n const handleFetch = () => {\n setLoading(true);\n setError(null);\n\n fetch(totalUrl, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n })\n .then((res) => res.json())\n .then((data) => {\n setResponse(data);\n setLoading(false);\n })\n .catch((err) => {\n setError(err instanceof Error ? err : new Error(\"Failed to fetch\"));\n setLoading(false);\n });\n };\n\n return (\n <div style={{ marginTop: \"20px\" }}>\n <h3>Response</h3>\n <div\n style={{\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n }}\n >\n <button\n onClick={handleFetch}\n disabled={loading}\n style={{\n padding: \"4px 12px\",\n borderRadius: \"4px\",\n border: \"1px solid #ccc\",\n backgroundColor: loading ? \"#f5f5f5\" : \"white\",\n cursor: loading ? \"not-allowed\" : \"pointer\",\n }}\n >\n {loading ? \"Fetching...\" : \"Send Request\"}\n </button>\n\n {error && (\n <div\n style={{\n marginTop: \"8px\",\n color: \"#f44336\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n Error: {error.message}\n </div>\n )}\n\n {response && (\n <div\n style={{\n marginTop: \"8px\",\n maxHeight: \"200px\",\n overflow: \"scroll\",\n backgroundColor: \"#f5f5f5\",\n }}\n >\n <pre\n style={{\n margin: 0,\n overflow: \"auto\",\n borderRadius: \"4px\",\n fontFamily: \"monospace\",\n wordBreak: \"break-all\",\n }}\n >\n {JSON.stringify(response, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </div>\n );\n};"],"names":["React"],"mappings":"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"}
@@ -16,6 +16,7 @@ const PreviewHandler = ({ handler, onClose }) => {
16
16
  }), {})
17
17
  : undefined);
18
18
  const [headers, setHeaders] = useState({});
19
+ const [searchParams, setSearchParams] = useState({});
19
20
  const handleParamChange = (key, value) => {
20
21
  setParamValues((prev) => ({
21
22
  ...prev,
@@ -30,6 +31,8 @@ const PreviewHandler = ({ handler, onClose }) => {
30
31
  boxShadow: "0 2px 10px rgba(0, 0, 0, 0.1)",
31
32
  borderRadius: "8px",
32
33
  width: "320px",
34
+ maxHeight: "500px",
35
+ overflow: "scroll",
33
36
  } },
34
37
  React__default.createElement("div", { style: { position: "relative" } },
35
38
  React__default.createElement("button", { onClick: onClose, style: {
@@ -45,9 +48,11 @@ const PreviewHandler = ({ handler, onClose }) => {
45
48
  React__default.createElement("h2", { style: { marginBottom: "20px", paddingRight: "24px" } }, "Handler Preview"),
46
49
  React__default.createElement("p", { style: { fontSize: "0.8rem", color: "#666", overflow: "scroll" } }, url.toString()),
47
50
  React__default.createElement(PathParamSetter, { paramValues: paramValues, onParamChange: handleParamChange }),
51
+ React__default.createElement("h3", null, "Search Params"),
52
+ React__default.createElement(KeyValueInputList, { items: searchParams, setItems: setSearchParams }),
48
53
  React__default.createElement("h3", null, "Headers"),
49
54
  React__default.createElement(KeyValueInputList, { items: headers, setItems: setHeaders }),
50
- React__default.createElement(RequestPreview, { url: url, paramValues: paramValues, headers: headers }))), document.body);
55
+ React__default.createElement(RequestPreview, { url: url, paramValues: paramValues, headers: headers, searchParams: searchParams }))), document.body);
51
56
  };
52
57
 
53
58
  export { PreviewHandler };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/ui/Table/PreviewHandler/index.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { HttpHandler, matchRequestUrl, PathParams } from \"msw\";\nimport { PathParamSetter } from \"./PathParamSetter\";\nimport { RequestPreview } from \"./RequestPreview\";\nimport { KeyValueInputList } from \"./KeyValueInputList\";\n\ninterface PreviewHandlerProps {\n handler: HttpHandler;\n onClose: () => void;\n}\n\nexport const PreviewHandler = ({ handler, onClose }: PreviewHandlerProps) => {\n const path = handler.info.path;\n const url = new URL(String(path), location.href);\n const { params } = matchRequestUrl(url, path, url.origin);\n\n const [paramValues, setParamValues] = useState<\n PathParams<string> | undefined\n >(\n params\n ? Object.keys(params).reduce(\n (acc, key) => ({\n ...acc,\n [key]: \"\",\n }),\n {}\n )\n : undefined\n );\n const [headers, setHeaders] = useState<Record<string, string>>({});\n\n const handleParamChange = (key: string, value: string) => {\n setParamValues((prev) => ({\n ...prev,\n [key]: value,\n }));\n };\n\n return createPortal(\n <div\n style={{\n padding: \"20px\",\n position: \"fixed\",\n zIndex: 9999,\n backgroundColor: \"white\",\n boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\",\n borderRadius: \"8px\",\n width: \"320px\",\n }}\n >\n <div style={{ position: \"relative\" }}>\n <button\n onClick={onClose}\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: \"1.2rem\",\n padding: \"4px\",\n }}\n >\n ✕\n </button>\n\n <h2 style={{ marginBottom: \"20px\", paddingRight: \"24px\" }}>\n Handler Preview\n </h2>\n <p style={{ fontSize: \"0.8rem\", color: \"#666\", overflow: \"scroll\" }}>\n {url.toString()}\n </p>\n <PathParamSetter\n paramValues={paramValues}\n onParamChange={handleParamChange}\n />\n <h3>Headers</h3>\n <KeyValueInputList items={headers} setItems={setHeaders} />\n <RequestPreview url={url} paramValues={paramValues} headers={headers} />\n </div>\n </div>,\n document.body\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/ui/Table/PreviewHandler/index.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { HttpHandler, matchRequestUrl, PathParams } from \"msw\";\nimport { PathParamSetter } from \"./PathParamSetter\";\nimport { RequestPreview } from \"./RequestPreview\";\nimport { KeyValueInputList } from \"./KeyValueInputList\";\n\ninterface PreviewHandlerProps {\n handler: HttpHandler;\n onClose: () => void;\n}\n\nexport const PreviewHandler = ({ handler, onClose }: PreviewHandlerProps) => {\n const path = handler.info.path;\n const url = new URL(String(path), location.href);\n const { params } = matchRequestUrl(url, path, url.origin);\n\n const [paramValues, setParamValues] = useState<\n PathParams<string> | undefined\n >(\n params\n ? Object.keys(params).reduce(\n (acc, key) => ({\n ...acc,\n [key]: \"\",\n }),\n {}\n )\n : undefined\n );\n const [headers, setHeaders] = useState<Record<string, string>>({});\n const [searchParams, setSearchParams] = useState<Record<string, string>>({});\n\n const handleParamChange = (key: string, value: string) => {\n setParamValues((prev) => ({\n ...prev,\n [key]: value,\n }));\n };\n\n return createPortal(\n <div\n style={{\n padding: \"20px\",\n position: \"fixed\",\n zIndex: 9999,\n backgroundColor: \"white\",\n boxShadow: \"0 2px 10px rgba(0, 0, 0, 0.1)\",\n borderRadius: \"8px\",\n width: \"320px\",\n maxHeight: \"500px\",\n overflow: \"scroll\",\n }}\n >\n <div style={{ position: \"relative\" }}>\n <button\n onClick={onClose}\n style={{\n position: \"absolute\",\n right: 0,\n top: 0,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: \"1.2rem\",\n padding: \"4px\",\n }}\n >\n ✕\n </button>\n\n <h2 style={{ marginBottom: \"20px\", paddingRight: \"24px\" }}>\n Handler Preview\n </h2>\n <p style={{ fontSize: \"0.8rem\", color: \"#666\", overflow: \"scroll\" }}>\n {url.toString()}\n </p>\n <PathParamSetter\n paramValues={paramValues}\n onParamChange={handleParamChange}\n />\n <h3>Search Params</h3>\n <KeyValueInputList items={searchParams} setItems={setSearchParams} />\n <h3>Headers</h3>\n <KeyValueInputList items={headers} setItems={setHeaders} />\n <RequestPreview\n url={url}\n paramValues={paramValues}\n headers={headers}\n searchParams={searchParams}\n />\n </div>\n </div>,\n document.body\n );\n};\n"],"names":["React"],"mappings":"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"}
@@ -15,12 +15,25 @@ const getPathWithParams = (url, paramValues) => {
15
15
  })
16
16
  .join("/");
17
17
  };
18
+ const getSearchParams = (searchParams) => {
19
+ if (!searchParams || Object.keys(searchParams).length === 0)
20
+ return "";
21
+ const urlSearchParams = new URLSearchParams();
22
+ Object.entries(searchParams).forEach(([key, value]) => {
23
+ urlSearchParams.set(key, value);
24
+ });
25
+ return urlSearchParams.toString();
26
+ };
18
27
  /**
19
28
  * Create full URL string
20
29
  */
21
- const getTotalUrl = (origin, path) => {
22
- return `${origin}${path}`;
30
+ const getTotalUrl = (origin, path, searchParams) => {
31
+ const url = new URL(`${origin}${path}`);
32
+ if (searchParams) {
33
+ url.search = searchParams;
34
+ }
35
+ return url.toString();
23
36
  };
24
37
 
25
- export { getPathWithParams, getTotalUrl };
38
+ export { getPathWithParams, getSearchParams, getTotalUrl };
26
39
  //# sourceMappingURL=url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sources":["../../../src/utils/url.ts"],"sourcesContent":["import { PathParams } from \"msw\";\n\n/**\n * Replace path parameters with path object and formatted path\n */\nexport const getPathWithParams = (\n url: URL,\n paramValues?: PathParams<string>\n): string => {\n if (!paramValues) return url.pathname;\n\n return url.pathname\n .split(\"/\")\n .map((segment) => {\n if (segment.startsWith(\":\")) {\n const paramName = segment.slice(1); // remove ':'\n return paramValues[paramName] || \"undefined\"; // replace with param value if exists, otherwise \"undefined\"\n }\n return segment;\n })\n .join(\"/\");\n};\n\n/**\n * Create full URL string\n */\nexport const getTotalUrl = (origin: string, path: string): string => {\n return `${origin}${path}`;\n};\n"],"names":[],"mappings":"AAEA;;AAEG;MACU,iBAAiB,GAAG,CAC/B,GAAQ,EACR,WAAgC,KACtB;AACV,IAAA,IAAI,CAAC,WAAW;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC;IAEtC,OAAO,GAAG,CAAC,QAAQ;SAChB,KAAK,CAAC,GAAG,CAAC;AACV,SAAA,GAAG,CAAC,CAAC,OAAO,KAAI;AACf,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC;SAC9C;AACD,QAAA,OAAO,OAAO,CAAC;AACjB,KAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,EAAE;AAEF;;AAEG;MACU,WAAW,GAAG,CAAC,MAAc,EAAE,IAAY,KAAY;AAClE,IAAA,OAAO,CAAG,EAAA,MAAM,CAAG,EAAA,IAAI,EAAE,CAAC;AAC5B;;;;"}
1
+ {"version":3,"file":"url.js","sources":["../../../src/utils/url.ts"],"sourcesContent":["import { PathParams } from \"msw\";\n\n/**\n * Replace path parameters with path object and formatted path\n */\nexport const getPathWithParams = (\n url: URL,\n paramValues?: PathParams<string>\n): string => {\n if (!paramValues) return url.pathname;\n\n return url.pathname\n .split(\"/\")\n .map((segment) => {\n if (segment.startsWith(\":\")) {\n const paramName = segment.slice(1); // remove ':'\n return paramValues[paramName] || \"undefined\"; // replace with param value if exists, otherwise \"undefined\"\n }\n return segment;\n })\n .join(\"/\");\n};\n\nexport const getSearchParams = (\n searchParams?: Record<string, string>\n): string => {\n if (!searchParams || Object.keys(searchParams).length === 0) return \"\";\n\n const urlSearchParams = new URLSearchParams();\n Object.entries(searchParams).forEach(([key, value]) => {\n urlSearchParams.set(key, value);\n });\n\n return urlSearchParams.toString();\n};\n/**\n * Create full URL string\n */\nexport const getTotalUrl = (\n origin: string,\n path: string,\n searchParams: string\n): string => {\n const url = new URL(`${origin}${path}`);\n if (searchParams) {\n url.search = searchParams;\n }\n return url.toString();\n};\n"],"names":[],"mappings":"AAEA;;AAEG;MACU,iBAAiB,GAAG,CAC/B,GAAQ,EACR,WAAgC,KACtB;AACV,IAAA,IAAI,CAAC,WAAW;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC;IAEtC,OAAO,GAAG,CAAC,QAAQ;SAChB,KAAK,CAAC,GAAG,CAAC;AACV,SAAA,GAAG,CAAC,CAAC,OAAO,KAAI;AACf,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC;SAC9C;AACD,QAAA,OAAO,OAAO,CAAC;AACjB,KAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,EAAE;AAEW,MAAA,eAAe,GAAG,CAC7B,YAAqC,KAC3B;AACV,IAAA,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE,CAAC;AAEvE,IAAA,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAC9C,IAAA,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACpD,QAAA,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClC,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,eAAe,CAAC,QAAQ,EAAE,CAAC;AACpC,EAAE;AACF;;AAEG;AACU,MAAA,WAAW,GAAG,CACzB,MAAc,EACd,IAAY,EACZ,YAAoB,KACV;IACV,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAG,EAAA,MAAM,CAAG,EAAA,IAAI,CAAE,CAAA,CAAC,CAAC;IACxC,IAAI,YAAY,EAAE;AAChB,QAAA,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC;KAC3B;AACD,IAAA,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "msw-dev-tool",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",