@01.software/sdk 0.0.1-251008.100408
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -0
- package/dist/QueryProvider.cjs +3 -0
- package/dist/QueryProvider.cjs.map +1 -0
- package/dist/QueryProvider.js +3 -0
- package/dist/QueryProvider.js.map +1 -0
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2396 -0
- package/dist/index.d.ts +2396 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/server.cjs +3 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +2213 -0
- package/dist/server.d.ts +2213 -0
- package/dist/server.js +3 -0
- package/dist/server.js.map +1 -0
- package/package.json +80 -0
package/README.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# @01.software/sdk
|
|
2
|
+
|
|
3
|
+
Official TypeScript SDK for 01.software with Supabase-like API and React Query integration.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- ๐ **Supabase-style API** - Familiar and intuitive interface
|
|
8
|
+
- โก **React Query Integration** - Auto-caching, background updates, infinite scrolling
|
|
9
|
+
- ๐ **Full TypeScript Support** - Type safety and autocompletion
|
|
10
|
+
- ๐ **Browser & Server Support** - Works with Next.js client/server components
|
|
11
|
+
- ๐ฏ **Payload CMS Integration** - Perfect compatibility with Payload CMS
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @01.software/sdk
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
### 1. Setup Client
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// lib/client.ts
|
|
25
|
+
import { createBrowserClient } from '@01.software/sdk'
|
|
26
|
+
|
|
27
|
+
export const client = createBrowserClient({
|
|
28
|
+
clientKey: process.env.NEXT_PUBLIC_CLIENT_KEY!,
|
|
29
|
+
})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Setup Provider
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// app/layout.tsx
|
|
36
|
+
import { QueryProvider } from '@01.software/sdk'
|
|
37
|
+
|
|
38
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
39
|
+
return (
|
|
40
|
+
<html>
|
|
41
|
+
<body>
|
|
42
|
+
<QueryProvider>{children}</QueryProvider>
|
|
43
|
+
</body>
|
|
44
|
+
</html>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 3. Fetch Data
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
// components/ProductList.tsx
|
|
53
|
+
import { client } from '@/lib/client'
|
|
54
|
+
|
|
55
|
+
export default function ProductList() {
|
|
56
|
+
const { data: products, isLoading } = client.query.useCollection('products', {
|
|
57
|
+
where: { status: 'published' },
|
|
58
|
+
limit: 10,
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
if (isLoading) return <div>Loading...</div>
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<div>
|
|
65
|
+
{products?.map((product) => (
|
|
66
|
+
<div key={product.id}>
|
|
67
|
+
<h3>{product.title}</h3>
|
|
68
|
+
</div>
|
|
69
|
+
))}
|
|
70
|
+
</div>
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## API Reference
|
|
76
|
+
|
|
77
|
+
### Data Fetching (Supabase-style)
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// Find all
|
|
81
|
+
const { data } = await client.from('products').find()
|
|
82
|
+
|
|
83
|
+
// Find with conditions
|
|
84
|
+
const { data } = await client.from('products').find({
|
|
85
|
+
where: { status: 'published' },
|
|
86
|
+
limit: 10,
|
|
87
|
+
sort: '-createdAt',
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
// Find by ID
|
|
91
|
+
const { data } = await client.from('products').findById('product-id')
|
|
92
|
+
|
|
93
|
+
// Create
|
|
94
|
+
const { data } = await client.from('products').create({
|
|
95
|
+
title: 'New Product',
|
|
96
|
+
price: 10000,
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
// Update
|
|
100
|
+
const { data } = await client.from('products').update('product-id', {
|
|
101
|
+
title: 'Updated Product',
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
// Delete
|
|
105
|
+
await client.from('products').delete('product-id')
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### React Query Hooks
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// Collection hook
|
|
112
|
+
const { data, isLoading } = client.query.useCollection('products')
|
|
113
|
+
|
|
114
|
+
// Single document hook
|
|
115
|
+
const { data: product } = client.query.useById('products', productId)
|
|
116
|
+
|
|
117
|
+
// Infinite scroll hook
|
|
118
|
+
const { data, fetchNextPage, hasNextPage } =
|
|
119
|
+
client.query.useCollectionInfinite('products')
|
|
120
|
+
|
|
121
|
+
// Search hook
|
|
122
|
+
const { data } = client.query.useSearch('products', searchTerm)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Server-Side Usage
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
import { createServerClient } from '@01.software/sdk'
|
|
129
|
+
|
|
130
|
+
const client = createServerClient({
|
|
131
|
+
clientKey: process.env.CLIENT_KEY!,
|
|
132
|
+
secretKey: process.env.SECRET_KEY!,
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
const { data: products } = await client.from('products').find()
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### API Client (Server-only)
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
import { ApiClient } from '@01.software/sdk'
|
|
142
|
+
|
|
143
|
+
const apiClient = new ApiClient({
|
|
144
|
+
clientKey: 'your-client-key',
|
|
145
|
+
secretKey: 'your-secret-key',
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
// Create order
|
|
149
|
+
const order = await apiClient.createOrder({
|
|
150
|
+
products: [{ id: 'product-1', quantity: 2 }],
|
|
151
|
+
customerInfo: { name: 'John Doe', email: 'john@example.com' },
|
|
152
|
+
})
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Environment Variables
|
|
156
|
+
|
|
157
|
+
```env
|
|
158
|
+
NEXT_PUBLIC_CLIENT_KEY=your-public-client-key
|
|
159
|
+
CLIENT_KEY=your-client-key
|
|
160
|
+
SECRET_KEY=your-secret-key
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";"use client";var u=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var Q=(e,r)=>{for(var i in r)u(e,i,{get:r[i],enumerable:!0})},m=(e,r,i,l)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of y(r))!c.call(e,n)&&n!==i&&u(e,n,{get:()=>r[n],enumerable:!(l=a(r,n))||l.enumerable});return e};var C=e=>m(u({},"__esModule",{value:!0}),e);var p={};Q(p,{QueryProvider:()=>h});module.exports=C(p);var f=require("@tanstack/react-query");var t=require("@tanstack/react-query");function d(){return new t.QueryClient({defaultOptions:{queries:{staleTime:Number.POSITIVE_INFINITY,refetchOnWindowFocus:!1},dehydrate:{shouldDehydrateQuery:e=>(0,t.defaultShouldDehydrateQuery)(e)||e.state.status==="pending",shouldRedactErrors:e=>!1}}})}var o;function s(){return t.isServer?d():(o||(o=d()),o)}function h({children:e}){let r=s();return React.createElement(f.QueryClientProvider,{client:r},e)}
|
|
3
|
+
//# sourceMappingURL=QueryProvider.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/QueryProvider.tsx","../src/query/get-query-client.ts"],"sourcesContent":["'use client'\n\nimport { QueryClientProvider } from '@tanstack/react-query'\nimport { getQueryClient } from './query/get-query-client'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\n\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n // NOTE: Avoid useState when initializing the query client if you don't\n // have a suspense boundary between this and the code that may\n // suspend because React will throw away the client on the initial\n // render if it suspends and there is no boundary\n const queryClient = getQueryClient()\n\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n {/* <ReactQueryDevtools initialIsOpen={false} /> */}\n </QueryClientProvider>\n )\n}\n","import { isServer, QueryClient, defaultShouldDehydrateQuery } from '@tanstack/react-query'\n\nfunction makeQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: Number.POSITIVE_INFINITY,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n // include pending queries in dehydration\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) || query.state.status === 'pending',\n shouldRedactErrors: (_) => {\n // We should not catch Next.js server errors\n // as that's how Next.js detects dynamic pages\n // so we cannot redact them.\n // Next.js also automatically redacts errors for us\n // with better digests.\n return false\n },\n },\n },\n })\n}\n\nlet browserQueryClient: QueryClient | undefined = undefined\n\nexport function getQueryClient() {\n if (isServer) {\n // Server: always make a new query client\n return makeQueryClient()\n }\n // Browser: make a new query client if we don't already have one\n // This is very important, so we don't re-make a new client if React\n // suspends during the initial render. This may not be needed if we\n // have a suspense boundary BELOW the creation of the query client\n if (!browserQueryClient) browserQueryClient = makeQueryClient()\n return browserQueryClient\n}\n"],"mappings":";sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAoC,iCCFpC,IAAAC,EAAmE,iCAEnE,SAASC,GAAkB,CACzB,OAAO,IAAI,cAAY,CACrB,eAAgB,CACd,QAAS,CACP,UAAW,OAAO,kBAClB,qBAAsB,EACxB,EACA,UAAW,CAET,qBAAuBC,MACrB,+BAA4BA,CAAK,GAAKA,EAAM,MAAM,SAAW,UAC/D,mBAAqBC,GAMZ,EAEX,CACF,CACF,CAAC,CACH,CAEA,IAAIC,EAEG,SAASC,GAAiB,CAC/B,OAAI,WAEKJ,EAAgB,GAMpBG,IAAoBA,EAAqBH,EAAgB,GACvDG,EACT,CDjCO,SAASE,EAAc,CAAE,SAAAC,CAAS,EAAkC,CAKzE,IAAMC,EAAcC,EAAe,EAEnC,OACE,oBAAC,uBAAoB,OAAQD,GAC1BD,CAEH,CAEJ","names":["QueryProvider_exports","__export","QueryProvider","__toCommonJS","import_react_query","import_react_query","makeQueryClient","query","_","browserQueryClient","getQueryClient","QueryProvider","children","queryClient","getQueryClient"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use client";import{QueryClientProvider as d}from"@tanstack/react-query";import{isServer as u,QueryClient as o,defaultShouldDehydrateQuery as l}from"@tanstack/react-query";function t(){return new o({defaultOptions:{queries:{staleTime:Number.POSITIVE_INFINITY,refetchOnWindowFocus:!1},dehydrate:{shouldDehydrateQuery:e=>l(e)||e.state.status==="pending",shouldRedactErrors:e=>!1}}})}var r;function n(){return u?t():(r||(r=t()),r)}function c({children:e}){let i=n();return React.createElement(d,{client:i},e)}export{c as QueryProvider};
|
|
3
|
+
//# sourceMappingURL=QueryProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/QueryProvider.tsx","../src/query/get-query-client.ts"],"sourcesContent":["'use client'\n\nimport { QueryClientProvider } from '@tanstack/react-query'\nimport { getQueryClient } from './query/get-query-client'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\n\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n // NOTE: Avoid useState when initializing the query client if you don't\n // have a suspense boundary between this and the code that may\n // suspend because React will throw away the client on the initial\n // render if it suspends and there is no boundary\n const queryClient = getQueryClient()\n\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n {/* <ReactQueryDevtools initialIsOpen={false} /> */}\n </QueryClientProvider>\n )\n}\n","import { isServer, QueryClient, defaultShouldDehydrateQuery } from '@tanstack/react-query'\n\nfunction makeQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: Number.POSITIVE_INFINITY,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n // include pending queries in dehydration\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) || query.state.status === 'pending',\n shouldRedactErrors: (_) => {\n // We should not catch Next.js server errors\n // as that's how Next.js detects dynamic pages\n // so we cannot redact them.\n // Next.js also automatically redacts errors for us\n // with better digests.\n return false\n },\n },\n },\n })\n}\n\nlet browserQueryClient: QueryClient | undefined = undefined\n\nexport function getQueryClient() {\n if (isServer) {\n // Server: always make a new query client\n return makeQueryClient()\n }\n // Browser: make a new query client if we don't already have one\n // This is very important, so we don't re-make a new client if React\n // suspends during the initial render. This may not be needed if we\n // have a suspense boundary BELOW the creation of the query client\n if (!browserQueryClient) browserQueryClient = makeQueryClient()\n return browserQueryClient\n}\n"],"mappings":";aAEA,OAAS,uBAAAA,MAA2B,wBCFpC,OAAS,YAAAC,EAAU,eAAAC,EAAa,+BAAAC,MAAmC,wBAEnE,SAASC,GAAkB,CACzB,OAAO,IAAIF,EAAY,CACrB,eAAgB,CACd,QAAS,CACP,UAAW,OAAO,kBAClB,qBAAsB,EACxB,EACA,UAAW,CAET,qBAAuBG,GACrBF,EAA4BE,CAAK,GAAKA,EAAM,MAAM,SAAW,UAC/D,mBAAqBC,GAMZ,EAEX,CACF,CACF,CAAC,CACH,CAEA,IAAIC,EAEG,SAASC,GAAiB,CAC/B,OAAIP,EAEKG,EAAgB,GAMpBG,IAAoBA,EAAqBH,EAAgB,GACvDG,EACT,CDjCO,SAASE,EAAc,CAAE,SAAAC,CAAS,EAAkC,CAKzE,IAAMC,EAAcC,EAAe,EAEnC,OACE,oBAACC,EAAA,CAAoB,OAAQF,GAC1BD,CAEH,CAEJ","names":["QueryClientProvider","isServer","QueryClient","defaultShouldDehydrateQuery","makeQueryClient","query","_","browserQueryClient","getQueryClient","QueryProvider","children","queryClient","getQueryClient","QueryClientProvider"]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var qsEsm=require('qs-esm'),reactQuery=require('@tanstack/react-query'),zod=require('zod');var u=class n extends Error{code;status;details;constructor(e,t,r,i){super(t),this.name="SDKError",this.code=e,this.status=r,this.details=i,Error.captureStackTrace&&Error.captureStackTrace(this,n);}toJSON(){return {name:this.name,code:this.code,message:this.message,status:this.status,details:this.details}}},f=class extends u{constructor(e,t,r){super("NETWORK_ERROR",e,t,r),this.name="NetworkError";}},m=class extends u{constructor(e,t){super("VALIDATION_ERROR",e,400,t),this.name="ValidationError";}},g=class extends u{constructor(e,t,r){super("API_ERROR",e,t,r),this.name="ApiError";}},C=class extends u{constructor(e,t){super("CONFIG_ERROR",e,void 0,t),this.name="ConfigError";}},d=class extends u{constructor(e="\uC694\uCCAD\uC774 \uC2DC\uAC04 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",t){super("TIMEOUT_ERROR",e,408,t),this.name="TimeoutError";}},_=n=>n instanceof u,k=n=>n instanceof f,B=n=>n instanceof m,U=n=>n instanceof g,M=n=>n instanceof C,j=n=>n instanceof d,T=(n,e,t)=>new f(n,e,t),Q=(n,e)=>new m(n,e),P=(n,e,t)=>new g(n,e,t),V=(n,e)=>new C(n,e),L=(n,e)=>new d(n,e);var q=process.env.NEXT_PUBLIC_API_URL||"https://01.software",p=async(n,e)=>{let{clientKey:t,secretKey:r,timeout:i=3e4,...o}=e||{},s=new Headers(o.headers);t&&s.set("X-Client-Key",t),r&&s.set("X-Secret-Key",r),!s.has("Content-Type")&&o.body&&s.set("Content-Type","application/json");let c=new AbortController,l=setTimeout(()=>c.abort(),i);try{let a=await fetch(`${q}${n}`,{...o,headers:s,signal:c.signal});if(clearTimeout(l),!a.ok)throw T(`HTTP ${a.status}: ${a.statusText}`,a.status,{url:n,method:o.method||"GET"});return a}catch(a){throw clearTimeout(l),a instanceof Error&&a.name==="AbortError"?new d(`\uC694\uCCAD\uC774 ${i}ms \uD6C4 \uD0C0\uC784\uC544\uC6C3\uB418\uC5C8\uC2B5\uB2C8\uB2E4.`,{url:n,timeout:i}):a instanceof TypeError?T("\uB124\uD2B8\uC6CC\uD06C \uC5F0\uACB0\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC778\uD130\uB137 \uC5F0\uACB0\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694.",void 0,{url:n,originalError:a.message}):a instanceof f||a instanceof d?a:T(a instanceof Error?a.message:"\uC54C \uC218 \uC5C6\uB294 \uB124\uD2B8\uC6CC\uD06C \uC5D0\uB7EC\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.",void 0,{url:n,originalError:a})}};var w=class{clientKey;secretKey;defaultOptions;constructor(e,t){if(!e)throw Q("clientKey\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.");this.clientKey=e,this.secretKey=t,this.defaultOptions={clientKey:e,secretKey:t};}async get(e,t){let r=this.buildUrl(e,t),i=await p(r,{...this.defaultOptions,method:"GET"});return this.parseResponse(i)}async post(e,t,r){let i=await p(e,{...this.defaultOptions,...r,method:"POST",body:t?JSON.stringify(t):void 0});return this.parseResponse(i)}async put(e,t,r){let i=await p(e,{...this.defaultOptions,...r,method:"PUT",body:t?JSON.stringify(t):void 0});return this.parseResponse(i)}async patch(e,t,r){let i=await p(e,{...this.defaultOptions,...r,method:"PATCH",body:t?JSON.stringify(t):void 0});return this.parseResponse(i)}async delete(e,t){let r=await p(e,{...this.defaultOptions,...t,method:"DELETE"});return this.parseResponse(r)}buildUrl(e,t){if(!t)return e;let r=qsEsm.stringify(t,{addQueryPrefix:true});return r?`${e}${r}`:e}async parseResponse(e){let t=e.headers.get("content-type");try{if(t&&t.includes("application/json")){let i=await e.json();if(i.docs!==void 0){let o={page:i.page||1,limit:i.limit||20,totalDocs:i.totalDocs||0,totalPages:i.totalPages||0,hasNextPage:i.hasNextPage||!1,hasPrevPage:i.hasPrevPage||!1};return {data:i.docs,success:!0,pagination:o}}return {data:i,success:!0}}return {data:await e.text(),success:!0}}catch(r){throw P("\uC751\uB2F5 \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.",e.status,{contentType:t,error:r instanceof Error?r.message:r})}}handleError(e){throw e instanceof g||e instanceof m?e:P(e.message||"Unknown API error",e.status||500,e)}};var h=class extends w{from(e){return new E(e,this)}async getCollection(e,t){try{return await this.get(`/api/${e}`,t)}catch(r){return this.handleError(r)}}async getDocument(e,t,r){try{return await this.get(`/api/${e}/${t}`,r)}catch(i){return this.handleError(i)}}async createDocument(e,t){try{return await this.post(`/api/${e}`,t)}catch(r){return this.handleError(r)}}async updateDocument(e,t,r){try{return await this.patch(`/api/${e}/${t}`,r)}catch(i){return this.handleError(i)}}async deleteDocument(e,t){try{return await this.delete(`/api/${e}/${t}`)}catch(r){return this.handleError(r)}}},E=class{collection;api;queryOptions={};constructor(e,t){this.collection=e,this.api=t;}async find(e){return this.api.getCollection(this.collection,e)}async findById(e){return this.api.getDocument(this.collection,e,this.queryOptions)}async create(e){return this.api.createDocument(this.collection,e)}async update(e,t){return this.api.updateDocument(this.collection,e,t)}async delete(e){return this.api.deleteDocument(this.collection,e)}};function K(){return new reactQuery.QueryClient({defaultOptions:{queries:{staleTime:Number.POSITIVE_INFINITY,refetchOnWindowFocus:false},dehydrate:{shouldDehydrateQuery:n=>reactQuery.defaultShouldDehydrateQuery(n)||n.state.status==="pending",shouldRedactErrors:n=>false}}})}var R;function x(){return reactQuery.isServer?K():(R||(R=K()),R)}function se({children:n}){let e=x();return React.createElement(reactQuery.QueryClientProvider,{client:e},n)}var A=class{queryClient;collectionsApi;constructor(e,t){this.queryClient=e,this.collectionsApi=new h(t?.brandKey||"",t?.brandSecret||"");}useCollection(e,t){let r=t;return reactQuery.useQuery({queryKey:[e,"list",r],queryFn:async()=>(await this.collectionsApi.getCollection(e,r)).data,enabled:r?.enabled!==false,...r})}useCollectionSingle(e,t){let r=t;return reactQuery.useQuery({queryKey:[e,"detail",r],queryFn:async()=>{let o=await this.collectionsApi.getCollection(e,r);return o.data.length===0?null:o.data[0]},enabled:r?.enabled!==false,...r})}useCollectionInfinite(e,t){let r=t,i=[e,"list","infinite",r],o=r?.limit||20;return reactQuery.useInfiniteQuery({queryKey:i,queryFn:async({pageParam:s=1})=>{let c={...r,page:s,limit:o};return (await this.collectionsApi.getCollection(e,c)).data},initialPageParam:1,getNextPageParam:(s,c,l)=>!Array.isArray(s)||s.length<o?null:l+1,enabled:r?.enabled!==false,select:s=>s.pages.flatMap(c=>c)})}useById(e,t,r){return reactQuery.useQuery({queryKey:[e,"detail",t],queryFn:async()=>(await this.collectionsApi.getDocument(e,t,r)).data,enabled:r?.enabled!==false&&!!t,...r})}useSearch(e,t,r){let i=[e,"search",t,r],o=r?.limit||20;return reactQuery.useInfiniteQuery({queryKey:i,queryFn:async({pageParam:s=1})=>{let l={...r,where:{or:[{title:{contains:t}},{description:{contains:t}}]},limit:o,page:s,sort:r?.sort||"-createdAt"};return (await this.collectionsApi.getCollection(e,l)).data},initialPageParam:1,getNextPageParam:(s,c,l)=>!Array.isArray(s)||s.length<o?null:l+1,enabled:r?.enabled!==false&&!!t&&t.length>0,select:s=>({pages:s.pages,pageParams:s.pageParams,items:s.pages.flatMap(c=>c)})})}async prefetchQuery(e,t){let r=[e,"list",t];return this.queryClient.prefetchQuery({queryKey:r,queryFn:async()=>(await this.collectionsApi.getCollection(e,t)).data})}async prefetchCollectionSingle(e,t){let r=[e,"detail",t];return this.queryClient.prefetchQuery({queryKey:r,queryFn:async()=>{let i=await this.collectionsApi.getCollection(e,t);return i.data.length===0?null:i.data[0]}})}async prefetchInfiniteQuery(e,t){let r=[e,"list","infinite",t],i=t?.limit||20;return this.queryClient.prefetchInfiniteQuery({queryKey:r,queryFn:async({pageParam:o=1})=>{let s={...t,page:o,limit:i};return (await this.collectionsApi.getCollection(e,s)).data},initialPageParam:1,getNextPageParam:(o,s,c)=>!Array.isArray(o)||o.length<i?null:c+1,pages:2})}invalidateQueries(e,t){let r=t?[e,t]:[e];return this.queryClient.invalidateQueries({queryKey:r})}getQueryData(e,t,...r){let i=[e,t,...r.filter(o=>o!==void 0)];return this.queryClient.getQueryData(i)}setQueryData(e,t,r,...i){let o=[e,t,...i.filter(s=>s!==void 0)];return this.queryClient.setQueryData(o,r)}};var b=class{query;collections;queryClient;state;config;fetch;constructor(e){if(!e.clientKey)throw new Error("clientKey is required.");this.config={environment:"production",debug:false,...e};let t={version:"1.0.0",environment:this.config.environment,timestamp:Date.now(),userAgent:typeof window<"u"?window.navigator?.userAgent:"Node.js"};this.state={metadata:t,isReady:false},this.fetch=p,this.queryClient=x(),this.query=new A(this.queryClient,{brandKey:this.config.clientKey}),this.collections=new h(this.config.clientKey),this.state.isReady=true;}async getSettings(){let{data:e}=await this.from("brand-settings").find({where:{"brand.clientKey":{equals:this.config.clientKey}}});return e.length>0?e[0]:null}from(e){return this.collections.from(e)}getState(){return {...this.state}}getConfig(){return this.config}getClientInfo(){return {clientKey:this.config.clientKey,version:this.state.metadata.version,environment:this.config.environment}}destroy(){this.state.isReady=false;}},$=n=>new b(n);var Ae=()=>{let n=new Date().getFullYear().toString().slice(-2),e=new Date().getMonth().toString().padStart(2,"0"),t=new Date().getDate().toString().padStart(2,"0"),r=Math.floor(Math.random()*1e6).toString().padStart(6,"0");return `${n}${e}${t}${r}`};var Pe=n=>typeof n=="number"?null:n;var Oe=zod.z.object({name:zod.z.string().min(1),email:zod.z.string().email(),shippingPhone:zod.z.string().min(1),shippingPostalCode:zod.z.string().min(1),shippingAddress:zod.z.string().min(1),shippingAddressDetail:zod.z.string().min(1),shippingMessage:zod.z.string().min(1).optional()});
|
|
2
|
+
exports.ApiError=g;exports.ConfigError=C;exports.NetworkError=f;exports.QueryProvider=se;exports.SDKError=u;exports.TimeoutError=d;exports.UnifiedQueryClient=A;exports.ValidationError=m;exports.createApiError=P;exports.createBrowserClient=$;exports.createConfigError=V;exports.createNetworkError=T;exports.createTimeoutError=L;exports.createValidationError=Q;exports.generateOrderNumber=Ae;exports.getQueryClient=x;exports.isApiError=U;exports.isConfigError=M;exports.isNetworkError=k;exports.isSDKError=_;exports.isTimeoutError=j;exports.isValidationError=B;exports.objectFor=Pe;exports.orderSchema=Oe;//# sourceMappingURL=index.cjs.map
|
|
3
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors/index.ts","../src/internal/utils/index.ts","../src/collection/base.ts","../src/collection/index.ts","../src/query/get-query-client.ts","../src/queryProvider.tsx","../src/query/index.ts","../src/client/index.ts","../src/utils/order/generateOrderNumber.ts","../src/utils/types.ts","../src/zod/orderSchema.ts"],"names":["SDKError","_SDKError","code","message","status","details","NetworkError","ValidationError","ApiError","ConfigError","TimeoutError","isSDKError","error","isNetworkError","isValidationError","isApiError","isConfigError","isTimeoutError","createNetworkError","createValidationError","createApiError","createConfigError","createTimeoutError","API_URL","_fetch","url","options","clientKey","secretKey","timeout","requestInit","headers","controller","timeoutId","response","BaseApiClient","endpoint","data","queryString","stringify","contentType","jsonData","pagination","CollectionsApi","collection","CollectionQueryBuilder","id","api","makeQueryClient","QueryClient","query","defaultShouldDehydrateQuery","_","browserQueryClient","getQueryClient","isServer","QueryProvider","children","queryClient","QueryClientProvider","UnifiedQueryClient","queryOptions","useQuery","queryKey","pageSize","useInfiniteQuery","pageParam","queryOpts","lastPage","lastPageParams","page","searchQuery","searchOptions","operation","params","p","BrowserClient","metadata","createBrowserClient","generateOrderNumber","year","month","day","random","objectFor","orderSchema","z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * SDK ์๋ฌ ์ฒ๋ฆฌ ์์คํ
\n *\n * ๋ค์ํ ์๋ฌ ์ํฉ์ ๋ํ ๊ตฌ์กฐํ๋ ์๋ฌ ํด๋์ค๋ค์ ์ ๊ณตํฉ๋๋ค.\n */\n\n/**\n * SDK์ ๊ธฐ๋ณธ ์๋ฌ ํด๋์ค\n * ๋ชจ๋ SDK ๊ด๋ จ ์๋ฌ์ ๋ฒ ์ด์ค ํด๋์ค์
๋๋ค.\n */\nexport class SDKError extends Error {\n public readonly code: string\n public readonly status?: number\n public readonly details?: any\n\n constructor(code: string, message: string, status?: number, details?: any) {\n super(message)\n this.name = 'SDKError'\n this.code = code\n this.status = status\n this.details = details\n\n // Error ์คํ ํธ๋ ์ด์ค ๋ณด์ \n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, SDKError)\n }\n }\n\n /**\n * ์๋ฌ๋ฅผ JSON ํํ๋ก ์ง๋ ฌํํฉ๋๋ค.\n */\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n details: this.details,\n }\n }\n}\n\n/**\n * ๋คํธ์ํฌ ๊ด๋ จ ์๋ฌ\n * API ํธ์ถ ์คํจ, ์ฐ๊ฒฐ ๋ฌธ์ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.\n */\nexport class NetworkError extends SDKError {\n constructor(message: string, status?: number, details?: any) {\n super('NETWORK_ERROR', message, status, details)\n this.name = 'NetworkError'\n }\n}\n\n/**\n * ๋ฐ์ดํฐ ๊ฒ์ฆ ์๋ฌ\n * ์๋ชป๋ ํ๋ผ๋ฏธํฐ๋ ์คํค๋ง ๊ฒ์ฆ ์คํจ ์ ์ฌ์ฉ๋ฉ๋๋ค.\n */\nexport class ValidationError extends SDKError {\n constructor(message: string, details?: any) {\n super('VALIDATION_ERROR', message, 400, details)\n this.name = 'ValidationError'\n }\n}\n\n/**\n * API ์๋ต ์๋ฌ\n * ์๋ฒ์์ ๋ฐํ๋ ์๋ฌ ์๋ต์ ์ฒ๋ฆฌํฉ๋๋ค.\n */\nexport class ApiError extends SDKError {\n constructor(message: string, status: number, details?: any) {\n super('API_ERROR', message, status, details)\n this.name = 'ApiError'\n }\n}\n\n/**\n * ์ค์ ์๋ฌ\n * ํด๋ผ์ด์ธํธ ์ค์ ์ด ์๋ชป๋์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.\n */\nexport class ConfigError extends SDKError {\n constructor(message: string, details?: any) {\n super('CONFIG_ERROR', message, undefined, details)\n this.name = 'ConfigError'\n }\n}\n\n/**\n * ํ์์์ ์๋ฌ\n * ์์ฒญ์ด ์๊ฐ ์ด๊ณผ๋์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.\n */\nexport class TimeoutError extends SDKError {\n constructor(message: string = '์์ฒญ์ด ์๊ฐ ์ด๊ณผ๋์์ต๋๋ค.', details?: any) {\n super('TIMEOUT_ERROR', message, 408, details)\n this.name = 'TimeoutError'\n }\n}\n\n/**\n * ์๋ฌ ํ์
๊ฐ๋ ํจ์๋ค\n */\nexport const isSDKError = (error: any): error is SDKError => {\n return error instanceof SDKError\n}\n\nexport const isNetworkError = (error: any): error is NetworkError => {\n return error instanceof NetworkError\n}\n\nexport const isValidationError = (error: any): error is ValidationError => {\n return error instanceof ValidationError\n}\n\nexport const isApiError = (error: any): error is ApiError => {\n return error instanceof ApiError\n}\n\nexport const isConfigError = (error: any): error is ConfigError => {\n return error instanceof ConfigError\n}\n\nexport const isTimeoutError = (error: any): error is TimeoutError => {\n return error instanceof TimeoutError\n}\n\n/**\n * ์๋ฌ ์์ฑ ํฌํผ ํจ์๋ค\n */\nexport const createNetworkError = (message: string, status?: number, details?: any) => {\n return new NetworkError(message, status, details)\n}\n\nexport const createValidationError = (message: string, details?: any) => {\n return new ValidationError(message, details)\n}\n\nexport const createApiError = (message: string, status: number, details?: any) => {\n return new ApiError(message, status, details)\n}\n\nexport const createConfigError = (message: string, details?: any) => {\n return new ConfigError(message, details)\n}\n\nexport const createTimeoutError = (message?: string, details?: any) => {\n return new TimeoutError(message, details)\n}\n","import { createNetworkError, TimeoutError, NetworkError } from '../../errors'\n\nconst API_URL = process.env.NEXT_PUBLIC_API_URL || 'https://01.software'\n\n/**\n * Fetch ์์ฒญ ์ต์
์ธํฐํ์ด์ค\n *\n * @interface FetchOptions\n * @extends RequestInit\n */\nexport interface FetchOptions extends RequestInit {\n /** ํด๋ผ์ด์ธํธ ํค (๋ธ๋๋ ์๋ณ์ฉ) */\n clientKey?: string\n /** ์ํฌ๋ฆฟ ํค (์๋ฒ ์ฌ์ด๋ ์ธ์ฆ์ฉ) */\n secretKey?: string\n /** ์์ฒญ ํ์์์ (๋ฐ๋ฆฌ์ด, ๊ธฐ๋ณธ๊ฐ: 30์ด) */\n timeout?: number\n}\n\n/**\n * ํฅ์๋ fetch ํจ์\n *\n * ํด๋ผ์ด์ธํธ ํค, ์ํฌ๋ฆฟ ํค ํค๋ ์๋ ์ค์ ๋ฐ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.\n *\n * @param url - ์์ฒญํ URL (์๋ ๊ฒฝ๋ก)\n * @param options - Fetch ์ต์
\n * @returns Promise<Response>\n *\n * @throws {NetworkError} ๋คํธ์ํฌ ์ฐ๊ฒฐ ์คํจ ์\n * @throws {TimeoutError} ์์ฒญ ํ์์์ ์\n *\n * @example\n * ```typescript\n * const response = await _fetch('/api/products', {\n * clientKey: 'your-client-key',\n * method: 'GET'\n * })\n * ```\n */\nexport const _fetch = async (url: string, options?: FetchOptions): Promise<Response> => {\n const { clientKey, secretKey, timeout = 30000, ...requestInit } = options || {}\n\n // ํค๋ ์ค์ \n const headers = new Headers(requestInit.headers)\n\n if (clientKey) {\n headers.set('X-Client-Key', clientKey)\n }\n\n if (secretKey) {\n headers.set('X-Secret-Key', secretKey)\n }\n\n if (!headers.has('Content-Type') && requestInit.body) {\n headers.set('Content-Type', 'application/json')\n }\n\n // AbortController๋ฅผ ์ฌ์ฉํ ํ์์์ ์ฒ๋ฆฌ\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n try {\n const response = await fetch(`${API_URL}${url}`, {\n ...requestInit,\n headers,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n // HTTP ์๋ฌ ์ํ ์ฒดํฌ\n if (!response.ok) {\n throw createNetworkError(`HTTP ${response.status}: ${response.statusText}`, response.status, {\n url,\n method: requestInit.method || 'GET',\n })\n }\n\n return response\n } catch (error) {\n clearTimeout(timeoutId)\n\n // AbortError (ํ์์์)\n if (error instanceof Error && error.name === 'AbortError') {\n throw new TimeoutError(`์์ฒญ์ด ${timeout}ms ํ ํ์์์๋์์ต๋๋ค.`, { url, timeout })\n }\n\n // ๋คํธ์ํฌ ์๋ฌ\n if (error instanceof TypeError) {\n throw createNetworkError(\n '๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์คํจํ์ต๋๋ค. ์ธํฐ๋ท ์ฐ๊ฒฐ์ ํ์ธํด์ฃผ์ธ์.',\n undefined,\n { url, originalError: error.message },\n )\n }\n\n // ์ด๋ฏธ SDK ์๋ฌ์ธ ๊ฒฝ์ฐ ๊ทธ๋๋ก throw\n if (error instanceof NetworkError || error instanceof TimeoutError) {\n throw error\n }\n\n // ๊ธฐํ ์๋ฌ\n throw createNetworkError(\n error instanceof Error ? error.message : '์ ์ ์๋ ๋คํธ์ํฌ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.',\n undefined,\n { url, originalError: error },\n )\n }\n}\n","/**\n * API ํด๋ผ์ด์ธํธ ๊ธฐ๋ณธ ํด๋์ค\n *\n * ๋ชจ๋ API ํด๋ผ์ด์ธํธ์ ๋ฒ ์ด์ค ํด๋์ค๋ก, ๊ณตํต์ ์ธ HTTP ๋ฉ์๋๋ค๊ณผ\n * ์๋ฌ ์ฒ๋ฆฌ, ์๋ต ํ์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.\n */\n\nimport { _fetch, FetchOptions } from '../internal/utils'\nimport { ApiResponse, PaginationMeta, QueryOptions } from '../client/types'\nimport { ApiError, ValidationError, createApiError, createValidationError } from '../errors'\nimport { stringify } from 'qs-esm'\n\n/**\n * API ํด๋ผ์ด์ธํธ ๊ธฐ๋ณธ ํด๋์ค\n *\n * @class BaseApiClient\n */\nexport class BaseApiClient {\n protected clientKey: string\n protected secretKey?: string\n protected defaultOptions: FetchOptions\n\n /**\n * BaseApiClient ์์ฑ์\n *\n * @param clientKey - ํด๋ผ์ด์ธํธ ํค (ํ์)\n * @param secretKey - ์ํฌ๋ฆฟ ํค (์ ํ, ์๋ฒ ์ฌ์ด๋์์๋ง ์ฌ์ฉ)\n *\n * @example\n * ```typescript\n * const client = new BaseApiClient('your-client-key', 'your-secret-key')\n * ```\n */\n constructor(clientKey: string, secretKey?: string) {\n if (!clientKey) {\n throw createValidationError('clientKey๋ ํ์์
๋๋ค.')\n }\n\n this.clientKey = clientKey\n this.secretKey = secretKey\n this.defaultOptions = {\n clientKey: clientKey,\n secretKey: secretKey,\n }\n }\n\n /**\n * GET ์์ฒญ์ ์ํํฉ๋๋ค.\n *\n * @template T - ์๋ต ๋ฐ์ดํฐ ํ์
\n * @param endpoint - API ์๋ํฌ์ธํธ\n * @param options - ์ฟผ๋ฆฌ ์ต์
(ํ์ด์ง๋ค์ด์
, ํํฐ๋ง ๋ฑ)\n * @returns Promise<ApiResponse<T>>\n *\n * @example\n * ```typescript\n * const response = await client.get<Product[]>('/api/products', {\n * page: 1,\n * limit: 10,\n * where: { status: 'published' }\n * })\n * ```\n */\n protected async get<T = any>(endpoint: string, options?: QueryOptions): Promise<ApiResponse<T>> {\n const url = this.buildUrl(endpoint, options)\n\n const response = await _fetch(url, {\n ...this.defaultOptions,\n method: 'GET',\n })\n\n return this.parseResponse<T>(response)\n }\n\n /**\n * POST ์์ฒญ์ ์ํํฉ๋๋ค.\n *\n * @template T - ์๋ต ๋ฐ์ดํฐ ํ์
\n * @param endpoint - API ์๋ํฌ์ธํธ\n * @param data - ์ ์กํ ๋ฐ์ดํฐ\n * @param options - ์ถ๊ฐ fetch ์ต์
\n * @returns Promise<ApiResponse<T>>\n *\n * @example\n * ```typescript\n * const response = await client.post<Product>('/api/products', {\n * title: '์ ์ ํ',\n * price: 10000\n * })\n * ```\n */\n protected async post<T = any>(\n endpoint: string,\n data?: any,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'POST',\n body: data ? JSON.stringify(data) : undefined,\n })\n\n return this.parseResponse<T>(response)\n }\n\n /**\n * PUT ์์ฒญ์ ์ํํฉ๋๋ค.\n *\n * @template T - ์๋ต ๋ฐ์ดํฐ ํ์
\n * @param endpoint - API ์๋ํฌ์ธํธ\n * @param data - ์ ์กํ ๋ฐ์ดํฐ\n * @param options - ์ถ๊ฐ fetch ์ต์
\n * @returns Promise<ApiResponse<T>>\n */\n protected async put<T = any>(\n endpoint: string,\n data?: any,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'PUT',\n body: data ? JSON.stringify(data) : undefined,\n })\n\n return this.parseResponse<T>(response)\n }\n\n /**\n * PATCH ์์ฒญ์ ์ํํฉ๋๋ค.\n *\n * @template T - ์๋ต ๋ฐ์ดํฐ ํ์
\n * @param endpoint - API ์๋ํฌ์ธํธ\n * @param data - ์ ์กํ ๋ฐ์ดํฐ\n * @param options - ์ถ๊ฐ fetch ์ต์
\n * @returns Promise<ApiResponse<T>>\n */\n protected async patch<T = any>(\n endpoint: string,\n data?: any,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'PATCH',\n body: data ? JSON.stringify(data) : undefined,\n })\n\n return this.parseResponse<T>(response)\n }\n\n /**\n * DELETE ์์ฒญ์ ์ํํฉ๋๋ค.\n *\n * @template T - ์๋ต ๋ฐ์ดํฐ ํ์
\n * @param endpoint - API ์๋ํฌ์ธํธ\n * @param options - ์ถ๊ฐ fetch ์ต์
\n * @returns Promise<ApiResponse<T>>\n */\n protected async delete<T = any>(\n endpoint: string,\n options?: FetchOptions,\n ): Promise<ApiResponse<T>> {\n const response = await _fetch(endpoint, {\n ...this.defaultOptions,\n ...options,\n method: 'DELETE',\n })\n\n return this.parseResponse<T>(response)\n }\n\n /**\n * URL ๋น๋ (์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํฌํจ)\n *\n * @param endpoint - ๊ธฐ๋ณธ ์๋ํฌ์ธํธ\n * @param options - ์ฟผ๋ฆฌ ์ต์
\n * @returns ์์ฑ๋ URL\n *\n * @private\n */\n protected buildUrl(endpoint: string, options?: QueryOptions): string {\n if (!options) return endpoint\n\n const queryString = stringify(options, { addQueryPrefix: true })\n\n return queryString ? `${endpoint}${queryString}` : endpoint\n }\n\n /**\n * HTTP ์๋ต์ ํ์ฑํ์ฌ ApiResponse ํํ๋ก ๋ณํํฉ๋๋ค.\n *\n * Payload CMS์ ์๋ต ํ์์ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค.\n *\n * @template T - ์๋ต ๋ฐ์ดํฐ ํ์
\n * @param response - HTTP Response ๊ฐ์ฒด\n * @returns Promise<ApiResponse<T>>\n *\n * @throws {ApiError} JSON ํ์ฑ ์คํจ ์\n *\n * @private\n */\n protected async parseResponse<T>(response: Response): Promise<ApiResponse<T>> {\n const contentType = response.headers.get('content-type')\n\n try {\n if (contentType && contentType.includes('application/json')) {\n const jsonData = await response.json()\n\n // Payload CMS ์๋ต ํ์ ์ฒ๋ฆฌ (์ปฌ๋ ์
๋ชฉ๋ก)\n if (jsonData.docs !== undefined) {\n const pagination: PaginationMeta = {\n page: jsonData.page || 1,\n limit: jsonData.limit || 20,\n totalDocs: jsonData.totalDocs || 0,\n totalPages: jsonData.totalPages || 0,\n hasNextPage: jsonData.hasNextPage || false,\n hasPrevPage: jsonData.hasPrevPage || false,\n }\n\n return {\n data: jsonData.docs,\n success: true,\n pagination,\n }\n }\n\n // ๋จ์ผ ๋ฌธ์ ์๋ต\n return {\n data: jsonData,\n success: true,\n }\n }\n\n // ํ
์คํธ ์๋ต\n const textData = await response.text()\n return {\n data: textData as T,\n success: true,\n }\n } catch (error) {\n throw createApiError('์๋ต ํ์ฑ์ ์คํจํ์ต๋๋ค.', response.status, {\n contentType,\n error: error instanceof Error ? error.message : error,\n })\n }\n }\n\n /**\n * ์๋ฌ๋ฅผ SDK ํ์ค ์๋ฌ ํํ๋ก ๋ณํํฉ๋๋ค.\n *\n * @param error - ์๋ณธ ์๋ฌ\n * @throws {ApiError} ๋ณํ๋ ์๋ฌ\n *\n * @deprecated ์ด ๋ฉ์๋๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.\n * ์๋ฌ๋ _fetch ํจ์์์ ์๋์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.\n *\n * @private\n */\n protected handleError(error: any): never {\n // ์ด๋ฏธ SDK ์๋ฌ์ธ ๊ฒฝ์ฐ ๊ทธ๋๋ก throw\n if (error instanceof ApiError || error instanceof ValidationError) {\n throw error\n }\n\n // ๊ธฐํ ์๋ฌ๋ฅผ ApiError๋ก ๋ณํ\n throw createApiError(error.message || 'Unknown API error', error.status || 500, error)\n }\n}\n","/**\n * ๋ฒ์ฉ ์ปฌ๋ ์
API ํด๋ผ์ด์ธํธ\n * Supabase ์คํ์ผ์ from() ๋ฉ์๋๋ฅผ ๊ตฌํ\n */\n\nimport { BaseApiClient } from './base'\nimport { Config } from '../types'\nimport { QueryOptions, ApiResponse, Collection } from '../client/types'\n\nexport class CollectionsApi extends BaseApiClient {\n /**\n * Supabase ์คํ์ผ์ ์ปฌ๋ ์
์ ๊ทผ\n */\n from<T extends Collection>(collection: T): CollectionQueryBuilder<T> {\n return new CollectionQueryBuilder<T>(collection, this)\n }\n\n /**\n * ๋ด๋ถ API ํธ์ถ ๋ฉ์๋๋ค\n */\n async getCollection<T extends Collection>(\n collection: T,\n options?: QueryOptions,\n ): Promise<ApiResponse<Config['collections'][T][]>> {\n try {\n return await this.get<Config['collections'][T][]>(`/api/${collection}`, options)\n } catch (error) {\n return this.handleError(error)\n }\n }\n\n async getDocument<T extends Collection>(\n collection: T,\n id: number | string,\n options?: QueryOptions,\n ): Promise<ApiResponse<Config['collections'][T]>> {\n try {\n return await this.get<Config['collections'][T]>(`/api/${collection}/${id}`, options)\n } catch (error) {\n return this.handleError(error)\n }\n }\n\n async createDocument<T extends Collection>(\n collection: T,\n data: Partial<Config['collections'][T]>,\n ): Promise<ApiResponse<Config['collections'][T]>> {\n try {\n return await this.post<Config['collections'][T]>(`/api/${collection}`, data)\n } catch (error) {\n return this.handleError(error)\n }\n }\n\n async updateDocument<T extends Collection>(\n collection: T,\n id: number | string,\n data: Partial<Config['collections'][T]>,\n ): Promise<ApiResponse<Config['collections'][T]>> {\n try {\n return await this.patch<Config['collections'][T]>(`/api/${collection}/${id}`, data)\n } catch (error) {\n return this.handleError(error)\n }\n }\n\n async deleteDocument<T extends Collection>(\n collection: T,\n id: number | string,\n ): Promise<ApiResponse<void>> {\n try {\n return await this.delete<void>(`/api/${collection}/${id}`)\n } catch (error) {\n return this.handleError(error)\n }\n }\n}\n\nexport class CollectionQueryBuilder<T extends Collection> {\n private collection: T\n private api: CollectionsApi\n private queryOptions: QueryOptions = {}\n\n constructor(collection: T, api: CollectionsApi) {\n this.collection = collection\n this.api = api\n }\n\n async find(options?: QueryOptions): Promise<ApiResponse<Config['collections'][T][]>> {\n return this.api.getCollection(this.collection, options)\n }\n\n /**\n * ํน์ ID๋ก ๋ฌธ์ ์กฐํ\n */\n async findById(id: number | string): Promise<ApiResponse<Config['collections'][T]>> {\n return this.api.getDocument(this.collection, id, this.queryOptions)\n }\n\n /**\n * ๋ฌธ์ ์์ฑ\n */\n async create(\n data: Partial<Config['collections'][T]>,\n ): Promise<ApiResponse<Config['collections'][T]>> {\n return this.api.createDocument(this.collection, data)\n }\n\n /**\n * ๋ฌธ์ ์
๋ฐ์ดํธ\n */\n async update(\n id: number | string,\n data: Partial<Config['collections'][T]>,\n ): Promise<ApiResponse<Config['collections'][T]>> {\n return this.api.updateDocument(this.collection, id, data)\n }\n\n /**\n * ๋ฌธ์ ์ญ์ \n */\n async delete(id: number | string): Promise<ApiResponse<void>> {\n return this.api.deleteDocument(this.collection, id)\n }\n}\n","import { isServer, QueryClient, defaultShouldDehydrateQuery } from '@tanstack/react-query'\n\nfunction makeQueryClient() {\n return new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: Number.POSITIVE_INFINITY,\n refetchOnWindowFocus: false,\n },\n dehydrate: {\n // include pending queries in dehydration\n shouldDehydrateQuery: (query) =>\n defaultShouldDehydrateQuery(query) || query.state.status === 'pending',\n shouldRedactErrors: (_) => {\n // We should not catch Next.js server errors\n // as that's how Next.js detects dynamic pages\n // so we cannot redact them.\n // Next.js also automatically redacts errors for us\n // with better digests.\n return false\n },\n },\n },\n })\n}\n\nlet browserQueryClient: QueryClient | undefined = undefined\n\nexport function getQueryClient() {\n if (isServer) {\n // Server: always make a new query client\n return makeQueryClient()\n }\n // Browser: make a new query client if we don't already have one\n // This is very important, so we don't re-make a new client if React\n // suspends during the initial render. This may not be needed if we\n // have a suspense boundary BELOW the creation of the query client\n if (!browserQueryClient) browserQueryClient = makeQueryClient()\n return browserQueryClient\n}\n","'use client'\n\nimport { QueryClientProvider } from '@tanstack/react-query'\nimport { getQueryClient } from './query/get-query-client'\nimport { ReactQueryDevtools } from '@tanstack/react-query-devtools'\n\nexport function QueryProvider({ children }: { children: React.ReactNode }) {\n // NOTE: Avoid useState when initializing the query client if you don't\n // have a suspense boundary between this and the code that may\n // suspend because React will throw away the client on the initial\n // render if it suspends and there is no boundary\n const queryClient = getQueryClient()\n\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n {/* <ReactQueryDevtools initialIsOpen={false} /> */}\n </QueryClientProvider>\n )\n}\n","import { QueryClient, useQuery, useInfiniteQuery } from '@tanstack/react-query'\nimport { Collection, QueryOptions } from '../client/types'\nimport { Where } from 'payload'\nimport { CollectionsApi } from '../collection'\n\nexport * from '../queryProvider'\nexport * from './get-query-client'\n\nexport interface UnifiedQueryOptions {\n brandKey?: string\n brandSecret?: string\n baseUrl?: string\n}\n\n/**\n * ํตํฉ ์ฟผ๋ฆฌ ํด๋ผ์ด์ธํธ\n */\nexport class UnifiedQueryClient {\n private queryClient: QueryClient\n private collectionsApi: CollectionsApi\n\n constructor(queryClient: QueryClient, options?: UnifiedQueryOptions) {\n this.queryClient = queryClient\n this.collectionsApi = new CollectionsApi(\n options?.brandKey || '',\n options?.brandSecret || '',\n )\n }\n\n useCollection<T extends Collection>(\n collection: T,\n queryOptions?: QueryOptions,\n ) {\n const options = queryOptions\n const queryKey = [collection, 'list', options]\n\n return useQuery({\n queryKey,\n queryFn: async () => {\n const response = await this.collectionsApi.getCollection(\n collection,\n options,\n )\n return response.data\n },\n enabled: options?.enabled !== false,\n ...options,\n })\n }\n\n useCollectionSingle<T extends Collection>(\n collection: T,\n queryOptions?: Omit<QueryOptions, 'limit'>,\n ) {\n const options = queryOptions\n const queryKey = [collection, 'detail', options]\n\n return useQuery({\n queryKey,\n queryFn: async () => {\n const response = await this.collectionsApi.getCollection(\n collection,\n options,\n )\n if (response.data.length === 0) return null\n return response.data[0]\n },\n enabled: options?.enabled !== false,\n ...options,\n })\n }\n\n useCollectionInfinite<T extends Collection>(\n collection: T,\n queryOptions?: QueryOptions,\n ) {\n const options = queryOptions\n const queryKey = [collection, 'list', 'infinite', options]\n const pageSize = options?.limit || 20\n\n return useInfiniteQuery({\n queryKey,\n queryFn: async ({ pageParam = 1 }) => {\n const queryOpts = { ...options, page: pageParam, limit: pageSize }\n const response = await this.collectionsApi.getCollection(\n collection,\n queryOpts,\n )\n return response.data\n },\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: unknown[],\n _: unknown,\n lastPageParams: number,\n ) => {\n if (!Array.isArray(lastPage) || lastPage.length < pageSize) return null\n return lastPageParams + 1\n },\n enabled: options?.enabled !== false,\n select: (data) => data.pages.flatMap((page) => page),\n })\n }\n\n useById<T extends Collection>(\n collection: T,\n id: string | number,\n queryOptions?: QueryOptions,\n ) {\n const queryKey = [collection, 'detail', id]\n\n return useQuery({\n queryKey,\n queryFn: async () => {\n const response = await this.collectionsApi.getDocument(\n collection,\n id,\n queryOptions,\n )\n return response.data\n },\n enabled: queryOptions?.enabled !== false && !!id,\n ...queryOptions,\n })\n }\n\n useSearch<T extends Collection>(\n collection: T,\n searchQuery: string,\n queryOptions?: QueryOptions,\n ) {\n const queryKey = [collection, 'search', searchQuery, queryOptions]\n const pageSize = queryOptions?.limit || 20\n\n return useInfiniteQuery({\n queryKey,\n queryFn: async ({ pageParam = 1 }) => {\n const where: Where = {\n or: [\n { title: { contains: searchQuery } },\n { description: { contains: searchQuery } },\n ],\n }\n\n const searchOptions = {\n ...queryOptions,\n where,\n limit: pageSize,\n page: pageParam,\n sort: queryOptions?.sort || '-createdAt',\n }\n\n const response = await this.collectionsApi.getCollection(\n collection,\n searchOptions,\n )\n return response.data\n },\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: unknown[],\n _: unknown,\n lastPageParams: number,\n ) => {\n if (!Array.isArray(lastPage) || lastPage.length < pageSize) return null\n return lastPageParams + 1\n },\n enabled:\n queryOptions?.enabled !== false &&\n !!searchQuery &&\n searchQuery.length > 0,\n select: (data) => ({\n pages: data.pages,\n pageParams: data.pageParams,\n items: data.pages.flatMap((page) => page),\n }),\n })\n }\n\n /**\n * ์ปฌ๋ ์
๋ณ ํ๋ฆฌํ์น\n * @example await client.query.prefetchQuery('products', { where: { status: 'published' } })\n */\n async prefetchQuery<T extends Collection>(\n collection: T,\n queryOptions?: QueryOptions,\n ) {\n const queryKey = [collection, 'list', queryOptions]\n\n return this.queryClient.prefetchQuery({\n queryKey,\n queryFn: async () => {\n const response = await this.collectionsApi.getCollection(\n collection,\n queryOptions,\n )\n return response.data\n },\n })\n }\n\n /**\n * ์ปฌ๋ ์
๋ณ ๋จ์ผ ์ฟผ๋ฆฌ ํ๋ฆฌํ์น\n * @example await client.query.prefetchCollectionSingle('products', { limit: 1 })\n */\n async prefetchCollectionSingle<T extends Collection>(\n collection: T,\n queryOptions?: QueryOptions,\n ) {\n const queryKey = [collection, 'detail', queryOptions]\n return this.queryClient.prefetchQuery({\n queryKey,\n queryFn: async () => {\n const response = await this.collectionsApi.getCollection(\n collection,\n queryOptions,\n )\n if (response.data.length === 0) return null\n return response.data[0]\n },\n })\n }\n\n /**\n * ์ปฌ๋ ์
๋ณ ๋ฌดํ ์ฟผ๋ฆฌ ํ๋ฆฌํ์น\n * @example await client.query.prefetchInfiniteQuery('products', { limit: 20 })\n */\n async prefetchInfiniteQuery<T extends Collection>(\n collection: T,\n queryOptions?: QueryOptions,\n ) {\n const queryKey = [collection, 'list', 'infinite', queryOptions]\n const pageSize = queryOptions?.limit || 20\n\n return this.queryClient.prefetchInfiniteQuery({\n queryKey,\n queryFn: async ({ pageParam = 1 }) => {\n const options = { ...queryOptions, page: pageParam, limit: pageSize }\n const response = await this.collectionsApi.getCollection(\n collection,\n options,\n )\n return response.data\n },\n initialPageParam: 1,\n getNextPageParam: (\n lastPage: unknown[],\n _: unknown,\n lastPageParams: number,\n ) => {\n if (!Array.isArray(lastPage) || lastPage.length < pageSize) return null\n return lastPageParams + 1\n },\n pages: 2,\n })\n }\n\n /**\n * ์บ์ ์กฐ์ ๋ฉ์๋๋ค\n */\n invalidateQueries(collection: Collection, operation?: string) {\n const queryKey = operation ? [collection, operation] : [collection]\n return this.queryClient.invalidateQueries({ queryKey })\n }\n\n getQueryData<T>(\n collection: Collection,\n operation: string,\n ...params: (string | number)[]\n ): T | undefined {\n const queryKey = [\n collection,\n operation,\n ...params.filter((p) => p !== undefined),\n ]\n return this.queryClient.getQueryData<T>(queryKey)\n }\n\n setQueryData<T>(\n collection: Collection,\n operation: string,\n data: T,\n ...params: (string | number)[]\n ) {\n const queryKey = [\n collection,\n operation,\n ...params.filter((p) => p !== undefined),\n ]\n return this.queryClient.setQueryData<T>(queryKey, data)\n }\n}\n","import { _fetch } from '../internal/utils'\nimport { Config } from '../types'\nimport {\n CollectionQueryBuilder,\n CollectionsApi,\n CollectionsApi as CollectionsApiClass,\n} from '../collection'\nimport { getQueryClient } from '../query/get-query-client'\nimport { QueryClient } from '@tanstack/react-query'\nimport { UnifiedQueryClient } from '../query'\nimport {\n ClientBrowserConfig,\n ClientState,\n ClientMetadata,\n Collection,\n} from './types'\n\nexport type ClientOptions = ClientBrowserConfig\n\n// ๊ธฐ๋ณธ ํ์
๋ค export\nexport type * from './types'\n\n/**\n * 01Works SDK๋ฅผ ์ํ ๋ธ๋ผ์ฐ์ ํด๋ผ์ด์ธํธ\n *\n * Supabase Client์ ์ ์ฌํ ๊ตฌ์กฐ๋ก ์ค๊ณ๋ ํตํฉ ํด๋ผ์ด์ธํธ์
๋๋ค.\n * ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ API ํธ์ถ, ์ฟผ๋ฆฌ ๊ด๋ฆฌ, ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.\n *\n * @template _Database - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ํ์
(๊ธฐ๋ณธ๊ฐ: Config)\n *\n * @example\n * ```typescript\n * import { createBrowserClient } from '@your-org/sdk'\n *\n * const client = createBrowserClient({\n * clientKey: 'your-client-key'\n * })\n *\n * // ์ ํ ๋ชฉ๋ก ์กฐํ\n * const products = await client.from('products').find({\n * where: { status: 'published' }\n * })\n *\n * // React Query ํ
์ฌ์ฉ\n * const { data } = client.query.useCollection('products')\n * ```\n */\nexport default class BrowserClient<_Database = Config> {\n /**\n * ํตํฉ Query ํด๋ผ์ด์ธํธ\n *\n * React Query ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ํ์นญ ํ
๋ค์ ์ ๊ณตํฉ๋๋ค.\n *\n * @example\n * ```typescript\n * const { data, isLoading } = client.query.useCollection('products')\n * const { data: product } = client.query.useById('products', '123')\n * ```\n */\n query: UnifiedQueryClient\n\n /**\n * ๋ฒ์ฉ ์ปฌ๋ ์
API ํด๋ผ์ด์ธํธ (Supabase ์คํ์ผ)\n *\n * ๋ชจ๋ ์ปฌ๋ ์
์ ๋ํ CRUD ์์
์ ์ ๊ณตํฉ๋๋ค.\n *\n * @example\n * ```typescript\n * const products = await client.collections.from('products').find()\n * ```\n */\n collections: CollectionsApiClass\n\n /**\n * React Query ํด๋ผ์ด์ธํธ ์ธ์คํด์ค\n *\n * ์ง์ ์ ์ธ ์ฟผ๋ฆฌ ์บ์ ์กฐ์์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.\n */\n queryClient: QueryClient\n\n // ํด๋ผ์ด์ธํธ ์ํ\n protected state: ClientState\n protected config: ClientBrowserConfig\n protected fetch: typeof _fetch\n\n /**\n * BrowserClient ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.\n *\n * @param options - ํด๋ผ์ด์ธํธ ์ค์ ์ต์
\n * @throws {ValidationError} clientKey๊ฐ ์ ๊ณต๋์ง ์์ ๊ฒฝ์ฐ\n *\n * @example\n * ```typescript\n * const client = new BrowserClient({\n * clientKey: 'your-client-key',\n * environment: 'production',\n * debug: false\n * })\n * ```\n */\n constructor(options: ClientOptions) {\n if (!options.clientKey) {\n throw new Error('clientKey is required.')\n }\n\n // ์ค์ ์ด๊ธฐํ\n this.config = {\n environment: 'production',\n debug: false,\n ...options,\n }\n\n // ์ํ ์ด๊ธฐํ\n const metadata: ClientMetadata = {\n version: '1.0.0',\n environment: this.config.environment!,\n timestamp: Date.now(),\n userAgent:\n typeof window !== 'undefined' ? window.navigator?.userAgent : 'Node.js',\n }\n\n this.state = {\n metadata,\n isReady: false,\n }\n\n // Fetch ์ค์ \n this.fetch = _fetch\n\n // Query ํด๋ผ์ด์ธํธ ์ด๊ธฐํ\n this.queryClient = getQueryClient()\n\n // ํตํฉ ์ฟผ๋ฆฌ ํด๋ผ์ด์ธํธ ์ด๊ธฐํ\n this.query = new UnifiedQueryClient(this.queryClient, {\n brandKey: this.config.clientKey,\n })\n\n this.collections = new CollectionsApi(this.config.clientKey)\n\n // ํด๋ผ์ด์ธํธ ์ค๋น ์๋ฃ\n this.state.isReady = true\n }\n\n /**\n * ํ์ฌ ๋ธ๋๋์ ์ค์ ์ ๊ฐ์ ธ์ต๋๋ค.\n *\n * @returns Promise<BrandSetting | null> ๋ธ๋๋ ์ค์ ๋๋ null\n *\n * @example\n * ```typescript\n * const settings = await client.getSettings()\n * if (settings) {\n * console.log('๋ธ๋๋ ์ ๋ชฉ:', settings.title)\n * }\n * ```\n */\n async getSettings() {\n const { data } = await this.from('brand-settings').find({\n where: {\n 'brand.clientKey': {\n equals: this.config.clientKey,\n },\n },\n })\n\n return data.length > 0 ? data[0] : null\n }\n\n /**\n * Collection์ ๋ํ ์ฟผ๋ฆฌ ๋น๋๋ฅผ ์์ฑํฉ๋๋ค. (Supabase ์คํ์ผ)\n *\n * @template T - ์ปฌ๋ ์
ํ์
\n * @param collection - ์ปฌ๋ ์
์ด๋ฆ\n * @returns CollectionQueryBuilder<T>\n *\n * @example\n * ```typescript\n * // ์ ํ ๋ชฉ๋ก ์กฐํ\n * const { data: products } = await client.from('products').find({\n * where: { status: 'published' },\n * limit: 10\n * })\n *\n * // ํน์ ์ ํ ์กฐํ\n * const { data: product } = await client.from('products').findById('123')\n *\n * // ์ ํ ์์ฑ\n * const { data: newProduct } = await client.from('products').create({\n * title: '์ ์ ํ',\n * price: 10000\n * })\n * ```\n */\n from<T extends Collection>(collection: T): CollectionQueryBuilder<T> {\n return this.collections.from(collection)\n }\n\n /**\n * ํด๋ผ์ด์ธํธ์ ํ์ฌ ์ํ๋ฅผ ๋ฐํํฉ๋๋ค.\n *\n * @returns ClientState ํด๋ผ์ด์ธํธ ์ํ ๋ณต์ฌ๋ณธ\n */\n getState(): ClientState {\n return { ...this.state }\n }\n\n /**\n * ํด๋ผ์ด์ธํธ ์ค์ ์ ๋ฐํํฉ๋๋ค.\n *\n * ๋ฏผ๊ฐํ ์ ๋ณด(์ํฌ๋ฆฟ ํค ๋ฑ)๋ ์ ์ธ๋ฉ๋๋ค.\n *\n * @returns ClientBrowserConfig ํด๋ผ์ด์ธํธ ์ค์ \n */\n getConfig(): ClientBrowserConfig {\n return this.config as ClientBrowserConfig\n }\n\n /**\n * ํด๋ผ์ด์ธํธ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค.\n *\n * @returns ํด๋ผ์ด์ธํธ ์ ๋ณด ๊ฐ์ฒด\n *\n * @example\n * ```typescript\n * const info = client.getClientInfo()\n * console.log(`SDK ๋ฒ์ : ${info.version}`)\n * console.log(`ํ๊ฒฝ: ${info.environment}`)\n * ```\n */\n getClientInfo() {\n return {\n clientKey: this.config.clientKey,\n version: this.state.metadata.version,\n environment: this.config.environment,\n }\n }\n\n /**\n * ํด๋ผ์ด์ธํธ๋ฅผ ์ ๋ฆฌํ๊ณ ๋ฆฌ์์ค๋ฅผ ํด์ ํฉ๋๋ค.\n *\n * ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ํ์๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.\n *\n * @example\n * ```typescript\n * // ์ปดํฌ๋ํธ ์ธ๋ง์ดํธ ์\n * useEffect(() => {\n * return () => {\n * client.destroy()\n * }\n * }, [])\n * ```\n */\n destroy() {\n this.state.isReady = false\n }\n}\n\n/**\n * BrowserClient ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ํฌํผ ํจ์\n *\n * @param options - ํด๋ผ์ด์ธํธ ์ค์ ์ต์
\n * @returns BrowserClient ์ธ์คํด์ค\n *\n * @example\n * ```typescript\n * import { createBrowserClient } from '@your-org/sdk'\n *\n * const client = createBrowserClient({\n * clientKey: process.env.NEXT_PUBLIC_CLIENT_KEY!,\n * environment: 'production'\n * })\n *\n * export default client\n * ```\n */\nexport const createBrowserClient = (options: ClientOptions): BrowserClient => {\n return new BrowserClient(options)\n}\n\nexport * from './index.server'\n","export const generateOrderNumber = () => {\n // YYMMDDRRRRRR\n const year = new Date().getFullYear().toString().slice(-2)\n const month = new Date().getMonth().toString().padStart(2, '0')\n const day = new Date().getDate().toString().padStart(2, '0')\n const random = Math.floor(Math.random() * 1000000)\n .toString()\n .padStart(6, '0')\n\n return `${year}${month}${day}${random}`\n}\n","export const objectFor = <T>(data: T | number | null | undefined) => {\n if (typeof data === 'number') {\n return null\n }\n\n return data\n}\n","import { z } from 'zod'\n\nexport const orderSchema = z.object({\n // ์ฃผ๋ฌธ์ ์ ๋ณด\n name: z.string().min(1),\n email: z.string().email(),\n\n // ๋ฐฐ์ก ์ ๋ณด\n shippingPhone: z.string().min(1),\n shippingPostalCode: z.string().min(1),\n shippingAddress: z.string().min(1),\n shippingAddressDetail: z.string().min(1),\n shippingMessage: z.string().min(1).optional(),\n})\n"]}
|