Skip to content

Commit ed120a8

Browse files
levimykeldani-mp
andauthoredDec 5, 2024··
feat: add support for repeatable links in models (#355)
* chore: bump types-internal dep * feat: support repeatable links in models * Bump types internal * Remove repeat from content rel. and link to media * Add Repeatable (#360) * Add Repetable to index * chore(release): 7.13.0-alpha.0 * Use stable types internal --------- Co-authored-by: Daniel Martín <danimartinprieto@gmail.com>
1 parent 0cf80dd commit ed120a8

10 files changed

+74
-23
lines changed
 

‎CHANGELOG.md

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
## [7.13.0-alpha.0](https://github.com/prismicio/prismic-client/compare/v7.12.0...v7.13.0-alpha.0) (2024-11-28)
6+
7+
8+
### Features
9+
10+
* support repeatable links in models ([00f8524](https://github.com/prismicio/prismic-client/commit/00f8524d3df5034e263f74c884a9d78627a37dce))
11+
12+
13+
### Chore
14+
15+
* bump types-internal dep ([6a5eb26](https://github.com/prismicio/prismic-client/commit/6a5eb26b1bd3cb26eb68150ce43c081630bcfbfd))
16+
517
## [7.12.0](https://github.com/prismicio/prismic-client/compare/v7.11.1...v7.12.0) (2024-10-30)
618

719

‎package-lock.json

+9-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@prismicio/client",
3-
"version": "7.12.0",
3+
"version": "7.13.0-alpha.0",
44
"description": "The official JavaScript + TypeScript client library for Prismic",
55
"keywords": [
66
"typescript",
@@ -83,7 +83,7 @@
8383
},
8484
"devDependencies": {
8585
"@prismicio/mock": "^0.3.9",
86-
"@prismicio/types-internal": "^2.8.0",
86+
"@prismicio/types-internal": "3.1.0",
8787
"@size-limit/preset-small-lib": "^11.1.6",
8888
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
8989
"@typescript-eslint/eslint-plugin": "^6.21.0",

‎src/helpers/isFilled.ts

+15-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import type { Slice } from "../types/value/slice"
1717
import type { SliceZone } from "../types/value/sliceZone"
1818
import type { TimestampField } from "../types/value/timestamp"
1919
import type { TitleField } from "../types/value/title"
20-
import type { AnyRegularField } from "../types/value/types"
20+
import type { AnyRegularField, Repeatable } from "../types/value/types"
2121

2222
/**
2323
* Determines if a value is not nullish (i.e. not `null` or `undefined`). This
@@ -266,6 +266,20 @@ export const integrationField = isNonNullish as <
266266
// TODO: Remove when we remove support for deprecated `integrationFields` export.
267267
export const integrationFields = integrationField
268268

269+
/**
270+
* Determines if a repeatable field has at least one item.
271+
*
272+
* @param repeatable - Repeatable to check.
273+
*
274+
* @returns `true` if `repeatable` contains at least one item, `false`
275+
* otherwise.
276+
*/
277+
export const repeatable = <T extends LinkField>(
278+
repeatable: Repeatable<T> | null | undefined,
279+
): repeatable is Repeatable<T, "filled"> => {
280+
return isNonNullish(repeatable) && isNonEmptyArray(repeatable)
281+
}
282+
269283
/**
270284
* Determines if a Group has at least one item.
271285
*

‎src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ export type {
246246
FieldState,
247247
AnyRegularField,
248248
AnySlicePrimaryField,
249+
Repeatable,
249250
} from "./types/value/types"
250251

251252
// Models - Types representing Prismic content models.

‎src/types/model/link.ts

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export interface CustomTypeModelLinkField {
1515
| (typeof CustomTypeModelLinkSelectType)[keyof typeof CustomTypeModelLinkSelectType]
1616
allowText?: boolean
1717
allowTargetBlank?: boolean
18+
repeat?: boolean
1819
}
1920
}
2021

‎src/types/value/types.ts

+9
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export type AnyRegularField =
3535
| ImageField
3636
| ContentRelationshipField
3737
| LinkField
38+
| Repeatable<LinkField>
3839
| LinkToMediaField
3940
| EmbedField
4041
| DateField
@@ -52,6 +53,14 @@ export type AnyRegularField =
5253
*/
5354
export type AnySlicePrimaryField = GroupField | AnyRegularField
5455

56+
/**
57+
* A list of repeatable fields.
58+
*/
59+
export type Repeatable<
60+
Field extends LinkField,
61+
State extends FieldState = FieldState,
62+
> = State extends "empty" ? [] : [Field, ...Field[]]
63+
5564
/**
5665
* Useful to flatten the type output to improve type hints shown in editors. And
5766
* also to transform an interface into a type to aide with assignability.

‎test/types/customType-contentRelationship.types.ts

+12
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,18 @@ expectType<prismic.CustomTypeModelContentRelationshipField<string, "foo">>({
9696
},
9797
})
9898

99+
/**
100+
* Supports optional `allowText` property.
101+
*/
102+
expectType<prismic.CustomTypeModelContentRelationshipField<string, "foo">>({
103+
type: prismic.CustomTypeModelFieldType.Link,
104+
config: {
105+
label: "string",
106+
select: prismic.CustomTypeModelLinkSelectType.Document,
107+
allowText: true,
108+
},
109+
})
110+
99111
/**
100112
* `@prismicio/types` extends `@prismicio/types-internal`
101113
*/

‎test/types/customType-link.types.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ expectType<prismic.CustomTypeModelLinkField>({
6161
})
6262

6363
/**
64-
* Supports optional `text` property.
64+
* Supports optional `allowText` property.
6565
*/
6666
expectType<prismic.CustomTypeModelLinkField>({
6767
type: prismic.CustomTypeModelFieldType.Link,
@@ -71,6 +71,17 @@ expectType<prismic.CustomTypeModelLinkField>({
7171
},
7272
})
7373

74+
/**
75+
* Supports optional `repeat` property.
76+
*/
77+
expectType<prismic.CustomTypeModelLinkField>({
78+
type: prismic.CustomTypeModelFieldType.Link,
79+
config: {
80+
label: "string",
81+
repeat: true,
82+
},
83+
})
84+
7485
/**
7586
* `@prismicio/types` extends `@prismicio/types-internal`
7687
*/

‎test/types/customType-linkToMedia.types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ expectType<prismic.CustomTypeModelLinkToMediaField>({
4141
})
4242

4343
/**
44-
* Supports optional `text` property.
44+
* Supports optional `allowText` property.
4545
*/
4646
expectType<prismic.CustomTypeModelLinkToMediaField>({
4747
type: prismic.CustomTypeModelFieldType.Link,

0 commit comments

Comments
 (0)
Please sign in to comment.