@cavuno/board 4.18.0 → 4.20.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{_spec-Dk0TIRUc.d.mts → _spec-CyNKpM_j.d.mts} +90 -4
  3. package/dist/{_spec-Dk0TIRUc.d.ts → _spec-CyNKpM_j.d.ts} +90 -4
  4. package/dist/{blog-C04NWTh_.d.mts → blog-BNIqGayD.d.mts} +1 -1
  5. package/dist/{blog-1THfucKR.d.ts → blog-CRvaDyzJ.d.ts} +1 -1
  6. package/dist/{board-CqeoQAa1.d.ts → board-CXNxSlUB.d.ts} +24 -4
  7. package/dist/{board-DIO9aFXx.d.mts → board-mn3GVbrC.d.mts} +24 -4
  8. package/dist/{breadcrumbs-mE9Zsxlq.d.mts → breadcrumbs-Bi4LHNAF.d.mts} +2 -2
  9. package/dist/{breadcrumbs-CCT1oC2-.d.ts → breadcrumbs-Crk6Q69T.d.ts} +2 -2
  10. package/dist/browser/cavuno-board.global.min.js +1 -1
  11. package/dist/{chunk-2WBQVVOB.mjs → chunk-NQTMFOKF.mjs} +2 -100
  12. package/dist/chunk-Z4ALWIGS.mjs +101 -0
  13. package/dist/filters.d.mts +2 -2
  14. package/dist/filters.d.ts +2 -2
  15. package/dist/format.d.mts +4 -4
  16. package/dist/format.d.ts +4 -4
  17. package/dist/index.d.mts +63 -18
  18. package/dist/index.d.ts +63 -18
  19. package/dist/index.js +31 -7
  20. package/dist/index.mjs +41 -16
  21. package/dist/{jobs-CVmAWGtJ.d.mts → jobs-CALE3I8I.d.mts} +1 -1
  22. package/dist/{jobs-Dvv0vX8p.d.ts → jobs-CSWXqLZR.d.ts} +1 -1
  23. package/dist/route-contract.d.mts +2 -1
  24. package/dist/route-contract.d.ts +2 -1
  25. package/dist/{search-CcstbHOe.d.ts → search-BRCbe1Nm.d.ts} +1 -1
  26. package/dist/{search-BJ5myYaf.d.mts → search-B_hwS-xu.d.mts} +1 -1
  27. package/dist/{seo-Ds6tLMqU.d.mts → seo-CS4lrG20.d.mts} +1 -1
  28. package/dist/{seo-CWO6N-iE.d.ts → seo-D1u-RmLQ.d.ts} +1 -1
  29. package/dist/seo-files.d.mts +2 -2
  30. package/dist/seo-files.d.ts +2 -2
  31. package/dist/seo.d.mts +6 -6
  32. package/dist/seo.d.ts +6 -6
  33. package/dist/server.d.mts +6 -6
  34. package/dist/server.d.ts +6 -6
  35. package/dist/server.mjs +4 -2
  36. package/dist/sitemap.d.mts +15 -7
  37. package/dist/sitemap.d.ts +15 -7
  38. package/dist/sitemap.js +49 -4
  39. package/dist/sitemap.mjs +44 -4
  40. package/dist/suggest.d.mts +2 -2
  41. package/dist/suggest.d.ts +2 -2
  42. package/dist/well-known.d.mts +2 -1
  43. package/dist/well-known.d.ts +2 -1
  44. package/package.json +2 -2
  45. package/skills/manifest.json +1 -1
@@ -92,7 +92,8 @@ declare function createBoardLinkResolver(layers: readonly ManifestLayer[]): {
92
92
  };
93
93
 
94
94
  /**
95
- * — pure history path matching for hosted rename 301s.
95
+ * — pure history path matching for hosted rename 301s
96
+ *.
96
97
  *
97
98
  * Segment-wise matcher (no RegExp construction from templates). Templates
98
99
  * are validated at write time but stay defensive here: any segment that
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Dk0TIRUc.js';
1
+ import { S as Schemas } from './_spec-CyNKpM_j.js';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Dk0TIRUc.mjs';
1
+ import { S as Schemas } from './_spec-CyNKpM_j.mjs';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Dk0TIRUc.mjs';
1
+ import { S as Schemas } from './_spec-CyNKpM_j.mjs';
2
2
 
3
3
  /**
4
4
  * The public SEO-infra payload (`board.seo()`) — platform infrastructure a
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Dk0TIRUc.js';
1
+ import { S as Schemas } from './_spec-CyNKpM_j.js';
2
2
 
3
3
  /**
4
4
  * The public SEO-infra payload (`board.seo()`) — platform infrastructure a
@@ -1,5 +1,5 @@
1
- import { B as BoardSeo } from './seo-Ds6tLMqU.mjs';
2
- import './_spec-Dk0TIRUc.mjs';
1
+ import { B as BoardSeo } from './seo-CS4lrG20.mjs';
2
+ import './_spec-CyNKpM_j.mjs';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/seo-files` — platform-owned crawler/identity file bodies
@@ -1,5 +1,5 @@
1
- import { B as BoardSeo } from './seo-CWO6N-iE.js';
2
- import './_spec-Dk0TIRUc.js';
1
+ import { B as BoardSeo } from './seo-D1u-RmLQ.js';
2
+ import './_spec-CyNKpM_j.js';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/seo-files` — platform-owned crawler/identity file bodies
package/dist/seo.d.mts CHANGED
@@ -1,9 +1,9 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-C04NWTh_.mjs';
2
- import { e as JsonLdObject } from './breadcrumbs-mE9Zsxlq.mjs';
3
- export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-mE9Zsxlq.mjs';
4
- import './_spec-Dk0TIRUc.mjs';
5
- import './board-DIO9aFXx.mjs';
6
- import './jobs-CVmAWGtJ.mjs';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-BNIqGayD.mjs';
2
+ import { e as JsonLdObject } from './breadcrumbs-Bi4LHNAF.mjs';
3
+ export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-Bi4LHNAF.mjs';
4
+ import './_spec-CyNKpM_j.mjs';
5
+ import './board-mn3GVbrC.mjs';
6
+ import './jobs-CALE3I8I.mjs';
7
7
 
8
8
  /**
9
9
  * Blog structured data on the `@cavuno/board` wire types, transcribed from
package/dist/seo.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-1THfucKR.js';
2
- import { e as JsonLdObject } from './breadcrumbs-CCT1oC2-.js';
3
- export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-CCT1oC2-.js';
4
- import './_spec-Dk0TIRUc.js';
5
- import './board-CqeoQAa1.js';
6
- import './jobs-Dvv0vX8p.js';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-CRvaDyzJ.js';
2
+ import { e as JsonLdObject } from './breadcrumbs-Crk6Q69T.js';
3
+ export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-Crk6Q69T.js';
4
+ import './_spec-CyNKpM_j.js';
5
+ import './board-CXNxSlUB.js';
6
+ import './jobs-CSWXqLZR.js';
7
7
 
8
8
  /**
9
9
  * Blog structured data on the `@cavuno/board` wire types, transcribed from
package/dist/server.d.mts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-Dk0TIRUc.mjs';
3
- import './search-BJ5myYaf.mjs';
4
- import './board-DIO9aFXx.mjs';
5
- import './jobs-CVmAWGtJ.mjs';
6
- import './seo-Ds6tLMqU.mjs';
7
- import './blog-C04NWTh_.mjs';
2
+ import './_spec-CyNKpM_j.mjs';
3
+ import './search-B_hwS-xu.mjs';
4
+ import './board-mn3GVbrC.mjs';
5
+ import './jobs-CALE3I8I.mjs';
6
+ import './seo-CS4lrG20.mjs';
7
+ import './blog-BNIqGayD.mjs';
8
8
 
9
9
  /**
10
10
  * Session cookie codec — pure (no framework imports, no node imports) so it
package/dist/server.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './_spec-Dk0TIRUc.js';
3
- import './search-CcstbHOe.js';
4
- import './board-CqeoQAa1.js';
5
- import './jobs-Dvv0vX8p.js';
6
- import './seo-CWO6N-iE.js';
7
- import './blog-1THfucKR.js';
2
+ import './_spec-CyNKpM_j.js';
3
+ import './search-BRCbe1Nm.js';
4
+ import './board-CXNxSlUB.js';
5
+ import './jobs-CSWXqLZR.js';
6
+ import './seo-D1u-RmLQ.js';
7
+ import './blog-CRvaDyzJ.js';
8
8
 
9
9
  /**
10
10
  * Session cookie codec — pure (no framework imports, no node imports) so it
package/dist/server.mjs CHANGED
@@ -1,8 +1,10 @@
1
1
  import {
2
2
  isNoStore,
3
- isUnauthorized,
4
3
  scopeToken
5
- } from "./chunk-2WBQVVOB.mjs";
4
+ } from "./chunk-Z4ALWIGS.mjs";
5
+ import {
6
+ isUnauthorized
7
+ } from "./chunk-NQTMFOKF.mjs";
6
8
 
7
9
  // src/server/cookie.ts
8
10
  var COOKIE_ATTRIBUTES = "Path=/; HttpOnly; Secure; SameSite=Lax";
@@ -1,10 +1,10 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-Dk0TIRUc.mjs';
3
- import './search-BJ5myYaf.mjs';
4
- import './board-DIO9aFXx.mjs';
5
- import './jobs-CVmAWGtJ.mjs';
6
- import './seo-Ds6tLMqU.mjs';
7
- import './blog-C04NWTh_.mjs';
2
+ import './_spec-CyNKpM_j.mjs';
3
+ import './search-B_hwS-xu.mjs';
4
+ import './board-mn3GVbrC.mjs';
5
+ import './jobs-CALE3I8I.mjs';
6
+ import './seo-CS4lrG20.mjs';
7
+ import './blog-BNIqGayD.mjs';
8
8
 
9
9
  /**
10
10
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
@@ -60,7 +60,15 @@ declare function renderSitemapIndex(entries: readonly (string | SitemapIndexEntr
60
60
 
61
61
  /** Matches the hosted thin-content floor: a listing page needs ≥5 jobs to index. */
62
62
  declare const MIN_JOBS_PER_INDEXED_PAGE = 5;
63
- /** Which buckets the index lists. Blog is gated by its feature; the rest emit an empty urlset when a board lacks that content (valid, just zero URLs). */
63
+ /**
64
+ * Which buckets the index lists.
65
+ *
66
+ * Mirror path: exactly the buckets the board publishes, in the canonical
67
+ * `SITEMAP_BUCKETS` order (the board omits empty ones).
68
+ *
69
+ * Legacy fallback (404): blog is gated by its feature; the rest emit an empty
70
+ * urlset when a board lacks that content (valid, just zero URLs).
71
+ */
64
72
  declare function listedBuckets(board: BoardSdk): Promise<SitemapBucket[]>;
65
73
  declare function buildBucketUrls(board: BoardSdk, origin: string, bucket: SitemapBucket): Promise<string[]>;
66
74
 
package/dist/sitemap.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './_spec-Dk0TIRUc.js';
3
- import './search-CcstbHOe.js';
4
- import './board-CqeoQAa1.js';
5
- import './jobs-Dvv0vX8p.js';
6
- import './seo-CWO6N-iE.js';
7
- import './blog-1THfucKR.js';
2
+ import './_spec-CyNKpM_j.js';
3
+ import './search-BRCbe1Nm.js';
4
+ import './board-CXNxSlUB.js';
5
+ import './jobs-CSWXqLZR.js';
6
+ import './seo-D1u-RmLQ.js';
7
+ import './blog-CRvaDyzJ.js';
8
8
 
9
9
  /**
10
10
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
@@ -60,7 +60,15 @@ declare function renderSitemapIndex(entries: readonly (string | SitemapIndexEntr
60
60
 
61
61
  /** Matches the hosted thin-content floor: a listing page needs ≥5 jobs to index. */
62
62
  declare const MIN_JOBS_PER_INDEXED_PAGE = 5;
63
- /** Which buckets the index lists. Blog is gated by its feature; the rest emit an empty urlset when a board lacks that content (valid, just zero URLs). */
63
+ /**
64
+ * Which buckets the index lists.
65
+ *
66
+ * Mirror path: exactly the buckets the board publishes, in the canonical
67
+ * `SITEMAP_BUCKETS` order (the board omits empty ones).
68
+ *
69
+ * Legacy fallback (404): blog is gated by its feature; the rest emit an empty
70
+ * urlset when a board lacks that content (valid, just zero URLs).
71
+ */
64
72
  declare function listedBuckets(board: BoardSdk): Promise<SitemapBucket[]>;
65
73
  declare function buildBucketUrls(board: BoardSdk, origin: string, bucket: SitemapBucket): Promise<string[]>;
66
74
 
package/dist/sitemap.js CHANGED
@@ -134,6 +134,14 @@ function renderSitemapIndex(entries) {
134
134
  return xml;
135
135
  }
136
136
 
137
+ // src/errors.ts
138
+ function isBoardApiError(e) {
139
+ return e instanceof Error && e.name === "BoardApiError" && typeof e.status === "number" && typeof e.code === "string";
140
+ }
141
+ function isNotFound(e) {
142
+ return isBoardApiError(e) && e.status === 404;
143
+ }
144
+
137
145
  // src/pagination.ts
138
146
  function paginate(listFn, query, options) {
139
147
  async function* pages() {
@@ -295,11 +303,38 @@ function enumerateCompanies(board) {
295
303
  () => drainPages(paginate(board.companies.list, { limit: PAGE }).pages())
296
304
  );
297
305
  }
306
+ var MIRROR_PAGE = 1e3;
298
307
  async function listedBuckets(board) {
299
- const { features } = await board.context();
300
- return SITEMAP_BUCKETS.filter((b) => b !== "blog" || features.blog);
308
+ try {
309
+ const index = await board.sitemap();
310
+ const published = new Set(index.buckets.map((entry) => entry.bucket));
311
+ return SITEMAP_BUCKETS.filter((bucket) => published.has(bucket));
312
+ } catch (error) {
313
+ if (!isNotFound(error)) throw error;
314
+ const { features } = await board.context();
315
+ return SITEMAP_BUCKETS.filter((b) => b !== "blog" || features.blog);
316
+ }
301
317
  }
302
318
  async function buildBucketUrls(board, origin, bucket) {
319
+ try {
320
+ return await mirrorBucketUrls(board, origin, bucket);
321
+ } catch (error) {
322
+ if (!isNotFound(error)) throw error;
323
+ return legacyBucketUrls(board, origin, bucket);
324
+ }
325
+ }
326
+ async function mirrorBucketUrls(board, origin, bucket) {
327
+ const pages = paginate(
328
+ (query, options) => board.sitemap.entries(bucket, query, options),
329
+ { limit: MIRROR_PAGE }
330
+ ).pages();
331
+ const urls = [];
332
+ for await (const page of pages) {
333
+ for (const entry of page.data) urls.push(`${origin}${entry.path}`);
334
+ }
335
+ return urls;
336
+ }
337
+ async function legacyBucketUrls(board, origin, bucket) {
303
338
  switch (bucket) {
304
339
  case "marketing":
305
340
  return marketing(board, origin);
@@ -363,15 +398,25 @@ async function jobDetails(board, origin) {
363
398
  }
364
399
  return [...seen].sort();
365
400
  }
401
+ var MARKETS_PAGE = 200;
366
402
  async function companies(board, origin) {
367
403
  const [list, markets] = await Promise.all([
368
404
  enumerateCompanies(board),
369
- board.companies.markets()
405
+ // Paginate: the unsearched market list is a full cursor walk, and a single
406
+ // call used to stop at the first page — silently dropping every market
407
+ // page past it on a board with many sectors. An older API that ignores the
408
+ // cursor answers `hasMore: false`, so this degrades to one call there.
409
+ drainPages(
410
+ paginate(
411
+ (query, options) => board.companies.markets(query, options),
412
+ { limit: MARKETS_PAGE }
413
+ ).pages()
414
+ )
370
415
  ]);
371
416
  const urls = [`${origin}${BOARD_PATHS.companies}`];
372
417
  for (const company of list)
373
418
  urls.push(`${origin}${companyPath(company.slug)}`);
374
- for (const market of markets.data) {
419
+ for (const market of markets) {
375
420
  urls.push(`${origin}${companyMarketPath(market.slug)}`);
376
421
  }
377
422
  return urls;
package/dist/sitemap.mjs CHANGED
@@ -1,6 +1,9 @@
1
1
  import {
2
2
  paginate
3
3
  } from "./chunk-DLSO6XXY.mjs";
4
+ import {
5
+ isNotFound
6
+ } from "./chunk-NQTMFOKF.mjs";
4
7
  import {
5
8
  BOARD_PATHS,
6
9
  blogAuthorPath,
@@ -173,11 +176,38 @@ function enumerateCompanies(board) {
173
176
  () => drainPages(paginate(board.companies.list, { limit: PAGE }).pages())
174
177
  );
175
178
  }
179
+ var MIRROR_PAGE = 1e3;
176
180
  async function listedBuckets(board) {
177
- const { features } = await board.context();
178
- return SITEMAP_BUCKETS.filter((b) => b !== "blog" || features.blog);
181
+ try {
182
+ const index = await board.sitemap();
183
+ const published = new Set(index.buckets.map((entry) => entry.bucket));
184
+ return SITEMAP_BUCKETS.filter((bucket) => published.has(bucket));
185
+ } catch (error) {
186
+ if (!isNotFound(error)) throw error;
187
+ const { features } = await board.context();
188
+ return SITEMAP_BUCKETS.filter((b) => b !== "blog" || features.blog);
189
+ }
179
190
  }
180
191
  async function buildBucketUrls(board, origin, bucket) {
192
+ try {
193
+ return await mirrorBucketUrls(board, origin, bucket);
194
+ } catch (error) {
195
+ if (!isNotFound(error)) throw error;
196
+ return legacyBucketUrls(board, origin, bucket);
197
+ }
198
+ }
199
+ async function mirrorBucketUrls(board, origin, bucket) {
200
+ const pages = paginate(
201
+ (query, options) => board.sitemap.entries(bucket, query, options),
202
+ { limit: MIRROR_PAGE }
203
+ ).pages();
204
+ const urls = [];
205
+ for await (const page of pages) {
206
+ for (const entry of page.data) urls.push(`${origin}${entry.path}`);
207
+ }
208
+ return urls;
209
+ }
210
+ async function legacyBucketUrls(board, origin, bucket) {
181
211
  switch (bucket) {
182
212
  case "marketing":
183
213
  return marketing(board, origin);
@@ -241,15 +271,25 @@ async function jobDetails(board, origin) {
241
271
  }
242
272
  return [...seen].sort();
243
273
  }
274
+ var MARKETS_PAGE = 200;
244
275
  async function companies(board, origin) {
245
276
  const [list, markets] = await Promise.all([
246
277
  enumerateCompanies(board),
247
- board.companies.markets()
278
+ // Paginate: the unsearched market list is a full cursor walk, and a single
279
+ // call used to stop at the first page — silently dropping every market
280
+ // page past it on a board with many sectors. An older API that ignores the
281
+ // cursor answers `hasMore: false`, so this degrades to one call there.
282
+ drainPages(
283
+ paginate(
284
+ (query, options) => board.companies.markets(query, options),
285
+ { limit: MARKETS_PAGE }
286
+ ).pages()
287
+ )
248
288
  ]);
249
289
  const urls = [`${origin}${BOARD_PATHS.companies}`];
250
290
  for (const company of list)
251
291
  urls.push(`${origin}${companyPath(company.slug)}`);
252
- for (const market of markets.data) {
292
+ for (const market of markets) {
253
293
  urls.push(`${origin}${companyMarketPath(market.slug)}`);
254
294
  }
255
295
  return urls;
@@ -1,5 +1,5 @@
1
- import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-BJ5myYaf.mjs';
2
- import './_spec-Dk0TIRUc.mjs';
1
+ import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-B_hwS-xu.mjs';
2
+ import './_spec-CyNKpM_j.mjs';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/suggest` — framework-agnostic headless search-suggest
package/dist/suggest.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-CcstbHOe.js';
2
- import './_spec-Dk0TIRUc.js';
1
+ import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-BRCbe1Nm.js';
2
+ import './_spec-CyNKpM_j.js';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/suggest` — framework-agnostic headless search-suggest
@@ -38,7 +38,8 @@ declare function serializeManifest(manifest: {
38
38
  }): string;
39
39
 
40
40
  /**
41
- * Build-plugin variant of the well-known manifest.
41
+ * Build-plugin variant of the well-known manifest
42
+ *.
42
43
  *
43
44
  * Pure function — no fs imports and no write callback: callers (vite
44
45
  * plugin, starter build hook) own the write of `contents` to `path` under
@@ -38,7 +38,8 @@ declare function serializeManifest(manifest: {
38
38
  }): string;
39
39
 
40
40
  /**
41
- * Build-plugin variant of the well-known manifest.
41
+ * Build-plugin variant of the well-known manifest
42
+ *.
42
43
  *
43
44
  * Pure function — no fs imports and no write callback: callers (vite
44
45
  * plugin, starter build hook) own the write of `contents` to `path` under
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavuno/board",
3
- "version": "4.18.0",
3
+ "version": "4.20.0",
4
4
  "description": "Build custom job boards and careers pages with Cavuno’s TypeScript SDK.",
5
5
  "keywords": [
6
6
  "api-client",
@@ -221,7 +221,7 @@
221
221
  "provenance": true
222
222
  },
223
223
  "scripts": {
224
- "build": "rm -rf dist && tsup",
224
+ "build": "rm -rf dist && tsup && node scripts/sanitize-dist-chunk-names.mjs",
225
225
  "clean": "git clean -xdf .turbo dist node_modules src/generated",
226
226
  "typecheck": "tsgo --noEmit && tsgo --noEmit -p tsconfig.node.json",
227
227
  "test": "vitest run",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.18.0",
2
+ "version": "4.20.0",
3
3
  "skills": [
4
4
  {
5
5
  "name": "cavuno-board-account",