@motiadev/plugin-endpoint 0.7.2-beta.135-745094
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.
- package/LICENSE +21 -0
- package/README.md +34 -0
- package/dist/endpoint-badge.d.ts +11 -0
- package/dist/endpoint-badge.d.ts.map +1 -0
- package/dist/endpoint-badge.js +23 -0
- package/dist/endpoint-badge.js.map +1 -0
- package/dist/endpoint-body-panel.d.ts +14 -0
- package/dist/endpoint-body-panel.d.ts.map +1 -0
- package/dist/endpoint-body-panel.js +17 -0
- package/dist/endpoint-body-panel.js.map +1 -0
- package/dist/endpoint-call.d.ts +8 -0
- package/dist/endpoint-call.d.ts.map +1 -0
- package/dist/endpoint-call.js +59 -0
- package/dist/endpoint-call.js.map +1 -0
- package/dist/endpoint-description.d.ts +8 -0
- package/dist/endpoint-description.d.ts.map +1 -0
- package/dist/endpoint-description.js +14 -0
- package/dist/endpoint-description.js.map +1 -0
- package/dist/endpoint-path-params-panel.d.ts +9 -0
- package/dist/endpoint-path-params-panel.d.ts.map +1 -0
- package/dist/endpoint-path-params-panel.js +18 -0
- package/dist/endpoint-path-params-panel.js.map +1 -0
- package/dist/endpoint-query-params-panel.d.ts +9 -0
- package/dist/endpoint-query-params-panel.d.ts.map +1 -0
- package/dist/endpoint-query-params-panel.js +17 -0
- package/dist/endpoint-query-params-panel.js.map +1 -0
- package/dist/endpoint-response-schema.d.ts +11 -0
- package/dist/endpoint-response-schema.d.ts.map +1 -0
- package/dist/endpoint-response-schema.js +18 -0
- package/dist/endpoint-response-schema.js.map +1 -0
- package/dist/endpoint-response.d.ts +9 -0
- package/dist/endpoint-response.d.ts.map +1 -0
- package/dist/endpoint-response.js +51 -0
- package/dist/endpoint-response.js.map +1 -0
- package/dist/endpoint-side-panel.d.ts +9 -0
- package/dist/endpoint-side-panel.d.ts.map +1 -0
- package/dist/endpoint-side-panel.js +26 -0
- package/dist/endpoint-side-panel.js.map +1 -0
- package/dist/endpoints-page.d.ts +2 -0
- package/dist/endpoints-page.d.ts.map +1 -0
- package/dist/endpoints-page.js +15 -0
- package/dist/endpoints-page.js.map +1 -0
- package/dist/hooks/use-get-endpoints.d.ts +3 -0
- package/dist/hooks/use-get-endpoints.d.ts.map +1 -0
- package/dist/hooks/use-get-endpoints.js +9 -0
- package/dist/hooks/use-get-endpoints.js.map +1 -0
- package/dist/hooks/use-global-store.d.ts +27 -0
- package/dist/hooks/use-global-store.d.ts.map +1 -0
- package/dist/hooks/use-global-store.js +21 -0
- package/dist/hooks/use-global-store.js.map +1 -0
- package/dist/hooks/use-json-schema-to-json.d.ts +5 -0
- package/dist/hooks/use-json-schema-to-json.d.ts.map +1 -0
- package/dist/hooks/use-json-schema-to-json.js +12 -0
- package/dist/hooks/use-json-schema-to-json.js.map +1 -0
- package/dist/hooks/use-path-params.d.ts +2 -0
- package/dist/hooks/use-path-params.d.ts.map +1 -0
- package/dist/hooks/use-path-params.js +5 -0
- package/dist/hooks/use-path-params.js.map +1 -0
- package/dist/hooks/use-state-stream.d.ts +8 -0
- package/dist/hooks/use-state-stream.d.ts.map +1 -0
- package/dist/hooks/use-state-stream.js +12 -0
- package/dist/hooks/use-state-stream.js.map +1 -0
- package/dist/hooks/utils.d.ts +2 -0
- package/dist/hooks/utils.d.ts.map +1 -0
- package/dist/hooks/utils.js +30 -0
- package/dist/hooks/utils.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/json-editor.d.ts +13 -0
- package/dist/json-editor.d.ts.map +1 -0
- package/dist/json-editor.js +36 -0
- package/dist/json-editor.js.map +1 -0
- package/dist/response-body.d.ts +8 -0
- package/dist/response-body.d.ts.map +1 -0
- package/dist/response-body.js +7 -0
- package/dist/response-body.js.map +1 -0
- package/dist/stores/use-global-store.d.ts +27 -0
- package/dist/stores/use-global-store.d.ts.map +1 -0
- package/dist/stores/use-global-store.js +21 -0
- package/dist/stores/use-global-store.js.map +1 -0
- package/dist/stores/use-theme-store.d.ts +19 -0
- package/dist/stores/use-theme-store.d.ts.map +1 -0
- package/dist/stores/use-theme-store.js +27 -0
- package/dist/stores/use-theme-store.js.map +1 -0
- package/dist/styles.css +448 -0
- package/dist/types/endpoint.d.ts +15 -0
- package/dist/types/endpoint.d.ts.map +1 -0
- package/dist/types/endpoint.js +2 -0
- package/dist/types/endpoint.js.map +1 -0
- package/package.json +45 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Motia
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @motiadev/plugin-endpoint
|
|
2
|
+
|
|
3
|
+
This package provides React components for the Motia workbench endpoint functionality.
|
|
4
|
+
|
|
5
|
+
## TailwindCSS Compilation
|
|
6
|
+
|
|
7
|
+
This package now includes TailwindCSS compilation to ensure all Tailwind classes used in the components are properly compiled and available.
|
|
8
|
+
|
|
9
|
+
### Build Process
|
|
10
|
+
|
|
11
|
+
The build process includes two steps:
|
|
12
|
+
1. **CSS Compilation**: Compiles `src/styles.css` using PostCSS and TailwindCSS
|
|
13
|
+
2. **TypeScript Compilation**: Compiles TypeScript files to JavaScript
|
|
14
|
+
|
|
15
|
+
### Usage
|
|
16
|
+
|
|
17
|
+
To use the compiled styles in consuming packages, import the CSS file:
|
|
18
|
+
|
|
19
|
+
```css
|
|
20
|
+
@import "@motiadev/plugin-endpoint/styles.css";
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Development
|
|
24
|
+
|
|
25
|
+
- `pnpm run build` - Build both CSS and TypeScript
|
|
26
|
+
- `pnpm run dev` - Watch mode for both CSS and TypeScript
|
|
27
|
+
- `pnpm run build:css` - Build only CSS
|
|
28
|
+
- `pnpm run dev:css` - Watch mode for CSS only
|
|
29
|
+
|
|
30
|
+
### Configuration Files
|
|
31
|
+
|
|
32
|
+
- `tailwind.config.js` - TailwindCSS configuration
|
|
33
|
+
- `postcss.config.js` - PostCSS configuration with TailwindCSS plugin
|
|
34
|
+
- `src/styles.css` - Main CSS entry point with Tailwind imports
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
declare const badgeVariants: (props?: ({
|
|
4
|
+
variant?: "POST" | "GET" | "DELETE" | "PUT" | "PATCH" | "HEAD" | "OPTIONS" | null | undefined;
|
|
5
|
+
defaultVariants?: "variant" | null | undefined;
|
|
6
|
+
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
7
|
+
interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
8
|
+
}
|
|
9
|
+
export declare function EndpointBadge({ className, variant, ...props }: BadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=endpoint-badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-badge.d.ts","sourceRoot":"","sources":["../src/endpoint-badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,QAAA,MAAM,aAAa;;;mFAejB,CAAA;AAEF,UAAU,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAExG,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAEzE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { cn } from '@motiadev/ui';
|
|
4
|
+
const badgeVariants = cva('rounded-lg px-2 py-1 text-sm font-mono font-bold transition-colors', {
|
|
5
|
+
variants: {
|
|
6
|
+
variant: {
|
|
7
|
+
POST: 'bg-[#258DC3]/15 text-[#258DC3]',
|
|
8
|
+
GET: 'bg-[#709A2D]/15 text-[#709A2D]',
|
|
9
|
+
DELETE: 'bg-[#DE2134]/15 text-[#DE2134]',
|
|
10
|
+
PUT: 'bg-yellow-500/50 text-yellow-100', // TODO color
|
|
11
|
+
PATCH: 'bg-yellow-500/50 text-yellow-100', // TODO color
|
|
12
|
+
HEAD: 'bg-blue-500/50 text-blue-100', // TODO color
|
|
13
|
+
OPTIONS: 'bg-purple-500/50 text-purple-100', // TODO color
|
|
14
|
+
},
|
|
15
|
+
defaultVariants: {
|
|
16
|
+
variant: 'bg-blue-500/50 text-blue-100',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
export function EndpointBadge({ className, variant, ...props }) {
|
|
21
|
+
return _jsx("div", { className: cn(badgeVariants({ variant }), className), ...props });
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=endpoint-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-badge.js","sourceRoot":"","sources":["../src/endpoint-badge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAEjC,MAAM,aAAa,GAAG,GAAG,CAAC,oEAAoE,EAAE;IAC9F,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,IAAI,EAAE,gCAAgC;YACtC,GAAG,EAAE,gCAAgC;YACrC,MAAM,EAAE,gCAAgC;YACxC,GAAG,EAAE,kCAAkC,EAAE,aAAa;YACtD,KAAK,EAAE,kCAAkC,EAAE,aAAa;YACxD,IAAI,EAAE,8BAA8B,EAAE,aAAa;YACnD,OAAO,EAAE,kCAAkC,EAAE,aAAa;SAC3D;QACD,eAAe,EAAE;YACf,OAAO,EAAE,8BAA8B;SACxC;KACF;CACF,CAAC,CAAA;AAIF,MAAM,UAAU,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAc;IACxE,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAA;AACjF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ApiEndpoint } from './types/endpoint';
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
import 'react18-json-view/src/dark.css';
|
|
4
|
+
import 'react18-json-view/src/style.css';
|
|
5
|
+
type Props = {
|
|
6
|
+
endpoint: ApiEndpoint;
|
|
7
|
+
value: string;
|
|
8
|
+
onChange?: (body: string) => void;
|
|
9
|
+
onValidate?: (isValid: boolean) => void;
|
|
10
|
+
panelName: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const EndpointBodyPanel: FC<Props>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=endpoint-body-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-body-panel.d.ts","sourceRoot":"","sources":["../src/endpoint-body-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAG1B,OAAO,gCAAgC,CAAA;AACvC,OAAO,iCAAiC,CAAA;AAExC,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,WAAW,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACvC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,KAAK,CAyBvC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Panel } from '@motiadev/ui';
|
|
3
|
+
import { JsonEditor } from './json-editor';
|
|
4
|
+
import ReactJson from 'react18-json-view';
|
|
5
|
+
import 'react18-json-view/src/dark.css';
|
|
6
|
+
import 'react18-json-view/src/style.css';
|
|
7
|
+
export const EndpointBodyPanel = ({ endpoint, onChange, onValidate, panelName, value }) => {
|
|
8
|
+
const shouldHaveBody = ['post', 'put', 'patch'].includes(endpoint.method.toLowerCase());
|
|
9
|
+
const handleBodyChange = (body) => {
|
|
10
|
+
onChange?.(body);
|
|
11
|
+
};
|
|
12
|
+
if (!shouldHaveBody) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return (_jsx(Panel, { title: "Body", size: "sm", contentClassName: "p-0", "data-testid": `endpoint-body-panel__${panelName}`, children: onChange ? (_jsx(JsonEditor, { value: value, schema: endpoint.bodySchema, onChange: handleBodyChange, onValidate: onValidate })) : (_jsx(ReactJson, { src: value ? JSON.parse(value) : {}, theme: "default", enableClipboard: false, style: { backgroundColor: 'transparent' } })) }));
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=endpoint-body-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-body-panel.js","sourceRoot":"","sources":["../src/endpoint-body-panel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,SAAS,MAAM,mBAAmB,CAAA;AACzC,OAAO,gCAAgC,CAAA;AACvC,OAAO,iCAAiC,CAAA;AAUxC,MAAM,CAAC,MAAM,iBAAiB,GAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;IACnG,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAEvF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE;QACxC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,gBAAgB,EAAC,KAAK,iBAAc,wBAAwB,SAAS,EAAE,YAClG,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,GAAI,CAC9G,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IACR,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EACnC,KAAK,EAAC,SAAS,EACf,eAAe,EAAE,KAAK,EACtB,KAAK,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,GACzC,CACH,GACK,CACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-call.d.ts","sourceRoot":"","sources":["../src/endpoint-call.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,EAAE,EAAgC,MAAM,OAAO,CAAA;AAOxD,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAA;AAEtC,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,KAAK,CAkFlC,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '@motiadev/ui';
|
|
3
|
+
import { Loader2, Play } from 'lucide-react';
|
|
4
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
5
|
+
import { EndpointBodyPanel } from './endpoint-body-panel';
|
|
6
|
+
import { EndpointPathParamsPanel } from './endpoint-path-params-panel';
|
|
7
|
+
import { EndpointQueryParamsPanel } from './endpoint-query-params-panel';
|
|
8
|
+
import { EndpointResponse } from './endpoint-response';
|
|
9
|
+
import { useJsonSchemaToJson } from './hooks/use-json-schema-to-json';
|
|
10
|
+
export const EndpointCall = ({ endpoint }) => {
|
|
11
|
+
const shouldHaveBody = ['post', 'put', 'patch'].includes(endpoint.method.toLowerCase());
|
|
12
|
+
const [isRequestLoading, setIsRequestLoading] = useState(false);
|
|
13
|
+
const [responseCode, setResponseCode] = useState(undefined);
|
|
14
|
+
const [responseBody, setResponseBody] = useState(undefined);
|
|
15
|
+
const [executionTime, setExecutionTime] = useState(undefined);
|
|
16
|
+
const { body, setBody } = useJsonSchemaToJson(endpoint.bodySchema);
|
|
17
|
+
const [isBodyValid, setIsBodyValid] = useState(true);
|
|
18
|
+
const [pathParamsValues, setPathParamsValues] = useState({});
|
|
19
|
+
const [queryParamsValues, setQueryParamsValues] = useState({});
|
|
20
|
+
const isPlayEnabled = useMemo(() => {
|
|
21
|
+
if (shouldHaveBody && !isBodyValid)
|
|
22
|
+
return false;
|
|
23
|
+
return (Object.values(pathParamsValues).every((value) => value) &&
|
|
24
|
+
Object.values(queryParamsValues).every((value) => value));
|
|
25
|
+
}, [pathParamsValues, shouldHaveBody, isBodyValid, queryParamsValues]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (endpoint.id) {
|
|
28
|
+
setResponseCode(undefined);
|
|
29
|
+
setResponseBody(undefined);
|
|
30
|
+
setExecutionTime(undefined);
|
|
31
|
+
setIsRequestLoading(false);
|
|
32
|
+
}
|
|
33
|
+
}, [endpoint.id]);
|
|
34
|
+
const handleRequest = async () => {
|
|
35
|
+
setIsRequestLoading(true);
|
|
36
|
+
const startTime = Date.now();
|
|
37
|
+
const path = new URL(window.location.origin +
|
|
38
|
+
Object.entries(pathParamsValues).reduce((acc, [param, value]) => {
|
|
39
|
+
return acc.replace(`:${param}`, value);
|
|
40
|
+
}, endpoint.path));
|
|
41
|
+
for (const [key, value] of Object.entries(queryParamsValues)) {
|
|
42
|
+
path.searchParams.set(key, value);
|
|
43
|
+
}
|
|
44
|
+
const response = await fetch(path.toString(), {
|
|
45
|
+
method: endpoint.method,
|
|
46
|
+
headers: { 'Content-Type': 'application/json' },
|
|
47
|
+
body: endpoint.method === 'GET' ? null : body,
|
|
48
|
+
});
|
|
49
|
+
const endTime = Date.now();
|
|
50
|
+
const executionTime = endTime - startTime;
|
|
51
|
+
const json = await response.json();
|
|
52
|
+
setResponseCode(response.status);
|
|
53
|
+
setResponseBody(json);
|
|
54
|
+
setExecutionTime(executionTime);
|
|
55
|
+
setIsRequestLoading(false);
|
|
56
|
+
};
|
|
57
|
+
return (_jsxs("div", { className: "space-y-3", children: [_jsx(EndpointPathParamsPanel, { endpoint: endpoint, onChange: setPathParamsValues }), _jsx(EndpointQueryParamsPanel, { endpoint: endpoint, onChange: setQueryParamsValues }), _jsx(EndpointBodyPanel, { endpoint: endpoint, value: body, onChange: setBody, onValidate: setIsBodyValid, panelName: "call" }), _jsxs(Button, { className: "w-fit", onClick: handleRequest, variant: "accent", "data-testid": "endpoint-play-button", disabled: isRequestLoading || !isPlayEnabled, children: [isRequestLoading ? _jsx(Loader2, { className: "animate-spin" }) : _jsx(Play, {}), " Play"] }), _jsx(EndpointResponse, { responseCode: responseCode, responseBody: responseBody, executionTime: executionTime })] }));
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=endpoint-call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-call.js","sourceRoot":"","sources":["../src/endpoint-call.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-description.d.ts","sourceRoot":"","sources":["../src/endpoint-description.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAM9C,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAA;AAEtC,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAgBzC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { EndpointResponseSchema } from './endpoint-response-schema';
|
|
3
|
+
import { EndpointPathParamsPanel } from './endpoint-path-params-panel';
|
|
4
|
+
import { EndpointQueryParamsPanel } from './endpoint-query-params-panel';
|
|
5
|
+
import { EndpointBodyPanel } from './endpoint-body-panel';
|
|
6
|
+
import { useJsonSchemaToJson } from './hooks/use-json-schema-to-json';
|
|
7
|
+
export const EndpointDescription = ({ endpoint }) => {
|
|
8
|
+
const { body } = useJsonSchemaToJson(endpoint.bodySchema);
|
|
9
|
+
return (_jsxs("div", { className: "space-y-3", children: [_jsx(EndpointPathParamsPanel, { endpoint: endpoint }), _jsx(EndpointQueryParamsPanel, { endpoint: endpoint }), _jsx(EndpointBodyPanel, { endpoint: endpoint, panelName: "details", value: body }), _jsx(EndpointResponseSchema, { items: Object.entries(endpoint?.responseSchema ?? {}).map(([status, schema]) => ({
|
|
10
|
+
responseCode: status,
|
|
11
|
+
bodySchema: schema,
|
|
12
|
+
})) })] }));
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=endpoint-description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-description.js","sourceRoot":"","sources":["../src/endpoint-description.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAEnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAIrE,MAAM,CAAC,MAAM,mBAAmB,GAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAEzD,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,uBAAuB,IAAC,QAAQ,EAAE,QAAQ,GAAI,EAC/C,KAAC,wBAAwB,IAAC,QAAQ,EAAE,QAAQ,GAAI,EAChD,KAAC,iBAAiB,IAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAC,SAAS,EAAC,KAAK,EAAE,IAAI,GAAI,EAC1E,KAAC,sBAAsB,IACrB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC/E,YAAY,EAAE,MAAM;oBACpB,UAAU,EAAE,MAAM;iBACnB,CAAC,CAAC,GACH,IACE,CACP,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ApiEndpoint } from './types/endpoint';
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
type Props = {
|
|
4
|
+
endpoint: ApiEndpoint;
|
|
5
|
+
onChange?: (pathParamsValues: Record<string, string>) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare const EndpointPathParamsPanel: FC<Props>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=endpoint-path-params-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-path-params-panel.d.ts","sourceRoot":"","sources":["../src/endpoint-path-params-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,EAAE,EAAmC,MAAM,OAAO,CAAA;AAG3D,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;CAAE,CAAA;AAErG,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,KAAK,CAwC7C,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Input, Panel } from '@motiadev/ui';
|
|
3
|
+
import { Fragment, useState } from 'react';
|
|
4
|
+
import { usePathParams } from './hooks/use-path-params';
|
|
5
|
+
export const EndpointPathParamsPanel = ({ endpoint, onChange }) => {
|
|
6
|
+
const pathParams = usePathParams(endpoint.path);
|
|
7
|
+
const [pathParamsValues, setPathParamsValues] = useState(pathParams?.reduce((acc, param) => ({ ...acc, [param]: '' }), {}));
|
|
8
|
+
const onPathParamChange = (param, value) => {
|
|
9
|
+
const newPathParamsValues = { ...pathParamsValues, [param]: value };
|
|
10
|
+
setPathParamsValues(newPathParamsValues);
|
|
11
|
+
onChange?.(newPathParamsValues);
|
|
12
|
+
};
|
|
13
|
+
if (!pathParams.length) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return (_jsx(Panel, { title: "Path params", size: "sm", variant: "default", children: _jsx("div", { className: "grid gap-3", style: { gridTemplateColumns: '1fr 2fr' }, children: pathParams.map((param) => (_jsxs(Fragment, { children: [_jsx("div", { className: "font-bold leading-[36px] flex text-xs", children: param }), _jsx("div", { className: "flex items-center text-xs", children: onChange && (_jsx(Input, { className: "w-full text-xs", placeholder: param, value: pathParamsValues[param], onChange: (e) => onPathParamChange(param, e.target.value) })) })] }, param))) }) }));
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=endpoint-path-params-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-path-params-panel.js","sourceRoot":"","sources":["../src/endpoint-path-params-panel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAM,QAAQ,EAAE,QAAQ,EAAe,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAIvD,MAAM,CAAC,MAAM,uBAAuB,GAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3E,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC/C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACtD,UAAU,EAAE,MAAM,CAChB,CAAC,GAA2B,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EACzE,EAA4B,CAC7B,CACF,CAAA;IAED,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;QACzD,MAAM,mBAAmB,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAA;QACnE,mBAAmB,CAAC,mBAAmB,CAAC,CAAA;QACxC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,CAAA;IACjC,CAAC,CAAA;IAED,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,YACpD,cAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,mBAAmB,EAAE,SAAS,EAAE,YAClE,UAAU,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CACjC,MAAC,QAAQ,eACP,cAAK,SAAS,EAAC,uCAAuC,YAAE,KAAK,GAAO,EACpE,cAAK,SAAS,EAAC,2BAA2B,YACvC,QAAQ,IAAI,CACX,KAAC,KAAK,IACJ,SAAS,EAAC,gBAAgB,EAC1B,WAAW,EAAE,KAAK,EAClB,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAC9B,QAAQ,EAAE,CAAC,CAAgC,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GACxF,CACH,GACG,KAXO,KAAK,CAYT,CACZ,CAAC,GACE,GACA,CACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ApiEndpoint } from './types/endpoint';
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
type Props = {
|
|
4
|
+
endpoint: ApiEndpoint;
|
|
5
|
+
onChange?: (queryParamsValues: Record<string, string>) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare const EndpointQueryParamsPanel: FC<Props>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=endpoint-query-params-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-query-params-panel.d.ts","sourceRoot":"","sources":["../src/endpoint-query-params-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,EAAE,EAAmC,MAAM,OAAO,CAAA;AAE3D,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;CAAE,CAAA;AAEtG,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,KAAK,CAyC9C,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Input } from '@motiadev/ui';
|
|
3
|
+
import { Panel } from '@motiadev/ui';
|
|
4
|
+
import { Fragment, useState } from 'react';
|
|
5
|
+
export const EndpointQueryParamsPanel = ({ endpoint, onChange }) => {
|
|
6
|
+
const [queryParamsValues, setQueryParamsValues] = useState(endpoint.queryParams?.reduce((acc, param) => ({ ...acc, [param.name]: '' }), {}) ?? {});
|
|
7
|
+
const onQueryParamChange = (param, value) => {
|
|
8
|
+
const newQueryParamsValues = { ...queryParamsValues, [param]: value };
|
|
9
|
+
setQueryParamsValues(newQueryParamsValues);
|
|
10
|
+
onChange?.(newQueryParamsValues);
|
|
11
|
+
};
|
|
12
|
+
if (!endpoint.queryParams?.length) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return (_jsx(Panel, { title: "Query params", size: "sm", variant: "outlined", children: _jsx("div", { className: "grid gap-3", style: { gridTemplateColumns: '1fr 2fr', gridTemplateRows: '1fr 1fr' }, children: endpoint.queryParams.map((param) => (_jsxs(Fragment, { children: [_jsx("div", { className: "font-bold leading-[36px] flex text-xs", children: param.name }), _jsx("div", { className: "flex items-center text-xs ", children: onChange ? (_jsx(Input, { className: "text-xs", placeholder: param.description, value: queryParamsValues[param.name], onChange: (e) => onQueryParamChange(param.name, e.target.value) })) : (_jsx("span", { children: param.description })) })] }, param.name))) }) }));
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=endpoint-query-params-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-query-params-panel.js","sourceRoot":"","sources":["../src/endpoint-query-params-panel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAM,QAAQ,EAAE,QAAQ,EAAe,MAAM,OAAO,CAAA;AAI3D,MAAM,CAAC,MAAM,wBAAwB,GAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5E,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAC1B,CAAC,GAA2B,EAAE,KAAuB,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EACxF,EAA4B,CAC7B,IAAI,EAAE,CACR,CAAA;IAED,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;QAC1D,MAAM,oBAAoB,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAA;QACrE,oBAAoB,CAAC,oBAAoB,CAAC,CAAA;QAC1C,QAAQ,EAAE,CAAC,oBAAoB,CAAC,CAAA;IAClC,CAAC,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAC,KAAK,IAAC,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,UAAU,YACtD,cAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAC/F,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAA4C,EAAE,EAAE,CAAC,CAC1E,MAAC,QAAQ,eACP,cAAK,SAAS,EAAC,uCAAuC,YAAE,KAAK,CAAC,IAAI,GAAO,EACzE,cAAK,SAAS,EAAC,4BAA4B,YACxC,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,KAAK,IACJ,SAAS,EAAC,SAAS,EACnB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,EACpC,QAAQ,EAAE,CAAC,CAAgC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAC9F,CACH,CAAC,CAAC,CAAC,CACF,yBAAO,KAAK,CAAC,WAAW,GAAQ,CACjC,GACG,KAbO,KAAK,CAAC,IAAI,CAcd,CACZ,CAAC,GACE,GACA,CACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
export type EndpointResponseItem = {
|
|
3
|
+
responseCode: string;
|
|
4
|
+
bodySchema: Record<string, Record<string, any>>;
|
|
5
|
+
};
|
|
6
|
+
type EndpointResponseProps = {
|
|
7
|
+
items: EndpointResponseItem[];
|
|
8
|
+
};
|
|
9
|
+
export declare const EndpointResponseSchema: FC<EndpointResponseProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=endpoint-response-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-response-schema.d.ts","sourceRoot":"","sources":["../src/endpoint-response-schema.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAA;AAGnC,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,MAAM,CAAA;IAEpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;CAChD,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC3B,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAC9B,CAAA;AAqBD,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,qBAAqB,CA4B5D,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { convertJsonSchemaToJson } from './hooks/utils';
|
|
3
|
+
import { useThemeStore } from './stores/use-theme-store';
|
|
4
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@motiadev/ui';
|
|
5
|
+
import { useMemo } from 'react';
|
|
6
|
+
import ReactJson from 'react18-json-view';
|
|
7
|
+
const EndpointResponseSchemaItem = ({ responseCode, bodySchema }) => {
|
|
8
|
+
const theme = useThemeStore((store) => store.theme);
|
|
9
|
+
const schema = useMemo(() => convertJsonSchemaToJson(bodySchema), [bodySchema]);
|
|
10
|
+
return (_jsx(TabsContent, { value: responseCode, className: "border-t", children: _jsx("div", { className: "text-xs font-mono rounded-lg whitespace-pre-wrap", children: _jsx(ReactJson, { src: schema, dark: theme === 'dark', enableClipboard: false, style: { backgroundColor: 'transparent' } }) }) }, responseCode));
|
|
11
|
+
};
|
|
12
|
+
export const EndpointResponseSchema = ({ items }) => {
|
|
13
|
+
if (items.length === 0) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return (_jsx("div", { className: "flex flex-col rounded-lg border", children: _jsxs(Tabs, { defaultValue: items[0].responseCode, children: [_jsx("div", { className: "flex items-center justify-between bg-card", children: _jsx(TabsList, { className: "bg-transparent p-0", children: items.map((item) => (_jsx(TabsTrigger, { value: item.responseCode, className: "text-xs font-bold cursor-pointer", children: item.responseCode }, item.responseCode))) }) }), items.map((props) => (_jsx(EndpointResponseSchemaItem, { ...props }, props.responseCode)))] }) }));
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=endpoint-response-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-response-schema.js","sourceRoot":"","sources":["../src/endpoint-response-schema.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAM,OAAO,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,SAAS,MAAM,mBAAmB,CAAA;AAYzC,MAAM,0BAA0B,GAA6B,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;IAC5F,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAEtE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAE/E,OAAO,CACL,KAAC,WAAW,IAAC,KAAK,EAAE,YAAY,EAAqB,SAAS,EAAC,UAAU,YACvE,cAAK,SAAS,EAAC,kDAAkD,YAC/D,KAAC,SAAS,IACR,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,KAAK,KAAK,MAAM,EACtB,eAAe,EAAE,KAAK,EACtB,KAAK,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,GACzC,GACE,IAR+B,YAAY,CASrC,CACf,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAA8B,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAC,iCAAiC,YAC9C,MAAC,IAAI,IAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,aACvC,cAAK,SAAS,EAAC,2CAA2C,YACxD,KAAC,QAAQ,IAAC,SAAS,EAAC,oBAAoB,YACrC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,KAAC,WAAW,IACV,KAAK,EAAE,IAAI,CAAC,YAAY,EAExB,SAAS,EAAC,kCAAkC,YAE3C,IAAI,CAAC,YAAY,IAHb,IAAI,CAAC,YAAY,CAIV,CACf,CAAC,GACO,GACP,EAEL,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACpB,KAAC,0BAA0B,OAA8B,KAAK,IAA7B,KAAK,CAAC,YAAY,CAAe,CACnE,CAAC,IACG,GACH,CACP,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
type EndpointResponseProps = {
|
|
3
|
+
responseCode: number | string | undefined;
|
|
4
|
+
responseBody: Record<string, any> | undefined;
|
|
5
|
+
executionTime?: number;
|
|
6
|
+
};
|
|
7
|
+
export declare const EndpointResponse: FC<EndpointResponseProps>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=endpoint-response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-response.d.ts","sourceRoot":"","sources":["../src/endpoint-response.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAA;AAGnC,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAEzC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAA;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAyBD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAoEtD,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useStateStream } from './hooks/use-state-stream';
|
|
3
|
+
import { useThemeStore } from './stores/use-theme-store';
|
|
4
|
+
import { Panel } from '@motiadev/ui';
|
|
5
|
+
import { XCircle } from 'lucide-react';
|
|
6
|
+
import { useMemo } from 'react';
|
|
7
|
+
import ReactJson from 'react18-json-view';
|
|
8
|
+
const getStatusMessage = (status) => {
|
|
9
|
+
switch (status) {
|
|
10
|
+
case 200:
|
|
11
|
+
return 'OK';
|
|
12
|
+
case 201:
|
|
13
|
+
return 'Created';
|
|
14
|
+
case 204:
|
|
15
|
+
return 'No Content';
|
|
16
|
+
case 400:
|
|
17
|
+
return 'Bad Request';
|
|
18
|
+
case 401:
|
|
19
|
+
return 'Unauthorized';
|
|
20
|
+
case 403:
|
|
21
|
+
return 'Forbidden';
|
|
22
|
+
case 404:
|
|
23
|
+
return 'Not Found';
|
|
24
|
+
case 500:
|
|
25
|
+
return 'Internal Server Error';
|
|
26
|
+
default:
|
|
27
|
+
return 'Unknown Status';
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
export const EndpointResponse = ({ responseCode, executionTime, responseBody }) => {
|
|
31
|
+
const theme = useThemeStore((state) => state.theme);
|
|
32
|
+
const { data, isStreamed, originalData } = useStateStream(responseBody);
|
|
33
|
+
const statusMessage = useMemo(() => getStatusMessage(Number(responseCode)), [responseCode]);
|
|
34
|
+
const isError = Number(responseCode) >= 400;
|
|
35
|
+
if (!responseBody || !responseCode) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return (_jsx(Panel, { "data-testid": 'endpoint-response-container', tabs: isStreamed
|
|
39
|
+
? [
|
|
40
|
+
{
|
|
41
|
+
label: 'Streamed Response',
|
|
42
|
+
content: (_jsx(ReactJson, { src: data, dark: theme === 'dark', style: { backgroundColor: 'transparent' } })),
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: 'Original',
|
|
46
|
+
content: (_jsx(ReactJson, { src: originalData, dark: theme === 'dark', style: { backgroundColor: 'transparent' } })),
|
|
47
|
+
},
|
|
48
|
+
]
|
|
49
|
+
: undefined, title: _jsxs("div", { className: "flex flex-row justify-between items-center flex-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [isError && _jsx(XCircle, { className: "text-red-500 w-4 h-4" }), _jsxs("span", { className: "font-bold text-xs", children: [responseCode, " - ", statusMessage] })] }), !!executionTime && (_jsxs("span", { className: "text-xs text-muted-foreground justify-self-end", children: ["Execution time: ", _jsxs("span", { className: "font-bold", children: [executionTime, "ms"] })] }))] }), subtitle: isStreamed && (_jsxs("span", { className: "col-span-2 flex flex-row items-center font-medium text-card-foreground text-xs mt-2", children: [_jsxs("span", { className: "inline-block w-2 h-2 rounded-full bg-green-500 mr-2 relative", children: [_jsx("span", { className: "absolute inset-0 rounded-full bg-green-500 animate-[ping_1.5s_ease-in-out_infinite]" }), _jsx("span", { className: "absolute inset-0 rounded-full bg-green-500" })] }), "Object is being streamed, this is not the actual response from the API Endpoint"] })), children: !isStreamed && (_jsx(ReactJson, { src: data, dark: theme === 'dark', style: { backgroundColor: 'transparent' } })) }));
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=endpoint-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-response.js","sourceRoot":"","sources":["../src/endpoint-response.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ApiEndpoint } from './types/endpoint';
|
|
2
|
+
import { FC } from 'react';
|
|
3
|
+
type Props = {
|
|
4
|
+
endpoint: ApiEndpoint;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
};
|
|
7
|
+
export declare const EndpointSidePanel: FC<Props>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=endpoint-side-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-side-panel.d.ts","sourceRoot":"","sources":["../src/endpoint-side-panel.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAK1B,KAAK,KAAK,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAE3D,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,KAAK,CAgCvC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Sidebar } from '@motiadev/ui';
|
|
3
|
+
import { X } from 'lucide-react';
|
|
4
|
+
import { EndpointBadge } from './endpoint-badge';
|
|
5
|
+
import { EndpointCall } from './endpoint-call';
|
|
6
|
+
import { EndpointDescription } from './endpoint-description';
|
|
7
|
+
export const EndpointSidePanel = ({ endpoint, onClose }) => {
|
|
8
|
+
return (_jsx(Sidebar, { initialWidth: 600, subtitle: endpoint.description, title: _jsxs("div", { className: "flex flex-row gap-2 items-center", children: [_jsx(EndpointBadge, { variant: endpoint.method, children: endpoint.method.toUpperCase() }), _jsx("span", { className: "text-md font-bold", children: endpoint.path })] }), onClose: onClose, tabs: [
|
|
9
|
+
{
|
|
10
|
+
label: 'Details',
|
|
11
|
+
content: _jsx(EndpointDescription, { endpoint: endpoint }),
|
|
12
|
+
'data-testid': 'endpoint-details-tab',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
label: 'Call',
|
|
16
|
+
content: _jsx(EndpointCall, { endpoint: endpoint }),
|
|
17
|
+
'data-testid': 'endpoint-call-tab',
|
|
18
|
+
},
|
|
19
|
+
], actions: [
|
|
20
|
+
{
|
|
21
|
+
icon: _jsx(X, { className: "cursor-pointer w-4 h-4", onClick: onClose }),
|
|
22
|
+
onClick: onClose,
|
|
23
|
+
},
|
|
24
|
+
] }));
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=endpoint-side-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-side-panel.js","sourceRoot":"","sources":["../src/endpoint-side-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAI5D,MAAM,CAAC,MAAM,iBAAiB,GAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACpE,OAAO,CACL,KAAC,OAAO,IACN,YAAY,EAAE,GAAG,EACjB,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAC9B,KAAK,EACH,eAAK,SAAS,EAAC,kCAAkC,aAC/C,KAAC,aAAa,IAAC,OAAO,EAAE,QAAQ,CAAC,MAAe,YAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,GAAiB,EACjG,eAAM,SAAS,EAAC,mBAAmB,YAAE,QAAQ,CAAC,IAAI,GAAQ,IACtD,EAER,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE;YACJ;gBACE,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,KAAC,mBAAmB,IAAC,QAAQ,EAAE,QAAQ,GAAI;gBACpD,aAAa,EAAE,sBAAsB;aACtC;YACD;gBACE,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,KAAC,YAAY,IAAC,QAAQ,EAAE,QAAQ,GAAI;gBAC7C,aAAa,EAAE,mBAAmB;aACnC;SACF,EACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,KAAC,CAAC,IAAC,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,OAAO,GAAI;gBAChE,OAAO,EAAE,OAAO;aACjB;SACF,GACD,CACH,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints-page.d.ts","sourceRoot":"","sources":["../src/endpoints-page.tsx"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,+CAiCzB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { EndpointBadge } from './endpoint-badge';
|
|
4
|
+
import { EndpointSidePanel } from './endpoint-side-panel';
|
|
5
|
+
import { useGetEndpoints } from './hooks/use-get-endpoints';
|
|
6
|
+
import { cn } from '@motiadev/ui';
|
|
7
|
+
import { useGlobalStore } from './hooks/use-global-store';
|
|
8
|
+
export const EndpointsPage = () => {
|
|
9
|
+
const endpoints = useGetEndpoints();
|
|
10
|
+
const selectedEndpointId = useGlobalStore((state) => state.selectedEndpointId);
|
|
11
|
+
const selectEndpointId = useGlobalStore((state) => state.selectEndpointId);
|
|
12
|
+
const selectedEndpoint = useMemo(() => selectedEndpointId && endpoints.find((endpoint) => endpoint.id === selectedEndpointId), [endpoints, selectedEndpointId]);
|
|
13
|
+
return (_jsxs("div", { className: "flex flex-row", children: [_jsx("div", { className: "flex flex-col flex-1 overflow-y-auto", children: endpoints.map((endpoint) => (_jsx("div", { "data-testid": `endpoint-${endpoint.method}-${endpoint.path}`, className: cn(selectedEndpoint === endpoint && 'bg-muted-foreground/10', 'cursor-pointer select-none'), onClick: () => selectEndpointId(endpoint.id), children: _jsxs("div", { className: "flex flex-row gap-2 items-center hover:bg-muted-foreground/10 p-2", children: [_jsx(EndpointBadge, { variant: endpoint.method, children: endpoint.method.toUpperCase() }), _jsx("span", { className: "text-md font-mono font-bold whitespace-nowrap", children: endpoint.path }), _jsx("span", { className: "text-md text-muted-foreground truncate", children: endpoint.description })] }) }, `${endpoint.method} ${endpoint.path}`))) }), selectedEndpoint && (_jsx(EndpointSidePanel, { endpoint: selectedEndpoint, onClose: () => selectEndpointId(undefined) }))] }));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=endpoints-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints-page.js","sourceRoot":"","sources":["../src/endpoints-page.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGzD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,SAAS,GAAG,eAAe,EAAE,CAAA;IACnC,MAAM,kBAAkB,GAAG,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAC9E,MAAM,gBAAgB,GAAG,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC1E,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,kBAAkB,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,QAAqB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,kBAAkB,CAAC,EACzG,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAChC,CAAA;IAED,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,cAAK,SAAS,EAAC,sCAAsC,YAClD,SAAS,CAAC,GAAG,CAAC,CAAC,QAAqB,EAAE,EAAE,CAAC,CACxC,6BACe,YAAY,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,EAE3D,SAAS,EAAE,EAAE,CAAC,gBAAgB,KAAK,QAAQ,IAAI,wBAAwB,EAAE,4BAA4B,CAAC,EACtG,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,YAE5C,eAAK,SAAS,EAAC,mEAAmE,aAChF,KAAC,aAAa,IAAC,OAAO,EAAE,QAAQ,CAAC,MAAe,YAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,GAAiB,EACjG,eAAM,SAAS,EAAC,+CAA+C,YAAE,QAAQ,CAAC,IAAI,GAAQ,EACtF,eAAM,SAAS,EAAC,wCAAwC,YAAE,QAAQ,CAAC,WAAW,GAAQ,IAClF,IARD,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAStC,CACP,CAAC,GACE,EAEL,gBAAgB,IAAI,CACnB,KAAC,iBAAiB,IAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAI,CAC9F,IACG,CACP,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-get-endpoints.d.ts","sourceRoot":"","sources":["../../src/hooks/use-get-endpoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,eAAO,MAAM,eAAe,qBAO3B,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useStreamGroup } from '@motiadev/stream-client-react';
|
|
2
|
+
export const useGetEndpoints = () => {
|
|
3
|
+
const { data: endpoints } = useStreamGroup({
|
|
4
|
+
streamName: '__motia.api-endpoints',
|
|
5
|
+
groupId: 'default',
|
|
6
|
+
});
|
|
7
|
+
return endpoints;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=use-get-endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-get-endpoints.js","sourceRoot":"","sources":["../../src/hooks/use-get-endpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAG9D,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,cAAc,CAAc;QACtD,UAAU,EAAE,uBAAuB;QACnC,OAAO,EAAE,SAAS;KACnB,CAAC,CAAA;IAEF,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
type UseGlobalStore = {
|
|
2
|
+
selectedEndpointId?: string;
|
|
3
|
+
selectEndpointId: (endpointId?: string) => void;
|
|
4
|
+
selectedTraceGroupId?: string;
|
|
5
|
+
selectTraceGroupId: (traceGroupId?: string) => void;
|
|
6
|
+
selectedTraceId?: string;
|
|
7
|
+
selectTraceId: (traceId?: string) => void;
|
|
8
|
+
selectedStateId?: string;
|
|
9
|
+
selectStateId: (stateId?: string) => void;
|
|
10
|
+
selectedLogId?: string;
|
|
11
|
+
selectLogId: (logId?: string) => void;
|
|
12
|
+
};
|
|
13
|
+
export declare const useGlobalStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<UseGlobalStore>, "setState" | "persist"> & {
|
|
14
|
+
setState(partial: UseGlobalStore | Partial<UseGlobalStore> | ((state: UseGlobalStore) => UseGlobalStore | Partial<UseGlobalStore>), replace?: false | undefined): unknown;
|
|
15
|
+
setState(state: UseGlobalStore | ((state: UseGlobalStore) => UseGlobalStore), replace: true): unknown;
|
|
16
|
+
persist: {
|
|
17
|
+
setOptions: (options: Partial<import("zustand/middleware").PersistOptions<UseGlobalStore, UseGlobalStore, unknown>>) => void;
|
|
18
|
+
clearStorage: () => void;
|
|
19
|
+
rehydrate: () => Promise<void> | void;
|
|
20
|
+
hasHydrated: () => boolean;
|
|
21
|
+
onHydrate: (fn: (state: UseGlobalStore) => void) => () => void;
|
|
22
|
+
onFinishHydration: (fn: (state: UseGlobalStore) => void) => () => void;
|
|
23
|
+
getOptions: () => Partial<import("zustand/middleware").PersistOptions<UseGlobalStore, UseGlobalStore, unknown>>;
|
|
24
|
+
};
|
|
25
|
+
}>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=use-global-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-global-store.d.ts","sourceRoot":"","sources":["../../src/hooks/use-global-store.ts"],"names":[],"mappings":"AAGA,KAAK,cAAc,GAAG;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACnD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC,CAAA;AAMD,eAAO,MAAM,cAAc;;;;;;;;;;;;EAmB1B,CAAA"}
|