@farm.js/contentful 0.1.0-beta.104 → 0.1.0-beta.106

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.
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAapE,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kFAAkF;IAClF,MAAM,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxC,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,MAAM,CAAC;IACjF,6EAA6E;IAC7E,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IAC/D,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,mBAAmB,CAmFtF"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAapE,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kFAAkF;IAClF,MAAM,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxC,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,MAAM,CAAC;IACjF,6EAA6E;IAC7E,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IAC/D,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,mBAAmB,CAwGtF"}
package/dist/content.js CHANGED
@@ -43,22 +43,38 @@ export function contentfulSource(options) {
43
43
  ...(options.refreshInterval !== undefined ? { refreshInterval: options.refreshInterval } : {}),
44
44
  async fetch() {
45
45
  const resolved = resolveClient();
46
- const pageSize = Math.min(Number(options.query?.limit ?? PAGE_SIZE) || PAGE_SIZE, PAGE_SIZE);
46
+ const requestedLimit = options.query?.limit;
47
+ const maximumEntries = typeof requestedLimit === "number" && Number.isFinite(requestedLimit)
48
+ ? Math.max(Math.floor(requestedLimit), 0)
49
+ : Infinity;
50
+ if (maximumEntries === 0)
51
+ return [];
52
+ const pageSize = Math.min(maximumEntries === Infinity ? PAGE_SIZE : maximumEntries, PAGE_SIZE);
47
53
  const entries = [];
48
- // getEntries pages at most 1000 entries; keep fetching until `total`.
54
+ // getEntries pages at most 1000 entries per call. `limit` caps the
55
+ // TOTAL entries loaded - Contentful's own semantics for one call - and
56
+ // the loop is bounded by `total` and by page progress, so a
57
+ // misbehaving provider that repeats a page cannot spin config loading
58
+ // forever.
49
59
  for (let skip = 0;; skip += pageSize) {
50
60
  const page = (await resolved.getEntries({
51
61
  ...options.query,
52
62
  content_type: options.contentType,
53
- limit: pageSize,
63
+ limit: Math.min(pageSize, maximumEntries === Infinity ? pageSize : maximumEntries - entries.length),
54
64
  skip,
55
65
  }));
56
66
  if (!page || !Array.isArray(page.items)) {
57
67
  throw new Error(`contentfulSource(${JSON.stringify(name)}) received a response without items`);
58
68
  }
59
69
  entries.push(...page.items);
70
+ if (entries.length >= maximumEntries) {
71
+ entries.length = Math.min(entries.length, maximumEntries);
72
+ break;
73
+ }
60
74
  if (entries.length >= page.total || page.items.length === 0)
61
75
  break;
76
+ if (skip + pageSize >= page.total)
77
+ break;
62
78
  }
63
79
  return entries.map((entry, index) => {
64
80
  if (!entry?.sys?.id || !entry.fields || typeof entry.fields !== "object") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farm.js/contentful",
3
- "version": "0.1.0-beta.104",
3
+ "version": "0.1.0-beta.106",
4
4
  "description": "Contentful content source for Farm.js",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,11 +28,11 @@
28
28
  "contentful": "^11.8.6",
29
29
  "typescript": "^5.3.3",
30
30
  "vitest": "^3.2.7",
31
- "@farm.js/content": "0.1.0-beta.0"
31
+ "@farm.js/content": "0.1.0-beta.1"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "contentful": "^10.0.0 || ^11.0.0",
35
- "@farm.js/content": "^0.1.0-beta.0"
35
+ "@farm.js/content": "^0.1.0-beta.1"
36
36
  },
37
37
  "peerDependenciesMeta": {
38
38
  "@farm.js/content": {