@duke333/builder-ui 0.1.5 → 0.2.0

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 CHANGED
@@ -15,62 +15,43 @@ Use one frontend bind file:
15
15
  ```tsx
16
16
  "use client";
17
17
 
18
- import { createBuilderPortalIntegration } from "@duke333/builder-ui/integration";
18
+ import {
19
+ BuilderProvider,
20
+ createBuilderClient,
21
+ } from "@duke333/builder-ui";
22
+ import "@duke333/builder-ui/styles.css";
19
23
  import { api } from "@/lib/api/apiClient";
20
24
 
21
- export const builder = createBuilderPortalIntegration({
25
+ export const builderClient = createBuilderClient({
22
26
  transport: api,
23
- adminBasePath: "/admin/dev/builder",
24
- runtimeBasePath: "/admin/winu",
25
- adminPages: {
26
- permissionOptions: [{ value: "org:manage", label: "org:manage" }],
27
- defaultPermission: "org:manage",
28
- },
29
27
  });
30
28
 
31
- export const {
32
- api: builderApi,
33
- hooks: builderHooks,
34
- routes: builderRoutes,
35
- adminPages,
36
- } = builder;
29
+ export function AppBuilderProvider({ children }: { children: React.ReactNode }) {
30
+ return <BuilderProvider client={builderClient}>{children}</BuilderProvider>;
31
+ }
37
32
  ```
38
33
 
39
- ## Route Example
34
+ ## Runtime Components
40
35
 
41
36
  ```tsx
42
- import { adminPages } from "@/features/builder/builder.config";
37
+ import { BuilderForm, BuilderGrid, BuilderView } from "@duke333/builder-ui";
43
38
 
44
39
  export default function Page() {
45
- const Component = adminPages?.AdminFormsPage;
46
- return Component ? <Component /> : null;
40
+ return <BuilderView viewId="orders-view-id" />;
47
41
  }
48
42
  ```
49
43
 
50
- ## Runtime Component Example
51
-
52
- ```tsx
53
- import { createDynamicViewComponent } from "@duke333/builder-ui/components";
54
- import { builderHooks } from "@/features/builder/builder.config";
55
-
56
- export const DynamicView = createDynamicViewComponent({
57
- hooks: builderHooks,
58
- notifications,
59
- });
60
- ```
61
-
62
- Use:
44
+ The ready components are:
63
45
 
64
- - `DynamicForm` for form-only write flow
65
- - `DynamicList` for list-only read flow
66
- - `DynamicView` for full CRUD flow
46
+ - `BuilderForm` for form-only write flow
47
+ - `BuilderGrid` for list-only read flow
48
+ - `BuilderView` for full CRUD flow
67
49
 
68
- Runtime form schemas expose `presentation: "dialog" | "drawer"`. The injected main-form and
69
- subform `DialogShell` components receive that value and choose the matching host UI shell.
50
+ They own fetching, fields, validation, search, sort, pagination, CRUD, Dialog/Drawer, subforms,
51
+ loading, empty, errors, focus restoration, and row action isolation. Runtime form schemas expose
52
+ `presentation: "dialog" | "drawer"`; no host shell mapping is required.
70
53
 
71
- When binding a data grid, forward the row click event through `onRowClick(row, event)`. Action
72
- buttons should pass their click event to `actions.onEdit(row, event)` or
73
- `actions.onDelete(row, event)` so an action click cannot also open the row editor.
54
+ The existing `createDynamic*Component` factories remain available as the advanced headless API.
74
55
 
75
56
  ## Validation
76
57
 
@@ -18,6 +18,9 @@ type BuilderFieldOptionsQuery = {
18
18
  search?: string;
19
19
  depends?: Record<string, string | undefined>;
20
20
  };
21
+ type BuilderApiClientOptions = {
22
+ apiBasePath?: string;
23
+ };
21
24
  type BuilderApiContracts = {
22
25
  BuilderDbTable: unknown;
23
26
  BuilderForm: {
@@ -57,7 +60,7 @@ type BuilderApiContracts = {
57
60
  ListBuilderViewEntriesQuery: object;
58
61
  ListBuilderViewEntriesResponse: unknown;
59
62
  };
60
- declare function createBuilderApiClient<C extends BuilderApiContracts>(transport: BuilderApiTransport): {
63
+ declare function createBuilderApiClient<C extends BuilderApiContracts>(rootTransport: BuilderApiTransport, options?: BuilderApiClientOptions): {
61
64
  listBuilderForms: (query: C["ListBuilderFormsQuery"]) => Promise<C["ListBuilderFormsResponse"]>;
62
65
  listBuilderDbTables: () => Promise<C["BuilderDbTable"][]>;
63
66
  listBuilderFormOptions: () => Promise<C["BuilderForm"][]>;
@@ -96,4 +99,4 @@ declare function createBuilderApiClient<C extends BuilderApiContracts>(transport
96
99
  };
97
100
  type BuilderApiClient<C extends BuilderApiContracts> = ReturnType<typeof createBuilderApiClient<C>>;
98
101
 
99
- export { type BuilderApiClient, type BuilderApiContracts, type BuilderApiQuery, type BuilderApiQueryValue, type BuilderApiTransport, type BuilderFieldOptionsQuery, createBuilderApiClient };
102
+ export { type BuilderApiClient, type BuilderApiClientOptions, type BuilderApiContracts, type BuilderApiQuery, type BuilderApiQueryValue, type BuilderApiTransport, type BuilderFieldOptionsQuery, createBuilderApiClient };
package/dist/api/index.js CHANGED
@@ -9,7 +9,15 @@ function fieldOptionsQueryParams(query) {
9
9
  }
10
10
  return flatQuery;
11
11
  }
12
- function createBuilderApiClient(transport) {
12
+ function createBuilderApiClient(rootTransport, options = {}) {
13
+ const basePath = options.apiBasePath?.trim().replace(/\/+$/g, "") ?? "";
14
+ const path = (value) => `${basePath}${value}`;
15
+ const transport = {
16
+ get: (value, requestOptions) => rootTransport.get(path(value), requestOptions),
17
+ post: (value, body, requestOptions) => rootTransport.post(path(value), body, requestOptions),
18
+ patch: (value, body, requestOptions) => rootTransport.patch(path(value), body, requestOptions),
19
+ delete: (value, requestOptions) => rootTransport.delete(path(value), requestOptions)
20
+ };
13
21
  return {
14
22
  listBuilderForms: (query) => transport.get("/builder/forms", {
15
23
  query: queryParams(query)
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/createBuilderApiClient.ts"],"sourcesContent":["export type BuilderApiQueryValue = string | number | boolean | null | undefined;\nexport type BuilderApiQuery = Record<string, BuilderApiQueryValue>;\n\nexport type BuilderApiTransport = {\n get<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n post<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n patch<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n delete<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n};\n\nexport type BuilderFieldOptionsQuery = {\n search?: string;\n depends?: Record<string, string | undefined>;\n};\n\nexport type BuilderApiContracts = {\n BuilderDbTable: unknown;\n BuilderForm: { id: string };\n BuilderList: { id: string };\n BuilderView: { id: string };\n BuilderViewEntry: { id: string };\n ListBuilderFormsQuery: object;\n ListBuilderFormsResponse: unknown;\n CreateBuilderFormInput: unknown;\n UpdateBuilderFormInput: unknown;\n ListBuilderListsQuery: object;\n ListBuilderListsResponse: unknown;\n CreateBuilderListInput: unknown;\n UpdateBuilderListInput: unknown;\n ListBuilderViewsQuery: object;\n ListBuilderViewsResponse: unknown;\n CreateBuilderViewInput: unknown;\n UpdateBuilderViewInput: unknown;\n ReplicateBuilderEntityInput: unknown;\n CreateBuilderViewEntryInput: unknown;\n CreateCompositeBuilderViewEntryInput: unknown;\n UpdateCompositeBuilderViewEntryInput: unknown;\n UpdateBuilderViewEntryInput: unknown;\n ListBuilderFieldOptionsQuery: BuilderFieldOptionsQuery;\n ListBuilderFieldOptionsResponse: unknown;\n RunBuilderFieldTriggerInput: unknown;\n BuilderFieldTriggerEvent: string;\n BuilderFieldTriggerResponse: unknown;\n ListBuilderViewEntriesQuery: object;\n ListBuilderViewEntriesResponse: unknown;\n};\n\nfunction queryParams(query: object): BuilderApiQuery {\n return { ...query } as BuilderApiQuery;\n}\n\nfunction fieldOptionsQueryParams(query: BuilderFieldOptionsQuery): BuilderApiQuery {\n const flatQuery: BuilderApiQuery = { search: query.search };\n for (const [key, value] of Object.entries(query.depends ?? {})) {\n flatQuery[`depends.${key}`] = value;\n }\n return flatQuery;\n}\n\nexport function createBuilderApiClient<C extends BuilderApiContracts>(\n transport: BuilderApiTransport,\n) {\n return {\n listBuilderForms: (query: C[\"ListBuilderFormsQuery\"]) =>\n transport.get<C[\"ListBuilderFormsResponse\"]>(\"/builder/forms\", {\n query: queryParams(query),\n }),\n\n listBuilderDbTables: () => transport.get<C[\"BuilderDbTable\"][]>(\"/builder/datasources/tables\"),\n\n listBuilderFormOptions: () => transport.get<C[\"BuilderForm\"][]>(\"/builder/forms/options\"),\n\n getBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`),\n\n createBuilderForm: (input: C[\"CreateBuilderFormInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(\"/builder/forms\", input),\n\n updateBuilderForm: (id: string, input: C[\"UpdateBuilderFormInput\"]) =>\n transport.patch<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`, input),\n\n replicateBuilderForm: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderForm: (id: string) =>\n transport.delete<void>(`/builder/forms/${encodeURIComponent(id)}`),\n\n listBuilderLists: (query: C[\"ListBuilderListsQuery\"]) =>\n transport.get<C[\"ListBuilderListsResponse\"]>(\"/builder/lists\", {\n query: queryParams(query),\n }),\n\n listBuilderListOptions: () => transport.get<C[\"BuilderList\"][]>(\"/builder/lists/options\"),\n\n getBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`),\n\n createBuilderList: (input: C[\"CreateBuilderListInput\"]) =>\n transport.post<C[\"BuilderList\"]>(\"/builder/lists\", input),\n\n updateBuilderList: (id: string, input: C[\"UpdateBuilderListInput\"]) =>\n transport.patch<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`, input),\n\n replicateBuilderList: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderList: (id: string) =>\n transport.delete<void>(`/builder/lists/${encodeURIComponent(id)}`),\n\n listBuilderViews: (query: C[\"ListBuilderViewsQuery\"]) =>\n transport.get<C[\"ListBuilderViewsResponse\"]>(\"/builder/views\", {\n query: queryParams(query),\n }),\n\n getBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`),\n\n createBuilderView: (input: C[\"CreateBuilderViewInput\"]) =>\n transport.post<C[\"BuilderView\"]>(\"/builder/views\", input),\n\n updateBuilderView: (id: string, input: C[\"UpdateBuilderViewInput\"]) =>\n transport.patch<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`, input),\n\n replicateBuilderView: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderView: (id: string) =>\n transport.delete<void>(`/builder/views/${encodeURIComponent(id)}`),\n\n getRuntimeBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/runtime/forms/${encodeURIComponent(id)}`),\n\n createRuntimeBuilderFormEntry: (formId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/entries`,\n input,\n ),\n\n listRuntimeBuilderFormFieldOptions: (\n formId: string,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n ) =>\n transport.get<C[\"ListBuilderFieldOptionsResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/options`,\n { query: fieldOptionsQueryParams(query) },\n ),\n\n runRuntimeBuilderFormFieldTrigger: (\n formId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n getRuntimeBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/runtime/lists/${encodeURIComponent(id)}`),\n\n listRuntimeBuilderListEntries: (listId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/lists/${encodeURIComponent(listId)}/entries`,\n { query: queryParams(query) },\n ),\n\n getRuntimeBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/runtime/views/${encodeURIComponent(id)}`),\n\n runRuntimeBuilderViewFieldTrigger: (\n viewId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n listBuilderViewEntries: (viewId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n { query: queryParams(query) },\n ),\n\n createBuilderViewEntry: (viewId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n input,\n ),\n\n createCompositeBuilderViewEntry: (\n viewId: string,\n input: C[\"CreateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries`,\n input,\n ),\n\n updateCompositeBuilderViewEntry: (\n viewId: string,\n id: string,\n input: C[\"UpdateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n updateBuilderViewEntry: (viewId: string, id: string, input: C[\"UpdateBuilderViewEntryInput\"]) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n deleteBuilderViewEntry: (viewId: string, id: string) =>\n transport.delete<void>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n ),\n };\n}\n\nexport type BuilderApiClient<C extends BuilderApiContracts> = ReturnType<\n typeof createBuilderApiClient<C>\n>;\n"],"mappings":";AA+CA,SAAS,YAAY,OAAgC;AACnD,SAAO,EAAE,GAAG,MAAM;AACpB;AAEA,SAAS,wBAAwB,OAAkD;AACjF,QAAM,YAA6B,EAAE,QAAQ,MAAM,OAAO;AAC1D,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,WAAW,CAAC,CAAC,GAAG;AAC9D,cAAU,WAAW,GAAG,EAAE,IAAI;AAAA,EAChC;AACA,SAAO;AACT;AAEO,SAAS,uBACd,WACA;AACA,SAAO;AAAA,IACL,kBAAkB,CAAC,UACjB,UAAU,IAAmC,kBAAkB;AAAA,MAC7D,OAAO,YAAY,KAAK;AAAA,IAC1B,CAAC;AAAA,IAEH,qBAAqB,MAAM,UAAU,IAA2B,6BAA6B;AAAA,IAE7F,wBAAwB,MAAM,UAAU,IAAwB,wBAAwB;AAAA,IAExF,gBAAgB,CAAC,OACf,UAAU,IAAsB,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAE5E,mBAAmB,CAAC,UAClB,UAAU,KAAuB,kBAAkB,KAAK;AAAA,IAE1D,mBAAmB,CAAC,IAAY,UAC9B,UAAU,MAAwB,kBAAkB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,IAErF,sBAAsB,CAAC,IAAY,UACjC,UAAU,KAAuB,kBAAkB,mBAAmB,EAAE,CAAC,cAAc,KAAK;AAAA,IAE9F,mBAAmB,CAAC,OAClB,UAAU,OAAa,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEnE,kBAAkB,CAAC,UACjB,UAAU,IAAmC,kBAAkB;AAAA,MAC7D,OAAO,YAAY,KAAK;AAAA,IAC1B,CAAC;AAAA,IAEH,wBAAwB,MAAM,UAAU,IAAwB,wBAAwB;AAAA,IAExF,gBAAgB,CAAC,OACf,UAAU,IAAsB,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAE5E,mBAAmB,CAAC,UAClB,UAAU,KAAuB,kBAAkB,KAAK;AAAA,IAE1D,mBAAmB,CAAC,IAAY,UAC9B,UAAU,MAAwB,kBAAkB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,IAErF,sBAAsB,CAAC,IAAY,UACjC,UAAU,KAAuB,kBAAkB,mBAAmB,EAAE,CAAC,cAAc,KAAK;AAAA,IAE9F,mBAAmB,CAAC,OAClB,UAAU,OAAa,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEnE,kBAAkB,CAAC,UACjB,UAAU,IAAmC,kBAAkB;AAAA,MAC7D,OAAO,YAAY,KAAK;AAAA,IAC1B,CAAC;AAAA,IAEH,gBAAgB,CAAC,OACf,UAAU,IAAsB,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAE5E,mBAAmB,CAAC,UAClB,UAAU,KAAuB,kBAAkB,KAAK;AAAA,IAE1D,mBAAmB,CAAC,IAAY,UAC9B,UAAU,MAAwB,kBAAkB,mBAAmB,EAAE,CAAC,IAAI,KAAK;AAAA,IAErF,sBAAsB,CAAC,IAAY,UACjC,UAAU,KAAuB,kBAAkB,mBAAmB,EAAE,CAAC,cAAc,KAAK;AAAA,IAE9F,mBAAmB,CAAC,OAClB,UAAU,OAAa,kBAAkB,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEnE,uBAAuB,CAAC,OACtB,UAAU,IAAsB,0BAA0B,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEpF,+BAA+B,CAAC,QAAgB,UAC9C,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IAEF,oCAAoC,CAClC,QACA,UACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,WAAW,mBAAmB,QAAQ,CAAC;AAAA,MAC3F,EAAE,OAAO,wBAAwB,KAAK,EAAE;AAAA,IAC1C;AAAA,IAEF,mCAAmC,CACjC,QACA,UACA,OACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,WAAW,mBAAmB,QAAQ,CAAC,aAAa,mBAAmB,KAAK,CAAC;AAAA,MACjI;AAAA,IACF;AAAA,IAEF,uBAAuB,CAAC,OACtB,UAAU,IAAsB,0BAA0B,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEpF,+BAA+B,CAAC,QAAgB,UAC9C,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD,EAAE,OAAO,YAAY,KAAK,EAAE;AAAA,IAC9B;AAAA,IAEF,uBAAuB,CAAC,OACtB,UAAU,IAAsB,0BAA0B,mBAAmB,EAAE,CAAC,EAAE;AAAA,IAEpF,mCAAmC,CACjC,QACA,UACA,OACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,WAAW,mBAAmB,QAAQ,CAAC,aAAa,mBAAmB,KAAK,CAAC;AAAA,MACjI;AAAA,IACF;AAAA,IAEF,wBAAwB,CAAC,QAAgB,UACvC,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD,EAAE,OAAO,YAAY,KAAK,EAAE;AAAA,IAC9B;AAAA,IAEF,wBAAwB,CAAC,QAAgB,UACvC,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IAEF,iCAAiC,CAC/B,QACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IAEF,iCAAiC,CAC/B,QACA,IACA,UAEA,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,sBAAsB,mBAAmB,EAAE,CAAC;AAAA,MAChG;AAAA,IACF;AAAA,IAEF,wBAAwB,CAAC,QAAgB,IAAY,UACnD,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,YAAY,mBAAmB,EAAE,CAAC;AAAA,MACtF;AAAA,IACF;AAAA,IAEF,wBAAwB,CAAC,QAAgB,OACvC,UAAU;AAAA,MACR,0BAA0B,mBAAmB,MAAM,CAAC,YAAY,mBAAmB,EAAE,CAAC;AAAA,IACxF;AAAA,EACJ;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/api/createBuilderApiClient.ts"],"sourcesContent":["export type BuilderApiQueryValue = string | number | boolean | null | undefined;\nexport type BuilderApiQuery = Record<string, BuilderApiQueryValue>;\n\nexport type BuilderApiTransport = {\n get<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n post<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n patch<T>(path: string, body?: unknown, options?: { query?: BuilderApiQuery }): Promise<T>;\n delete<T>(path: string, options?: { query?: BuilderApiQuery }): Promise<T>;\n};\n\nexport type BuilderFieldOptionsQuery = {\n search?: string;\n depends?: Record<string, string | undefined>;\n};\n\nexport type BuilderApiClientOptions = {\n apiBasePath?: string;\n};\n\nexport type BuilderApiContracts = {\n BuilderDbTable: unknown;\n BuilderForm: { id: string };\n BuilderList: { id: string };\n BuilderView: { id: string };\n BuilderViewEntry: { id: string };\n ListBuilderFormsQuery: object;\n ListBuilderFormsResponse: unknown;\n CreateBuilderFormInput: unknown;\n UpdateBuilderFormInput: unknown;\n ListBuilderListsQuery: object;\n ListBuilderListsResponse: unknown;\n CreateBuilderListInput: unknown;\n UpdateBuilderListInput: unknown;\n ListBuilderViewsQuery: object;\n ListBuilderViewsResponse: unknown;\n CreateBuilderViewInput: unknown;\n UpdateBuilderViewInput: unknown;\n ReplicateBuilderEntityInput: unknown;\n CreateBuilderViewEntryInput: unknown;\n CreateCompositeBuilderViewEntryInput: unknown;\n UpdateCompositeBuilderViewEntryInput: unknown;\n UpdateBuilderViewEntryInput: unknown;\n ListBuilderFieldOptionsQuery: BuilderFieldOptionsQuery;\n ListBuilderFieldOptionsResponse: unknown;\n RunBuilderFieldTriggerInput: unknown;\n BuilderFieldTriggerEvent: string;\n BuilderFieldTriggerResponse: unknown;\n ListBuilderViewEntriesQuery: object;\n ListBuilderViewEntriesResponse: unknown;\n};\n\nfunction queryParams(query: object): BuilderApiQuery {\n return { ...query } as BuilderApiQuery;\n}\n\nfunction fieldOptionsQueryParams(query: BuilderFieldOptionsQuery): BuilderApiQuery {\n const flatQuery: BuilderApiQuery = { search: query.search };\n for (const [key, value] of Object.entries(query.depends ?? {})) {\n flatQuery[`depends.${key}`] = value;\n }\n return flatQuery;\n}\n\nexport function createBuilderApiClient<C extends BuilderApiContracts>(\n rootTransport: BuilderApiTransport,\n options: BuilderApiClientOptions = {},\n) {\n const basePath = options.apiBasePath?.trim().replace(/\\/+$/g, \"\") ?? \"\";\n const path = (value: string) => `${basePath}${value}`;\n const transport: BuilderApiTransport = {\n get: (value, requestOptions) => rootTransport.get(path(value), requestOptions),\n post: (value, body, requestOptions) => rootTransport.post(path(value), body, requestOptions),\n patch: (value, body, requestOptions) => rootTransport.patch(path(value), body, requestOptions),\n delete: (value, requestOptions) => rootTransport.delete(path(value), requestOptions),\n };\n\n return {\n listBuilderForms: (query: C[\"ListBuilderFormsQuery\"]) =>\n transport.get<C[\"ListBuilderFormsResponse\"]>(\"/builder/forms\", {\n query: queryParams(query),\n }),\n\n listBuilderDbTables: () =>\n transport.get<C[\"BuilderDbTable\"][]>(\"/builder/datasources/tables\"),\n\n listBuilderFormOptions: () =>\n transport.get<C[\"BuilderForm\"][]>(\"/builder/forms/options\"),\n\n getBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`),\n\n createBuilderForm: (input: C[\"CreateBuilderFormInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(\"/builder/forms\", input),\n\n updateBuilderForm: (id: string, input: C[\"UpdateBuilderFormInput\"]) =>\n transport.patch<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}`, input),\n\n replicateBuilderForm: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderForm\"]>(`/builder/forms/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderForm: (id: string) =>\n transport.delete<void>(`/builder/forms/${encodeURIComponent(id)}`),\n\n listBuilderLists: (query: C[\"ListBuilderListsQuery\"]) =>\n transport.get<C[\"ListBuilderListsResponse\"]>(\"/builder/lists\", {\n query: queryParams(query),\n }),\n\n listBuilderListOptions: () => transport.get<C[\"BuilderList\"][]>(\"/builder/lists/options\"),\n\n getBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`),\n\n createBuilderList: (input: C[\"CreateBuilderListInput\"]) =>\n transport.post<C[\"BuilderList\"]>(\"/builder/lists\", input),\n\n updateBuilderList: (id: string, input: C[\"UpdateBuilderListInput\"]) =>\n transport.patch<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}`, input),\n\n replicateBuilderList: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderList\"]>(`/builder/lists/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderList: (id: string) =>\n transport.delete<void>(`/builder/lists/${encodeURIComponent(id)}`),\n\n listBuilderViews: (query: C[\"ListBuilderViewsQuery\"]) =>\n transport.get<C[\"ListBuilderViewsResponse\"]>(\"/builder/views\", {\n query: queryParams(query),\n }),\n\n getBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`),\n\n createBuilderView: (input: C[\"CreateBuilderViewInput\"]) =>\n transport.post<C[\"BuilderView\"]>(\"/builder/views\", input),\n\n updateBuilderView: (id: string, input: C[\"UpdateBuilderViewInput\"]) =>\n transport.patch<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}`, input),\n\n replicateBuilderView: (id: string, input: C[\"ReplicateBuilderEntityInput\"]) =>\n transport.post<C[\"BuilderView\"]>(`/builder/views/${encodeURIComponent(id)}/replicate`, input),\n\n deleteBuilderView: (id: string) =>\n transport.delete<void>(`/builder/views/${encodeURIComponent(id)}`),\n\n getRuntimeBuilderForm: (id: string) =>\n transport.get<C[\"BuilderForm\"]>(`/builder/runtime/forms/${encodeURIComponent(id)}`),\n\n createRuntimeBuilderFormEntry: (formId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/entries`,\n input,\n ),\n\n listRuntimeBuilderFormFieldOptions: (\n formId: string,\n fieldKey: string,\n query: C[\"ListBuilderFieldOptionsQuery\"],\n ) =>\n transport.get<C[\"ListBuilderFieldOptionsResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/options`,\n { query: fieldOptionsQueryParams(query) },\n ),\n\n runRuntimeBuilderFormFieldTrigger: (\n formId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/forms/${encodeURIComponent(formId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n getRuntimeBuilderList: (id: string) =>\n transport.get<C[\"BuilderList\"]>(`/builder/runtime/lists/${encodeURIComponent(id)}`),\n\n listRuntimeBuilderListEntries: (listId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/lists/${encodeURIComponent(listId)}/entries`,\n { query: queryParams(query) },\n ),\n\n getRuntimeBuilderView: (id: string) =>\n transport.get<C[\"BuilderView\"]>(`/builder/runtime/views/${encodeURIComponent(id)}`),\n\n runRuntimeBuilderViewFieldTrigger: (\n viewId: string,\n fieldKey: string,\n event: C[\"BuilderFieldTriggerEvent\"],\n input: C[\"RunBuilderFieldTriggerInput\"],\n ) =>\n transport.post<C[\"BuilderFieldTriggerResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/fields/${encodeURIComponent(fieldKey)}/triggers/${encodeURIComponent(event)}`,\n input,\n ),\n\n listBuilderViewEntries: (viewId: string, query: C[\"ListBuilderViewEntriesQuery\"]) =>\n transport.get<C[\"ListBuilderViewEntriesResponse\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n { query: queryParams(query) },\n ),\n\n createBuilderViewEntry: (viewId: string, input: C[\"CreateBuilderViewEntryInput\"]) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries`,\n input,\n ),\n\n createCompositeBuilderViewEntry: (\n viewId: string,\n input: C[\"CreateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.post<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries`,\n input,\n ),\n\n updateCompositeBuilderViewEntry: (\n viewId: string,\n id: string,\n input: C[\"UpdateCompositeBuilderViewEntryInput\"],\n ) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/composite-entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n updateBuilderViewEntry: (viewId: string, id: string, input: C[\"UpdateBuilderViewEntryInput\"]) =>\n transport.patch<C[\"BuilderViewEntry\"]>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n input,\n ),\n\n deleteBuilderViewEntry: (viewId: string, id: string) =>\n transport.delete<void>(\n `/builder/runtime/views/${encodeURIComponent(viewId)}/entries/${encodeURIComponent(id)}`,\n ),\n };\n}\n\nexport type BuilderApiClient<C extends BuilderApiContracts> = ReturnType<\n typeof createBuilderApiClient<C>\n>;\n"],"mappings":"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","names":[]}