@antlur/backstage 1.12.11 → 1.12.13

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.
@@ -12,9 +12,9 @@ export interface UpdateWebsiteParams {
12
12
  }
13
13
  export declare class WebsiteService extends BaseService {
14
14
  getWebsites(options?: RequestInit): Promise<Website[]>;
15
- getWebsite(id?: string, options?: RequestInit): Promise<Website>;
15
+ getWebsite(options?: RequestInit): Promise<Website>;
16
16
  createWebsite(params: CreateWebsiteParams, options?: RequestInit): Promise<Website>;
17
17
  updateWebsite(id: string, params: UpdateWebsiteParams, options?: RequestInit): Promise<Website>;
18
- routes(websiteId?: string, options?: RequestInit): Promise<string[]>;
18
+ routes(options?: RequestInit): Promise<string[]>;
19
19
  }
20
20
  //# sourceMappingURL=website.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"website.d.ts","sourceRoot":"","sources":["../../src/endpoints/website.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4C,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,cAAe,SAAQ,WAAW;IACvC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAKtD,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAShE,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnF,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/F,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAI3E"}
1
+ {"version":3,"file":"website.d.ts","sourceRoot":"","sources":["../../src/endpoints/website.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4C,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,cAAe,SAAQ,WAAW;IACvC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAKtD,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAUnD,aAAa,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnF,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/F,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAKvD"}
@@ -4,11 +4,12 @@ export class WebsiteService extends BaseService {
4
4
  const { data } = await this.client.get("/websites", options);
5
5
  return data;
6
6
  }
7
- async getWebsite(id, options) {
8
- if (id) {
9
- const { data } = await this.client.get(`/websites/${id}`, options);
10
- return data;
11
- }
7
+ async getWebsite(options) {
8
+ // Handle case where id might be an object (e.g., RequestInit passed as first param)
9
+ // if (id && typeof id === "string") {
10
+ // const { data } = await this.client.get<ApiSingleResponse<Website>>(`/websites/${id}`, options);
11
+ // return data;
12
+ // }
12
13
  const res = await this.client.get("/websites", options);
13
14
  return res.data[0];
14
15
  }
@@ -20,8 +21,9 @@ export class WebsiteService extends BaseService {
20
21
  const { data } = await this.client.put(`/websites/${id}`, params, options);
21
22
  return data;
22
23
  }
23
- async routes(websiteId, options) {
24
- const id = websiteId || (await this.getWebsite()).id;
25
- return this.client.get(`/websites/${id}/routes`, options);
24
+ async routes(options) {
25
+ // const id = websiteId || (await this.getWebsite()).id;
26
+ const website = await this.getWebsite();
27
+ return this.client.get(`/websites/${website.id}/routes`, options);
26
28
  }
27
29
  }
@@ -1,10 +1,17 @@
1
1
  import { Field, FieldType, FieldTypeToValue } from "./field";
2
+ import { Entry } from "../../types/entry";
3
+ type Nullable<T> = T | null;
2
4
  type FieldValues<T extends readonly Field[]> = {
3
5
  [K in T[number]["slug"]]: Extract<T[number], {
4
6
  slug: K;
5
- }> extends {
7
+ }> extends infer FieldDef ? FieldDef extends {
8
+ type: 'reference';
9
+ is_multiple: true;
10
+ } ? Nullable<Entry[]> : FieldDef extends {
11
+ type: 'reference';
12
+ } ? Nullable<Entry> : FieldDef extends {
6
13
  type: infer Type;
7
- } ? Type extends FieldType ? FieldTypeToValue[Type] : never : never;
14
+ } ? Type extends FieldType ? FieldTypeToValue[Type] : never : never : never;
8
15
  };
9
16
  export interface BlockSchema<TFields extends readonly Field[]> {
10
17
  fields: TFields;
@@ -1 +1 @@
1
- {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../../src/studio/types/block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG7D,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,KAAK,EAAE,IAAI;KAC5C,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,GAClF,IAAI,SAAS,SAAS,GACpB,gBAAgB,CAAC,IAAI,CAAC,GACtB,KAAK,GACP,KAAK;CACV,CAAC;AAEF,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE;IAC3D,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY,CAAC,OAAO,SAAS,WAAW,CAAC,SAAS,KAAK,EAAE,CAAC;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,WAAW,CAAC,SAAS,KAAK,EAAE,CAAC;IAChF,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACpG;AAED,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,WAAW,CAAC,SAAS,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,aAAa,CAC7F,mBAAmB,CAAC,OAAO,CAAC,CAC7B,CAAC"}
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../../src/studio/types/block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAG5B,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,KAAK,EAAE,IAAI;KAC5C,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,SAAS,MAAM,QAAQ,GAC5E,QAAQ,SAAS;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,WAAW,EAAE,IAAI,CAAA;KAAE,GACvD,QAAQ,CAAC,KAAK,EAAE,CAAC,GACjB,QAAQ,SAAS;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,GACpC,QAAQ,CAAC,KAAK,CAAC,GACf,QAAQ,SAAS;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,GACnC,IAAI,SAAS,SAAS,GACpB,gBAAgB,CAAC,IAAI,CAAC,GACtB,KAAK,GACP,KAAK,GACX,KAAK;CACV,CAAC;AAEF,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE;IAC3D,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY,CAAC,OAAO,SAAS,WAAW,CAAC,SAAS,KAAK,EAAE,CAAC;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB,CAAC,OAAO,SAAS,WAAW,CAAC,SAAS,KAAK,EAAE,CAAC;IAChF,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACpG;AAED,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,WAAW,CAAC,SAAS,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,aAAa,CAC7F,mBAAmB,CAAC,OAAO,CAAC,CAC7B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { MediaItem } from "../../types";
2
+ import { Entry } from "../../types/entry";
2
3
  type Nullable<T> = T | null;
3
4
  export type FieldTypeToValue = {
4
5
  boolean: Nullable<boolean>;
@@ -11,8 +12,10 @@ export type FieldTypeToValue = {
11
12
  menu_select: Nullable<string>;
12
13
  number: Nullable<number>;
13
14
  press_select: Nullable<string>;
15
+ reference: Nullable<Entry | Entry[]>;
14
16
  repeater: Nullable<any[]>;
15
17
  rich_text: Nullable<string>;
18
+ select: Nullable<string>;
16
19
  separator: never;
17
20
  spacer: never;
18
21
  text: Nullable<string>;
@@ -32,10 +35,16 @@ export type BaseField = {
32
35
  label: string;
33
36
  value: any;
34
37
  }>;
38
+ allowed_references?: string[];
39
+ is_multiple?: boolean;
35
40
  fields?: Field[];
36
41
  };
37
42
  export type Field = {
38
- [K in FieldType]: BaseField & {
43
+ [K in FieldType]: K extends 'reference' ? BaseField & {
44
+ type: K;
45
+ value?: FieldTypeToValue[K];
46
+ is_multiple?: boolean;
47
+ } : BaseField & {
39
48
  type: K;
40
49
  value?: FieldTypeToValue[K];
41
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/studio/types/field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3B,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtB,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;KACjB,CAAC,IAAI,SAAS,GAAG,SAAS,GAAG;QAC5B,IAAI,EAAE,CAAC,CAAC;QACR,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;KAC7B;CACF,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/studio/types/field.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE5B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3B,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,QAAQ,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;IACrC,QAAQ,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtB,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC/B,CAAC;AACF,MAAM,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC/C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;KACjB,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,WAAW,GACnC,SAAS,GAAG;QACV,IAAI,EAAE,CAAC,CAAC;QACR,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,GACD,SAAS,GAAG;QACV,IAAI,EAAE,CAAC,CAAC;QACR,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;KAC7B;CACN,CAAC,SAAS,CAAC,CAAC"}
@@ -1,10 +1,17 @@
1
1
  import { Field, FieldType, FieldTypeToValue } from "./field";
2
+ import { Entry } from "../../types/entry";
3
+ type Nullable<T> = T | null;
2
4
  type FieldValues<T extends readonly Field[]> = {
3
5
  [K in T[number]["slug"]]: Extract<T[number], {
4
6
  slug: K;
5
- }> extends {
7
+ }> extends infer FieldDef ? FieldDef extends {
8
+ type: 'reference';
9
+ is_multiple: true;
10
+ } ? Nullable<Entry[]> : FieldDef extends {
11
+ type: 'reference';
12
+ } ? Nullable<Entry> : FieldDef extends {
6
13
  type: infer Type;
7
- } ? Type extends FieldType ? FieldTypeToValue[Type] : never : never;
14
+ } ? Type extends FieldType ? FieldTypeToValue[Type] : never : never : never;
8
15
  };
9
16
  export interface LayoutSchema<TFields extends readonly Field[]> {
10
17
  fields: TFields;
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/studio/types/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG7D,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,KAAK,EAAE,IAAI;KAC5C,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,SAAS;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,GAClF,IAAI,SAAS,SAAS,GACpB,gBAAgB,CAAC,IAAI,CAAC,GACtB,KAAK,GACP,KAAK;CACV,CAAC;AAEF,MAAM,WAAW,YAAY,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE;IAC5D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,oBAAoB,CAAC,OAAO,SAAS,YAAY,CAAC,SAAS,KAAK,EAAE,CAAC;IAClF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACrG"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/studio/types/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAG5B,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,KAAK,EAAE,IAAI;KAC5C,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,SAAS,MAAM,QAAQ,GAC5E,QAAQ,SAAS;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,WAAW,EAAE,IAAI,CAAA;KAAE,GACvD,QAAQ,CAAC,KAAK,EAAE,CAAC,GACjB,QAAQ,SAAS;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,GACpC,QAAQ,CAAC,KAAK,CAAC,GACf,QAAQ,SAAS;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,GACnC,IAAI,SAAS,SAAS,GACpB,gBAAgB,CAAC,IAAI,CAAC,GACtB,KAAK,GACP,KAAK,GACX,KAAK;CACV,CAAC;AAEF,MAAM,WAAW,YAAY,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE;IAC5D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,SAAS,KAAK,EAAE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,oBAAoB,CAAC,OAAO,SAAS,YAAY,CAAC,SAAS,KAAK,EAAE,CAAC;IAClF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACrG"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@antlur/backstage",
3
3
  "author": "Anthony Holmes",
4
- "version": "1.12.11",
4
+ "version": "1.12.13",
5
5
  "description": "A simple client for Backstage CMS",
6
6
  "license": "MIT",
7
7
  "repository": {
package/readme.md CHANGED
@@ -143,6 +143,59 @@ export const heroBlock = defineBlock({
143
143
  });
144
144
  ```
145
145
 
146
+ ## Using Reference Fields
147
+
148
+ Reference fields allow you to link to entries from specific blueprints. You can constrain which blueprints are allowed:
149
+
150
+ ```typescript
151
+ // blocks/testimonials/schema.ts
152
+ import { defineBlockSchema, defineField } from "@antlur/backstage/studio";
153
+
154
+ const testimonialFields = [
155
+ defineField({
156
+ name: "Customers",
157
+ slug: "customers",
158
+ type: "reference",
159
+ description: "Select customer entries",
160
+ allowed_references: ["customers"], // Only allow entries from the "customers" blueprint
161
+ is_multiple: true, // Allow multiple customer selections
162
+ required: true,
163
+ }),
164
+ defineField({
165
+ name: "Quote",
166
+ slug: "quote",
167
+ type: "textarea",
168
+ description: "The testimonial quote",
169
+ required: true,
170
+ }),
171
+ ];
172
+
173
+ export const schema = defineBlockSchema({
174
+ fields: testimonialFields,
175
+ });
176
+ ```
177
+
178
+ In your component, the reference field will contain the full entry data:
179
+
180
+ ```typescript
181
+ // blocks/testimonials/component.tsx
182
+ import type { BlockComponentProps } from "@antlur/backstage/studio";
183
+ import schema from "./schema";
184
+
185
+ export default function Testimonials({ block }: BlockComponentProps<typeof schema>) {
186
+ const { customers, quote } = block.fields;
187
+
188
+ return (
189
+ <div className="testimonial">
190
+ <blockquote>"{quote}"</blockquote>
191
+ <cite>
192
+ - {customers.map(customer => customer.name).join(", ")}
193
+ </cite> {/* Access entry properties */}
194
+ </div>
195
+ );
196
+ }
197
+ ```
198
+
146
199
  ## CLI Commands
147
200
 
148
201
  Sync your blocks and layouts to Backstage CMS:
@@ -197,6 +250,8 @@ Supported field types for blocks and layouts:
197
250
  - `rich_text` - Rich text editor
198
251
  - `number` - Numeric input
199
252
  - `boolean` - Checkbox
253
+ - `select` - Select from predefined options
254
+ - `reference` - Reference to entries from specific blueprints (supports `is_multiple` for multiple selections)
200
255
  - `url` - URL input
201
256
  - `image` - Single image picker
202
257
  - `image_list` - Multiple image picker
@@ -19,11 +19,12 @@ export class WebsiteService extends BaseService {
19
19
  return data;
20
20
  }
21
21
 
22
- async getWebsite(id?: string, options?: RequestInit): Promise<Website> {
23
- if (id) {
24
- const { data } = await this.client.get<ApiSingleResponse<Website>>(`/websites/${id}`, options);
25
- return data;
26
- }
22
+ async getWebsite(options?: RequestInit): Promise<Website> {
23
+ // Handle case where id might be an object (e.g., RequestInit passed as first param)
24
+ // if (id && typeof id === "string") {
25
+ // const { data } = await this.client.get<ApiSingleResponse<Website>>(`/websites/${id}`, options);
26
+ // return data;
27
+ // }
27
28
  const res = await this.client.get<ApiCollectionResponse<Website>>("/websites", options);
28
29
  return res.data[0];
29
30
  }
@@ -38,8 +39,9 @@ export class WebsiteService extends BaseService {
38
39
  return data;
39
40
  }
40
41
 
41
- async routes(websiteId?: string, options?: RequestInit): Promise<string[]> {
42
- const id = websiteId || (await this.getWebsite()).id;
43
- return this.client.get<string[]>(`/websites/${id}/routes`, options);
42
+ async routes(options?: RequestInit): Promise<string[]> {
43
+ // const id = websiteId || (await this.getWebsite()).id;
44
+ const website = await this.getWebsite();
45
+ return this.client.get<string[]>(`/websites/${website.id}/routes`, options);
44
46
  }
45
47
  }
@@ -1,11 +1,20 @@
1
1
  import { Field, FieldType, FieldTypeToValue } from "./field";
2
+ import { Entry } from "../../types/entry";
3
+
4
+ type Nullable<T> = T | null;
2
5
 
3
6
  // Type for field values from array-based fields
4
7
  type FieldValues<T extends readonly Field[]> = {
5
- [K in T[number]["slug"]]: Extract<T[number], { slug: K }> extends { type: infer Type }
6
- ? Type extends FieldType
7
- ? FieldTypeToValue[Type]
8
- : never
8
+ [K in T[number]["slug"]]: Extract<T[number], { slug: K }> extends infer FieldDef
9
+ ? FieldDef extends { type: 'reference'; is_multiple: true }
10
+ ? Nullable<Entry[]>
11
+ : FieldDef extends { type: 'reference' }
12
+ ? Nullable<Entry>
13
+ : FieldDef extends { type: infer Type }
14
+ ? Type extends FieldType
15
+ ? FieldTypeToValue[Type]
16
+ : never
17
+ : never
9
18
  : never;
10
19
  };
11
20
 
@@ -1,4 +1,5 @@
1
1
  import { MediaItem } from "../../types";
2
+ import { Entry } from "../../types/entry";
2
3
 
3
4
  type Nullable<T> = T | null;
4
5
 
@@ -13,8 +14,10 @@ export type FieldTypeToValue = {
13
14
  menu_select: Nullable<string>;
14
15
  number: Nullable<number>;
15
16
  press_select: Nullable<string>;
17
+ reference: Nullable<Entry | Entry[]>;
16
18
  repeater: Nullable<any[]>;
17
19
  rich_text: Nullable<string>;
20
+ select: Nullable<string>;
18
21
  separator: never;
19
22
  spacer: never;
20
23
  text: Nullable<string>;
@@ -32,14 +35,22 @@ export type BaseField = {
32
35
  placeholder?: string;
33
36
  required?: boolean;
34
37
  options?: Array<{ label: string; value: any }>;
38
+ allowed_references?: string[];
39
+ is_multiple?: boolean;
35
40
  fields?: Field[];
36
41
  };
37
42
 
38
43
  export type Field = {
39
- [K in FieldType]: BaseField & {
40
- type: K;
41
- value?: FieldTypeToValue[K];
42
- };
44
+ [K in FieldType]: K extends 'reference'
45
+ ? BaseField & {
46
+ type: K;
47
+ value?: FieldTypeToValue[K];
48
+ is_multiple?: boolean;
49
+ }
50
+ : BaseField & {
51
+ type: K;
52
+ value?: FieldTypeToValue[K];
53
+ };
43
54
  }[FieldType];
44
55
 
45
56
  // export interface Field<T extends FieldType = FieldType> {
@@ -1,11 +1,20 @@
1
1
  import { Field, FieldType, FieldTypeToValue } from "./field";
2
+ import { Entry } from "../../types/entry";
3
+
4
+ type Nullable<T> = T | null;
2
5
 
3
6
  // Type for field values from array-based fields
4
7
  type FieldValues<T extends readonly Field[]> = {
5
- [K in T[number]["slug"]]: Extract<T[number], { slug: K }> extends { type: infer Type }
6
- ? Type extends FieldType
7
- ? FieldTypeToValue[Type]
8
- : never
8
+ [K in T[number]["slug"]]: Extract<T[number], { slug: K }> extends infer FieldDef
9
+ ? FieldDef extends { type: 'reference'; is_multiple: true }
10
+ ? Nullable<Entry[]>
11
+ : FieldDef extends { type: 'reference' }
12
+ ? Nullable<Entry>
13
+ : FieldDef extends { type: infer Type }
14
+ ? Type extends FieldType
15
+ ? FieldTypeToValue[Type]
16
+ : never
17
+ : never
9
18
  : never;
10
19
  };
11
20