├── README.md ├── example ├── .babelrc ├── .gitattributes ├── .gitignore ├── .refine-codemod.json ├── LICENSE ├── README.MD ├── next-env.d.ts ├── next.config.js ├── package-lock.json ├── package.json ├── pages │ ├── [resource] │ │ ├── [action] │ │ │ ├── [id].tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── _app.tsx │ ├── _document.tsx │ └── index.tsx ├── public │ ├── icons │ │ ├── github-icon.svg │ │ ├── linkedin-icon.svg │ │ ├── nextjs-icon.svg │ │ ├── pankod-icon.svg │ │ ├── twitter-icon.svg │ │ └── youtube-icon.svg │ └── meta.json ├── src │ ├── authProvider.ts │ ├── components │ │ ├── index.ts │ │ └── posts │ │ │ ├── create.tsx │ │ │ ├── edit.tsx │ │ │ ├── index.ts │ │ │ ├── list.tsx │ │ │ └── show.tsx │ ├── directusClient.ts │ ├── interfaces │ │ └── index.ts │ └── styles │ │ └── global.css └── tsconfig.json └── package ├── .gitignore ├── .npmrc ├── LICENSE ├── README.md ├── dist ├── dataProvider.d.ts ├── helpers │ ├── auth.d.ts │ ├── index.d.ts │ └── utility.d.ts ├── index.d.ts ├── index.js ├── liveProvider.d.ts ├── refine-directus.cjs.development.js ├── refine-directus.cjs.development.js.map ├── refine-directus.cjs.production.min.js ├── refine-directus.cjs.production.min.js.map ├── refine-directus.esm.js └── refine-directus.esm.js.map ├── package-lock.json ├── package.json ├── src ├── dataProvider.ts ├── helpers │ ├── auth.ts │ ├── index.ts │ └── utility.ts ├── index.ts └── liveProvider.ts ├── tsconfig.build.json └── tsconfig.json /README.md: -------------------------------------------------------------------------------- 1 | # refine-directus 2 | Directus dataprovider package for refine. 3 | 4 | ### [Directus data provider documentation](https://github.com/tspvivek/refine-directus/blob/master/package/README.md) 5 | ### [Example](https://github.com/tspvivek/refine-directus/blob/master/example/README.MD) 6 | -------------------------------------------------------------------------------- /example/.babelrc: -------------------------------------------------------------------------------- 1 | { "presets": ["next/babel"] } 2 | -------------------------------------------------------------------------------- /example/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # npm 2 | node_modules 3 | # next.js build files 4 | .next 5 | # environment variables 6 | .env 7 | .env.* 8 | !.env.example -------------------------------------------------------------------------------- /example/.refine-codemod.json: -------------------------------------------------------------------------------- 1 | {"install":{"@refinedev/nextjs-router":"latest","antd":"^5.0.5","@refinedev/core":"latest","@refinedev/antd":"latest"},"uninstall":["@pankod/refine-nextjs-router","@pankod/refine-nextjs-router","@pankod/refine-nextjs-router","@pankod/refine-nextjs-router","@pankod/refine-nextjs-router","@pankod/refine-nextjs-router","@pankod/refine-core","@pankod/refine-antd","@pankod/refine-core","@pankod/refine-core","@pankod/refine-antd","@pankod/refine-nextjs-router","@pankod/refine-antd","@pankod/refine-nextjs-router","@pankod/refine-nextjs-router","@pankod/refine-core","@pankod/refine-antd","@pankod/refine-core","@pankod/refine-antd","@pankod/refine-core","@pankod/refine-antd","@pankod/refine-core"]} -------------------------------------------------------------------------------- /example/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | n 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /example/README.MD: -------------------------------------------------------------------------------- 1 | # refine-next 2 | 3 | 4 | This project was generated with [superplate](https://github.com/pankod/superplate). 5 | 6 | ## Getting Started 7 | 8 | superplate is a Next.js all-in-one project generator. Create your project with the tools you need without spending hours on setting them up. 9 | 10 | ## Available Scripts 11 | 12 | ### Running the development server. 13 | 14 | ```bash 15 | npm run dev 16 | ``` 17 | 18 | ### Building for production. 19 | 20 | ```bash 21 | npm run build 22 | ``` 23 | 24 | ### Running the production server. 25 | 26 | ```bash 27 | npm run start 28 | ``` 29 | 30 | ## Learn More 31 | 32 | To learn more about **superplate**, please check out the [Documentation](https://github.com/pankod/superplate). 33 | 34 | 35 | ### **CSS / styled-jsx** 36 | 37 | Next.js comes with built-in support for CSS and styled-jsx. Styled-jsx is full, scoped and component-friendly CSS support for JSX (rendered on the server or the client). 38 | 39 | [Go To Documentation](https://github.com/vercel/styled-jsx) 40 | 41 | 42 | ### **ESLint** 43 | 44 | A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease. 45 | 46 | [Go To Documentation](https://eslint.org/docs/user-guide/getting-started) 47 | 48 | 49 | 50 | ## License 51 | 52 | MIT 53 | -------------------------------------------------------------------------------- /example/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /example/next.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | experimental: { 3 | newNextLinkBehavior: true, 4 | }, 5 | transpilePackages: [ 6 | "@pankod/refine-antd", 7 | "@pankod/refine-inferencer", 8 | "antd", 9 | "@ant-design/pro-components", 10 | "@ant-design/pro-layout", 11 | "@ant-design/pro-utils", 12 | "@ant-design/pro-provider", 13 | "rc-pagination", 14 | "rc-picker", 15 | ], 16 | }; -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "refine-next-directus", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "NODE_OPTIONS=--max_old_space_size=4096 next dev", 7 | "build": "next build", 8 | "start:prod": "next start", 9 | "lint": "eslint '**/*.{js,jsx,ts,tsx}'", 10 | "localdev": "ln -nsf ../../../package node_modules/@tspvivek/refine-directus && NODE_OPTIONS=--max_old_space_size=4096 next dev" 11 | }, 12 | "dependencies": { 13 | "@refinedev/antd": "^5.32.0", 14 | "@refinedev/core": "^4.32.0", 15 | "@refinedev/cli": "^2.7.4", 16 | "@refinedev/nextjs-router": "^5.5.0", 17 | "@tspvivek/refine-directus": "^1.0.22", 18 | "antd": "^5.0.5", 19 | "next": "^13.0.6", 20 | "react": "^18.0.0", 21 | "react-dom": "^18.0.0" 22 | }, 23 | "devDependencies": { 24 | "@types/node": "^12.20.11", 25 | "@types/react": "^18.0.0", 26 | "@types/react-dom": "^18.0.0", 27 | "@typescript-eslint/parser": "5.48.0", 28 | "typescript": "^5.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /example/pages/[resource]/[action]/[id].tsx: -------------------------------------------------------------------------------- 1 | export { NextRouteComponent as default } from "@refinedev/nextjs-router/legacy"; 2 | import { checkAuthentication } from "@refinedev/nextjs-router/legacy"; 3 | 4 | import { GetServerSideProps } from "next"; 5 | 6 | import authProvider from "../../../src/authProvider"; 7 | 8 | export const getServerSideProps: GetServerSideProps = async (context) => { 9 | const { isAuthenticated, ...props } = await checkAuthentication( 10 | authProvider, 11 | context, 12 | ); 13 | 14 | if (!isAuthenticated) { 15 | return props; 16 | } 17 | 18 | return { 19 | props: {}, 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /example/pages/[resource]/[action]/index.tsx: -------------------------------------------------------------------------------- 1 | export { NextRouteComponent as default } from "@refinedev/nextjs-router/legacy"; 2 | import { checkAuthentication } from "@refinedev/nextjs-router/legacy"; 3 | 4 | import { GetServerSideProps } from "next"; 5 | import authProvider from "src/authProvider"; 6 | 7 | 8 | export const getServerSideProps: GetServerSideProps = async (context) => { 9 | const { isAuthenticated, ...props } = await checkAuthentication( 10 | authProvider, 11 | context, 12 | ); 13 | 14 | if (!isAuthenticated) { 15 | return props; 16 | } 17 | 18 | return { 19 | props: {}, 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /example/pages/[resource]/index.tsx: -------------------------------------------------------------------------------- 1 | export { NextRouteComponent as default } from "@refinedev/nextjs-router/legacy"; 2 | 3 | import { checkAuthentication } from "@refinedev/nextjs-router/legacy"; 4 | import { dataProvider } from "@tspvivek/refine-directus"; 5 | 6 | 7 | import { GetServerSideProps } from "next"; 8 | import { directusClient } from "src/directusClient"; 9 | 10 | import authProvider from "../../src/authProvider"; 11 | 12 | export const getServerSideProps: GetServerSideProps = async (context) => { 13 | const { isAuthenticated, ...props } = await checkAuthentication( 14 | authProvider, 15 | context, 16 | ); 17 | 18 | if (!isAuthenticated) { 19 | return props; 20 | } 21 | 22 | const { query } = context; 23 | 24 | try { 25 | const data = await dataProvider(directusClient).getList({ 26 | resource: query["resource"] as string, 27 | }); 28 | 29 | return { 30 | props: { 31 | initialData: data, 32 | }, 33 | }; 34 | } catch (error) { 35 | return { props: {} }; 36 | } 37 | }; 38 | -------------------------------------------------------------------------------- /example/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { AppProps } from "next/app"; 3 | 4 | import { Refine } from "@refinedev/core"; 5 | import { UnsavedChangesNotifier } from "@refinedev/nextjs-router"; 6 | 7 | import { notificationProvider, LoginPage, Layout, ErrorComponent } from "@refinedev/antd"; 8 | import { dataProvider, liveProvider } from "@tspvivek/refine-directus"; 9 | import routerProvider from "@refinedev/nextjs-router/legacy"; 10 | import "@refinedev/antd/dist/reset.css"; 11 | 12 | import "@styles/global.css"; 13 | 14 | import authProvider from "src/authProvider"; 15 | import { directusClient } from "src/directusClient"; 16 | 17 | import { PostList, PostCreate, PostEdit, PostShow } from "@components"; 18 | 19 | function MyApp({ Component, pageProps }: AppProps): JSX.Element { 20 | return ( 21 | } 43 | > 44 | 45 | 46 | 47 | ); 48 | } 49 | 50 | export default MyApp; 51 | -------------------------------------------------------------------------------- /example/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import Document, { DocumentContext, DocumentInitialProps } from "next/document"; 2 | 3 | class CustomDocument extends Document { 4 | static async getInitialProps( 5 | ctx: DocumentContext, 6 | ): Promise { 7 | const initialProps = await Document.getInitialProps(ctx); 8 | 9 | return initialProps; 10 | } 11 | } 12 | 13 | export default CustomDocument; 14 | -------------------------------------------------------------------------------- /example/pages/index.tsx: -------------------------------------------------------------------------------- 1 | export { NextRouteComponent as default } from "@refinedev/nextjs-router/legacy"; 2 | import { GetServerSideProps } from "next"; 3 | import { checkAuthentication } from "@refinedev/nextjs-router/legacy"; 4 | 5 | import authProvider from "../src/authProvider"; 6 | 7 | export const getServerSideProps: GetServerSideProps = async (context) => { 8 | const { isAuthenticated, ...props } = await checkAuthentication( 9 | authProvider, 10 | context, 11 | ); 12 | 13 | if (!isAuthenticated) { 14 | return props; 15 | } 16 | 17 | return { 18 | props: {}, 19 | }; 20 | }; 21 | -------------------------------------------------------------------------------- /example/public/icons/github-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/public/icons/linkedin-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/public/icons/nextjs-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /example/public/icons/pankod-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Dark 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /example/public/icons/twitter-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/public/icons/youtube-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/public/meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "refine-next", 3 | "plugins": [ 4 | { 5 | "name": "CSS / styled-jsx", 6 | "description": "Next.js comes with built-in support for CSS and styled-jsx. Styled-jsx is full, scoped and component-friendly CSS support for JSX (rendered on the server or the client).", 7 | "url": "https://github.com/vercel/styled-jsx" 8 | }, 9 | { 10 | "name": "ESLint", 11 | "description": "A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.", 12 | "url": "https://eslint.org/docs/user-guide/getting-started" 13 | } 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /example/src/authProvider.ts: -------------------------------------------------------------------------------- 1 | import { LegacyAuthProvider as AuthProvider, useLogout } from "@refinedev/core"; 2 | import { AuthHelper } from '@tspvivek/refine-directus'; 3 | import { directusClient } from './directusClient'; 4 | 5 | const directusAuthHelper = AuthHelper(directusClient); 6 | 7 | const authProvider: AuthProvider = { 8 | login: async ({ username, password }) => { 9 | const { access_token } = await directusAuthHelper.login(username, password); 10 | return access_token ? Promise.resolve("/posts") : Promise.reject(); 11 | }, 12 | logout: async () => { 13 | directusAuthHelper.logout(); 14 | await Promise.resolve(); 15 | }, 16 | 17 | checkError: () => { 18 | return Promise.resolve(); 19 | }, 20 | 21 | checkAuth: async () => { 22 | if (directusAuthHelper.getToken()) { 23 | return Promise.resolve(); 24 | } else { 25 | //return Promise.reject(); 26 | } 27 | }, 28 | getPermissions: () => Promise.resolve(), 29 | 30 | getUserIdentity: async () => { 31 | try { 32 | const data = await directusAuthHelper.me({ fields: [ '*.*' ] }); 33 | return Promise.resolve(data); 34 | } catch (e) { 35 | window.location.href = "/login"; 36 | return Promise.reject(); 37 | } 38 | } 39 | }; 40 | 41 | export default authProvider; 42 | -------------------------------------------------------------------------------- /example/src/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./posts"; 2 | -------------------------------------------------------------------------------- /example/src/components/posts/create.tsx: -------------------------------------------------------------------------------- 1 | import { useForm, useSelect, Create } from "@refinedev/antd"; 2 | import { Form, Select, Input, Upload } from "antd"; 3 | import { useApiUrl } from "@refinedev/core"; 4 | import { directusClient } from "src/directusClient"; 5 | import { ICategory, IPost } from "src/interfaces"; 6 | import { getValueProps, MediaConfig, mediaUploadMapper, useDirectusUpload } from "@tspvivek/refine-directus"; 7 | 8 | export const PostCreate: React.FC = () => { 9 | const { formProps, saveButtonProps } = useForm(); 10 | const apiUrl = useApiUrl(); 11 | 12 | const { selectProps: categorySelectProps } = useSelect({ 13 | resource: "categories", 14 | optionLabel: "name", 15 | optionValue: "id", 16 | 17 | pagination: { 18 | mode: "server", 19 | }, 20 | }); 21 | 22 | //List of media field and their config 23 | const mediaConfigList: MediaConfig[] = [ 24 | { name: "image", multiple: false, maxCount: 1, folder: "017b8c4c-48c0-4f5a-88af-98d36cd620fd", title: "PostImage" }, 25 | { name: "gallery", multiple: true, maxCount: 5, normalize: (id) => ({ directus_files_id: id }) }, 26 | ]; 27 | 28 | const getUploadProps = useDirectusUpload(mediaConfigList, directusClient); 29 | 30 | return ( 31 | 32 | { 36 | return formProps.onFinish && formProps.onFinish(mediaUploadMapper(values, mediaConfigList)); 37 | }} 38 | > 39 | 40 | 41 | 42 | 43 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 69 | getValueProps({ 70 | data, 71 | imageUrl: apiUrl, 72 | }) 73 | } 74 | noStyle 75 | > 76 | { 81 | return info; 82 | }} 83 | {...getUploadProps("image")} 84 | > 85 | Drag & drop a file in this area 86 | 87 | 88 | 89 | 90 | 91 | { 95 | return getValueProps({ 96 | data, 97 | imageUrl: apiUrl, 98 | getFileUrl: (item) => { 99 | return apiUrl + "assets/" + item.directus_files_id.id; 100 | }, 101 | getFileTitle: (item) => { 102 | return item.directus_files_id.title; 103 | }, 104 | }); 105 | }} 106 | noStyle 107 | > 108 | { 113 | return info; 114 | }} 115 | {...getUploadProps("gallery")} 116 | > 117 | Drag & drop a file in this area 118 | 119 | 120 | 121 | 122 | 123 | ); 124 | }; 125 | -------------------------------------------------------------------------------- /example/src/components/posts/edit.tsx: -------------------------------------------------------------------------------- 1 | import { useForm, useSelect, Edit } from "@refinedev/antd"; 2 | import { RcFile } from "antd/lib/upload/interface"; 3 | import { Form, Input, Select, Upload } from "antd"; 4 | import { useApiUrl, useDataProvider } from "@refinedev/core"; 5 | import { getValueProps, MediaConfig, mediaUploadMapper, useDirectusUpload } from "@tspvivek/refine-directus"; 6 | import { directusClient } from "src/directusClient"; 7 | import { ICategory, IPost } from "src/interfaces"; 8 | 9 | 10 | export const PostEdit: React.FC = () => { 11 | const { formProps, saveButtonProps, queryResult } = useForm({ meta: { fields: ['*', 'image.*', 'gallery.*.*'] } }); 12 | const apiUrl = useApiUrl(); 13 | 14 | const { selectProps: categorySelectProps } = useSelect({ 15 | resource: "categories", 16 | optionLabel: "name", 17 | optionValue: "id", 18 | 19 | pagination: { 20 | mode: "server" 21 | } 22 | }); 23 | 24 | //List of media field and their config 25 | const mediaConfigList: MediaConfig[] = [ 26 | { name: "image", multiple: false, maxCount: 1 }, 27 | { name: "gallery", multiple: true, maxCount: 5, normalize: (id) => ({ directus_files_id: id }) }, 28 | ]; 29 | 30 | const getUploadProps = useDirectusUpload(mediaConfigList, directusClient); 31 | 32 | return ( 33 | 34 | { 36 | return ( 37 | formProps.onFinish && 38 | formProps.onFinish(mediaUploadMapper(values, mediaConfigList)) 39 | ); 40 | }} 41 | > 42 | 43 | 44 | 45 | 46 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | getValueProps({ 72 | data, 73 | imageUrl: apiUrl 74 | })} 75 | noStyle 76 | > 77 | 78 | { return info }} 83 | {...getUploadProps("image")} 84 | > 85 | 86 | Drag & drop a file in this area 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | { 98 | return getValueProps({ 99 | data, 100 | imageUrl: apiUrl, 101 | getFileUrl: (item) => { return apiUrl + "assets/" + item.directus_files_id.id; }, 102 | getFileTitle: (item) => { return item.directus_files_id.title; }, 103 | }) 104 | }} 105 | noStyle 106 | > 107 | 108 | { return info }} 113 | {...getUploadProps("gallery")} 114 | > 115 | 116 | Drag & drop a file in this area 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | ); 126 | }; 127 | -------------------------------------------------------------------------------- /example/src/components/posts/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./list"; 2 | export * from "./edit"; 3 | export * from "./create"; 4 | export * from "./show"; 5 | -------------------------------------------------------------------------------- /example/src/components/posts/list.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | GetListResponse, 3 | useCustom, 4 | useDataProvider, 5 | useResourceSubscription, 6 | UseResourceSubscriptionProps, 7 | } from "@refinedev/core"; 8 | import { useTable, List, EditButton, ShowButton, DeleteButton } from "@refinedev/antd"; 9 | import { Table, Space, Avatar } from "antd"; 10 | import { IResourceComponentsProps } from "@refinedev/core"; 11 | import { IPost } from "../../interfaces"; 12 | import { useEffect } from "react"; 13 | import { directusClient } from "src/directusClient"; 14 | 15 | export const PostList: React.FC>> = ({ initialData }) => { 16 | const dataProvider = useDataProvider(); 17 | 18 | const { tableProps } = useTable({ 19 | syncWithLocation: false, 20 | }); 21 | 22 | //Sample useCustom hook 23 | /* 24 | const { refetch } = useCustom({ 25 | url: "/items/posts/2", 26 | method: "patch", 27 | config: { 28 | payload: { title:"Testing Custom 2"}, 29 | query: { fields: ['*', 'image.*', 'gallery.*.*'] } 30 | }, 31 | queryOptions: { 32 | enabled: true, 33 | }, 34 | }); 35 | */ 36 | 37 | //Sample useResourceSubscription hook 38 | useResourceSubscription({ 39 | resource: "posts", 40 | types: ["created"], 41 | enabled: true, 42 | channel:"posts_create", 43 | liveMode:"auto", 44 | onLiveEvent:(event)=> 45 | { 46 | console.log("OnLive", event); 47 | } 48 | }); 49 | 50 | return ( 51 | 52 | 53 | 58 | data ? ( 59 | 60 | ) : ( 61 | 62 | ) 63 | } 64 | /> 65 | 66 | 67 | 68 | 69 | title="Actions" 70 | dataIndex="actions" 71 | render={(_text, record): React.ReactNode => { 72 | return ( 73 | 74 | 75 | 76 | 77 | 78 | ); 79 | }} 80 | /> 81 | 82 | 83 | ); 84 | }; 85 | -------------------------------------------------------------------------------- /example/src/components/posts/show.tsx: -------------------------------------------------------------------------------- 1 | import { useOne, useShow } from "@refinedev/core"; 2 | import { Show } from "@refinedev/antd"; 3 | import { Typography, Tag } from "antd"; 4 | import { ICategory } from "src/interfaces"; 5 | 6 | const { Title, Text } = Typography; 7 | 8 | export const PostShow: React.FC = () => { 9 | const { queryResult } = useShow(); 10 | const { data, isLoading } = queryResult; 11 | const record = data?.data; 12 | 13 | const { data: categoryData } = useOne({ 14 | resource: "categories", 15 | id: record?.category || "", 16 | queryOptions: { 17 | enabled: !!record?.category, 18 | }, 19 | }); 20 | 21 | console.log(categoryData); 22 | 23 | return ( 24 | 25 | Title 26 | {record?.title} 27 | 28 | Status 29 | 30 | {record?.status} 31 | 32 | 33 | Category 34 | {categoryData?.data.name} 35 | 36 | ); 37 | }; 38 | -------------------------------------------------------------------------------- /example/src/directusClient.ts: -------------------------------------------------------------------------------- 1 | import { 2 | AuthenticationData, 3 | AuthenticationStorage, 4 | authentication, 5 | createDirectus, 6 | rest, 7 | realtime 8 | } from "@tspvivek/refine-directus"; 9 | 10 | export const API_URL = "https://king-prawn-app-l7w33.ondigitalocean.app/"; 11 | 12 | export const authLocalStorage = () => 13 | ({ 14 | get: async () => { 15 | const data = typeof window !== "undefined" && window.localStorage.getItem("directus_storage"); 16 | if (data) { 17 | return JSON.parse(data); 18 | } 19 | return null; 20 | }, 21 | 22 | set: async (value: AuthenticationData | null) => { 23 | if (!value) { 24 | return typeof window !== "undefined" && window.localStorage.removeItem("directus_storage"); 25 | } 26 | return ( 27 | typeof window !== "undefined" && window.localStorage.setItem("directus_storage", JSON.stringify(value)) 28 | ); 29 | }, 30 | } as AuthenticationStorage); 31 | 32 | export const directusClient = createDirectus(API_URL) 33 | .with(authentication("json", { storage: authLocalStorage() })) 34 | .with(rest()) 35 | .with( 36 | realtime({ 37 | authMode: "handshake", 38 | }) 39 | ); 40 | -------------------------------------------------------------------------------- /example/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export interface IPost { 2 | id: string; 3 | title: string; 4 | status: "published" | "draft" | "rejected"; 5 | createdAt: string; 6 | category: ICategory; 7 | } 8 | 9 | export interface ICategory { 10 | id: string; 11 | name: string; 12 | } 13 | -------------------------------------------------------------------------------- /example/src/styles/global.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | margin: 0; 4 | padding: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, 6 | "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, 7 | "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", 8 | "Noto Color Emoji"; 9 | } 10 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "strict": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "noEmit": true, 14 | "esModuleInterop": true, 15 | "module": "esnext", 16 | "moduleResolution": "node", 17 | "resolveJsonModule": true, 18 | "isolatedModules": true, 19 | "jsx": "preserve", 20 | "baseUrl": ".", 21 | "paths": { 22 | "@components/*": [ 23 | "src/components/*" 24 | ], 25 | "@components": [ 26 | "src/components" 27 | ], 28 | "@styles/*": [ 29 | "src/styles/*" 30 | ], 31 | "@styles": [ 32 | "src/styles" 33 | ], 34 | "@public/*": [ 35 | "public/*" 36 | ], 37 | "@public": [ 38 | "public" 39 | ] 40 | }, 41 | "incremental": true 42 | }, 43 | "include": [ 44 | "next-env.d.ts", 45 | "**/*.ts", 46 | "**/*.tsx" 47 | ], 48 | "exclude": [ 49 | "node_modules" 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /package/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /package/.npmrc: -------------------------------------------------------------------------------- 1 | registry=https://registry.npmjs.org/ -------------------------------------------------------------------------------- /package/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 tspvivek 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. 22 | -------------------------------------------------------------------------------- /package/README.md: -------------------------------------------------------------------------------- 1 | # refine-directus 2 | [**Directus**](https://directus.io/) dataprovider package for refine. 3 | 4 | ## About 5 | 6 | [**refine**](https://refine.dev/) offers lots of out-of-the box functionality for rapid development, without compromising extreme customizability. Use-cases include, but are not limited to *admin panels*, *B2B applications* and *dashboards*. 7 | 8 | ## Documentation 9 | 10 | For more detailed information and usage, refer to the [refine data provider documentation](https://refine.dev/docs/core/providers/data-provider). 11 | 12 | ## Install 13 | 14 | ``` 15 | npm install @tspvivek/refine-directus 16 | ``` 17 | 18 | ## Example 19 | Use below login details in example 20 | username: demo@demo.com 21 | password: 123456 22 | url: https://refine.dev/docs/examples/data-provider/directus/ 23 | 24 | ## Notes 25 | - To enable perform archive instead of delete with [**DeleteButton**](https://refine.dev/docs/ui-frameworks/antd/components/buttons/delete-button/#api-reference) pass metaData={deleteType:'archive'} in DeleteButton 26 | 27 | - To get list of rows from collection without status field pass params noStatus=true in meta. 28 | 29 | - To upload file to a specific folder add folder="folder_id" in MediaConfigList 30 | 31 | ## Change Log 32 | #### 1.0.29 33 | - Updated library version to directus sdk v12. 34 | - Added support for folders and title in file upload. 35 | - Added support for collections without status field. 36 | 37 | #### 1.0.23 38 | - Fixed missing total count in list. 39 | 40 | #### 1.0.22 41 | - update library version to directus sdk v11 42 | - update refine version to v4 43 | - added support for liveprovider using directus realtime api 44 | 45 | 46 | -------------------------------------------------------------------------------- /package/dist/dataProvider.d.ts: -------------------------------------------------------------------------------- 1 | import { DataProvider } from "@refinedev/core"; 2 | export declare const dataProvider: (directusClient: any) => DataProvider; 3 | -------------------------------------------------------------------------------- /package/dist/helpers/auth.d.ts: -------------------------------------------------------------------------------- 1 | export declare const AuthHelper: (directusClient: any) => { 2 | login: (identifier: string, password: string, mode?: string) => Promise; 3 | me: (metaData: {}) => Promise; 4 | setToken: (token: string) => Promise; 5 | getToken: () => any; 6 | logout: () => Promise; 7 | }; 8 | -------------------------------------------------------------------------------- /package/dist/helpers/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from "./auth"; 2 | export * from "./utility"; 3 | -------------------------------------------------------------------------------- /package/dist/helpers/utility.d.ts: -------------------------------------------------------------------------------- 1 | export interface MediaConfig { 2 | maxCount: number; 3 | name: string; 4 | multiple: boolean; 5 | normalize?: (item: any) => any; 6 | title?: string; 7 | folder?: string; 8 | } 9 | export interface ValuePropsConfig { 10 | data: any; 11 | imageUrl: string; 12 | getFileUrl?: (item: any) => any; 13 | getFileTitle?: (item: any) => any; 14 | } 15 | export declare const getValueProps: (valueProps: ValuePropsConfig) => { 16 | file: any; 17 | fileList: any; 18 | } | { 19 | fileList: never[]; 20 | }; 21 | export declare const useDirectusUpload: (mediaConfigList: MediaConfig[], directusClient: any) => (fieldName: string) => { 22 | uploadedFileIds: string[]; 23 | beforeUpload: (_file: any, files: any[]) => boolean; 24 | fileList: any[]; 25 | maxCount: number; 26 | customRequest: ({ file, onError, onSuccess }: any) => Promise; 27 | }; 28 | export declare const mediaUploadMapper: (params: any, mediaConfigList: MediaConfig[]) => any; 29 | -------------------------------------------------------------------------------- /package/dist/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from "./dataProvider"; 2 | export * from "./liveProvider"; 3 | export * from "./helpers"; 4 | export * from "@directus/sdk"; 5 | -------------------------------------------------------------------------------- /package/dist/index.js: -------------------------------------------------------------------------------- 1 | 2 | 'use strict' 3 | 4 | if (process.env.NODE_ENV === 'production') { 5 | module.exports = require('./refine-directus.cjs.production.min.js') 6 | } else { 7 | module.exports = require('./refine-directus.cjs.development.js') 8 | } 9 | -------------------------------------------------------------------------------- /package/dist/liveProvider.d.ts: -------------------------------------------------------------------------------- 1 | import { LiveProvider } from "@refinedev/core"; 2 | export declare const liveProvider: (directusClient: any, options: {}) => LiveProvider; 3 | -------------------------------------------------------------------------------- /package/dist/refine-directus.cjs.production.min.js: -------------------------------------------------------------------------------- 1 | "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("@directus/sdk"),r=(e=require("pluralize"))&&"object"==typeof e&&"default"in e?e.default:e,n=require("react");function a(e){var t,r,n,a=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,n=Symbol.iterator);a--;){if(r&&null!=(t=e[r]))return t.call(e);if(n&&null!=(t=e[n]))return new o(t.call(e));r="@@asyncIterator",n="@@iterator"}throw new TypeError("Object is not async iterable")}function o(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return(o=function(e){this.s=e,this.n=e.next}).prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var r=this.s.return;return void 0===r?Promise.resolve({value:e,done:!0}):t(r.apply(this.s,arguments))},throw:function(e){var r=this.s.return;return void 0===r?Promise.reject(e):t(r.apply(this.s,arguments))}},new o(e)}function i(){i=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function l(e,t,r,a){var o=Object.create((t&&t.prototype instanceof d?t:d).prototype),i=new q(a||[]);return n(o,"_invoke",{value:_(e,r,i)}),o}function p(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var f={};function d(){}function h(){}function v(){}var y={};c(y,o,(function(){return this}));var g=Object.getPrototypeOf,m=g&&g(g(O([])));m&&m!==t&&r.call(m,o)&&(y=m);var w=v.prototype=d.prototype=Object.create(y);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function x(e,t){var a;n(this,"_invoke",{value:function(n,o){function i(){return new t((function(a,i){!function n(a,o,i,s){var u=p(e[a],e,o);if("throw"!==u.type){var c=u.arg,l=c.value;return l&&"object"==typeof l&&r.call(l,"__await")?t.resolve(l.__await).then((function(e){n("next",e,i,s)}),(function(e){n("throw",e,i,s)})):t.resolve(l).then((function(e){c.value=e,i(c)}),(function(e){return n("throw",e,i,s)}))}s(u.arg)}(n,o,a,i)}))}return a=a?a.then(i,i):i()}})}function _(e,t,r){var n="suspendedStart";return function(a,o){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw o;return{value:void 0,done:!0}}for(r.method=a,r.arg=o;;){var i=r.delegate;if(i){var s=k(i,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=p(e,t,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}function k(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,k(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var a=p(n,e.iterator,t.arg);if("throw"===a.type)return t.method="throw",t.arg=a.arg,t.delegate=null,f;var o=a.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function L(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function q(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function O(e){if(e||""===e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,a=function t(){for(;++n=0;--a){var o=this.tryEntries[a],i=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var s=r.call(o,"catchLoc"),u=r.call(o,"finallyLoc");if(s&&u){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),L(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;L(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:O(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function s(e,t,r,n,a,o,i){try{var s=e[o](i),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,a)}function u(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){s(o,n,a,i,u,"next",e)}function u(e){s(o,n,a,i,u,"throw",e)}i(void 0)}))}}function c(){return(c=Object.assign?Object.assign.bind():function(e){for(var t=1;t0&&(_=y.join(",")),_&&(x.sort=_),r.prev=15,L=v(a,"read",!1),r.next=19,e.request(L?L(c({},x,{fields:w})):t.readItems(a,c({},x,{fields:w})));case 19:if(q=r.sent,-1!=h&&"off"!=(null==o?void 0:o.mode)){r.next=22;break}return r.abrupt("return",{data:q,total:q.length});case 22:return delete x.page,O=null!=l&&l.aggregateField?l.aggregateField:"id",r.next=26,e.request(t.aggregate(a,{query:x,aggregate:{countDistinct:O}}));case 26:return r.abrupt("return",{data:q,total:null!=(k=parseInt(null==(E=r.sent[0])||null==(E=E.countDistinct)?void 0:E[O]))?k:0});case 30:throw r.prev=30,r.t0=r.catch(15),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 34:case"end":return r.stop()}}),r,null,[[15,30]])}))),function(e){return g.apply(this,arguments)}),getMany:(y=u(i().mark((function r(n){var a,o,s,u,l,p,f,d,h;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return o=n.resource,s=n.ids,l=null!=(u=n.meta)&&u.fields?[].concat(u.fields):["*"],p=null!=u&&u.aggregateField?u.aggregateField:"id",null==u||delete u.fields,null==u||delete u.aggregateField,f=c({filter:(a={},a[p]={_in:s},a)},u),r.prev=6,d=v(o,"read",!1),r.next=10,e.request(d?d(c({},f,{fields:l})):t.readItems(o,c({},f,{fields:l})));case 10:return r.abrupt("return",{data:h=r.sent,total:h.length});case 14:throw r.prev=14,r.t0=r.catch(6),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 18:case"end":return r.stop()}}),r,null,[[6,14]])}))),function(e){return y.apply(this,arguments)}),create:(h=u(i().mark((function r(n){var a,o,s;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=n.resource,o=c({},n.variables,n.meta),r.prev=2,s=v(a,"create",!0),r.next=6,e.request(s?s(o):t.createItem(a,o));case 6:return r.abrupt("return",{data:r.sent});case 10:throw r.prev=10,r.t0=r.catch(2),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 14:case"end":return r.stop()}}),r,null,[[2,10]])}))),function(e){return h.apply(this,arguments)}),update:(d=u(i().mark((function r(n){var a,o,s,u;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=n.resource,o=n.id,s=c({},n.variables,n.meta),r.prev=2,u=v(a,"update",!0),r.next=6,e.request(u?u(o,s):t.updateItem(a,o,s));case 6:return r.abrupt("return",{data:r.sent});case 10:throw r.prev=10,r.t0=r.catch(2),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 14:case"end":return r.stop()}}),r,null,[[2,10]])}))),function(e){return d.apply(this,arguments)}),updateMany:(l=u(i().mark((function r(n){var a,o,s,u;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=n.resource,o=n.ids,s=c({},n.variables,n.meta),r.prev=3,u=v(a,"update",!1),r.next=7,e.request(u?u(o,s):t.updateItems(a,o,s));case 7:return r.abrupt("return",{data:r.sent});case 11:throw r.prev=11,r.t0=r.catch(3),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 15:case"end":return r.stop()}}),r,null,[[3,11]])}))),function(e){return l.apply(this,arguments)}),createMany:(s=u(i().mark((function r(n){var a,o,s;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=n.resource,o=c({},n.variables,n.meta),r.prev=2,s=v(a,"create",!1),r.next=6,e.request(s?s(o):t.createItems(a,o));case 6:return r.abrupt("return",{data:r.sent});case 10:throw r.prev=10,r.t0=r.catch(2),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 14:case"end":return r.stop()}}),r,null,[[2,10]])}))),function(e){return s.apply(this,arguments)}),getOne:(o=u(i().mark((function r(n){var a,o,s,u;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return a=n.resource,o=n.id,s=c({},n.meta),r.prev=2,u=v(a,"read",!0),r.next=6,e.request(u?u(o,s):t.readItem(a,o,s));case 6:return r.abrupt("return",{data:r.sent});case 10:throw r.prev=10,r.t0=r.catch(2),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 14:case"end":return r.stop()}}),r,null,[[2,10]])}))),function(e){return o.apply(this,arguments)}),deleteOne:(a=u(i().mark((function r(n){var a,o,s,u,l,p;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(a=n.resource,o=n.id,s=n.meta,r.prev=1,!s||"archive"!==s.deleteType){r.next=11;break}return u=c({status:"archived"},s),l=v(a,"update",!0),r.next=7,e.request(l?l(o,u):t.updateItem(a,o,u));case 7:return r.abrupt("return",{data:r.sent});case 11:return p=v(a,"delete",!0),r.next=14,e.request(p?p(o):t.deleteItem(a,o));case 14:return r.abrupt("return",{data:r.sent});case 16:r.next=22;break;case 18:throw r.prev=18,r.t0=r.catch(1),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 22:case"end":return r.stop()}}),r,null,[[1,18]])}))),function(e){return a.apply(this,arguments)}),deleteMany:(n=u(i().mark((function r(n){var a,o,s,u,l,p,f;return i().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(a=n.resource,o=n.ids,s=n.meta,r.prev=1,u=o,!s||"archive"!==s.deleteType){r.next=12;break}return l=c({status:"archived"},s),p=v(a,"update",!1),r.next=8,e.request(p?p(u,l):t.updateItems(a,u,l));case 8:return r.abrupt("return",{data:r.sent});case 12:return f=v(a,"delete",!1),r.next=15,e.request(f?f(u):t.deleteItems(a,u));case 15:return r.abrupt("return",{data:r.sent.data});case 17:r.next=23;break;case 19:throw r.prev=19,r.t0=r.catch(1),console.log(r.t0),new Error(r.t0.errors&&r.t0.errors[0]&&r.t0.errors[0].message);case 23:case"end":return r.stop()}}),r,null,[[1,19]])}))),function(e){return n.apply(this,arguments)}),getApiUrl:function(){return e.url},custom:(r=u(i().mark((function t(r){var n,a,o,s;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n=r.url,a=r.payload,o=r.query,t.t0=r.method,t.next="put"===t.t0?4:"post"===t.t0?8:"patch"===t.t0?12:"delete"===t.t0?16:20;break;case 4:return t.next=6,e.request((function(){return{path:n,method:"PUT",body:JSON.stringify(a),params:o}}));case 6:return s=t.sent,t.abrupt("break",24);case 8:return t.next=10,e.request((function(){return{path:n,method:"POST",body:JSON.stringify(a),params:o}}));case 10:return s=t.sent,t.abrupt("break",24);case 12:return t.next=14,e.request((function(){return{path:n,method:"PATCH",body:JSON.stringify(a),params:o}}));case 14:return s=t.sent,t.abrupt("break",24);case 16:return t.next=18,e.request((function(){return{path:n,method:"DELETE",params:o}}));case 18:return s=t.sent,t.abrupt("break",24);case 20:return t.next=22,e.request((function(){return{path:n,method:"GET",params:o}}));case 22:return s=t.sent,t.abrupt("break",24);case 24:return t.abrupt("return",{data:s});case 25:case"end":return t.stop()}}),t)}))),function(e){return r.apply(this,arguments)})};var r,n,a,o,s,l,d,h,y,g},exports.getValueProps=function(e){var t,r=e.data,n=e.imageUrl,a=e.getFileUrl,o=e.getFileTitle;return r?{file:r.file,fileList:null!=(t=r.fileList)?t:(Array.isArray(r)?r:[r]).map((function(e){return{name:o?o(e):e.title,url:a?a(e):n+"assets/"+e.id,percent:e.percent,size:e.filesize,status:"done",type:e.type,uid:e.id}}))}:{fileList:[]}},exports.liveProvider=function(e,t){var r,n={};return{subscribe:function(t){var r=t.types,o=t.params,s=t.callback,l=t.channel||Date.now()+"_"+Math.random().toString(36).substring(2,15),p={uid:l};if(null!=o&&o.query&&(p=c({},p,{query:o.query})),(null==r?void 0:r.length)>1)throw new Error("Directus does not support multiple event types in a single subscription. Please create multiple subscriptions for each event type or do not pass any event type to subscribe to all events.");if(null!=r&&r.length&&y[r[0]]&&(p=c({},p,{event:y[r[0]]})),null!=o&&o.resource)return u(i().mark((function t(){var r,c,f;return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.subscribe(null==o?void 0:o.resource,p);case 2:c=(r=t.sent).subscription,f=r.unsubscribe,function(){var e=u(i().mark((function e(t){var r,n,o,u,c;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=!1,n=!1,e.prev=2,u=a(t);case 4:return e.next=6,u.next();case 6:if(!(r=!(c=e.sent).done)){e.next=12;break}s(c.value);case 9:r=!1,e.next=4;break;case 12:e.next=18;break;case 14:e.prev=14,e.t0=e.catch(2),n=!0,o=e.t0;case 18:if(e.prev=18,e.prev=19,!r||null==u.return){e.next=23;break}return e.next=23,u.return();case 23:if(e.prev=23,!n){e.next=26;break}throw o;case 26:return e.finish(23);case 27:return e.finish(18);case 28:case"end":return e.stop()}}),e,null,[[2,14,18,28],[19,,23,27]])})));return function(t){return e.apply(this,arguments)}}()(c),n[l]=f;case 8:case"end":return t.stop()}}),t)})))(),l;throw new Error("resource is required")},unsubscribe:(r=u(i().mark((function e(t){return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t&&n[t]&&(n[t](),delete n[t]);case 1:case"end":return e.stop()}}),e)}))),function(e){return r.apply(this,arguments)})}},exports.mediaUploadMapper=function(e,t){for(var r=function(){var r=a[n];if(e[r]){var o=e[r].fileList;if(Array.isArray(o)){for(var i=t.filter((function(e){return e.name===r}))[0],s=[],u=0,c=Object.keys(o);ur){var o=n+a-r;t.splice(o-2*o)}return c([].concat(s,t)),!0}(0,t,o.maxCount)},fileList:s,maxCount:o.maxCount,customRequest:function(){var e=u(i().mark((function e(n){var a,s,u,c,l;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=n.file,s=n.onError,u=n.onSuccess,e.prev=1,c=new FormData,null!=o&&o.title&&c.append("title",o.title),null!=o&&o.folder&&c.append("folder",o.folder),c.append("file",a),e.next=8,r.request(t.uploadFiles(c));case 8:l=e.sent,null==u||u({data:l},new XMLHttpRequest),e.next=15;break;case 12:e.prev=12,e.t0=e.catch(1),null==s||s(new Error("Upload Error"));case 15:case"end":return e.stop()}}),e,null,[[1,12]])})));return function(t){return e.apply(this,arguments)}}()}}}; 2 | //# sourceMappingURL=refine-directus.cjs.production.min.js.map 3 | -------------------------------------------------------------------------------- /package/dist/refine-directus.cjs.production.min.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"refine-directus.cjs.production.min.js","sources":["../src/dataProvider.ts","../src/liveProvider.ts","../src/helpers/auth.ts","../src/helpers/utility.ts"],"sourcesContent":["// @ts-nocheck\nimport * as SDK from \"@directus/sdk\";\nimport { ConditionalFilter, CrudFilters, CrudSorting, DataProvider, LogicalFilter } from \"@refinedev/core\";\nimport pluralize from \"pluralize\";\n\nconst operators = {\n eq: \"_eq\",\n ne: \"_neq\",\n lt: \"_lt\",\n gt: \"_gt\",\n lte: \"_lte\",\n gte: \"_gte\",\n in: \"_in\",\n nin: \"_nin\",\n contains: \"_contains\",\n containss: \"_icontains\",\n ncontains: \"_ncontains\",\n ncontainss: undefined,\n null: \"_null\",\n nnull: \"_nnull\",\n between: \"_between\",\n nbetween: \"_nbetween\",\n startswith: \"_starts_with\",\n startswiths: \"_istarts_with\",\n nstartswith: \"_nstarts_with\",\n nstartswiths: \"_nistarts_with\",\n endswith: \"_ends_with\",\n endswiths: \"_iends_with\",\n nendswith: \"_nends_with\",\n nendswiths: \"_niends_with\",\n or: \"_or\",\n and: \"_and\",\n intersects: \"_intersects\",\n nintersects: \"_nintersects\",\n intersectsbbox: \"_intersects_bbox\",\n nintersectsbbox: \"_nintersects_bbox\",\n};\n\nconst strToObj = (str: string, val: any) => {\n var i: number,\n obj = {},\n strarr = str.split(\".\");\n var x: any = obj;\n for (i = 0; i < strarr.length - 1; i++) {\n x = x[strarr[i]] = {};\n }\n x[strarr[i]] = val;\n return obj;\n};\n\nconst generateSort = (sort?: CrudSorting) => {\n const _sort: string[] = [];\n\n if (sort) {\n sort.map((item) => {\n if (item.order) {\n item.order === \"desc\" ? _sort.push(`-${item.field}`) : _sort.push(`${item.field}`);\n }\n });\n }\n\n return _sort;\n};\n\nconst generateFilter = (filters?: CrudFilters) => {\n const queryFilters: { [key: string]: any } = {};\n let search: string = \"\";\n if (filters) {\n queryFilters[\"_and\"] = [];\n filters.map((filter) => {\n if (filter.operator !== \"or\" && filter.operator !== \"and\" && \"field\" in filter) {\n const { field, operator, value } = filter;\n\n if (value) {\n if (field === \"search\") {\n search = value;\n } else {\n let logicalFilter = generateLogicalFilter(filter);\n logicalFilter && queryFilters[\"_and\"].push(logicalFilter);\n }\n }\n } else {\n let conditionalFilter = generateConditionalFilter(filter);\n conditionalFilter && queryFilters[\"_and\"].push(conditionalFilter);\n }\n });\n }\n\n return { search: search, filters: queryFilters };\n};\n\n//Function to handle logical filters\nconst generateLogicalFilter = (item?: LogicalFilter) => {\n if (item === undefined) return null;\n\n const { field, operator, value } = item;\n const directusOperator = operators[operator];\n let queryField = `${field}.${directusOperator}`;\n let filterObj = strToObj(queryField, value);\n\n return filterObj;\n};\n\n//Function to handle conditional filters\nconst generateConditionalFilter = (item?: ConditionalFilter) => {\n if (item === undefined) return null;\n\n const { operator, value } = item;\n const directusOperator = operators[operator];\n\n const conditionalFilters: { [key: string]: any } = {};\n conditionalFilters[directusOperator] = [];\n\n value.map((item) => {\n if (\"field\" in item) {\n let logicalFilter = generateLogicalFilter(item);\n logicalFilter && conditionalFilters[directusOperator].push(logicalFilter);\n } else {\n let conditionalFilter = generateConditionalFilter(item);\n conditionalFilter && conditionalFilters[directusOperator].push(conditionalFilter);\n }\n });\n\n return conditionalFilters;\n};\n\n//Function to return SDK function based on resource and type\nconst getSDKFunction = (resource: string, type: string, singular: boolean = false) => {\n //If resource is directus_users then function is readUsers, createUsers, etc.\n //If resource is directus_files then function is readFiles, createFiles, etc.\n //If resource is directus_roles then function is readRoles, createRoles, etc.\n\n //if resource has directus_ then remove it\n\n let functionName = null;\n\n if (resource.includes(\"directus_\")) {\n resource = resource.replace(\"directus_\", \"\");\n } else {\n return null;\n }\n\n if (singular) {\n functionName = `${type}${resource.charAt(0).toUpperCase() + resource.slice(1)}`;\n //Remove s from end of function name\n functionName = pluralize.singular(functionName);\n } else {\n functionName = `${type}${resource.charAt(0).toUpperCase() + resource.slice(1)}`;\n functionName = pluralize.plural(functionName);\n }\n\n //Get SDK function\n const sdkFunction = SDK[functionName];\n\n return sdkFunction as Function;\n};\n\nexport const dataProvider = (directusClient: any): DataProvider => ({\n getList: async ({ resource, pagination, filters, sorters, meta }) => {\n const current = pagination?.current || 1;\n const pageSize = pagination?.pageSize || 50;\n\n const _sort = generateSort(sorters);\n const paramsFilters = generateFilter(filters);\n\n let status: any = { status: { _neq: \"archived\" } };\n\n //Assign copy of fields\n let fields: any = meta?.fields ? [...meta.fields] : [\"*\"];\n\n //Delete fields from meta\n delete meta?.fields;\n\n if (meta?.archived === true || meta?.noStatus == true) {\n status = {};\n }\n\n let search = {};\n if (paramsFilters.search) {\n search = { search: paramsFilters.search };\n }\n\n let params: any = {\n ...search,\n filter: {\n ...paramsFilters.filters,\n ...status,\n },\n page: current,\n limit: pageSize,\n ...meta,\n };\n\n let sortString: any = null;\n if (sorters && sorters.length > 0) {\n sortString = _sort.join(\",\");\n }\n\n if (sortString) {\n params[\"sort\"] = sortString;\n }\n\n try {\n const sdkFunction = getSDKFunction(resource, \"read\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction({ ...params, fields }) : SDK.readItems(resource, { ...params, fields })\n );\n\n if (pageSize == -1 || pagination?.mode == \"off\") {\n return {\n data: response,\n total: response.length,\n };\n }\n\n delete params[\"page\"];\n\n const aggregateField = meta?.aggregateField ? meta.aggregateField : \"id\";\n\n const total = await directusClient.request(\n SDK.aggregate(resource, {\n query: params,\n aggregate: {\n countDistinct: aggregateField,\n },\n })\n );\n\n return {\n data: response,\n total: parseInt(total[0]?.countDistinct?.[aggregateField]) ?? 0,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n getMany: async ({ resource, ids, meta }) => {\n let fields: any = meta?.fields ? [...meta.fields] : [\"*\"];\n let aggregateField = meta?.aggregateField ? meta.aggregateField : \"id\";\n\n //Delete fields from meta\n delete meta?.fields;\n delete meta?.aggregateField;\n\n let params: any = {\n filter: {\n [aggregateField]: { _in: ids },\n },\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"read\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction({ ...params, fields }) : SDK.readItems(resource, { ...params, fields })\n );\n\n return {\n data: response,\n total: response.length,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n create: async ({ resource, variables, meta }) => {\n let params: any = {\n ...variables,\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"create\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(params) : SDK.createItem(resource, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n update: async ({ resource, id, variables, meta }) => {\n let params: any = {\n ...variables,\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"update\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(id, params) : SDK.updateItem(resource, id, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n updateMany: async ({ resource, ids, variables, meta }) => {\n let idsFormatted: any = ids;\n\n let params: any = {\n ...variables,\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"update\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(idsFormatted, params) : SDK.updateItems(resource, idsFormatted, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n createMany: async ({ resource, variables, meta }) => {\n let params: any = {\n ...variables,\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"create\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(params) : SDK.createItems(resource, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n getOne: async ({ resource, id, meta }) => {\n let params: any = {\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"read\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(id, params) : SDK.readItem(resource, id, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n deleteOne: async ({ resource, id, meta }) => {\n try {\n if (meta && meta.deleteType === \"archive\") {\n let params: any = {\n status: \"archived\",\n ...meta,\n };\n\n const sdkFunction = getSDKFunction(resource, \"update\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(id, params) : SDK.updateItem(resource, id, params)\n );\n\n return {\n data: response,\n };\n } else {\n const sdkFunction = getSDKFunction(resource, \"delete\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(id) : SDK.deleteItem(resource, id)\n );\n\n return {\n data: response,\n };\n }\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n deleteMany: async ({ resource, ids, meta }) => {\n try {\n let idsFormatted: any = ids;\n\n if (meta && meta.deleteType === \"archive\") {\n let params: any = {\n status: \"archived\",\n ...meta,\n };\n\n const sdkFunction = getSDKFunction(resource, \"update\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(idsFormatted, params) : SDK.updateItems(resource, idsFormatted, params)\n );\n\n return {\n data: response,\n };\n } else {\n const sdkFunction = getSDKFunction(resource, \"delete\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(idsFormatted) : SDK.deleteItems(resource, idsFormatted)\n );\n\n return {\n data: response.data,\n };\n }\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n getApiUrl: () => {\n const url: any = directusClient.url;\n return url;\n },\n\n custom: async ({ url, method, filters, sorters, payload, query, headers }) => {\n let response: any;\n switch (method) {\n case \"put\":\n response = await directusClient.request(() => ({\n path: url,\n method: \"PUT\",\n body: JSON.stringify(payload),\n params: query as any,\n }));\n\n break;\n case \"post\":\n response = await directusClient.request(() => ({\n path: url,\n method: \"POST\",\n body: JSON.stringify(payload),\n params: query as any,\n }));\n break;\n case \"patch\":\n response = await directusClient.request(() => ({\n path: url,\n method: \"PATCH\",\n body: JSON.stringify(payload),\n params: query as any,\n }));\n break;\n case \"delete\":\n response = await directusClient.request(() => ({\n path: url,\n method: \"DELETE\",\n params: query as any,\n }));\n break;\n default:\n response = await directusClient.request(() => ({\n path: url,\n method: \"GET\",\n params: query as any,\n }));\n break;\n }\n\n return {\n data: response,\n };\n },\n});\n","import { LiveProvider } from \"@refinedev/core\";\n\nconst eventsMap: any = {\n created: \"create\",\n updated: \"update\",\n deleted: \"delete\",\n};\n\nexport const liveProvider = (directusClient: any, options: {}): LiveProvider => {\n let openConnections: any = {};\n return {\n subscribe: ({ channel, types, params, callback }) => {\n let connectionId = channel\n ? channel\n : Date.now() +\n \"_\" +\n Math.random()\n .toString(36)\n .substring(2, 15);\n\n let options: any = { uid: connectionId };\n\n if (params?.query) {\n options = { ...options, query: params.query };\n }\n\n if (types?.length > 1) {\n throw new Error(\n \"Directus does not support multiple event types in a single subscription. Please create multiple subscriptions for each event type or do not pass any event type to subscribe to all events.\"\n );\n }\n\n if (types?.length && eventsMap[types[0]]) {\n options = { ...options, event: eventsMap[types[0]] };\n }\n\n if (params?.resource) {\n (async () => {\n const { subscription, unsubscribe } = await directusClient.subscribe(params?.resource, options);\n\n const asyncGenerator = async (subscription: any) => {\n for await (const item of subscription) {\n // this loop wil await new subscription events\n callback(item);\n }\n };\n\n asyncGenerator(subscription); // create a generator\n\n openConnections[connectionId] = unsubscribe;\n })();\n\n return connectionId;\n } else throw new Error(\"resource is required\");\n },\n\n unsubscribe: async (unsubscribe) => {\n if (unsubscribe && openConnections[unsubscribe]) {\n openConnections[unsubscribe]();\n delete openConnections[unsubscribe];\n }\n },\n };\n};\n","//@ts-nocheck\nimport { authentication, createDirectus, readMe, rest, staticToken } from \"@directus/sdk\";\n\nexport const AuthHelper = (directusClient: any) => {\n return {\n login: async (identifier: string, password: string, mode: string = \"json\") => {\n let response = await directusClient.login(identifier, password, { mode });\n\n return response;\n },\n me: async (metaData: {}) => {\n let me = await directusClient.request(readMe(metaData));\n return me;\n },\n setToken: async (token: string) => {\n await directusClient.with(staticToken(token));\n },\n getToken: () => {\n return directusClient.getToken();\n },\n logout: async () => {\n return await directusClient.logout();\n },\n };\n};\n","//@ts-nocheck\nimport { useState } from \"react\";\nimport { uploadFiles } from \"@directus/sdk\";\n\nexport interface MediaConfig {\n maxCount: number;\n name: string;\n multiple: boolean;\n normalize?: (item: any) => any;\n title?: string;\n folder?: string;\n}\n\nexport interface ValuePropsConfig {\n data: any;\n imageUrl: string;\n getFileUrl?: (item: any) => any;\n getFileTitle?: (item: any) => any;\n}\n\nexport const getValueProps = (valueProps: ValuePropsConfig) => {\n const { data, imageUrl, getFileUrl, getFileTitle } = valueProps;\n\n if (!data) {\n return { fileList: [] };\n }\n\n const files = {\n file: data.file,\n fileList:\n data.fileList ??\n (Array.isArray(data) ? data : [data]).map((item: any) => {\n const file: any = {\n name: getFileTitle ? getFileTitle(item) : item.title,\n url: getFileUrl ? getFileUrl(item) : `${imageUrl}assets/${item.id}`,\n percent: item.percent,\n size: item.filesize,\n status: \"done\",\n type: item.type,\n uid: item.id,\n };\n\n return file;\n }),\n };\n\n return files;\n};\n\nexport const useDirectusUpload = (mediaConfigList: MediaConfig[], directusClient: any) => {\n const [uploadedFileIds] = useState([]);\n const [fileList, setFileList] = useState([]);\n\n const beforeUpload = (_file: any, files: any[], maxCount: number): boolean => {\n const totalFiles = fileList.length;\n const filesCount = files.length;\n\n if (totalFiles + filesCount > maxCount) {\n const excessFileCount = totalFiles + filesCount - maxCount;\n // convert negative\n const deleteItemCount = excessFileCount - excessFileCount * 2;\n files.splice(deleteItemCount);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setFileList([...fileList, ...files]);\n\n return true;\n };\n\n const getUploadProps = (fieldName: string) => {\n const mediaConfig = mediaConfigList.filter((config: any) => config.name === fieldName)[0];\n\n const customRequest = async ({ file, onError, onSuccess }: any) => {\n try {\n const form = new FormData();\n if (mediaConfig?.title) {\n form.append(\"title\", mediaConfig.title);\n }\n if (mediaConfig?.folder) {\n form.append(\"folder\", mediaConfig.folder);\n }\n form.append(\"file\", file);\n\n const data = await directusClient.request(uploadFiles(form));\n onSuccess?.({ data }, new XMLHttpRequest());\n } catch (error) {\n onError?.(new Error(\"Upload Error\"));\n }\n };\n\n return {\n uploadedFileIds,\n beforeUpload: (_file: any, files: any[]) => beforeUpload(_file, files, mediaConfig.maxCount),\n fileList,\n maxCount: mediaConfig.maxCount,\n customRequest,\n };\n };\n\n return getUploadProps;\n};\n\nexport const mediaUploadMapper = (params: any, mediaConfigList: MediaConfig[]) => {\n for (const item of Object.keys(params)) {\n if (params[item]) {\n const param = params[item].fileList;\n const isMediaField = Array.isArray(param);\n if (isMediaField) {\n const mediaConfig = mediaConfigList.filter((config: any) => config.name === item)[0];\n const ids = [];\n for (const key of Object.keys(param)) {\n if (param[key].response) {\n if (mediaConfig.normalize) {\n ids.push(mediaConfig.normalize(param[key].response.data.id));\n } else {\n ids.push(param[key].response.data.id);\n }\n } else {\n ids.push(param[key].uid);\n }\n }\n\n if (mediaConfig.multiple) {\n params[item] = ids;\n } else {\n params[item] = ids[0] ? ids[0] : null;\n }\n }\n }\n }\n\n return params;\n};\n"],"names":["operators","eq","ne","lt","gt","lte","gte","in","nin","contains","containss","ncontains","ncontainss","undefined","null","nnull","between","nbetween","startswith","startswiths","nstartswith","nstartswiths","endswith","endswiths","nendswith","nendswiths","or","and","intersects","nintersects","intersectsbbox","nintersectsbbox","generateSort","sort","_sort","map","item","order","push","field","generateFilter","filters","queryFilters","search","filter","operator","value","logicalFilter","generateLogicalFilter","conditionalFilter","generateConditionalFilter","str","val","i","obj","strarr","split","x","length","strToObj","directusOperator","conditionalFilters","getSDKFunction","resource","type","singular","functionName","includes","replace","charAt","toUpperCase","slice","pluralize","plural","SDK","eventsMap","created","updated","deleted","directusClient","login","_login","_asyncToGenerator","_regeneratorRuntime","mark","_callee","identifier","password","mode","_context","next","abrupt","sent","stop","_x","_x2","_x3","apply","arguments","me","_me","_callee2","metaData","wrap","_context2","prev","request","readMe","_x4","setToken","_setToken","_callee3","token","_context3","staticToken","_x5","getToken","logout","_logout","_callee4","_context4","getList","_getList","_ref","pagination","sorters","meta","current","pageSize","paramsFilters","status","fields","params","sortString","_parseInt","_total$","sdkFunction","response","aggregateField","_neq","concat","archived","noStatus","_extends","page","limit","join","data","total","query","aggregate","countDistinct","parseInt","t0","console","log","Error","errors","message","getMany","_getMany","_ref2","_filter","ids","_in","create","_create","_ref3","variables","update","_update","_ref4","id","updateMany","_updateMany","_callee5","_ref5","idsFormatted","_context5","createMany","_createMany","_callee6","_ref6","_context6","_x6","getOne","_getOne","_callee7","_ref7","_context7","_x7","deleteOne","_deleteOne","_callee8","_ref8","_sdkFunction","_context8","deleteType","_x8","deleteMany","_deleteMany","_callee9","_ref9","_sdkFunction2","_context9","_x9","getApiUrl","url","custom","_custom","_callee10","_ref10","payload","_context10","method","path","body","JSON","stringify","_x10","valueProps","imageUrl","getFileUrl","getFileTitle","file","fileList","_data$fileList","Array","isArray","name","title","percent","size","filesize","uid","options","_unsubscribe2","openConnections","subscribe","types","callback","connectionId","channel","Date","now","Math","random","toString","substring","event","_yield$directusClient","subscription","unsubscribe","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_step","_asyncIterator","done","finish","asyncGenerator","mediaConfigList","_Object$keys","_i","param","mediaConfig","config","_i2","_Object$keys2","Object","keys","key","normalize","multiple","_loop","uploadedFileIds","useState","_useState2","setFileList","fieldName","beforeUpload","_file","files","maxCount","totalFiles","filesCount","excessFileCount","splice","customRequest","onError","onSuccess","form","FormData","append","folder","uploadFiles","XMLHttpRequest"],"mappings":"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"} -------------------------------------------------------------------------------- /package/dist/refine-directus.esm.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"refine-directus.esm.js","sources":["../src/dataProvider.ts","../src/liveProvider.ts","../src/helpers/auth.ts","../src/helpers/utility.ts"],"sourcesContent":["// @ts-nocheck\nimport * as SDK from \"@directus/sdk\";\nimport { ConditionalFilter, CrudFilters, CrudSorting, DataProvider, LogicalFilter } from \"@refinedev/core\";\nimport pluralize from \"pluralize\";\n\nconst operators = {\n eq: \"_eq\",\n ne: \"_neq\",\n lt: \"_lt\",\n gt: \"_gt\",\n lte: \"_lte\",\n gte: \"_gte\",\n in: \"_in\",\n nin: \"_nin\",\n contains: \"_contains\",\n containss: \"_icontains\",\n ncontains: \"_ncontains\",\n ncontainss: undefined,\n null: \"_null\",\n nnull: \"_nnull\",\n between: \"_between\",\n nbetween: \"_nbetween\",\n startswith: \"_starts_with\",\n startswiths: \"_istarts_with\",\n nstartswith: \"_nstarts_with\",\n nstartswiths: \"_nistarts_with\",\n endswith: \"_ends_with\",\n endswiths: \"_iends_with\",\n nendswith: \"_nends_with\",\n nendswiths: \"_niends_with\",\n or: \"_or\",\n and: \"_and\",\n intersects: \"_intersects\",\n nintersects: \"_nintersects\",\n intersectsbbox: \"_intersects_bbox\",\n nintersectsbbox: \"_nintersects_bbox\",\n};\n\nconst strToObj = (str: string, val: any) => {\n var i: number,\n obj = {},\n strarr = str.split(\".\");\n var x: any = obj;\n for (i = 0; i < strarr.length - 1; i++) {\n x = x[strarr[i]] = {};\n }\n x[strarr[i]] = val;\n return obj;\n};\n\nconst generateSort = (sort?: CrudSorting) => {\n const _sort: string[] = [];\n\n if (sort) {\n sort.map((item) => {\n if (item.order) {\n item.order === \"desc\" ? _sort.push(`-${item.field}`) : _sort.push(`${item.field}`);\n }\n });\n }\n\n return _sort;\n};\n\nconst generateFilter = (filters?: CrudFilters) => {\n const queryFilters: { [key: string]: any } = {};\n let search: string = \"\";\n if (filters) {\n queryFilters[\"_and\"] = [];\n filters.map((filter) => {\n if (filter.operator !== \"or\" && filter.operator !== \"and\" && \"field\" in filter) {\n const { field, operator, value } = filter;\n\n if (value) {\n if (field === \"search\") {\n search = value;\n } else {\n let logicalFilter = generateLogicalFilter(filter);\n logicalFilter && queryFilters[\"_and\"].push(logicalFilter);\n }\n }\n } else {\n let conditionalFilter = generateConditionalFilter(filter);\n conditionalFilter && queryFilters[\"_and\"].push(conditionalFilter);\n }\n });\n }\n\n return { search: search, filters: queryFilters };\n};\n\n//Function to handle logical filters\nconst generateLogicalFilter = (item?: LogicalFilter) => {\n if (item === undefined) return null;\n\n const { field, operator, value } = item;\n const directusOperator = operators[operator];\n let queryField = `${field}.${directusOperator}`;\n let filterObj = strToObj(queryField, value);\n\n return filterObj;\n};\n\n//Function to handle conditional filters\nconst generateConditionalFilter = (item?: ConditionalFilter) => {\n if (item === undefined) return null;\n\n const { operator, value } = item;\n const directusOperator = operators[operator];\n\n const conditionalFilters: { [key: string]: any } = {};\n conditionalFilters[directusOperator] = [];\n\n value.map((item) => {\n if (\"field\" in item) {\n let logicalFilter = generateLogicalFilter(item);\n logicalFilter && conditionalFilters[directusOperator].push(logicalFilter);\n } else {\n let conditionalFilter = generateConditionalFilter(item);\n conditionalFilter && conditionalFilters[directusOperator].push(conditionalFilter);\n }\n });\n\n return conditionalFilters;\n};\n\n//Function to return SDK function based on resource and type\nconst getSDKFunction = (resource: string, type: string, singular: boolean = false) => {\n //If resource is directus_users then function is readUsers, createUsers, etc.\n //If resource is directus_files then function is readFiles, createFiles, etc.\n //If resource is directus_roles then function is readRoles, createRoles, etc.\n\n //if resource has directus_ then remove it\n\n let functionName = null;\n\n if (resource.includes(\"directus_\")) {\n resource = resource.replace(\"directus_\", \"\");\n } else {\n return null;\n }\n\n if (singular) {\n functionName = `${type}${resource.charAt(0).toUpperCase() + resource.slice(1)}`;\n //Remove s from end of function name\n functionName = pluralize.singular(functionName);\n } else {\n functionName = `${type}${resource.charAt(0).toUpperCase() + resource.slice(1)}`;\n functionName = pluralize.plural(functionName);\n }\n\n //Get SDK function\n const sdkFunction = SDK[functionName];\n\n return sdkFunction as Function;\n};\n\nexport const dataProvider = (directusClient: any): DataProvider => ({\n getList: async ({ resource, pagination, filters, sorters, meta }) => {\n const current = pagination?.current || 1;\n const pageSize = pagination?.pageSize || 50;\n\n const _sort = generateSort(sorters);\n const paramsFilters = generateFilter(filters);\n\n let status: any = { status: { _neq: \"archived\" } };\n\n //Assign copy of fields\n let fields: any = meta?.fields ? [...meta.fields] : [\"*\"];\n\n //Delete fields from meta\n delete meta?.fields;\n\n if (meta?.archived === true || meta?.noStatus == true) {\n status = {};\n }\n\n let search = {};\n if (paramsFilters.search) {\n search = { search: paramsFilters.search };\n }\n\n let params: any = {\n ...search,\n filter: {\n ...paramsFilters.filters,\n ...status,\n },\n page: current,\n limit: pageSize,\n ...meta,\n };\n\n let sortString: any = null;\n if (sorters && sorters.length > 0) {\n sortString = _sort.join(\",\");\n }\n\n if (sortString) {\n params[\"sort\"] = sortString;\n }\n\n try {\n const sdkFunction = getSDKFunction(resource, \"read\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction({ ...params, fields }) : SDK.readItems(resource, { ...params, fields })\n );\n\n if (pageSize == -1 || pagination?.mode == \"off\") {\n return {\n data: response,\n total: response.length,\n };\n }\n\n delete params[\"page\"];\n\n const aggregateField = meta?.aggregateField ? meta.aggregateField : \"id\";\n\n const total = await directusClient.request(\n SDK.aggregate(resource, {\n query: params,\n aggregate: {\n countDistinct: aggregateField,\n },\n })\n );\n\n return {\n data: response,\n total: parseInt(total[0]?.countDistinct?.[aggregateField]) ?? 0,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n getMany: async ({ resource, ids, meta }) => {\n let fields: any = meta?.fields ? [...meta.fields] : [\"*\"];\n let aggregateField = meta?.aggregateField ? meta.aggregateField : \"id\";\n\n //Delete fields from meta\n delete meta?.fields;\n delete meta?.aggregateField;\n\n let params: any = {\n filter: {\n [aggregateField]: { _in: ids },\n },\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"read\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction({ ...params, fields }) : SDK.readItems(resource, { ...params, fields })\n );\n\n return {\n data: response,\n total: response.length,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n create: async ({ resource, variables, meta }) => {\n let params: any = {\n ...variables,\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"create\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(params) : SDK.createItem(resource, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n update: async ({ resource, id, variables, meta }) => {\n let params: any = {\n ...variables,\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"update\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(id, params) : SDK.updateItem(resource, id, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n updateMany: async ({ resource, ids, variables, meta }) => {\n let idsFormatted: any = ids;\n\n let params: any = {\n ...variables,\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"update\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(idsFormatted, params) : SDK.updateItems(resource, idsFormatted, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n createMany: async ({ resource, variables, meta }) => {\n let params: any = {\n ...variables,\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"create\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(params) : SDK.createItems(resource, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n getOne: async ({ resource, id, meta }) => {\n let params: any = {\n ...meta,\n };\n\n try {\n const sdkFunction = getSDKFunction(resource, \"read\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(id, params) : SDK.readItem(resource, id, params)\n );\n\n return {\n data: response,\n };\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n deleteOne: async ({ resource, id, meta }) => {\n try {\n if (meta && meta.deleteType === \"archive\") {\n let params: any = {\n status: \"archived\",\n ...meta,\n };\n\n const sdkFunction = getSDKFunction(resource, \"update\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(id, params) : SDK.updateItem(resource, id, params)\n );\n\n return {\n data: response,\n };\n } else {\n const sdkFunction = getSDKFunction(resource, \"delete\", true);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(id) : SDK.deleteItem(resource, id)\n );\n\n return {\n data: response,\n };\n }\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n deleteMany: async ({ resource, ids, meta }) => {\n try {\n let idsFormatted: any = ids;\n\n if (meta && meta.deleteType === \"archive\") {\n let params: any = {\n status: \"archived\",\n ...meta,\n };\n\n const sdkFunction = getSDKFunction(resource, \"update\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(idsFormatted, params) : SDK.updateItems(resource, idsFormatted, params)\n );\n\n return {\n data: response,\n };\n } else {\n const sdkFunction = getSDKFunction(resource, \"delete\", false);\n\n const response: any = await directusClient.request(\n sdkFunction ? sdkFunction(idsFormatted) : SDK.deleteItems(resource, idsFormatted)\n );\n\n return {\n data: response.data,\n };\n }\n } catch (e) {\n console.log(e);\n throw new Error(e.errors && e.errors[0] && e.errors[0].message);\n }\n },\n\n getApiUrl: () => {\n const url: any = directusClient.url;\n return url;\n },\n\n custom: async ({ url, method, filters, sorters, payload, query, headers }) => {\n let response: any;\n switch (method) {\n case \"put\":\n response = await directusClient.request(() => ({\n path: url,\n method: \"PUT\",\n body: JSON.stringify(payload),\n params: query as any,\n }));\n\n break;\n case \"post\":\n response = await directusClient.request(() => ({\n path: url,\n method: \"POST\",\n body: JSON.stringify(payload),\n params: query as any,\n }));\n break;\n case \"patch\":\n response = await directusClient.request(() => ({\n path: url,\n method: \"PATCH\",\n body: JSON.stringify(payload),\n params: query as any,\n }));\n break;\n case \"delete\":\n response = await directusClient.request(() => ({\n path: url,\n method: \"DELETE\",\n params: query as any,\n }));\n break;\n default:\n response = await directusClient.request(() => ({\n path: url,\n method: \"GET\",\n params: query as any,\n }));\n break;\n }\n\n return {\n data: response,\n };\n },\n});\n","import { LiveProvider } from \"@refinedev/core\";\n\nconst eventsMap: any = {\n created: \"create\",\n updated: \"update\",\n deleted: \"delete\",\n};\n\nexport const liveProvider = (directusClient: any, options: {}): LiveProvider => {\n let openConnections: any = {};\n return {\n subscribe: ({ channel, types, params, callback }) => {\n let connectionId = channel\n ? channel\n : Date.now() +\n \"_\" +\n Math.random()\n .toString(36)\n .substring(2, 15);\n\n let options: any = { uid: connectionId };\n\n if (params?.query) {\n options = { ...options, query: params.query };\n }\n\n if (types?.length > 1) {\n throw new Error(\n \"Directus does not support multiple event types in a single subscription. Please create multiple subscriptions for each event type or do not pass any event type to subscribe to all events.\"\n );\n }\n\n if (types?.length && eventsMap[types[0]]) {\n options = { ...options, event: eventsMap[types[0]] };\n }\n\n if (params?.resource) {\n (async () => {\n const { subscription, unsubscribe } = await directusClient.subscribe(params?.resource, options);\n\n const asyncGenerator = async (subscription: any) => {\n for await (const item of subscription) {\n // this loop wil await new subscription events\n callback(item);\n }\n };\n\n asyncGenerator(subscription); // create a generator\n\n openConnections[connectionId] = unsubscribe;\n })();\n\n return connectionId;\n } else throw new Error(\"resource is required\");\n },\n\n unsubscribe: async (unsubscribe) => {\n if (unsubscribe && openConnections[unsubscribe]) {\n openConnections[unsubscribe]();\n delete openConnections[unsubscribe];\n }\n },\n };\n};\n","//@ts-nocheck\nimport { authentication, createDirectus, readMe, rest, staticToken } from \"@directus/sdk\";\n\nexport const AuthHelper = (directusClient: any) => {\n return {\n login: async (identifier: string, password: string, mode: string = \"json\") => {\n let response = await directusClient.login(identifier, password, { mode });\n\n return response;\n },\n me: async (metaData: {}) => {\n let me = await directusClient.request(readMe(metaData));\n return me;\n },\n setToken: async (token: string) => {\n await directusClient.with(staticToken(token));\n },\n getToken: () => {\n return directusClient.getToken();\n },\n logout: async () => {\n return await directusClient.logout();\n },\n };\n};\n","//@ts-nocheck\nimport { useState } from \"react\";\nimport { uploadFiles } from \"@directus/sdk\";\n\nexport interface MediaConfig {\n maxCount: number;\n name: string;\n multiple: boolean;\n normalize?: (item: any) => any;\n title?: string;\n folder?: string;\n}\n\nexport interface ValuePropsConfig {\n data: any;\n imageUrl: string;\n getFileUrl?: (item: any) => any;\n getFileTitle?: (item: any) => any;\n}\n\nexport const getValueProps = (valueProps: ValuePropsConfig) => {\n const { data, imageUrl, getFileUrl, getFileTitle } = valueProps;\n\n if (!data) {\n return { fileList: [] };\n }\n\n const files = {\n file: data.file,\n fileList:\n data.fileList ??\n (Array.isArray(data) ? data : [data]).map((item: any) => {\n const file: any = {\n name: getFileTitle ? getFileTitle(item) : item.title,\n url: getFileUrl ? getFileUrl(item) : `${imageUrl}assets/${item.id}`,\n percent: item.percent,\n size: item.filesize,\n status: \"done\",\n type: item.type,\n uid: item.id,\n };\n\n return file;\n }),\n };\n\n return files;\n};\n\nexport const useDirectusUpload = (mediaConfigList: MediaConfig[], directusClient: any) => {\n const [uploadedFileIds] = useState([]);\n const [fileList, setFileList] = useState([]);\n\n const beforeUpload = (_file: any, files: any[], maxCount: number): boolean => {\n const totalFiles = fileList.length;\n const filesCount = files.length;\n\n if (totalFiles + filesCount > maxCount) {\n const excessFileCount = totalFiles + filesCount - maxCount;\n // convert negative\n const deleteItemCount = excessFileCount - excessFileCount * 2;\n files.splice(deleteItemCount);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setFileList([...fileList, ...files]);\n\n return true;\n };\n\n const getUploadProps = (fieldName: string) => {\n const mediaConfig = mediaConfigList.filter((config: any) => config.name === fieldName)[0];\n\n const customRequest = async ({ file, onError, onSuccess }: any) => {\n try {\n const form = new FormData();\n if (mediaConfig?.title) {\n form.append(\"title\", mediaConfig.title);\n }\n if (mediaConfig?.folder) {\n form.append(\"folder\", mediaConfig.folder);\n }\n form.append(\"file\", file);\n\n const data = await directusClient.request(uploadFiles(form));\n onSuccess?.({ data }, new XMLHttpRequest());\n } catch (error) {\n onError?.(new Error(\"Upload Error\"));\n }\n };\n\n return {\n uploadedFileIds,\n beforeUpload: (_file: any, files: any[]) => beforeUpload(_file, files, mediaConfig.maxCount),\n fileList,\n maxCount: mediaConfig.maxCount,\n customRequest,\n };\n };\n\n return getUploadProps;\n};\n\nexport const mediaUploadMapper = (params: any, mediaConfigList: MediaConfig[]) => {\n for (const item of Object.keys(params)) {\n if (params[item]) {\n const param = params[item].fileList;\n const isMediaField = Array.isArray(param);\n if (isMediaField) {\n const mediaConfig = mediaConfigList.filter((config: any) => config.name === item)[0];\n const ids = [];\n for (const key of Object.keys(param)) {\n if (param[key].response) {\n if (mediaConfig.normalize) {\n ids.push(mediaConfig.normalize(param[key].response.data.id));\n } else {\n ids.push(param[key].response.data.id);\n }\n } else {\n ids.push(param[key].uid);\n }\n }\n\n if (mediaConfig.multiple) {\n params[item] = ids;\n } else {\n params[item] = ids[0] ? ids[0] : null;\n }\n }\n }\n }\n\n return params;\n};\n"],"names":["operators","eq","ne","lt","gt","lte","gte","nin","contains","containss","ncontains","ncontainss","undefined","nnull","between","nbetween","startswith","startswiths","nstartswith","nstartswiths","endswith","endswiths","nendswith","nendswiths","or","and","intersects","nintersects","intersectsbbox","nintersectsbbox","strToObj","str","val","i","obj","strarr","split","x","length","generateSort","sort","_sort","map","item","order","push","field","generateFilter","filters","queryFilters","search","filter","operator","value","logicalFilter","generateLogicalFilter","conditionalFilter","generateConditionalFilter","directusOperator","queryField","filterObj","conditionalFilters","getSDKFunction","resource","type","singular","functionName","includes","replace","charAt","toUpperCase","slice","pluralize","plural","sdkFunction","SDK","dataProvider","directusClient","getList","_getList","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref","pagination","sorters","meta","current","pageSize","paramsFilters","status","fields","params","sortString","_parseInt","_total$","response","aggregateField","total","wrap","_callee$","_context","prev","next","_neq","concat","archived","noStatus","_extends","page","limit","join","request","sent","mode","abrupt","data","query","aggregate","countDistinct","parseInt","t0","console","log","Error","errors","message","stop","_x","apply","arguments","getMany","_getMany","_callee2","_ref2","_filter","ids","_callee2$","_context2","_in","_x2","create","_create","_callee3","_ref3","variables","_callee3$","_context3","_x3","update","_update","_callee4","_ref4","id","_callee4$","_context4","_x4","updateMany","_updateMany","_callee5","_ref5","idsFormatted","_callee5$","_context5","_x5","createMany","_createMany","_callee6","_ref6","_callee6$","_context6","_x6","getOne","_getOne","_callee7","_ref7","_callee7$","_context7","_x7","deleteOne","_deleteOne","_callee8","_ref8","_sdkFunction","_response","_callee8$","_context8","deleteType","_x8","deleteMany","_deleteMany","_callee9","_ref9","_sdkFunction2","_response2","_callee9$","_context9","_x9","getApiUrl","url","custom","_custom","_callee10","_ref10","method","payload","headers","_callee10$","_context10","path","body","JSON","stringify","_x10","eventsMap","created","updated","deleted","liveProvider","options","openConnections","subscribe","channel","types","callback","connectionId","Date","now","Math","random","toString","substring","uid","event","_yield$directusClient","subscription","unsubscribe","asyncGenerator","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_iterator","_step","_asyncIterator","done","finish","_unsubscribe2","AuthHelper","login","_login","identifier","password","me","_me","metaData","readMe","setToken","_setToken","token","staticToken","getToken","logout","_logout","getValueProps","valueProps","imageUrl","getFileUrl","getFileTitle","fileList","files","file","_data$fileList","Array","isArray","name","title","percent","size","filesize","useDirectusUpload","mediaConfigList","_useState","useState","uploadedFileIds","_useState2","setFileList","beforeUpload","_file","maxCount","totalFiles","filesCount","excessFileCount","deleteItemCount","splice","getUploadProps","fieldName","mediaConfig","config","customRequest","onError","onSuccess","form","FormData","append","folder","uploadFiles","XMLHttpRequest","mediaUploadMapper","_Object$keys","_i","param","isMediaField","_i2","_Object$keys2","Object","keys","key","normalize","multiple","_loop"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAMA,SAAS,GAAG;EACdC,EAAE,EAAE,KAAK;EACTC,EAAE,EAAE,MAAM;EACVC,EAAE,EAAE,KAAK;EACTC,EAAE,EAAE,KAAK;EACTC,GAAG,EAAE,MAAM;EACXC,GAAG,EAAE,MAAM;EACX,MAAI,KAAK;EACTC,GAAG,EAAE,MAAM;EACXC,QAAQ,EAAE,WAAW;EACrBC,SAAS,EAAE,YAAY;EACvBC,SAAS,EAAE,YAAY;EACvBC,UAAU,EAAEC,SAAS;EACrB,QAAM,OAAO;EACbC,KAAK,EAAE,QAAQ;EACfC,OAAO,EAAE,UAAU;EACnBC,QAAQ,EAAE,WAAW;EACrBC,UAAU,EAAE,cAAc;EAC1BC,WAAW,EAAE,eAAe;EAC5BC,WAAW,EAAE,eAAe;EAC5BC,YAAY,EAAE,gBAAgB;EAC9BC,QAAQ,EAAE,YAAY;EACtBC,SAAS,EAAE,aAAa;EACxBC,SAAS,EAAE,aAAa;EACxBC,UAAU,EAAE,cAAc;EAC1BC,EAAE,EAAE,KAAK;EACTC,GAAG,EAAE,MAAM;EACXC,UAAU,EAAE,aAAa;EACzBC,WAAW,EAAE,cAAc;EAC3BC,cAAc,EAAE,kBAAkB;EAClCC,eAAe,EAAE;CACpB;AAED,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAIC,GAAW,EAAEC,GAAQ;EACnC,IAAIC,CAAS;IACTC,GAAG,GAAG,EAAE;IACRC,MAAM,GAAGJ,GAAG,CAACK,KAAK,CAAC,GAAG,CAAC;EAC3B,IAAIC,CAAC,GAAQH,GAAG;EAChB,KAAKD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGE,MAAM,CAACG,MAAM,GAAG,CAAC,EAAEL,CAAC,EAAE,EAAE;IACpCI,CAAC,GAAGA,CAAC,CAACF,MAAM,CAACF,CAAC,CAAC,CAAC,GAAG,EAAE;;EAEzBI,CAAC,CAACF,MAAM,CAACF,CAAC,CAAC,CAAC,GAAGD,GAAG;EAClB,OAAOE,GAAG;AACd,CAAC;AAED,IAAMK,YAAY,GAAG,SAAfA,YAAYA,CAAIC,IAAkB;EACpC,IAAMC,KAAK,GAAa,EAAE;EAE1B,IAAID,IAAI,EAAE;IACNA,IAAI,CAACE,GAAG,CAAC,UAACC,IAAI;MACV,IAAIA,IAAI,CAACC,KAAK,EAAE;QACZD,IAAI,CAACC,KAAK,KAAK,MAAM,GAAGH,KAAK,CAACI,IAAI,OAAKF,IAAI,CAACG,KAAO,CAAC,GAAGL,KAAK,CAACI,IAAI,MAAIF,IAAI,CAACG,KAAO,CAAC;;KAEzF,CAAC;;EAGN,OAAOL,KAAK;AAChB,CAAC;AAED,IAAMM,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,OAAqB;EACzC,IAAMC,YAAY,GAA2B,EAAE;EAC/C,IAAIC,MAAM,GAAW,EAAE;EACvB,IAAIF,OAAO,EAAE;IACTC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE;IACzBD,OAAO,CAACN,GAAG,CAAC,UAACS,MAAM;MACf,IAAIA,MAAM,CAACC,QAAQ,KAAK,IAAI,IAAID,MAAM,CAACC,QAAQ,KAAK,KAAK,IAAI,OAAO,IAAID,MAAM,EAAE;YACpEL,KAAK,GAAsBK,MAAM,CAAjCL,KAAK;UAAYO,KAAK,GAAKF,MAAM,CAAhBE;QAEzB,IAAIA,KAAK,EAAE;UACP,IAAIP,KAAK,KAAK,QAAQ,EAAE;YACpBI,MAAM,GAAGG,KAAK;WACjB,MAAM;YACH,IAAIC,aAAa,GAAGC,qBAAqB,CAACJ,MAAM,CAAC;YACjDG,aAAa,IAAIL,YAAY,CAAC,MAAM,CAAC,CAACJ,IAAI,CAACS,aAAa,CAAC;;;OAGpE,MAAM;QACH,IAAIE,iBAAiB,GAAGC,yBAAyB,CAACN,MAAM,CAAC;QACzDK,iBAAiB,IAAIP,YAAY,CAAC,MAAM,CAAC,CAACJ,IAAI,CAACW,iBAAiB,CAAC;;KAExE,CAAC;;EAGN,OAAO;IAAEN,MAAM,EAAEA,MAAM;IAAEF,OAAO,EAAEC;GAAc;AACpD,CAAC;AAED;AACA,IAAMM,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAIZ,IAAoB;EAC/C,IAAIA,IAAI,KAAK/B,SAAS,EAAE,OAAO,IAAI;EAEnC,IAAQkC,KAAK,GAAsBH,IAAI,CAA/BG,KAAK;IAAEM,QAAQ,GAAYT,IAAI,CAAxBS,QAAQ;IAAEC,KAAK,GAAKV,IAAI,CAAdU,KAAK;EAC9B,IAAMK,gBAAgB,GAAG1D,SAAS,CAACoD,QAAQ,CAAC;EAC5C,IAAIO,UAAU,GAAMb,KAAK,SAAIY,gBAAkB;EAC/C,IAAIE,SAAS,GAAG9B,QAAQ,CAAC6B,UAAU,EAAEN,KAAK,CAAC;EAE3C,OAAOO,SAAS;AACpB,CAAC;AAED;AACA,IAAMH,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAId,IAAwB;EACvD,IAAIA,IAAI,KAAK/B,SAAS,EAAE,OAAO,IAAI;EAEnC,IAAQwC,QAAQ,GAAYT,IAAI,CAAxBS,QAAQ;IAAEC,KAAK,GAAKV,IAAI,CAAdU,KAAK;EACvB,IAAMK,gBAAgB,GAAG1D,SAAS,CAACoD,QAAQ,CAAC;EAE5C,IAAMS,kBAAkB,GAA2B,EAAE;EACrDA,kBAAkB,CAACH,gBAAgB,CAAC,GAAG,EAAE;EAEzCL,KAAK,CAACX,GAAG,CAAC,UAACC,IAAI;IACX,IAAI,OAAO,IAAIA,IAAI,EAAE;MACjB,IAAIW,aAAa,GAAGC,qBAAqB,CAACZ,IAAI,CAAC;MAC/CW,aAAa,IAAIO,kBAAkB,CAACH,gBAAgB,CAAC,CAACb,IAAI,CAACS,aAAa,CAAC;KAC5E,MAAM;MACH,IAAIE,iBAAiB,GAAGC,yBAAyB,CAACd,IAAI,CAAC;MACvDa,iBAAiB,IAAIK,kBAAkB,CAACH,gBAAgB,CAAC,CAACb,IAAI,CAACW,iBAAiB,CAAC;;GAExF,CAAC;EAEF,OAAOK,kBAAkB;AAC7B,CAAC;AAED;AACA,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,QAAgB,EAAEC,IAAY,EAAEC;MAAAA;IAAAA,WAAoB,KAAK;;;;;;EAO7E,IAAIC,YAAY,GAAG,IAAI;EAEvB,IAAIH,QAAQ,CAACI,QAAQ,CAAC,WAAW,CAAC,EAAE;IAChCJ,QAAQ,GAAGA,QAAQ,CAACK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;GAC/C,MAAM;IACH,OAAO,IAAI;;EAGf,IAAIH,QAAQ,EAAE;IACVC,YAAY,QAAMF,IAAI,IAAGD,QAAQ,CAACM,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGP,QAAQ,CAACQ,KAAK,CAAC,CAAC,CAAC,CAAE;;IAE/EL,YAAY,GAAGM,SAAS,CAACP,QAAQ,CAACC,YAAY,CAAC;GAClD,MAAM;IACHA,YAAY,QAAMF,IAAI,IAAGD,QAAQ,CAACM,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGP,QAAQ,CAACQ,KAAK,CAAC,CAAC,CAAC,CAAE;IAC/EL,YAAY,GAAGM,SAAS,CAACC,MAAM,CAACP,YAAY,CAAC;;;EAIjD,IAAMQ,WAAW,GAAGC,GAAG,CAACT,YAAY,CAAC;EAErC,OAAOQ,WAAuB;AAClC,CAAC;IAEYE,YAAY,GAAG,SAAfA,YAAYA,CAAIC,cAAmB;EAAA,OAAoB;IAChEC,OAAO;MAAA,IAAAC,QAAA,GAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAC,QAAAC,IAAA;QAAA,IAAArB,QAAA,EAAAsB,UAAA,EAAArC,OAAA,EAAAsC,OAAA,EAAAC,IAAA,EAAAC,OAAA,EAAAC,QAAA,EAAAhD,KAAA,EAAAiD,aAAA,EAAAC,MAAA,EAAAC,MAAA,EAAA1C,MAAA,EAAA2C,MAAA,EAAAC,UAAA,EAAAC,SAAA,EAAAC,OAAA,EAAAtB,WAAA,EAAAuB,QAAA,EAAAC,cAAA,EAAAC,KAAA;QAAA,OAAAlB,mBAAA,GAAAmB,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAASzC,QAAQ,GAAAqB,IAAA,CAARrB,QAAQ,EAAEsB,UAAU,GAAAD,IAAA,CAAVC,UAAU,EAAErC,OAAO,GAAAoC,IAAA,CAAPpC,OAAO,EAAEsC,OAAO,GAAAF,IAAA,CAAPE,OAAO,EAAEC,IAAI,GAAAH,IAAA,CAAJG,IAAI;cACpDC,OAAO,GAAG,CAAAH,UAAU,oBAAVA,UAAU,CAAEG,OAAO,KAAI,CAAC;cAClCC,QAAQ,GAAG,CAAAJ,UAAU,oBAAVA,UAAU,CAAEI,QAAQ,KAAI,EAAE;cAErChD,KAAK,GAAGF,YAAY,CAAC+C,OAAO,CAAC;cAC7BI,aAAa,GAAG3C,cAAc,CAACC,OAAO,CAAC;cAEzC2C,MAAM,GAAQ;gBAAEA,MAAM,EAAE;kBAAEc,IAAI,EAAE;;eAAc;cAG9Cb,MAAM,GAAQL,IAAI,YAAJA,IAAI,CAAEK,MAAM,MAAAc,MAAA,CAAOnB,IAAI,CAACK,MAAM,IAAI,CAAC,GAAG,CAAC;cAGlDL,IAAI,YAAX,OAAOA,IAAI,CAAEK,MAAM;cAEnB,IAAI,CAAAL,IAAI,oBAAJA,IAAI,CAAEoB,QAAQ,MAAK,IAAI,IAAI,CAAApB,IAAI,oBAAJA,IAAI,CAAEqB,QAAQ,KAAI,IAAI,EAAE;gBACnDjB,MAAM,GAAG,EAAE;;cAGXzC,MAAM,GAAG,EAAE;cACf,IAAIwC,aAAa,CAACxC,MAAM,EAAE;gBACtBA,MAAM,GAAG;kBAAEA,MAAM,EAAEwC,aAAa,CAACxC;iBAAQ;;cAGzC2C,MAAM,GAAAgB,QAAA,KACH3D,MAAM;gBACTC,MAAM,EAAA0D,QAAA,KACCnB,aAAa,CAAC1C,OAAO,EACrB2C,MAAM,CACZ;gBACDmB,IAAI,EAAEtB,OAAO;gBACbuB,KAAK,EAAEtB;iBACJF,IAAI;cAGPO,UAAU,GAAQ,IAAI;cAC1B,IAAIR,OAAO,IAAIA,OAAO,CAAChD,MAAM,GAAG,CAAC,EAAE;gBAC/BwD,UAAU,GAAGrD,KAAK,CAACuE,IAAI,CAAC,GAAG,CAAC;;cAGhC,IAAIlB,UAAU,EAAE;gBACZD,MAAM,CAAC,MAAM,CAAC,GAAGC,UAAU;;cAC9BQ,QAAA,CAAAC,IAAA;cAGS7B,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;cAAAuC,QAAA,CAAAE,IAAA;cAAA,OAE/B3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAAAmC,QAAA,KAAMhB,MAAM;gBAAED,MAAM,EAANA;gBAAQ,CAAC,GAAGjB,SAAa,CAACZ,QAAQ,EAAA8C,QAAA,KAAOhB,MAAM;gBAAED,MAAM,EAANA;gBAAQ,CAAC,CACpG;YAAA;cAFKK,QAAQ,GAAAK,QAAA,CAAAY,IAAA;cAAA,MAIVzB,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAAJ,UAAU,oBAAVA,UAAU,CAAE8B,IAAI,KAAI,KAAK;gBAAAb,QAAA,CAAAE,IAAA;gBAAA;;cAAA,OAAAF,QAAA,CAAAc,MAAA,WACpC;gBACHC,IAAI,EAAEpB,QAAQ;gBACdE,KAAK,EAAEF,QAAQ,CAAC3D;eACnB;YAAA;cAGL,OAAOuD,MAAM,CAAC,MAAM,CAAC;cAEfK,cAAc,GAAGX,IAAI,YAAJA,IAAI,CAAEW,cAAc,GAAGX,IAAI,CAACW,cAAc,GAAG,IAAI;cAAAI,QAAA,CAAAE,IAAA;cAAA,OAEpD3B,cAAc,CAACoC,OAAO,CACtCtC,SAAa,CAACZ,QAAQ,EAAE;gBACpBuD,KAAK,EAAEzB,MAAM;gBACb0B,SAAS,EAAE;kBACPC,aAAa,EAAEtB;;eAEtB,CAAC,CACL;YAAA;cAPKC,KAAK,GAAAG,QAAA,CAAAY,IAAA;cAAA,OAAAZ,QAAA,CAAAc,MAAA,WASJ;gBACHC,IAAI,EAAEpB,QAAQ;gBACdE,KAAK,GAAAJ,SAAA,GAAE0B,QAAQ,EAAAzB,OAAA,GAACG,KAAK,CAAC,CAAC,CAAC,cAAAH,OAAA,GAARA,OAAA,CAAUwB,aAAa,qBAAvBxB,OAAA,CAA0BE,cAAc,CAAC,CAAC,YAAAH,SAAA,GAAI;eACjE;YAAA;cAAAO,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAoB,EAAA,GAAApB,QAAA;cAEDqB,OAAO,CAACC,GAAG,CAAAtB,QAAA,CAAAoB,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAACvB,QAAA,CAAAoB,EAAA,CAAEI,MAAM,IAAIxB,QAAA,CAAAoB,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAIxB,QAAA,CAAAoB,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAAzB,QAAA,CAAA0B,IAAA;;WAAA7C,OAAA;OAEtE;MAAA,SAAAL,QAAAmD,EAAA;QAAA,OAAAlD,QAAA,CAAAmD,KAAA,OAAAC,SAAA;;MAAA,OAAArD,OAAA;;IAEDsD,OAAO;MAAA,IAAAC,QAAA,GAAArD,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAoD,SAAAC,KAAA;QAAA,IAAAC,OAAA;QAAA,IAAAzE,QAAA,EAAA0E,GAAA,EAAAlD,IAAA,EAAAK,MAAA,EAAAM,cAAA,EAAAL,MAAA,EAAAnB,WAAA,EAAAuB,QAAA;QAAA,OAAAhB,mBAAA,GAAAmB,IAAA,UAAAsC,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAApC,IAAA,GAAAoC,SAAA,CAAAnC,IAAA;YAAA;cAASzC,QAAQ,GAAAwE,KAAA,CAARxE,QAAQ,EAAE0E,GAAG,GAAAF,KAAA,CAAHE,GAAG,EAAElD,IAAI,GAAAgD,KAAA,CAAJhD,IAAI;cAC7BK,MAAM,GAAQL,IAAI,YAAJA,IAAI,CAAEK,MAAM,MAAAc,MAAA,CAAOnB,IAAI,CAACK,MAAM,IAAI,CAAC,GAAG,CAAC;cACrDM,cAAc,GAAGX,IAAI,YAAJA,IAAI,CAAEW,cAAc,GAAGX,IAAI,CAACW,cAAc,GAAG,IAAI;cAG/DX,IAAI,YAAX,OAAOA,IAAI,CAAEK,MAAM;cACZL,IAAI,YAAX,OAAOA,IAAI,CAAEW,cAAc;cAEvBL,MAAM,GAAAgB,QAAA;gBACN1D,MAAM,GAAAqF,OAAA,OAAAA,OAAA,CACDtC,cAAc,IAAG;kBAAE0C,GAAG,EAAEH;iBAAK,EAAAD,OAAA;iBAE/BjD,IAAI;cAAAoD,SAAA,CAAApC,IAAA;cAID7B,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;cAAA4E,SAAA,CAAAnC,IAAA;cAAA,OAE/B3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAAAmC,QAAA,KAAMhB,MAAM;gBAAED,MAAM,EAANA;gBAAQ,CAAC,GAAGjB,SAAa,CAACZ,QAAQ,EAAA8C,QAAA,KAAOhB,MAAM;gBAAED,MAAM,EAANA;gBAAQ,CAAC,CACpG;YAAA;cAFKK,QAAQ,GAAA0C,SAAA,CAAAzB,IAAA;cAAA,OAAAyB,SAAA,CAAAvB,MAAA,WAIP;gBACHC,IAAI,EAAEpB,QAAQ;gBACdE,KAAK,EAAEF,QAAQ,CAAC3D;eACnB;YAAA;cAAAqG,SAAA,CAAApC,IAAA;cAAAoC,SAAA,CAAAjB,EAAA,GAAAiB,SAAA;cAEDhB,OAAO,CAACC,GAAG,CAAAe,SAAA,CAAAjB,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAACc,SAAA,CAAAjB,EAAA,CAAEI,MAAM,IAAIa,SAAA,CAAAjB,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAIa,SAAA,CAAAjB,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAAY,SAAA,CAAAX,IAAA;;WAAAM,QAAA;OAEtE;MAAA,SAAAF,QAAAS,GAAA;QAAA,OAAAR,QAAA,CAAAH,KAAA,OAAAC,SAAA;;MAAA,OAAAC,OAAA;;IAEDU,MAAM;MAAA,IAAAC,OAAA,GAAA/D,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAA8D,SAAAC,KAAA;QAAA,IAAAlF,QAAA,EAAAmF,SAAA,EAAA3D,IAAA,EAAAM,MAAA,EAAAnB,WAAA,EAAAuB,QAAA;QAAA,OAAAhB,mBAAA,GAAAmB,IAAA,UAAA+C,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA7C,IAAA,GAAA6C,SAAA,CAAA5C,IAAA;YAAA;cAASzC,QAAQ,GAAAkF,KAAA,CAARlF,QAAQ,EAAEmF,SAAS,GAAAD,KAAA,CAATC,SAAS,EAAE3D,IAAI,GAAA0D,KAAA,CAAJ1D,IAAI;cAClCM,MAAM,GAAAgB,QAAA,KACHqC,SAAS,EACT3D,IAAI;cAAA6D,SAAA,CAAA7C,IAAA;cAID7B,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;cAAAqF,SAAA,CAAA5C,IAAA;cAAA,OAEhC3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAACmB,MAAM,CAAC,GAAGlB,UAAc,CAACZ,QAAQ,EAAE8B,MAAM,CAAC,CACvE;YAAA;cAFKI,QAAQ,GAAAmD,SAAA,CAAAlC,IAAA;cAAA,OAAAkC,SAAA,CAAAhC,MAAA,WAIP;gBACHC,IAAI,EAAEpB;eACT;YAAA;cAAAmD,SAAA,CAAA7C,IAAA;cAAA6C,SAAA,CAAA1B,EAAA,GAAA0B,SAAA;cAEDzB,OAAO,CAACC,GAAG,CAAAwB,SAAA,CAAA1B,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAACuB,SAAA,CAAA1B,EAAA,CAAEI,MAAM,IAAIsB,SAAA,CAAA1B,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAIsB,SAAA,CAAA1B,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAAqB,SAAA,CAAApB,IAAA;;WAAAgB,QAAA;OAEtE;MAAA,SAAAF,OAAAO,GAAA;QAAA,OAAAN,OAAA,CAAAb,KAAA,OAAAC,SAAA;;MAAA,OAAAW,MAAA;;IAEDQ,MAAM;MAAA,IAAAC,OAAA,GAAAvE,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAsE,SAAAC,KAAA;QAAA,IAAA1F,QAAA,EAAA2F,EAAA,EAAAR,SAAA,EAAA3D,IAAA,EAAAM,MAAA,EAAAnB,WAAA,EAAAuB,QAAA;QAAA,OAAAhB,mBAAA,GAAAmB,IAAA,UAAAuD,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAArD,IAAA,GAAAqD,SAAA,CAAApD,IAAA;YAAA;cAASzC,QAAQ,GAAA0F,KAAA,CAAR1F,QAAQ,EAAE2F,EAAE,GAAAD,KAAA,CAAFC,EAAE,EAAER,SAAS,GAAAO,KAAA,CAATP,SAAS,EAAE3D,IAAI,GAAAkE,KAAA,CAAJlE,IAAI;cACtCM,MAAM,GAAAgB,QAAA,KACHqC,SAAS,EACT3D,IAAI;cAAAqE,SAAA,CAAArD,IAAA;cAID7B,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;cAAA6F,SAAA,CAAApD,IAAA;cAAA,OAEhC3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAACgF,EAAE,EAAE7D,MAAM,CAAC,GAAGlB,UAAc,CAACZ,QAAQ,EAAE2F,EAAE,EAAE7D,MAAM,CAAC,CAC/E;YAAA;cAFKI,QAAQ,GAAA2D,SAAA,CAAA1C,IAAA;cAAA,OAAA0C,SAAA,CAAAxC,MAAA,WAIP;gBACHC,IAAI,EAAEpB;eACT;YAAA;cAAA2D,SAAA,CAAArD,IAAA;cAAAqD,SAAA,CAAAlC,EAAA,GAAAkC,SAAA;cAEDjC,OAAO,CAACC,GAAG,CAAAgC,SAAA,CAAAlC,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAAC+B,SAAA,CAAAlC,EAAA,CAAEI,MAAM,IAAI8B,SAAA,CAAAlC,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAI8B,SAAA,CAAAlC,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAA6B,SAAA,CAAA5B,IAAA;;WAAAwB,QAAA;OAEtE;MAAA,SAAAF,OAAAO,GAAA;QAAA,OAAAN,OAAA,CAAArB,KAAA,OAAAC,SAAA;;MAAA,OAAAmB,MAAA;;IAEDQ,UAAU;MAAA,IAAAC,WAAA,GAAA/E,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAA8E,SAAAC,KAAA;QAAA,IAAAlG,QAAA,EAAA0E,GAAA,EAAAS,SAAA,EAAA3D,IAAA,EAAA2E,YAAA,EAAArE,MAAA,EAAAnB,WAAA,EAAAuB,QAAA;QAAA,OAAAhB,mBAAA,GAAAmB,IAAA,UAAA+D,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA7D,IAAA,GAAA6D,SAAA,CAAA5D,IAAA;YAAA;cAASzC,QAAQ,GAAAkG,KAAA,CAARlG,QAAQ,EAAE0E,GAAG,GAAAwB,KAAA,CAAHxB,GAAG,EAAES,SAAS,GAAAe,KAAA,CAATf,SAAS,EAAE3D,IAAI,GAAA0E,KAAA,CAAJ1E,IAAI;cAC3C2E,YAAY,GAAQzB,GAAG;cAEvB5C,MAAM,GAAAgB,QAAA,KACHqC,SAAS,EACT3D,IAAI;cAAA6E,SAAA,CAAA7D,IAAA;cAID7B,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;cAAAqG,SAAA,CAAA5D,IAAA;cAAA,OAEjC3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAACwF,YAAY,EAAErE,MAAM,CAAC,GAAGlB,WAAe,CAACZ,QAAQ,EAAEmG,YAAY,EAAErE,MAAM,CAAC,CACpG;YAAA;cAFKI,QAAQ,GAAAmE,SAAA,CAAAlD,IAAA;cAAA,OAAAkD,SAAA,CAAAhD,MAAA,WAIP;gBACHC,IAAI,EAAEpB;eACT;YAAA;cAAAmE,SAAA,CAAA7D,IAAA;cAAA6D,SAAA,CAAA1C,EAAA,GAAA0C,SAAA;cAEDzC,OAAO,CAACC,GAAG,CAAAwC,SAAA,CAAA1C,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAACuC,SAAA,CAAA1C,EAAA,CAAEI,MAAM,IAAIsC,SAAA,CAAA1C,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAIsC,SAAA,CAAA1C,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAAqC,SAAA,CAAApC,IAAA;;WAAAgC,QAAA;OAEtE;MAAA,SAAAF,WAAAO,GAAA;QAAA,OAAAN,WAAA,CAAA7B,KAAA,OAAAC,SAAA;;MAAA,OAAA2B,UAAA;;IAEDQ,UAAU;MAAA,IAAAC,WAAA,GAAAvF,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAsF,SAAAC,KAAA;QAAA,IAAA1G,QAAA,EAAAmF,SAAA,EAAA3D,IAAA,EAAAM,MAAA,EAAAnB,WAAA,EAAAuB,QAAA;QAAA,OAAAhB,mBAAA,GAAAmB,IAAA,UAAAsE,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAApE,IAAA,GAAAoE,SAAA,CAAAnE,IAAA;YAAA;cAASzC,QAAQ,GAAA0G,KAAA,CAAR1G,QAAQ,EAAEmF,SAAS,GAAAuB,KAAA,CAATvB,SAAS,EAAE3D,IAAI,GAAAkF,KAAA,CAAJlF,IAAI;cACtCM,MAAM,GAAAgB,QAAA,KACHqC,SAAS,EACT3D,IAAI;cAAAoF,SAAA,CAAApE,IAAA;cAID7B,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;cAAA4G,SAAA,CAAAnE,IAAA;cAAA,OAEjC3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAACmB,MAAM,CAAC,GAAGlB,WAAe,CAACZ,QAAQ,EAAE8B,MAAM,CAAC,CACxE;YAAA;cAFKI,QAAQ,GAAA0E,SAAA,CAAAzD,IAAA;cAAA,OAAAyD,SAAA,CAAAvD,MAAA,WAIP;gBACHC,IAAI,EAAEpB;eACT;YAAA;cAAA0E,SAAA,CAAApE,IAAA;cAAAoE,SAAA,CAAAjD,EAAA,GAAAiD,SAAA;cAEDhD,OAAO,CAACC,GAAG,CAAA+C,SAAA,CAAAjD,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAAC8C,SAAA,CAAAjD,EAAA,CAAEI,MAAM,IAAI6C,SAAA,CAAAjD,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAI6C,SAAA,CAAAjD,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAA4C,SAAA,CAAA3C,IAAA;;WAAAwC,QAAA;OAEtE;MAAA,SAAAF,WAAAM,GAAA;QAAA,OAAAL,WAAA,CAAArC,KAAA,OAAAC,SAAA;;MAAA,OAAAmC,UAAA;;IAEDO,MAAM;MAAA,IAAAC,OAAA,GAAA9F,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAA6F,SAAAC,KAAA;QAAA,IAAAjH,QAAA,EAAA2F,EAAA,EAAAnE,IAAA,EAAAM,MAAA,EAAAnB,WAAA,EAAAuB,QAAA;QAAA,OAAAhB,mBAAA,GAAAmB,IAAA,UAAA6E,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA3E,IAAA,GAAA2E,SAAA,CAAA1E,IAAA;YAAA;cAASzC,QAAQ,GAAAiH,KAAA,CAARjH,QAAQ,EAAE2F,EAAE,GAAAsB,KAAA,CAAFtB,EAAE,EAAEnE,IAAI,GAAAyF,KAAA,CAAJzF,IAAI;cAC3BM,MAAM,GAAAgB,QAAA,KACHtB,IAAI;cAAA2F,SAAA,CAAA3E,IAAA;cAID7B,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;cAAAmH,SAAA,CAAA1E,IAAA;cAAA,OAE9B3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAACgF,EAAE,EAAE7D,MAAM,CAAC,GAAGlB,QAAY,CAACZ,QAAQ,EAAE2F,EAAE,EAAE7D,MAAM,CAAC,CAC7E;YAAA;cAFKI,QAAQ,GAAAiF,SAAA,CAAAhE,IAAA;cAAA,OAAAgE,SAAA,CAAA9D,MAAA,WAIP;gBACHC,IAAI,EAAEpB;eACT;YAAA;cAAAiF,SAAA,CAAA3E,IAAA;cAAA2E,SAAA,CAAAxD,EAAA,GAAAwD,SAAA;cAEDvD,OAAO,CAACC,GAAG,CAAAsD,SAAA,CAAAxD,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAACqD,SAAA,CAAAxD,EAAA,CAAEI,MAAM,IAAIoD,SAAA,CAAAxD,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAIoD,SAAA,CAAAxD,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAAmD,SAAA,CAAAlD,IAAA;;WAAA+C,QAAA;OAEtE;MAAA,SAAAF,OAAAM,GAAA;QAAA,OAAAL,OAAA,CAAA5C,KAAA,OAAAC,SAAA;;MAAA,OAAA0C,MAAA;;IAEDO,SAAS;MAAA,IAAAC,UAAA,GAAArG,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAoG,SAAAC,KAAA;QAAA,IAAAxH,QAAA,EAAA2F,EAAA,EAAAnE,IAAA,EAAAM,MAAA,EAAAnB,WAAA,EAAAuB,QAAA,EAAAuF,YAAA,EAAAC,SAAA;QAAA,OAAAxG,mBAAA,GAAAmB,IAAA,UAAAsF,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAApF,IAAA,GAAAoF,SAAA,CAAAnF,IAAA;YAAA;cAASzC,QAAQ,GAAAwH,KAAA,CAARxH,QAAQ,EAAE2F,EAAE,GAAA6B,KAAA,CAAF7B,EAAE,EAAEnE,IAAI,GAAAgG,KAAA,CAAJhG,IAAI;cAAAoG,SAAA,CAAApF,IAAA;cAAA,MAE1BhB,IAAI,IAAIA,IAAI,CAACqG,UAAU,KAAK,SAAS;gBAAAD,SAAA,CAAAnF,IAAA;gBAAA;;cACjCX,MAAM,GAAAgB,QAAA;gBACNlB,MAAM,EAAE;iBACLJ,IAAI;cAGLb,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;cAAA4H,SAAA,CAAAnF,IAAA;cAAA,OAEhC3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAACgF,EAAE,EAAE7D,MAAM,CAAC,GAAGlB,UAAc,CAACZ,QAAQ,EAAE2F,EAAE,EAAE7D,MAAM,CAAC,CAC/E;YAAA;cAFKI,QAAQ,GAAA0F,SAAA,CAAAzE,IAAA;cAAA,OAAAyE,SAAA,CAAAvE,MAAA,WAIP;gBACHC,IAAI,EAAEpB;eACT;YAAA;cAEKvB,YAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;cAAA4H,SAAA,CAAAnF,IAAA;cAAA,OAEhC3B,cAAc,CAACoC,OAAO,CAC9CvC,YAAW,GAAGA,YAAW,CAACgF,EAAE,CAAC,GAAG/E,UAAc,CAACZ,QAAQ,EAAE2F,EAAE,CAAC,CAC/D;YAAA;cAFKzD,SAAQ,GAAA0F,SAAA,CAAAzE,IAAA;cAAA,OAAAyE,SAAA,CAAAvE,MAAA,WAIP;gBACHC,IAAI,EAAEpB;eACT;YAAA;cAAA0F,SAAA,CAAAnF,IAAA;cAAA;YAAA;cAAAmF,SAAA,CAAApF,IAAA;cAAAoF,SAAA,CAAAjE,EAAA,GAAAiE,SAAA;cAGLhE,OAAO,CAACC,GAAG,CAAA+D,SAAA,CAAAjE,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAAC8D,SAAA,CAAAjE,EAAA,CAAEI,MAAM,IAAI6D,SAAA,CAAAjE,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAI6D,SAAA,CAAAjE,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAA4D,SAAA,CAAA3D,IAAA;;WAAAsD,QAAA;OAEtE;MAAA,SAAAF,UAAAS,GAAA;QAAA,OAAAR,UAAA,CAAAnD,KAAA,OAAAC,SAAA;;MAAA,OAAAiD,SAAA;;IAEDU,UAAU;MAAA,IAAAC,WAAA,GAAA/G,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAA8G,SAAAC,KAAA;QAAA,IAAAlI,QAAA,EAAA0E,GAAA,EAAAlD,IAAA,EAAA2E,YAAA,EAAArE,MAAA,EAAAnB,WAAA,EAAAuB,QAAA,EAAAiG,aAAA,EAAAC,UAAA;QAAA,OAAAlH,mBAAA,GAAAmB,IAAA,UAAAgG,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA9F,IAAA,GAAA8F,SAAA,CAAA7F,IAAA;YAAA;cAASzC,QAAQ,GAAAkI,KAAA,CAARlI,QAAQ,EAAE0E,GAAG,GAAAwD,KAAA,CAAHxD,GAAG,EAAElD,IAAI,GAAA0G,KAAA,CAAJ1G,IAAI;cAAA8G,SAAA,CAAA9F,IAAA;cAE5B2D,YAAY,GAAQzB,GAAG;cAAA,MAEvBlD,IAAI,IAAIA,IAAI,CAACqG,UAAU,KAAK,SAAS;gBAAAS,SAAA,CAAA7F,IAAA;gBAAA;;cACjCX,MAAM,GAAAgB,QAAA;gBACNlB,MAAM,EAAE;iBACLJ,IAAI;cAGLb,WAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;cAAAsI,SAAA,CAAA7F,IAAA;cAAA,OAEjC3B,cAAc,CAACoC,OAAO,CAC9CvC,WAAW,GAAGA,WAAW,CAACwF,YAAY,EAAErE,MAAM,CAAC,GAAGlB,WAAe,CAACZ,QAAQ,EAAEmG,YAAY,EAAErE,MAAM,CAAC,CACpG;YAAA;cAFKI,QAAQ,GAAAoG,SAAA,CAAAnF,IAAA;cAAA,OAAAmF,SAAA,CAAAjF,MAAA,WAIP;gBACHC,IAAI,EAAEpB;eACT;YAAA;cAEKvB,aAAW,GAAGZ,cAAc,CAACC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;cAAAsI,SAAA,CAAA7F,IAAA;cAAA,OAEjC3B,cAAc,CAACoC,OAAO,CAC9CvC,aAAW,GAAGA,aAAW,CAACwF,YAAY,CAAC,GAAGvF,WAAe,CAACZ,QAAQ,EAAEmG,YAAY,CAAC,CACpF;YAAA;cAFKjE,UAAQ,GAAAoG,SAAA,CAAAnF,IAAA;cAAA,OAAAmF,SAAA,CAAAjF,MAAA,WAIP;gBACHC,IAAI,EAAEpB,UAAQ,CAACoB;eAClB;YAAA;cAAAgF,SAAA,CAAA7F,IAAA;cAAA;YAAA;cAAA6F,SAAA,CAAA9F,IAAA;cAAA8F,SAAA,CAAA3E,EAAA,GAAA2E,SAAA;cAGL1E,OAAO,CAACC,GAAG,CAAAyE,SAAA,CAAA3E,EAAE,CAAC;cAAC,MACT,IAAIG,KAAK,CAACwE,SAAA,CAAA3E,EAAA,CAAEI,MAAM,IAAIuE,SAAA,CAAA3E,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,IAAIuE,SAAA,CAAA3E,EAAA,CAAEI,MAAM,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;YAAA;YAAA;cAAA,OAAAsE,SAAA,CAAArE,IAAA;;WAAAgE,QAAA;OAEtE;MAAA,SAAAF,WAAAQ,GAAA;QAAA,OAAAP,WAAA,CAAA7D,KAAA,OAAAC,SAAA;;MAAA,OAAA2D,UAAA;;IAEDS,SAAS,EAAE,SAAAA;MACP,IAAMC,GAAG,GAAQ3H,cAAc,CAAC2H,GAAG;MACnC,OAAOA,GAAG;KACb;IAEDC,MAAM;MAAA,IAAAC,OAAA,GAAA1H,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAyH,UAAAC,MAAA;YAAAJ,GAAA,EAAAK,MAAA,EAAAC,OAAA,EAAAxF,KAAA,EAAAyF,OAAA,EAAA9G;QAAA,OAAAhB,mBAAA,GAAAmB,IAAA,UAAA4G,WAAAC,UAAA;UAAA,kBAAAA,UAAA,CAAA1G,IAAA,GAAA0G,UAAA,CAAAzG,IAAA;YAAA;cAASgG,GAAG,GAAAI,MAAA,CAAHJ,GAAG,EAAEK,MAAM,GAAAD,MAAA,CAANC,MAAM,EAAoBC,OAAO,GAAAF,MAAA,CAAPE,OAAO,EAAExF,KAAK,GAAAsF,MAAA,CAALtF,KAAK,EAAEyF,OAAO,GAAAH,MAAA,CAAPG,OAAO;cAAAE,UAAA,CAAAvF,EAAA,GAE3DmF,MAAM;cAAAI,UAAA,CAAAzG,IAAA,GAAAyG,UAAA,CAAAvF,EAAA,KACL,KAAK,OAAAuF,UAAA,CAAAvF,EAAA,KASL,MAAM,OAAAuF,UAAA,CAAAvF,EAAA,KAQN,OAAO,QAAAuF,UAAA,CAAAvF,EAAA,KAQP,QAAQ;cAAA;YAAA;cAAAuF,UAAA,CAAAzG,IAAA;cAAA,OAxBQ3B,cAAc,CAACoC,OAAO,CAAC;gBAAA,OAAO;kBAC3CiG,IAAI,EAAEV,GAAG;kBACTK,MAAM,EAAE,KAAK;kBACbM,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO,CAAC;kBAC7BjH,MAAM,EAAEyB;iBACX;eAAC,CAAC;YAAA;cALHrB,QAAQ,GAAAgH,UAAA,CAAA/F,IAAA;cAAA,OAAA+F,UAAA,CAAA7F,MAAA;YAAA;cAAA6F,UAAA,CAAAzG,IAAA;cAAA,OASS3B,cAAc,CAACoC,OAAO,CAAC;gBAAA,OAAO;kBAC3CiG,IAAI,EAAEV,GAAG;kBACTK,MAAM,EAAE,MAAM;kBACdM,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO,CAAC;kBAC7BjH,MAAM,EAAEyB;iBACX;eAAC,CAAC;YAAA;cALHrB,QAAQ,GAAAgH,UAAA,CAAA/F,IAAA;cAAA,OAAA+F,UAAA,CAAA7F,MAAA;YAAA;cAAA6F,UAAA,CAAAzG,IAAA;cAAA,OAQS3B,cAAc,CAACoC,OAAO,CAAC;gBAAA,OAAO;kBAC3CiG,IAAI,EAAEV,GAAG;kBACTK,MAAM,EAAE,OAAO;kBACfM,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO,CAAC;kBAC7BjH,MAAM,EAAEyB;iBACX;eAAC,CAAC;YAAA;cALHrB,QAAQ,GAAAgH,UAAA,CAAA/F,IAAA;cAAA,OAAA+F,UAAA,CAAA7F,MAAA;YAAA;cAAA6F,UAAA,CAAAzG,IAAA;cAAA,OAQS3B,cAAc,CAACoC,OAAO,CAAC;gBAAA,OAAO;kBAC3CiG,IAAI,EAAEV,GAAG;kBACTK,MAAM,EAAE,QAAQ;kBAChBhH,MAAM,EAAEyB;iBACX;eAAC,CAAC;YAAA;cAJHrB,QAAQ,GAAAgH,UAAA,CAAA/F,IAAA;cAAA,OAAA+F,UAAA,CAAA7F,MAAA;YAAA;cAAA6F,UAAA,CAAAzG,IAAA;cAAA,OAOS3B,cAAc,CAACoC,OAAO,CAAC;gBAAA,OAAO;kBAC3CiG,IAAI,EAAEV,GAAG;kBACTK,MAAM,EAAE,KAAK;kBACbhH,MAAM,EAAEyB;iBACX;eAAC,CAAC;YAAA;cAJHrB,QAAQ,GAAAgH,UAAA,CAAA/F,IAAA;cAAA,OAAA+F,UAAA,CAAA7F,MAAA;YAAA;cAAA,OAAA6F,UAAA,CAAA7F,MAAA,WAQT;gBACHC,IAAI,EAAEpB;eACT;YAAA;YAAA;cAAA,OAAAgH,UAAA,CAAAjF,IAAA;;WAAA2E,SAAA;OACJ;MAAA,SAAAF,OAAAa,IAAA;QAAA,OAAAZ,OAAA,CAAAxE,KAAA,OAAAC,SAAA;;MAAA,OAAAsE,MAAA;;GACJ;AAAA;;ACvfD,IAAMc,SAAS,GAAQ;EACnBC,OAAO,EAAE,QAAQ;EACjBC,OAAO,EAAE,QAAQ;EACjBC,OAAO,EAAE;CACZ;AAED,IAAaC,YAAY,GAAG,SAAfA,YAAYA,CAAI9I,cAAmB,EAAE+I,OAAW;EACzD,IAAIC,eAAe,GAAQ,EAAE;EAC7B,OAAO;IACHC,SAAS,EAAE,SAAAA,UAAA1I,IAAA;UAAG2I,OAAO,GAAA3I,IAAA,CAAP2I,OAAO;QAAEC,KAAK,GAAA5I,IAAA,CAAL4I,KAAK;QAAEnI,MAAM,GAAAT,IAAA,CAANS,MAAM;QAAEoI,QAAQ,GAAA7I,IAAA,CAAR6I,QAAQ;MAC1C,IAAIC,YAAY,GAAGH,OAAO,GACpBA,OAAO,GACPI,IAAI,CAACC,GAAG,EAAE,GACV,GAAG,GACHC,IAAI,CAACC,MAAM,EAAE,CACRC,QAAQ,CAAC,EAAE,CAAC,CACZC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;MAE3B,IAAIZ,OAAO,GAAQ;QAAEa,GAAG,EAAEP;OAAc;MAExC,IAAIrI,MAAM,YAANA,MAAM,CAAEyB,KAAK,EAAE;QACfsG,OAAO,GAAA/G,QAAA,KAAQ+G,OAAO;UAAEtG,KAAK,EAAEzB,MAAM,CAACyB;UAAO;;MAGjD,IAAI,CAAA0G,KAAK,oBAALA,KAAK,CAAE1L,MAAM,IAAG,CAAC,EAAE;QACnB,MAAM,IAAIuF,KAAK,CACX,6LAA6L,CAChM;;MAGL,IAAImG,KAAK,YAALA,KAAK,CAAE1L,MAAM,IAAIiL,SAAS,CAACS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QACtCJ,OAAO,GAAA/G,QAAA,KAAQ+G,OAAO;UAAEc,KAAK,EAAEnB,SAAS,CAACS,KAAK,CAAC,CAAC,CAAC;UAAG;;MAGxD,IAAInI,MAAM,YAANA,MAAM,CAAE9B,QAAQ,EAAE;QAClBiB,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAAoD;UAAA,IAAAqG,qBAAA,EAAAC,YAAA,EAAAC,WAAA,EAAAC,cAAA;UAAA,OAAA7J,mBAAA,GAAAmB,IAAA,UAAAsC,UAAAC,SAAA;YAAA,kBAAAA,SAAA,CAAApC,IAAA,GAAAoC,SAAA,CAAAnC,IAAA;cAAA;gBAAAmC,SAAA,CAAAnC,IAAA;gBAAA,OAC+C3B,cAAc,CAACiJ,SAAS,CAACjI,MAAM,oBAANA,MAAM,CAAE9B,QAAQ,EAAE6J,OAAO,CAAC;cAAA;gBAAAe,qBAAA,GAAAhG,SAAA,CAAAzB,IAAA;gBAAvF0H,YAAY,GAAAD,qBAAA,CAAZC,YAAY;gBAAEC,WAAW,GAAAF,qBAAA,CAAXE,WAAW;gBAE3BC,cAAc;kBAAA,IAAA7F,KAAA,GAAAjE,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QAAOyJ,YAAiB;oBAAA,IAAAG,yBAAA,EAAAC,iBAAA,EAAAC,cAAA,EAAAC,SAAA,EAAAC,KAAA,EAAAxM,IAAA;oBAAA,OAAAsC,mBAAA,GAAAmB,IAAA,UAAAC,SAAAC,QAAA;sBAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;wBAAA;0BAAAuI,yBAAA;0BAAAC,iBAAA;0BAAA1I,QAAA,CAAAC,IAAA;0BAAA2I,SAAA,GAAAE,cAAA,CAClBR,YAAY;wBAAA;0BAAAtI,QAAA,CAAAE,IAAA;0BAAA,OAAA0I,SAAA,CAAA1I,IAAA;wBAAA;0BAAA,MAAAuI,yBAAA,KAAAI,KAAA,GAAA7I,QAAA,CAAAY,IAAA,EAAAmI,IAAA;4BAAA/I,QAAA,CAAAE,IAAA;4BAAA;;0BAApB7D,IAAI,GAAAwM,KAAA,CAAA9L,KAAA;;0BAEjB4K,QAAQ,CAACtL,IAAI,CAAC;wBAAC;0BAAAoM,yBAAA;0BAAAzI,QAAA,CAAAE,IAAA;0BAAA;wBAAA;0BAAAF,QAAA,CAAAE,IAAA;0BAAA;wBAAA;0BAAAF,QAAA,CAAAC,IAAA;0BAAAD,QAAA,CAAAoB,EAAA,GAAApB,QAAA;0BAAA0I,iBAAA;0BAAAC,cAAA,GAAA3I,QAAA,CAAAoB,EAAA;wBAAA;0BAAApB,QAAA,CAAAC,IAAA;0BAAAD,QAAA,CAAAC,IAAA;0BAAA,MAAAwI,yBAAA,IAAAG,SAAA;4BAAA5I,QAAA,CAAAE,IAAA;4BAAA;;0BAAAF,QAAA,CAAAE,IAAA;0BAAA,OAAA0I,SAAA;wBAAA;0BAAA5I,QAAA,CAAAC,IAAA;0BAAA,KAAAyI,iBAAA;4BAAA1I,QAAA,CAAAE,IAAA;4BAAA;;0BAAA,MAAAyI,cAAA;wBAAA;0BAAA,OAAA3I,QAAA,CAAAgJ,MAAA;wBAAA;0BAAA,OAAAhJ,QAAA,CAAAgJ,MAAA;wBAAA;wBAAA;0BAAA,OAAAhJ,QAAA,CAAA0B,IAAA;;uBAAA7C,OAAA;mBAEtB;kBAAA,gBALK2J,cAAcA,CAAA7G,EAAA;oBAAA,OAAAgB,KAAA,CAAAf,KAAA,OAAAC,SAAA;;;gBAOpB2G,cAAc,CAACF,YAAY,CAAC,CAAC;gBAE7Bf,eAAe,CAACK,YAAY,CAAC,GAAGW,WAAW;cAAC;cAAA;gBAAA,OAAAlG,SAAA,CAAAX,IAAA;;aAAAM,QAAA;SAC/C,IAAG;QAEJ,OAAO4F,YAAY;OACtB,MAAM,MAAM,IAAIrG,KAAK,CAAC,sBAAsB,CAAC;KACjD;IAEDgH,WAAW;MAAA,IAAAU,aAAA,GAAAvK,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAA8D,SAAO6F,YAAW;QAAA,OAAA5J,mBAAA,GAAAmB,IAAA,UAAA+C,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA7C,IAAA,GAAA6C,SAAA,CAAA5C,IAAA;YAAA;cAC3B,IAAIqI,YAAW,IAAIhB,eAAe,CAACgB,YAAW,CAAC,EAAE;gBAC7ChB,eAAe,CAACgB,YAAW,CAAC,EAAE;gBAC9B,OAAOhB,eAAe,CAACgB,YAAW,CAAC;;YACtC;YAAA;cAAA,OAAAzF,SAAA,CAAApB,IAAA;;WAAAgB,QAAA;OACJ;MAAA,SAAA6F,YAAAhG,GAAA;QAAA,OAAA0G,aAAA,CAAArH,KAAA,OAAAC,SAAA;;MAAA,OAAA0G,WAAA;;GACJ;AACL,CAAC;;IC5DYW,UAAU,GAAG,SAAbA,UAAUA,CAAI3K,cAAmB;EAC1C,OAAO;IACH4K,KAAK;MAAA,IAAAC,MAAA,GAAA1K,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAC,QAAOwK,UAAkB,EAAEC,QAAgB,EAAEzI;;;;;kBAAAA;gBAAAA,OAAe,MAAM;;cAAAb,QAAA,CAAAE,IAAA;cAAA,OAChD3B,cAAc,CAAC4K,KAAK,CAACE,UAAU,EAAEC,QAAQ,EAAE;gBAAEzI,IAAI,EAAJA;eAAM,CAAC;YAAA;cAArElB,QAAQ,GAAAK,QAAA,CAAAY,IAAA;cAAA,OAAAZ,QAAA,CAAAc,MAAA,WAELnB,QAAQ;YAAA;YAAA;cAAA,OAAAK,QAAA,CAAA0B,IAAA;;WAAA7C,OAAA;OAClB;MAAA,SAAAsK,MAAAxH,EAAA,EAAAY,GAAA,EAAAQ,GAAA;QAAA,OAAAqG,MAAA,CAAAxH,KAAA,OAAAC,SAAA;;MAAA,OAAAsH,KAAA;;IACDI,EAAE;MAAA,IAAAC,GAAA,GAAA9K,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAoD,SAAOyH,QAAY;QAAA,IAAAF,EAAA;QAAA,OAAA5K,mBAAA,GAAAmB,IAAA,UAAAsC,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAApC,IAAA,GAAAoC,SAAA,CAAAnC,IAAA;YAAA;cAAAmC,SAAA,CAAAnC,IAAA;cAAA,OACJ3B,cAAc,CAACoC,OAAO,CAAC+I,MAAM,CAACD,QAAQ,CAAC,CAAC;YAAA;cAAnDF,EAAE,GAAAlH,SAAA,CAAAzB,IAAA;cAAA,OAAAyB,SAAA,CAAAvB,MAAA,WACCyI,EAAE;YAAA;YAAA;cAAA,OAAAlH,SAAA,CAAAX,IAAA;;WAAAM,QAAA;OACZ;MAAA,SAAAuH,GAAAhG,GAAA;QAAA,OAAAiG,GAAA,CAAA5H,KAAA,OAAAC,SAAA;;MAAA,OAAA0H,EAAA;;IACDI,QAAQ;MAAA,IAAAC,SAAA,GAAAlL,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAA8D,SAAOmH,KAAa;QAAA,OAAAlL,mBAAA,GAAAmB,IAAA,UAAA+C,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA7C,IAAA,GAAA6C,SAAA,CAAA5C,IAAA;YAAA;cAAA4C,SAAA,CAAA5C,IAAA;cAAA,OACpB3B,cAAc,QAAK,CAACuL,WAAW,CAACD,KAAK,CAAC,CAAC;YAAA;YAAA;cAAA,OAAA/G,SAAA,CAAApB,IAAA;;WAAAgB,QAAA;OAChD;MAAA,SAAAiH,SAAA5F,GAAA;QAAA,OAAA6F,SAAA,CAAAhI,KAAA,OAAAC,SAAA;;MAAA,OAAA8H,QAAA;;IACDI,QAAQ,EAAE,SAAAA;MACN,OAAOxL,cAAc,CAACwL,QAAQ,EAAE;KACnC;IACDC,MAAM;MAAA,IAAAC,OAAA,GAAAvL,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAE,SAAAsE;QAAA,OAAAvE,mBAAA,GAAAmB,IAAA,UAAAuD,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAArD,IAAA,GAAAqD,SAAA,CAAApD,IAAA;YAAA;cAAAoD,SAAA,CAAApD,IAAA;cAAA,OACS3B,cAAc,CAACyL,MAAM,EAAE;YAAA;cAAA,OAAA1G,SAAA,CAAAxC,MAAA,WAAAwC,SAAA,CAAA1C,IAAA;YAAA;YAAA;cAAA,OAAA0C,SAAA,CAAA5B,IAAA;;WAAAwB,QAAA;OACvC;MAAA,SAAA8G;QAAA,OAAAC,OAAA,CAAArI,KAAA,OAAAC,SAAA;;MAAA,OAAAmI,MAAA;;GACJ;AACL,CAAC;;ICJYE,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,UAA4B;;EACtD,IAAQpJ,IAAI,GAAyCoJ,UAAU,CAAvDpJ,IAAI;IAAEqJ,QAAQ,GAA+BD,UAAU,CAAjDC,QAAQ;IAAEC,UAAU,GAAmBF,UAAU,CAAvCE,UAAU;IAAEC,YAAY,GAAKH,UAAU,CAA3BG,YAAY;EAEhD,IAAI,CAACvJ,IAAI,EAAE;IACP,OAAO;MAAEwJ,QAAQ,EAAE;KAAI;;EAG3B,IAAMC,KAAK,GAAG;IACVC,IAAI,EAAE1J,IAAI,CAAC0J,IAAI;IACfF,QAAQ,GAAAG,cAAA,GACJ3J,IAAI,CAACwJ,QAAQ,YAAAG,cAAA,GACb,CAACC,KAAK,CAACC,OAAO,CAAC7J,IAAI,CAAC,GAAGA,IAAI,GAAG,CAACA,IAAI,CAAC,EAAE3E,GAAG,CAAC,UAACC,IAAS;MAChD,IAAMoO,IAAI,GAAQ;QACdI,IAAI,EAAEP,YAAY,GAAGA,YAAY,CAACjO,IAAI,CAAC,GAAGA,IAAI,CAACyO,KAAK;QACpD5E,GAAG,EAAEmE,UAAU,GAAGA,UAAU,CAAChO,IAAI,CAAC,GAAM+N,QAAQ,eAAU/N,IAAI,CAAC+G,EAAI;QACnE2H,OAAO,EAAE1O,IAAI,CAAC0O,OAAO;QACrBC,IAAI,EAAE3O,IAAI,CAAC4O,QAAQ;QACnB5L,MAAM,EAAE,MAAM;QACd3B,IAAI,EAAErB,IAAI,CAACqB,IAAI;QACfyK,GAAG,EAAE9L,IAAI,CAAC+G;OACb;MAED,OAAOqH,IAAI;KACd;GACR;EAED,OAAOD,KAAK;AAChB,CAAC;AAED,IAAaU,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,eAA8B,EAAE5M,cAAmB;EACjF,IAAA6M,SAAA,GAA0BC,QAAQ,CAAW,EAAE,CAAC;IAAzCC,eAAe,GAAAF,SAAA;EACtB,IAAAG,UAAA,GAAgCF,QAAQ,CAAQ,EAAE,CAAC;IAA5Cd,QAAQ,GAAAgB,UAAA;IAAEC,WAAW,GAAAD,UAAA;EAE5B,IAAME,aAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAU,EAAElB,KAAY,EAAEmB,QAAgB;IAC5D,IAAMC,UAAU,GAAGrB,QAAQ,CAACvO,MAAM;IAClC,IAAM6P,UAAU,GAAGrB,KAAK,CAACxO,MAAM;IAE/B,IAAI4P,UAAU,GAAGC,UAAU,GAAGF,QAAQ,EAAE;MACpC,IAAMG,eAAe,GAAGF,UAAU,GAAGC,UAAU,GAAGF,QAAQ;;MAE1D,IAAMI,eAAe,GAAGD,eAAe,GAAGA,eAAe,GAAG,CAAC;MAC7DtB,KAAK,CAACwB,MAAM,CAACD,eAAe,CAAC;;;;IAKjCP,WAAW,IAAApL,MAAA,CAAKmK,QAAQ,EAAKC,KAAK,CAAC,CAAC;IAEpC,OAAO,IAAI;GACd;EAED,IAAMyB,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,SAAiB;IACrC,IAAMC,WAAW,GAAGhB,eAAe,CAACtO,MAAM,CAAC,UAACuP,MAAW;MAAA,OAAKA,MAAM,CAACvB,IAAI,KAAKqB,SAAS;MAAC,CAAC,CAAC,CAAC;IAEzF,IAAMG,aAAa;MAAA,IAAApK,KAAA,GAAAvD,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QAAAC,IAAA;QAAA,IAAA2L,IAAA,EAAA6B,OAAA,EAAAC,SAAA,EAAAC,IAAA,EAAAzL,IAAA;QAAA,OAAApC,mBAAA,GAAAmB,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAASuK,IAAI,GAAA3L,IAAA,CAAJ2L,IAAI,EAAE6B,OAAO,GAAAxN,IAAA,CAAPwN,OAAO,EAAEC,SAAS,GAAAzN,IAAA,CAATyN,SAAS;cAAAvM,QAAA,CAAAC,IAAA;cAEzCuM,IAAI,GAAG,IAAIC,QAAQ,EAAE;cAC3B,IAAIN,WAAW,YAAXA,WAAW,CAAErB,KAAK,EAAE;gBACpB0B,IAAI,CAACE,MAAM,CAAC,OAAO,EAAEP,WAAW,CAACrB,KAAK,CAAC;;cAE3C,IAAIqB,WAAW,YAAXA,WAAW,CAAEQ,MAAM,EAAE;gBACrBH,IAAI,CAACE,MAAM,CAAC,QAAQ,EAAEP,WAAW,CAACQ,MAAM,CAAC;;cAE7CH,IAAI,CAACE,MAAM,CAAC,MAAM,EAAEjC,IAAI,CAAC;cAACzK,QAAA,CAAAE,IAAA;cAAA,OAEP3B,cAAc,CAACoC,OAAO,CAACiM,WAAW,CAACJ,IAAI,CAAC,CAAC;YAAA;cAAtDzL,IAAI,GAAAf,QAAA,CAAAY,IAAA;cACV2L,SAAS,oBAATA,SAAS,CAAG;gBAAExL,IAAI,EAAJA;eAAM,EAAE,IAAI8L,cAAc,EAAE,CAAC;cAAC7M,QAAA,CAAAE,IAAA;cAAA;YAAA;cAAAF,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAoB,EAAA,GAAApB,QAAA;cAE5CsM,OAAO,oBAAPA,OAAO,CAAG,IAAI/K,KAAK,CAAC,cAAc,CAAC,CAAC;YAAC;YAAA;cAAA,OAAAvB,QAAA,CAAA0B,IAAA;;WAAA7C,OAAA;OAE5C;MAAA,gBAhBKwN,aAAaA,CAAA1K,EAAA;QAAA,OAAAM,KAAA,CAAAL,KAAA,OAAAC,SAAA;;OAgBlB;IAED,OAAO;MACHyJ,eAAe,EAAfA,eAAe;MACfG,YAAY,EAAE,SAAAA,aAACC,KAAU,EAAElB,KAAY;QAAA,OAAKiB,aAAY,CAACC,KAAK,EAAElB,KAAK,EAAE2B,WAAW,CAACR,QAAQ,CAAC;;MAC5FpB,QAAQ,EAARA,QAAQ;MACRoB,QAAQ,EAAEQ,WAAW,CAACR,QAAQ;MAC9BU,aAAa,EAAbA;KACH;GACJ;EAED,OAAOJ,cAAc;AACzB,CAAC;AAED,IAAaa,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIvN,MAAW,EAAE4L,eAA8B;+BACjC;IAAnC,IAAM9O,IAAI,GAAA0Q,YAAA,CAAAC,EAAA;IACX,IAAIzN,MAAM,CAAClD,IAAI,CAAC,EAAE;MACd,IAAM4Q,KAAK,GAAG1N,MAAM,CAAClD,IAAI,CAAC,CAACkO,QAAQ;MACnC,IAAM2C,YAAY,GAAGvC,KAAK,CAACC,OAAO,CAACqC,KAAK,CAAC;MACzC,IAAIC,YAAY,EAAE;QACd,IAAMf,WAAW,GAAGhB,eAAe,CAACtO,MAAM,CAAC,UAACuP,MAAW;UAAA,OAAKA,MAAM,CAACvB,IAAI,KAAKxO,IAAI;UAAC,CAAC,CAAC,CAAC;QACpF,IAAM8F,GAAG,GAAG,EAAE;QACd,SAAAgL,GAAA,MAAAC,aAAA,GAAkBC,MAAM,CAACC,IAAI,CAACL,KAAK,CAAC,EAAAE,GAAA,GAAAC,aAAA,CAAApR,MAAA,EAAAmR,GAAA,IAAE;UAAjC,IAAMI,GAAG,GAAAH,aAAA,CAAAD,GAAA;UACV,IAAIF,KAAK,CAACM,GAAG,CAAC,CAAC5N,QAAQ,EAAE;YACrB,IAAIwM,WAAW,CAACqB,SAAS,EAAE;cACvBrL,GAAG,CAAC5F,IAAI,CAAC4P,WAAW,CAACqB,SAAS,CAACP,KAAK,CAACM,GAAG,CAAC,CAAC5N,QAAQ,CAACoB,IAAI,CAACqC,EAAE,CAAC,CAAC;aAC/D,MAAM;cACHjB,GAAG,CAAC5F,IAAI,CAAC0Q,KAAK,CAACM,GAAG,CAAC,CAAC5N,QAAQ,CAACoB,IAAI,CAACqC,EAAE,CAAC;;WAE5C,MAAM;YACHjB,GAAG,CAAC5F,IAAI,CAAC0Q,KAAK,CAACM,GAAG,CAAC,CAACpF,GAAG,CAAC;;;QAIhC,IAAIgE,WAAW,CAACsB,QAAQ,EAAE;UACtBlO,MAAM,CAAClD,IAAI,CAAC,GAAG8F,GAAG;SACrB,MAAM;UACH5C,MAAM,CAAClD,IAAI,CAAC,GAAG8F,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;;;;GAIpD;EA1BD,SAAA6K,EAAA,MAAAD,YAAA,GAAmBM,MAAM,CAACC,IAAI,CAAC/N,MAAM,CAAC,EAAAyN,EAAA,GAAAD,YAAA,CAAA/Q,MAAA,EAAAgR,EAAA;IAAAU,KAAA;;EA4BtC,OAAOnO,MAAM;AACjB,CAAC;;;;"} -------------------------------------------------------------------------------- /package/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@tspvivek/refine-directus", 3 | "description": "Refine Directus REST data provider. This is a wrapper around the Directus SDK to use in refine.", 4 | "version": "1.0.38", 5 | "license": "MIT", 6 | "main": "dist/index.js", 7 | "typings": "dist/index.d.ts", 8 | "repository": "git://github.com/tspvivek/refine-directus.git", 9 | "private": false, 10 | "files": [ 11 | "dist", 12 | "src" 13 | ], 14 | "engines": { 15 | "node": ">=10" 16 | }, 17 | "scripts": { 18 | "start": "tsdx watch --tsconfig tsconfig.json --verbose --noClean", 19 | "build": "tsdx build --tsconfig tsconfig.json", 20 | "test": "tsdx test --passWithNoTests --runInBand", 21 | "prepare": "tsdx build", 22 | "size": "size-limit", 23 | "analyze": "size-limit --why" 24 | }, 25 | "peerDependencies": { 26 | "react": "^18.0.0", 27 | "react-dom": "^18.0.0" 28 | }, 29 | "author": "Vivek Palanisamy", 30 | "module": "dist/refine-directus.esm.js", 31 | "size-limit": [ 32 | { 33 | "path": "dist/refine-directus.cjs.production.min.js", 34 | "limit": "10 KB" 35 | }, 36 | { 37 | "path": "dist/refine-directus.esm.js", 38 | "limit": "10 KB" 39 | } 40 | ], 41 | "devDependencies": { 42 | "@size-limit/preset-small-lib": "^5.0.5", 43 | "size-limit": "^5.0.5", 44 | "tsdx": "^0.14.1", 45 | "tslib": "^2.3.1" 46 | }, 47 | "dependencies": { 48 | "@directus/sdk": "^16.0.0", 49 | "@refinedev/core": "^4.46.0", 50 | "@types/react": "^18.2.20", 51 | "pluralize": "^8.0.0" 52 | }, 53 | "gitHead": "829f5a516f98c06f666d6be3e6e6099c75c07719", 54 | "publishConfig": { 55 | "access": "public" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /package/src/dataProvider.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import * as SDK from "@directus/sdk"; 3 | import { ConditionalFilter, CrudFilters, CrudSorting, DataProvider, LogicalFilter } from "@refinedev/core"; 4 | import pluralize from "pluralize"; 5 | 6 | const operators = { 7 | eq: "_eq", 8 | ne: "_neq", 9 | lt: "_lt", 10 | gt: "_gt", 11 | lte: "_lte", 12 | gte: "_gte", 13 | in: "_in", 14 | nin: "_nin", 15 | contains: "_contains", 16 | containss: "_icontains", 17 | ncontains: "_ncontains", 18 | ncontainss: undefined, 19 | null: "_null", 20 | nnull: "_nnull", 21 | between: "_between", 22 | nbetween: "_nbetween", 23 | startswith: "_starts_with", 24 | startswiths: "_istarts_with", 25 | nstartswith: "_nstarts_with", 26 | nstartswiths: "_nistarts_with", 27 | endswith: "_ends_with", 28 | endswiths: "_iends_with", 29 | nendswith: "_nends_with", 30 | nendswiths: "_niends_with", 31 | or: "_or", 32 | and: "_and", 33 | intersects: "_intersects", 34 | nintersects: "_nintersects", 35 | intersectsbbox: "_intersects_bbox", 36 | nintersectsbbox: "_nintersects_bbox", 37 | }; 38 | 39 | const strToObj = (str: string, val: any) => { 40 | var i: number, 41 | obj = {}, 42 | strarr = str.split("."); 43 | var x: any = obj; 44 | for (i = 0; i < strarr.length - 1; i++) { 45 | x = x[strarr[i]] = {}; 46 | } 47 | x[strarr[i]] = val; 48 | return obj; 49 | }; 50 | 51 | const generateSort = (sort?: CrudSorting) => { 52 | const _sort: string[] = []; 53 | 54 | if (sort) { 55 | sort.map((item) => { 56 | if (item.order) { 57 | item.order === "desc" ? _sort.push(`-${item.field}`) : _sort.push(`${item.field}`); 58 | } 59 | }); 60 | } 61 | 62 | return _sort; 63 | }; 64 | 65 | const generateFilter = (filters?: CrudFilters) => { 66 | const queryFilters: { [key: string]: any } = {}; 67 | let search: string = ""; 68 | if (filters) { 69 | queryFilters["_and"] = []; 70 | filters.map((filter) => { 71 | if (filter.operator !== "or" && filter.operator !== "and" && "field" in filter) { 72 | const { field, operator, value } = filter; 73 | 74 | if (value) { 75 | if (field === "search") { 76 | search = value; 77 | } else { 78 | let logicalFilter = generateLogicalFilter(filter); 79 | logicalFilter && queryFilters["_and"].push(logicalFilter); 80 | } 81 | } 82 | } else { 83 | let conditionalFilter = generateConditionalFilter(filter); 84 | conditionalFilter && queryFilters["_and"].push(conditionalFilter); 85 | } 86 | }); 87 | } 88 | 89 | return { search: search, filters: queryFilters }; 90 | }; 91 | 92 | //Function to handle logical filters 93 | const generateLogicalFilter = (item?: LogicalFilter) => { 94 | if (item === undefined) return null; 95 | 96 | const { field, operator, value } = item; 97 | const directusOperator = operators[operator]; 98 | let queryField = `${field}.${directusOperator}`; 99 | let filterObj = strToObj(queryField, value); 100 | 101 | return filterObj; 102 | }; 103 | 104 | //Function to handle conditional filters 105 | const generateConditionalFilter = (item?: ConditionalFilter) => { 106 | if (item === undefined) return null; 107 | 108 | const { operator, value } = item; 109 | const directusOperator = operators[operator]; 110 | 111 | const conditionalFilters: { [key: string]: any } = {}; 112 | conditionalFilters[directusOperator] = []; 113 | 114 | value.map((item) => { 115 | if ("field" in item) { 116 | let logicalFilter = generateLogicalFilter(item); 117 | logicalFilter && conditionalFilters[directusOperator].push(logicalFilter); 118 | } else { 119 | let conditionalFilter = generateConditionalFilter(item); 120 | conditionalFilter && conditionalFilters[directusOperator].push(conditionalFilter); 121 | } 122 | }); 123 | 124 | return conditionalFilters; 125 | }; 126 | 127 | //Function to return SDK function based on resource and type 128 | const getSDKFunction = (resource: string, type: string, singular: boolean = false) => { 129 | //If resource is directus_users then function is readUsers, createUsers, etc. 130 | //If resource is directus_files then function is readFiles, createFiles, etc. 131 | //If resource is directus_roles then function is readRoles, createRoles, etc. 132 | 133 | //if resource has directus_ then remove it 134 | 135 | let functionName = null; 136 | 137 | if (resource.includes("directus_")) { 138 | resource = resource.replace("directus_", ""); 139 | } else { 140 | return null; 141 | } 142 | 143 | if (singular) { 144 | functionName = `${type}${resource.charAt(0).toUpperCase() + resource.slice(1)}`; 145 | //Remove s from end of function name 146 | functionName = pluralize.singular(functionName); 147 | } else { 148 | functionName = `${type}${resource.charAt(0).toUpperCase() + resource.slice(1)}`; 149 | functionName = pluralize.plural(functionName); 150 | } 151 | 152 | //Get SDK function 153 | const sdkFunction = SDK[functionName]; 154 | 155 | return sdkFunction as Function; 156 | }; 157 | 158 | export const dataProvider = (directusClient: any): DataProvider => ({ 159 | getList: async ({ resource, pagination, filters, sorters, meta }) => { 160 | const current = pagination?.current || 1; 161 | const pageSize = pagination?.pageSize || 50; 162 | 163 | const _sort = generateSort(sorters); 164 | const paramsFilters = generateFilter(filters); 165 | 166 | let status: any = { status: { _neq: "archived" } }; 167 | 168 | //Assign copy of fields 169 | let fields: any = meta?.fields ? [...meta.fields] : ["*"]; 170 | 171 | //Delete fields from meta 172 | delete meta?.fields; 173 | 174 | if (meta?.archived === true || meta?.noStatus == true) { 175 | status = {}; 176 | } 177 | 178 | let search = {}; 179 | if (paramsFilters.search) { 180 | search = { search: paramsFilters.search }; 181 | } 182 | 183 | let params: any = { 184 | ...search, 185 | filter: { 186 | ...paramsFilters.filters, 187 | ...status, 188 | }, 189 | page: current, 190 | limit: pageSize, 191 | ...meta, 192 | }; 193 | 194 | let sortString: any = null; 195 | if (sorters && sorters.length > 0) { 196 | sortString = _sort.join(","); 197 | } 198 | 199 | if (sortString) { 200 | params["sort"] = sortString; 201 | } 202 | 203 | try { 204 | const sdkFunction = getSDKFunction(resource, "read", false); 205 | 206 | const response: any = await directusClient.request( 207 | sdkFunction ? sdkFunction({ ...params, fields }) : SDK.readItems(resource, { ...params, fields }) 208 | ); 209 | 210 | if (pageSize == -1 || pagination?.mode == "off") { 211 | return { 212 | data: response, 213 | total: response.length, 214 | }; 215 | } 216 | 217 | delete params["page"]; 218 | 219 | const aggregateField = meta?.aggregateField ? meta.aggregateField : "id"; 220 | 221 | const total = await directusClient.request( 222 | SDK.aggregate(resource, { 223 | query: params, 224 | aggregate: { 225 | countDistinct: aggregateField, 226 | }, 227 | }) 228 | ); 229 | 230 | return { 231 | data: response, 232 | total: parseInt(total[0]?.countDistinct?.[aggregateField]) ?? 0, 233 | }; 234 | } catch (e) { 235 | console.log(e); 236 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 237 | } 238 | }, 239 | 240 | getMany: async ({ resource, ids, meta }) => { 241 | let fields: any = meta?.fields ? [...meta.fields] : ["*"]; 242 | let aggregateField = meta?.aggregateField ? meta.aggregateField : "id"; 243 | 244 | //Delete fields from meta 245 | delete meta?.fields; 246 | delete meta?.aggregateField; 247 | 248 | let params: any = { 249 | filter: { 250 | [aggregateField]: { _in: ids }, 251 | }, 252 | ...meta, 253 | }; 254 | 255 | try { 256 | const sdkFunction = getSDKFunction(resource, "read", false); 257 | 258 | const response: any = await directusClient.request( 259 | sdkFunction ? sdkFunction({ ...params, fields }) : SDK.readItems(resource, { ...params, fields }) 260 | ); 261 | 262 | return { 263 | data: response, 264 | total: response.length, 265 | }; 266 | } catch (e) { 267 | console.log(e); 268 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 269 | } 270 | }, 271 | 272 | create: async ({ resource, variables, meta }) => { 273 | let params: any = { 274 | ...variables, 275 | ...meta, 276 | }; 277 | 278 | try { 279 | const sdkFunction = getSDKFunction(resource, "create", true); 280 | 281 | const response: any = await directusClient.request( 282 | sdkFunction ? sdkFunction(params) : SDK.createItem(resource, params) 283 | ); 284 | 285 | return { 286 | data: response, 287 | }; 288 | } catch (e) { 289 | console.log(e); 290 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 291 | } 292 | }, 293 | 294 | update: async ({ resource, id, variables, meta }) => { 295 | let params: any = { 296 | ...variables, 297 | ...meta, 298 | }; 299 | 300 | try { 301 | const sdkFunction = getSDKFunction(resource, "update", true); 302 | 303 | const response: any = await directusClient.request( 304 | sdkFunction ? sdkFunction(id, params) : SDK.updateItem(resource, id, params) 305 | ); 306 | 307 | return { 308 | data: response, 309 | }; 310 | } catch (e) { 311 | console.log(e); 312 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 313 | } 314 | }, 315 | 316 | updateMany: async ({ resource, ids, variables, meta }) => { 317 | let idsFormatted: any = ids; 318 | 319 | let params: any = { 320 | ...variables, 321 | ...meta, 322 | }; 323 | 324 | try { 325 | const sdkFunction = getSDKFunction(resource, "update", false); 326 | 327 | const response: any = await directusClient.request( 328 | sdkFunction ? sdkFunction(idsFormatted, params) : SDK.updateItems(resource, idsFormatted, params) 329 | ); 330 | 331 | return { 332 | data: response, 333 | }; 334 | } catch (e) { 335 | console.log(e); 336 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 337 | } 338 | }, 339 | 340 | createMany: async ({ resource, variables, meta }) => { 341 | let params: any = { 342 | ...variables, 343 | ...meta, 344 | }; 345 | 346 | try { 347 | const sdkFunction = getSDKFunction(resource, "create", false); 348 | 349 | const response: any = await directusClient.request( 350 | sdkFunction ? sdkFunction(params) : SDK.createItems(resource, params) 351 | ); 352 | 353 | return { 354 | data: response, 355 | }; 356 | } catch (e) { 357 | console.log(e); 358 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 359 | } 360 | }, 361 | 362 | getOne: async ({ resource, id, meta }) => { 363 | let params: any = { 364 | ...meta, 365 | }; 366 | 367 | try { 368 | const sdkFunction = getSDKFunction(resource, "read", true); 369 | 370 | const response: any = await directusClient.request( 371 | sdkFunction ? sdkFunction(id, params) : SDK.readItem(resource, id, params) 372 | ); 373 | 374 | return { 375 | data: response, 376 | }; 377 | } catch (e) { 378 | console.log(e); 379 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 380 | } 381 | }, 382 | 383 | deleteOne: async ({ resource, id, meta }) => { 384 | try { 385 | if (meta && meta.deleteType === "archive") { 386 | let params: any = { 387 | status: "archived", 388 | ...meta, 389 | }; 390 | 391 | const sdkFunction = getSDKFunction(resource, "update", true); 392 | 393 | const response: any = await directusClient.request( 394 | sdkFunction ? sdkFunction(id, params) : SDK.updateItem(resource, id, params) 395 | ); 396 | 397 | return { 398 | data: response, 399 | }; 400 | } else { 401 | const sdkFunction = getSDKFunction(resource, "delete", true); 402 | 403 | const response: any = await directusClient.request( 404 | sdkFunction ? sdkFunction(id) : SDK.deleteItem(resource, id) 405 | ); 406 | 407 | return { 408 | data: response, 409 | }; 410 | } 411 | } catch (e) { 412 | console.log(e); 413 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 414 | } 415 | }, 416 | 417 | deleteMany: async ({ resource, ids, meta }) => { 418 | try { 419 | let idsFormatted: any = ids; 420 | 421 | if (meta && meta.deleteType === "archive") { 422 | let params: any = { 423 | status: "archived", 424 | ...meta, 425 | }; 426 | 427 | const sdkFunction = getSDKFunction(resource, "update", false); 428 | 429 | const response: any = await directusClient.request( 430 | sdkFunction ? sdkFunction(idsFormatted, params) : SDK.updateItems(resource, idsFormatted, params) 431 | ); 432 | 433 | return { 434 | data: response, 435 | }; 436 | } else { 437 | const sdkFunction = getSDKFunction(resource, "delete", false); 438 | 439 | const response: any = await directusClient.request( 440 | sdkFunction ? sdkFunction(idsFormatted) : SDK.deleteItems(resource, idsFormatted) 441 | ); 442 | 443 | return { 444 | data: response.data, 445 | }; 446 | } 447 | } catch (e) { 448 | console.log(e); 449 | throw new Error(e.errors && e.errors[0] && e.errors[0].message); 450 | } 451 | }, 452 | 453 | getApiUrl: () => { 454 | const url: any = directusClient.url; 455 | return url; 456 | }, 457 | 458 | custom: async ({ url, method, filters, sorters, payload, query, headers }) => { 459 | let response: any; 460 | switch (method) { 461 | case "put": 462 | response = await directusClient.request(() => ({ 463 | path: url, 464 | method: "PUT", 465 | body: JSON.stringify(payload), 466 | params: query as any, 467 | })); 468 | 469 | break; 470 | case "post": 471 | response = await directusClient.request(() => ({ 472 | path: url, 473 | method: "POST", 474 | body: JSON.stringify(payload), 475 | params: query as any, 476 | })); 477 | break; 478 | case "patch": 479 | response = await directusClient.request(() => ({ 480 | path: url, 481 | method: "PATCH", 482 | body: JSON.stringify(payload), 483 | params: query as any, 484 | })); 485 | break; 486 | case "delete": 487 | response = await directusClient.request(() => ({ 488 | path: url, 489 | method: "DELETE", 490 | params: query as any, 491 | })); 492 | break; 493 | default: 494 | response = await directusClient.request(() => ({ 495 | path: url, 496 | method: "GET", 497 | params: query as any, 498 | })); 499 | break; 500 | } 501 | 502 | return { 503 | data: response, 504 | }; 505 | }, 506 | }); 507 | -------------------------------------------------------------------------------- /package/src/helpers/auth.ts: -------------------------------------------------------------------------------- 1 | //@ts-nocheck 2 | import { authentication, createDirectus, readMe, rest, staticToken } from "@directus/sdk"; 3 | 4 | export const AuthHelper = (directusClient: any) => { 5 | return { 6 | login: async (identifier: string, password: string, mode: string = "json") => { 7 | let response = await directusClient.login(identifier, password, { mode }); 8 | 9 | return response; 10 | }, 11 | me: async (metaData: {}) => { 12 | let me = await directusClient.request(readMe(metaData)); 13 | return me; 14 | }, 15 | setToken: async (token: string) => { 16 | await directusClient.with(staticToken(token)); 17 | }, 18 | getToken: () => { 19 | return directusClient.getToken(); 20 | }, 21 | logout: async () => { 22 | return await directusClient.logout(); 23 | }, 24 | }; 25 | }; 26 | -------------------------------------------------------------------------------- /package/src/helpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./auth"; 2 | export * from "./utility"; 3 | -------------------------------------------------------------------------------- /package/src/helpers/utility.ts: -------------------------------------------------------------------------------- 1 | //@ts-nocheck 2 | import { useState } from "react"; 3 | import { uploadFiles } from "@directus/sdk"; 4 | 5 | export interface MediaConfig { 6 | maxCount: number; 7 | name: string; 8 | multiple: boolean; 9 | normalize?: (item: any) => any; 10 | title?: string; 11 | folder?: string; 12 | } 13 | 14 | export interface ValuePropsConfig { 15 | data: any; 16 | imageUrl: string; 17 | getFileUrl?: (item: any) => any; 18 | getFileTitle?: (item: any) => any; 19 | } 20 | 21 | export const getValueProps = (valueProps: ValuePropsConfig) => { 22 | const { data, imageUrl, getFileUrl, getFileTitle } = valueProps; 23 | 24 | if (!data) { 25 | return { fileList: [] }; 26 | } 27 | 28 | const files = { 29 | file: data.file, 30 | fileList: 31 | data.fileList ?? 32 | (Array.isArray(data) ? data : [data]).map((item: any) => { 33 | const file: any = { 34 | name: getFileTitle ? getFileTitle(item) : item.title, 35 | url: getFileUrl ? getFileUrl(item) : `${imageUrl}assets/${item.id}`, 36 | percent: item.percent, 37 | size: item.filesize, 38 | status: "done", 39 | type: item.type, 40 | uid: item.id, 41 | }; 42 | 43 | return file; 44 | }), 45 | }; 46 | 47 | return files; 48 | }; 49 | 50 | export const useDirectusUpload = (mediaConfigList: MediaConfig[], directusClient: any) => { 51 | const [uploadedFileIds] = useState([]); 52 | const [fileList, setFileList] = useState([]); 53 | 54 | const beforeUpload = (_file: any, files: any[], maxCount: number): boolean => { 55 | const totalFiles = fileList.length; 56 | const filesCount = files.length; 57 | 58 | if (totalFiles + filesCount > maxCount) { 59 | const excessFileCount = totalFiles + filesCount - maxCount; 60 | // convert negative 61 | const deleteItemCount = excessFileCount - excessFileCount * 2; 62 | files.splice(deleteItemCount); 63 | } 64 | 65 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 66 | // @ts-ignore 67 | setFileList([...fileList, ...files]); 68 | 69 | return true; 70 | }; 71 | 72 | const getUploadProps = (fieldName: string) => { 73 | const mediaConfig = mediaConfigList.filter((config: any) => config.name === fieldName)[0]; 74 | 75 | const customRequest = async ({ file, onError, onSuccess }: any) => { 76 | try { 77 | const form = new FormData(); 78 | if (mediaConfig?.title) { 79 | form.append("title", mediaConfig.title); 80 | } 81 | if (mediaConfig?.folder) { 82 | form.append("folder", mediaConfig.folder); 83 | } 84 | form.append("file", file); 85 | 86 | const data = await directusClient.request(uploadFiles(form)); 87 | onSuccess?.({ data }, new XMLHttpRequest()); 88 | } catch (error) { 89 | onError?.(new Error("Upload Error")); 90 | } 91 | }; 92 | 93 | return { 94 | uploadedFileIds, 95 | beforeUpload: (_file: any, files: any[]) => beforeUpload(_file, files, mediaConfig.maxCount), 96 | fileList, 97 | maxCount: mediaConfig.maxCount, 98 | customRequest, 99 | }; 100 | }; 101 | 102 | return getUploadProps; 103 | }; 104 | 105 | export const mediaUploadMapper = (params: any, mediaConfigList: MediaConfig[]) => { 106 | for (const item of Object.keys(params)) { 107 | if (params[item]) { 108 | const param = params[item].fileList; 109 | const isMediaField = Array.isArray(param); 110 | if (isMediaField) { 111 | const mediaConfig = mediaConfigList.filter((config: any) => config.name === item)[0]; 112 | const ids = []; 113 | for (const key of Object.keys(param)) { 114 | if (param[key].response) { 115 | if (mediaConfig.normalize) { 116 | ids.push(mediaConfig.normalize(param[key].response.data.id)); 117 | } else { 118 | ids.push(param[key].response.data.id); 119 | } 120 | } else { 121 | ids.push(param[key].uid); 122 | } 123 | } 124 | 125 | if (mediaConfig.multiple) { 126 | params[item] = ids; 127 | } else { 128 | params[item] = ids[0] ? ids[0] : null; 129 | } 130 | } 131 | } 132 | } 133 | 134 | return params; 135 | }; 136 | -------------------------------------------------------------------------------- /package/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./dataProvider"; 2 | export * from "./liveProvider"; 3 | export * from "./helpers"; 4 | export * from "@directus/sdk"; 5 | -------------------------------------------------------------------------------- /package/src/liveProvider.ts: -------------------------------------------------------------------------------- 1 | import { LiveProvider } from "@refinedev/core"; 2 | 3 | const eventsMap: any = { 4 | created: "create", 5 | updated: "update", 6 | deleted: "delete", 7 | }; 8 | 9 | export const liveProvider = (directusClient: any, options: {}): LiveProvider => { 10 | let openConnections: any = {}; 11 | return { 12 | subscribe: ({ channel, types, params, callback }) => { 13 | let connectionId = channel 14 | ? channel 15 | : Date.now() + 16 | "_" + 17 | Math.random() 18 | .toString(36) 19 | .substring(2, 15); 20 | 21 | let options: any = { uid: connectionId }; 22 | 23 | if (params?.query) { 24 | options = { ...options, query: params.query }; 25 | } 26 | 27 | if (types?.length > 1) { 28 | throw new Error( 29 | "Directus does not support multiple event types in a single subscription. Please create multiple subscriptions for each event type or do not pass any event type to subscribe to all events." 30 | ); 31 | } 32 | 33 | if (types?.length && eventsMap[types[0]]) { 34 | options = { ...options, event: eventsMap[types[0]] }; 35 | } 36 | 37 | if (params?.resource) { 38 | (async () => { 39 | const { subscription, unsubscribe } = await directusClient.subscribe(params?.resource, options); 40 | 41 | const asyncGenerator = async (subscription: any) => { 42 | for await (const item of subscription) { 43 | // this loop wil await new subscription events 44 | callback(item); 45 | } 46 | }; 47 | 48 | asyncGenerator(subscription); // create a generator 49 | 50 | openConnections[connectionId] = unsubscribe; 51 | })(); 52 | 53 | return connectionId; 54 | } else throw new Error("resource is required"); 55 | }, 56 | 57 | unsubscribe: async (unsubscribe) => { 58 | if (unsubscribe && openConnections[unsubscribe]) { 59 | openConnections[unsubscribe](); 60 | delete openConnections[unsubscribe]; 61 | } 62 | }, 63 | }; 64 | }; 65 | -------------------------------------------------------------------------------- /package/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "esnext", 4 | "lib": ["dom", "esnext", "DOM.Iterable"], 5 | "importHelpers": true, 6 | "declaration": true, 7 | "sourceMap": true, 8 | "strict": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true, 11 | "moduleResolution": "node", 12 | "jsx": "react", 13 | "esModuleInterop": true, 14 | "noEmit": true, 15 | "skipLibCheck": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "useUnknownInCatchVariables": false, 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /package/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | "src", 4 | "types" 5 | ], 6 | "extends": "./tsconfig.build.json", 7 | "compilerOptions": { 8 | "rootDir": "./src", 9 | "baseUrl": ".", 10 | } 11 | } --------------------------------------------------------------------------------
Drag & drop a file in this area
86 | Drag & drop a file in this area 87 |
116 | Drag & drop a file in this area 117 |