@cavuno/board 1.33.1 → 1.35.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 (38) hide show
  1. package/README.md +7 -8
  2. package/dist/bin.mjs +91 -21
  3. package/dist/{board-BTVapQiL.d.mts → board-Be8dY9Ba.d.mts} +1 -1
  4. package/dist/{board-0yI5ZRJw.d.ts → board-DsRbgz_D.d.ts} +1 -1
  5. package/dist/filters.d.mts +1 -1
  6. package/dist/filters.d.ts +1 -1
  7. package/dist/format.d.mts +2 -2
  8. package/dist/format.d.ts +2 -2
  9. package/dist/index.d.mts +32 -16
  10. package/dist/index.d.ts +32 -16
  11. package/dist/index.js +6 -3
  12. package/dist/index.mjs +6 -3
  13. package/dist/{jobs-Di4AV-02.d.mts → jobs-BFLMDNEN.d.mts} +194 -29
  14. package/dist/{jobs-Di4AV-02.d.ts → jobs-BFLMDNEN.d.ts} +194 -29
  15. package/dist/paths.d.mts +72 -0
  16. package/dist/paths.d.ts +72 -0
  17. package/dist/paths.js +99 -0
  18. package/dist/paths.mjs +78 -0
  19. package/dist/{salaries-B-zJKjkk.d.ts → salaries-negE75t8.d.ts} +4 -4
  20. package/dist/{salaries-D-BGZpDC.d.mts → salaries-pO_vGORE.d.mts} +4 -4
  21. package/dist/seo.d.mts +3 -3
  22. package/dist/seo.d.ts +3 -3
  23. package/dist/server.d.mts +3 -3
  24. package/dist/server.d.ts +3 -3
  25. package/dist/sitemap.d.mts +3 -3
  26. package/dist/sitemap.d.ts +3 -3
  27. package/dist/sitemap.js +89 -29
  28. package/dist/sitemap.mjs +89 -29
  29. package/package.json +11 -1
  30. package/skills/cavuno-board-auth/SKILL.md +0 -1
  31. package/skills/cavuno-board-client/SKILL.md +1 -4
  32. package/skills/cavuno-board-job-alerts/SKILL.md +4 -3
  33. package/skills/cavuno-board-jobs/SKILL.md +2 -2
  34. package/skills/cavuno-board-setup/SKILL.md +6 -8
  35. package/skills/cavuno-board-smoke-test/SKILL.md +7 -6
  36. package/skills/cavuno-board-theme/SKILL.md +33 -45
  37. package/skills/flavors/tanstack-start/SKILL.md +0 -1
  38. package/skills/manifest.json +4 -4
package/dist/paths.js ADDED
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/paths/index.ts
21
+ var paths_exports = {};
22
+ __export(paths_exports, {
23
+ BOARD_PATHS: () => BOARD_PATHS,
24
+ blogAuthorPath: () => blogAuthorPath,
25
+ blogPostPath: () => blogPostPath,
26
+ blogTagPath: () => blogTagPath,
27
+ boardUrl: () => boardUrl,
28
+ companyMarketPath: () => companyMarketPath,
29
+ companyPath: () => companyPath,
30
+ companySalaryPath: () => companySalaryPath,
31
+ jobDetailPath: () => jobDetailPath,
32
+ jobsCategoryPath: () => jobsCategoryPath,
33
+ jobsLocationPath: () => jobsLocationPath,
34
+ jobsSkillPath: () => jobsSkillPath,
35
+ salaryLocationPath: () => salaryLocationPath,
36
+ salarySkillPath: () => salarySkillPath,
37
+ salaryTitlePath: () => salaryTitlePath
38
+ });
39
+ module.exports = __toCommonJS(paths_exports);
40
+ function jobDetailPath(companySlug, jobSlug) {
41
+ return `/companies/${companySlug}/jobs/${jobSlug}`;
42
+ }
43
+ function jobsCategoryPath(categorySlug) {
44
+ return `/jobs/${categorySlug}`;
45
+ }
46
+ function jobsSkillPath(skillSlug) {
47
+ return `/jobs/skills/${skillSlug}`;
48
+ }
49
+ function jobsLocationPath(placeSlug) {
50
+ return `/jobs/locations/${placeSlug}`;
51
+ }
52
+ function companyPath(companySlug) {
53
+ return `/companies/${companySlug}`;
54
+ }
55
+ function companyMarketPath(marketSlug) {
56
+ return `/companies/markets/${marketSlug}`;
57
+ }
58
+ function companySalaryPath(companySlug) {
59
+ return `/companies/${companySlug}/salaries`;
60
+ }
61
+ function salaryTitlePath(titleSlug) {
62
+ return `/salaries/titles/${titleSlug}`;
63
+ }
64
+ function salarySkillPath(skillSlug) {
65
+ return `/salaries/skills/${skillSlug}`;
66
+ }
67
+ function salaryLocationPath(placeSlug) {
68
+ return `/salaries/locations/${placeSlug}`;
69
+ }
70
+ function blogPostPath(postSlug) {
71
+ return `/blog/${postSlug}`;
72
+ }
73
+ function blogTagPath(tagSlug) {
74
+ return `/blog/tag/${tagSlug}`;
75
+ }
76
+ function blogAuthorPath(authorSlug) {
77
+ return `/blog/author/${authorSlug}`;
78
+ }
79
+ var BOARD_PATHS = {
80
+ home: "/",
81
+ jobs: "/jobs",
82
+ companies: "/companies",
83
+ salaries: "/salaries",
84
+ salaryCompanies: "/salaries/companies",
85
+ salaryTitles: "/salaries/titles",
86
+ salarySkills: "/salaries/skills",
87
+ salaryLocations: "/salaries/locations",
88
+ blog: "/blog",
89
+ about: "/about",
90
+ privacyPolicy: "/privacy-policy",
91
+ termsOfService: "/terms-of-service",
92
+ cookiePolicy: "/cookie-policy",
93
+ impressum: "/impressum",
94
+ talent: "/talent",
95
+ employers: "/employers"
96
+ };
97
+ function boardUrl(origin, path) {
98
+ return `${origin.replace(/\/+$/, "")}${path}`;
99
+ }
package/dist/paths.mjs ADDED
@@ -0,0 +1,78 @@
1
+ // src/paths/index.ts
2
+ function jobDetailPath(companySlug, jobSlug) {
3
+ return `/companies/${companySlug}/jobs/${jobSlug}`;
4
+ }
5
+ function jobsCategoryPath(categorySlug) {
6
+ return `/jobs/${categorySlug}`;
7
+ }
8
+ function jobsSkillPath(skillSlug) {
9
+ return `/jobs/skills/${skillSlug}`;
10
+ }
11
+ function jobsLocationPath(placeSlug) {
12
+ return `/jobs/locations/${placeSlug}`;
13
+ }
14
+ function companyPath(companySlug) {
15
+ return `/companies/${companySlug}`;
16
+ }
17
+ function companyMarketPath(marketSlug) {
18
+ return `/companies/markets/${marketSlug}`;
19
+ }
20
+ function companySalaryPath(companySlug) {
21
+ return `/companies/${companySlug}/salaries`;
22
+ }
23
+ function salaryTitlePath(titleSlug) {
24
+ return `/salaries/titles/${titleSlug}`;
25
+ }
26
+ function salarySkillPath(skillSlug) {
27
+ return `/salaries/skills/${skillSlug}`;
28
+ }
29
+ function salaryLocationPath(placeSlug) {
30
+ return `/salaries/locations/${placeSlug}`;
31
+ }
32
+ function blogPostPath(postSlug) {
33
+ return `/blog/${postSlug}`;
34
+ }
35
+ function blogTagPath(tagSlug) {
36
+ return `/blog/tag/${tagSlug}`;
37
+ }
38
+ function blogAuthorPath(authorSlug) {
39
+ return `/blog/author/${authorSlug}`;
40
+ }
41
+ var BOARD_PATHS = {
42
+ home: "/",
43
+ jobs: "/jobs",
44
+ companies: "/companies",
45
+ salaries: "/salaries",
46
+ salaryCompanies: "/salaries/companies",
47
+ salaryTitles: "/salaries/titles",
48
+ salarySkills: "/salaries/skills",
49
+ salaryLocations: "/salaries/locations",
50
+ blog: "/blog",
51
+ about: "/about",
52
+ privacyPolicy: "/privacy-policy",
53
+ termsOfService: "/terms-of-service",
54
+ cookiePolicy: "/cookie-policy",
55
+ impressum: "/impressum",
56
+ talent: "/talent",
57
+ employers: "/employers"
58
+ };
59
+ function boardUrl(origin, path) {
60
+ return `${origin.replace(/\/+$/, "")}${path}`;
61
+ }
62
+ export {
63
+ BOARD_PATHS,
64
+ blogAuthorPath,
65
+ blogPostPath,
66
+ blogTagPath,
67
+ boardUrl,
68
+ companyMarketPath,
69
+ companyPath,
70
+ companySalaryPath,
71
+ jobDetailPath,
72
+ jobsCategoryPath,
73
+ jobsLocationPath,
74
+ jobsSkillPath,
75
+ salaryLocationPath,
76
+ salarySkillPath,
77
+ salaryTitlePath
78
+ };
@@ -1,4 +1,4 @@
1
- import { b as Schemas, L as ListEnvelope, m as RelatedSearch } from './jobs-Di4AV-02.js';
1
+ import { b as Schemas, L as ListEnvelope, o as RelatedSearch } from './jobs-BFLMDNEN.js';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -44,9 +44,9 @@ type CompanySalary = Schemas['CompanySalary'];
44
44
  */
45
45
  type CompanyCategorySalary = Schemas['CompanyCategorySalary'];
46
46
  /** The companies browse list — `PublicCompany`s + `market` `relatedSearches`. */
47
- interface CompanyListEnvelope extends ListEnvelope<PublicCompany> {
47
+ type CompanyListEnvelope = ListEnvelope<PublicCompany> & {
48
48
  relatedSearches?: RelatedSearch[];
49
- }
49
+ };
50
50
  type CompaniesListQuery = {
51
51
  cursor?: string;
52
52
  /** Scope to a single market (sector) by slug. Unknown slugs 404. */
@@ -54,7 +54,7 @@ type CompaniesListQuery = {
54
54
  /** 1–100. */
55
55
  limit?: number;
56
56
  /**
57
- * Storefront page offset (companies to skip); takes precedence over
57
+ * Company catalog page offset (companies to skip); takes precedence over
58
58
  * `cursor`. Pair with the response `count` to page in parallel.
59
59
  */
60
60
  offset?: number;
@@ -1,4 +1,4 @@
1
- import { b as Schemas, L as ListEnvelope, m as RelatedSearch } from './jobs-Di4AV-02.mjs';
1
+ import { b as Schemas, L as ListEnvelope, o as RelatedSearch } from './jobs-BFLMDNEN.mjs';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -44,9 +44,9 @@ type CompanySalary = Schemas['CompanySalary'];
44
44
  */
45
45
  type CompanyCategorySalary = Schemas['CompanyCategorySalary'];
46
46
  /** The companies browse list — `PublicCompany`s + `market` `relatedSearches`. */
47
- interface CompanyListEnvelope extends ListEnvelope<PublicCompany> {
47
+ type CompanyListEnvelope = ListEnvelope<PublicCompany> & {
48
48
  relatedSearches?: RelatedSearch[];
49
- }
49
+ };
50
50
  type CompaniesListQuery = {
51
51
  cursor?: string;
52
52
  /** Scope to a single market (sector) by slug. Unknown slugs 404. */
@@ -54,7 +54,7 @@ type CompaniesListQuery = {
54
54
  /** 1–100. */
55
55
  limit?: number;
56
56
  /**
57
- * Storefront page offset (companies to skip); takes precedence over
57
+ * Company catalog page offset (companies to skip); takes precedence over
58
58
  * `cursor`. Pair with the response `count` to page in parallel.
59
59
  */
60
60
  offset?: number;
package/dist/seo.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-D-BGZpDC.mjs';
2
- import { P as PublicBoard } from './board-BTVapQiL.mjs';
3
- import { P as PublicJob } from './jobs-Di4AV-02.mjs';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-pO_vGORE.mjs';
2
+ import { P as PublicBoard } from './board-Be8dY9Ba.mjs';
3
+ import { P as PublicJob } from './jobs-BFLMDNEN.mjs';
4
4
  import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.mjs';
5
5
 
6
6
  /**
package/dist/seo.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-B-zJKjkk.js';
2
- import { P as PublicBoard } from './board-0yI5ZRJw.js';
3
- import { P as PublicJob } from './jobs-Di4AV-02.js';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-negE75t8.js';
2
+ import { P as PublicBoard } from './board-DsRbgz_D.js';
3
+ import { P as PublicJob } from './jobs-BFLMDNEN.js';
4
4
  import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.js';
5
5
 
6
6
  /**
package/dist/server.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './jobs-Di4AV-02.mjs';
3
- import './board-BTVapQiL.mjs';
4
- import './salaries-D-BGZpDC.mjs';
2
+ import './jobs-BFLMDNEN.mjs';
3
+ import './board-Be8dY9Ba.mjs';
4
+ import './salaries-pO_vGORE.mjs';
5
5
 
6
6
  /**
7
7
  * Session cookie codec — pure (no framework imports, no node imports) so it
package/dist/server.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './jobs-Di4AV-02.js';
3
- import './board-0yI5ZRJw.js';
4
- import './salaries-B-zJKjkk.js';
2
+ import './jobs-BFLMDNEN.js';
3
+ import './board-DsRbgz_D.js';
4
+ import './salaries-negE75t8.js';
5
5
 
6
6
  /**
7
7
  * Session cookie codec — pure (no framework imports, no node imports) so it
@@ -1,7 +1,7 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './jobs-Di4AV-02.mjs';
3
- import './board-BTVapQiL.mjs';
4
- import './salaries-D-BGZpDC.mjs';
2
+ import './jobs-BFLMDNEN.mjs';
3
+ import './board-Be8dY9Ba.mjs';
4
+ import './salaries-pO_vGORE.mjs';
5
5
 
6
6
  /**
7
7
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
package/dist/sitemap.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './jobs-Di4AV-02.js';
3
- import './board-0yI5ZRJw.js';
4
- import './salaries-B-zJKjkk.js';
2
+ import './jobs-BFLMDNEN.js';
3
+ import './board-DsRbgz_D.js';
4
+ import './salaries-negE75t8.js';
5
5
 
6
6
  /**
7
7
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
package/dist/sitemap.js CHANGED
@@ -164,6 +164,65 @@ function paginate(listFn, query, options) {
164
164
  };
165
165
  }
166
166
 
167
+ // src/paths/index.ts
168
+ function jobDetailPath(companySlug, jobSlug) {
169
+ return `/companies/${companySlug}/jobs/${jobSlug}`;
170
+ }
171
+ function jobsCategoryPath(categorySlug) {
172
+ return `/jobs/${categorySlug}`;
173
+ }
174
+ function jobsSkillPath(skillSlug) {
175
+ return `/jobs/skills/${skillSlug}`;
176
+ }
177
+ function jobsLocationPath(placeSlug) {
178
+ return `/jobs/locations/${placeSlug}`;
179
+ }
180
+ function companyPath(companySlug) {
181
+ return `/companies/${companySlug}`;
182
+ }
183
+ function companyMarketPath(marketSlug) {
184
+ return `/companies/markets/${marketSlug}`;
185
+ }
186
+ function companySalaryPath(companySlug) {
187
+ return `/companies/${companySlug}/salaries`;
188
+ }
189
+ function salaryTitlePath(titleSlug) {
190
+ return `/salaries/titles/${titleSlug}`;
191
+ }
192
+ function salarySkillPath(skillSlug) {
193
+ return `/salaries/skills/${skillSlug}`;
194
+ }
195
+ function salaryLocationPath(placeSlug) {
196
+ return `/salaries/locations/${placeSlug}`;
197
+ }
198
+ function blogPostPath(postSlug) {
199
+ return `/blog/${postSlug}`;
200
+ }
201
+ function blogTagPath(tagSlug) {
202
+ return `/blog/tag/${tagSlug}`;
203
+ }
204
+ function blogAuthorPath(authorSlug) {
205
+ return `/blog/author/${authorSlug}`;
206
+ }
207
+ var BOARD_PATHS = {
208
+ home: "/",
209
+ jobs: "/jobs",
210
+ companies: "/companies",
211
+ salaries: "/salaries",
212
+ salaryCompanies: "/salaries/companies",
213
+ salaryTitles: "/salaries/titles",
214
+ salarySkills: "/salaries/skills",
215
+ salaryLocations: "/salaries/locations",
216
+ blog: "/blog",
217
+ about: "/about",
218
+ privacyPolicy: "/privacy-policy",
219
+ termsOfService: "/terms-of-service",
220
+ cookiePolicy: "/cookie-policy",
221
+ impressum: "/impressum",
222
+ talent: "/talent",
223
+ employers: "/employers"
224
+ };
225
+
167
226
  // src/sitemap/walker.ts
168
227
  var MIN_JOBS_PER_INDEXED_PAGE = 5;
169
228
  var MAX_PAGES = 200;
@@ -246,16 +305,16 @@ async function buildBucketUrls(board, origin, bucket) {
246
305
  async function marketing(board, origin) {
247
306
  const { features } = await board.context();
248
307
  const urls = [
249
- `${origin}/`,
250
- `${origin}/jobs`,
251
- `${origin}/about`,
252
- `${origin}/privacy-policy`,
253
- `${origin}/terms-of-service`,
254
- `${origin}/cookie-policy`
308
+ `${origin}${BOARD_PATHS.home}`,
309
+ `${origin}${BOARD_PATHS.jobs}`,
310
+ `${origin}${BOARD_PATHS.about}`,
311
+ `${origin}${BOARD_PATHS.privacyPolicy}`,
312
+ `${origin}${BOARD_PATHS.termsOfService}`,
313
+ `${origin}${BOARD_PATHS.cookiePolicy}`
255
314
  ];
256
- if (features.impressum) urls.push(`${origin}/impressum`);
257
- if (features.talentDirectory) urls.push(`${origin}/talent`);
258
- if (features.employers) urls.push(`${origin}/employers`);
315
+ if (features.impressum) urls.push(`${origin}${BOARD_PATHS.impressum}`);
316
+ if (features.talentDirectory) urls.push(`${origin}${BOARD_PATHS.talent}`);
317
+ if (features.employers) urls.push(`${origin}${BOARD_PATHS.employers}`);
259
318
  return urls;
260
319
  }
261
320
  async function jobsTaxonomy(board, origin, kind) {
@@ -267,20 +326,20 @@ async function jobsTaxonomy(board, origin, kind) {
267
326
  );
268
327
  for (const slug of slugs) counts.set(slug, (counts.get(slug) ?? 0) + 1);
269
328
  }
270
- const prefix = kind === "categories" ? `${origin}/jobs` : `${origin}/jobs/skills`;
271
- return [...counts.entries()].filter(([, n]) => n >= MIN_JOBS_PER_INDEXED_PAGE).map(([slug]) => slug).sort().map((slug) => `${prefix}/${slug}`);
329
+ const toPath = kind === "categories" ? jobsCategoryPath : jobsSkillPath;
330
+ return [...counts.entries()].filter(([, n]) => n >= MIN_JOBS_PER_INDEXED_PAGE).map(([slug]) => slug).sort().map((slug) => `${origin}${toPath(slug)}`);
272
331
  }
273
332
  async function jobsLocations(board, origin) {
274
333
  const { language } = await board.context();
275
334
  const { data } = await board.salaries.locations.list({ locale: language });
276
- return data.filter((l) => l.jobCount >= MIN_JOBS_PER_INDEXED_PAGE).map((l) => l.placeSlug).sort().map((slug) => `${origin}/jobs/locations/${slug}`);
335
+ return data.filter((l) => l.jobCount >= MIN_JOBS_PER_INDEXED_PAGE).map((l) => l.placeSlug).sort().map((slug) => `${origin}${jobsLocationPath(slug)}`);
277
336
  }
278
337
  async function jobDetails(board, origin) {
279
338
  const jobs = await enumerateJobs(board);
280
339
  const seen = /* @__PURE__ */ new Set();
281
340
  for (const job of jobs) {
282
341
  if (!job.company?.slug || !job.slug) continue;
283
- seen.add(`${origin}/companies/${job.company.slug}/jobs/${job.slug}`);
342
+ seen.add(`${origin}${jobDetailPath(job.company.slug, job.slug)}`);
284
343
  }
285
344
  return [...seen].sort();
286
345
  }
@@ -289,10 +348,11 @@ async function companies(board, origin) {
289
348
  enumerateCompanies(board),
290
349
  board.companies.markets()
291
350
  ]);
292
- const urls = [`${origin}/companies`];
293
- for (const company of list) urls.push(`${origin}/companies/${company.slug}`);
351
+ const urls = [`${origin}${BOARD_PATHS.companies}`];
352
+ for (const company of list)
353
+ urls.push(`${origin}${companyPath(company.slug)}`);
294
354
  for (const market of markets.data) {
295
- urls.push(`${origin}/companies/markets/${market.slug}`);
355
+ urls.push(`${origin}${companyMarketPath(market.slug)}`);
296
356
  }
297
357
  return urls;
298
358
  }
@@ -307,27 +367,27 @@ async function salaries(board, origin) {
307
367
  if (!salaryCompanies.data.length && !titles.data.length && !skills.data.length && !locations.data.length) {
308
368
  return [];
309
369
  }
310
- const urls = [`${origin}/salaries`];
370
+ const urls = [`${origin}${BOARD_PATHS.salaries}`];
311
371
  if (salaryCompanies.data.length) {
312
- urls.push(`${origin}/salaries/companies`);
372
+ urls.push(`${origin}${BOARD_PATHS.salaryCompanies}`);
313
373
  for (const c of salaryCompanies.data) {
314
- urls.push(`${origin}/companies/${c.companySlug}/salaries`);
374
+ urls.push(`${origin}${companySalaryPath(c.companySlug)}`);
315
375
  }
316
376
  }
317
377
  if (titles.data.length) {
318
- urls.push(`${origin}/salaries/titles`);
378
+ urls.push(`${origin}${BOARD_PATHS.salaryTitles}`);
319
379
  for (const t of titles.data)
320
- urls.push(`${origin}/salaries/titles/${t.slug}`);
380
+ urls.push(`${origin}${salaryTitlePath(t.slug)}`);
321
381
  }
322
382
  if (skills.data.length) {
323
- urls.push(`${origin}/salaries/skills`);
383
+ urls.push(`${origin}${BOARD_PATHS.salarySkills}`);
324
384
  for (const s of skills.data)
325
- urls.push(`${origin}/salaries/skills/${s.slug}`);
385
+ urls.push(`${origin}${salarySkillPath(s.slug)}`);
326
386
  }
327
387
  if (locations.data.length) {
328
- urls.push(`${origin}/salaries/locations`);
388
+ urls.push(`${origin}${BOARD_PATHS.salaryLocations}`);
329
389
  for (const l of locations.data) {
330
- urls.push(`${origin}/salaries/locations/${l.placeSlug}`);
390
+ urls.push(`${origin}${salaryLocationPath(l.placeSlug)}`);
331
391
  }
332
392
  }
333
393
  return urls;
@@ -336,18 +396,18 @@ async function blog(board, origin) {
336
396
  const posts = await drainPages(
337
397
  paginate(board.blog.posts.list, { limit: 100 }).pages()
338
398
  );
339
- const urls = [`${origin}/blog`];
399
+ const urls = [`${origin}${BOARD_PATHS.blog}`];
340
400
  const tagSlugs = /* @__PURE__ */ new Set();
341
401
  const authorSlugs = /* @__PURE__ */ new Set();
342
402
  for (const post of posts) {
343
- urls.push(`${origin}/blog/${post.slug}`);
403
+ urls.push(`${origin}${blogPostPath(post.slug)}`);
344
404
  for (const tag of post.tags) tagSlugs.add(tag.slug);
345
405
  for (const author of post.authors) authorSlugs.add(author.slug);
346
406
  }
347
407
  for (const slug of [...tagSlugs].sort())
348
- urls.push(`${origin}/blog/tag/${slug}`);
408
+ urls.push(`${origin}${blogTagPath(slug)}`);
349
409
  for (const slug of [...authorSlugs].sort()) {
350
- urls.push(`${origin}/blog/author/${slug}`);
410
+ urls.push(`${origin}${blogAuthorPath(slug)}`);
351
411
  }
352
412
  return urls;
353
413
  }