@cavuno/board 1.33.1 → 1.34.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.
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
  }
package/dist/sitemap.mjs CHANGED
@@ -128,6 +128,65 @@ function paginate(listFn, query, options) {
128
128
  };
129
129
  }
130
130
 
131
+ // src/paths/index.ts
132
+ function jobDetailPath(companySlug, jobSlug) {
133
+ return `/companies/${companySlug}/jobs/${jobSlug}`;
134
+ }
135
+ function jobsCategoryPath(categorySlug) {
136
+ return `/jobs/${categorySlug}`;
137
+ }
138
+ function jobsSkillPath(skillSlug) {
139
+ return `/jobs/skills/${skillSlug}`;
140
+ }
141
+ function jobsLocationPath(placeSlug) {
142
+ return `/jobs/locations/${placeSlug}`;
143
+ }
144
+ function companyPath(companySlug) {
145
+ return `/companies/${companySlug}`;
146
+ }
147
+ function companyMarketPath(marketSlug) {
148
+ return `/companies/markets/${marketSlug}`;
149
+ }
150
+ function companySalaryPath(companySlug) {
151
+ return `/companies/${companySlug}/salaries`;
152
+ }
153
+ function salaryTitlePath(titleSlug) {
154
+ return `/salaries/titles/${titleSlug}`;
155
+ }
156
+ function salarySkillPath(skillSlug) {
157
+ return `/salaries/skills/${skillSlug}`;
158
+ }
159
+ function salaryLocationPath(placeSlug) {
160
+ return `/salaries/locations/${placeSlug}`;
161
+ }
162
+ function blogPostPath(postSlug) {
163
+ return `/blog/${postSlug}`;
164
+ }
165
+ function blogTagPath(tagSlug) {
166
+ return `/blog/tag/${tagSlug}`;
167
+ }
168
+ function blogAuthorPath(authorSlug) {
169
+ return `/blog/author/${authorSlug}`;
170
+ }
171
+ var BOARD_PATHS = {
172
+ home: "/",
173
+ jobs: "/jobs",
174
+ companies: "/companies",
175
+ salaries: "/salaries",
176
+ salaryCompanies: "/salaries/companies",
177
+ salaryTitles: "/salaries/titles",
178
+ salarySkills: "/salaries/skills",
179
+ salaryLocations: "/salaries/locations",
180
+ blog: "/blog",
181
+ about: "/about",
182
+ privacyPolicy: "/privacy-policy",
183
+ termsOfService: "/terms-of-service",
184
+ cookiePolicy: "/cookie-policy",
185
+ impressum: "/impressum",
186
+ talent: "/talent",
187
+ employers: "/employers"
188
+ };
189
+
131
190
  // src/sitemap/walker.ts
132
191
  var MIN_JOBS_PER_INDEXED_PAGE = 5;
133
192
  var MAX_PAGES = 200;
@@ -210,16 +269,16 @@ async function buildBucketUrls(board, origin, bucket) {
210
269
  async function marketing(board, origin) {
211
270
  const { features } = await board.context();
212
271
  const urls = [
213
- `${origin}/`,
214
- `${origin}/jobs`,
215
- `${origin}/about`,
216
- `${origin}/privacy-policy`,
217
- `${origin}/terms-of-service`,
218
- `${origin}/cookie-policy`
272
+ `${origin}${BOARD_PATHS.home}`,
273
+ `${origin}${BOARD_PATHS.jobs}`,
274
+ `${origin}${BOARD_PATHS.about}`,
275
+ `${origin}${BOARD_PATHS.privacyPolicy}`,
276
+ `${origin}${BOARD_PATHS.termsOfService}`,
277
+ `${origin}${BOARD_PATHS.cookiePolicy}`
219
278
  ];
220
- if (features.impressum) urls.push(`${origin}/impressum`);
221
- if (features.talentDirectory) urls.push(`${origin}/talent`);
222
- if (features.employers) urls.push(`${origin}/employers`);
279
+ if (features.impressum) urls.push(`${origin}${BOARD_PATHS.impressum}`);
280
+ if (features.talentDirectory) urls.push(`${origin}${BOARD_PATHS.talent}`);
281
+ if (features.employers) urls.push(`${origin}${BOARD_PATHS.employers}`);
223
282
  return urls;
224
283
  }
225
284
  async function jobsTaxonomy(board, origin, kind) {
@@ -231,20 +290,20 @@ async function jobsTaxonomy(board, origin, kind) {
231
290
  );
232
291
  for (const slug of slugs) counts.set(slug, (counts.get(slug) ?? 0) + 1);
233
292
  }
234
- const prefix = kind === "categories" ? `${origin}/jobs` : `${origin}/jobs/skills`;
235
- return [...counts.entries()].filter(([, n]) => n >= MIN_JOBS_PER_INDEXED_PAGE).map(([slug]) => slug).sort().map((slug) => `${prefix}/${slug}`);
293
+ const toPath = kind === "categories" ? jobsCategoryPath : jobsSkillPath;
294
+ return [...counts.entries()].filter(([, n]) => n >= MIN_JOBS_PER_INDEXED_PAGE).map(([slug]) => slug).sort().map((slug) => `${origin}${toPath(slug)}`);
236
295
  }
237
296
  async function jobsLocations(board, origin) {
238
297
  const { language } = await board.context();
239
298
  const { data } = await board.salaries.locations.list({ locale: language });
240
- return data.filter((l) => l.jobCount >= MIN_JOBS_PER_INDEXED_PAGE).map((l) => l.placeSlug).sort().map((slug) => `${origin}/jobs/locations/${slug}`);
299
+ return data.filter((l) => l.jobCount >= MIN_JOBS_PER_INDEXED_PAGE).map((l) => l.placeSlug).sort().map((slug) => `${origin}${jobsLocationPath(slug)}`);
241
300
  }
242
301
  async function jobDetails(board, origin) {
243
302
  const jobs = await enumerateJobs(board);
244
303
  const seen = /* @__PURE__ */ new Set();
245
304
  for (const job of jobs) {
246
305
  if (!job.company?.slug || !job.slug) continue;
247
- seen.add(`${origin}/companies/${job.company.slug}/jobs/${job.slug}`);
306
+ seen.add(`${origin}${jobDetailPath(job.company.slug, job.slug)}`);
248
307
  }
249
308
  return [...seen].sort();
250
309
  }
@@ -253,10 +312,11 @@ async function companies(board, origin) {
253
312
  enumerateCompanies(board),
254
313
  board.companies.markets()
255
314
  ]);
256
- const urls = [`${origin}/companies`];
257
- for (const company of list) urls.push(`${origin}/companies/${company.slug}`);
315
+ const urls = [`${origin}${BOARD_PATHS.companies}`];
316
+ for (const company of list)
317
+ urls.push(`${origin}${companyPath(company.slug)}`);
258
318
  for (const market of markets.data) {
259
- urls.push(`${origin}/companies/markets/${market.slug}`);
319
+ urls.push(`${origin}${companyMarketPath(market.slug)}`);
260
320
  }
261
321
  return urls;
262
322
  }
@@ -271,27 +331,27 @@ async function salaries(board, origin) {
271
331
  if (!salaryCompanies.data.length && !titles.data.length && !skills.data.length && !locations.data.length) {
272
332
  return [];
273
333
  }
274
- const urls = [`${origin}/salaries`];
334
+ const urls = [`${origin}${BOARD_PATHS.salaries}`];
275
335
  if (salaryCompanies.data.length) {
276
- urls.push(`${origin}/salaries/companies`);
336
+ urls.push(`${origin}${BOARD_PATHS.salaryCompanies}`);
277
337
  for (const c of salaryCompanies.data) {
278
- urls.push(`${origin}/companies/${c.companySlug}/salaries`);
338
+ urls.push(`${origin}${companySalaryPath(c.companySlug)}`);
279
339
  }
280
340
  }
281
341
  if (titles.data.length) {
282
- urls.push(`${origin}/salaries/titles`);
342
+ urls.push(`${origin}${BOARD_PATHS.salaryTitles}`);
283
343
  for (const t of titles.data)
284
- urls.push(`${origin}/salaries/titles/${t.slug}`);
344
+ urls.push(`${origin}${salaryTitlePath(t.slug)}`);
285
345
  }
286
346
  if (skills.data.length) {
287
- urls.push(`${origin}/salaries/skills`);
347
+ urls.push(`${origin}${BOARD_PATHS.salarySkills}`);
288
348
  for (const s of skills.data)
289
- urls.push(`${origin}/salaries/skills/${s.slug}`);
349
+ urls.push(`${origin}${salarySkillPath(s.slug)}`);
290
350
  }
291
351
  if (locations.data.length) {
292
- urls.push(`${origin}/salaries/locations`);
352
+ urls.push(`${origin}${BOARD_PATHS.salaryLocations}`);
293
353
  for (const l of locations.data) {
294
- urls.push(`${origin}/salaries/locations/${l.placeSlug}`);
354
+ urls.push(`${origin}${salaryLocationPath(l.placeSlug)}`);
295
355
  }
296
356
  }
297
357
  return urls;
@@ -300,18 +360,18 @@ async function blog(board, origin) {
300
360
  const posts = await drainPages(
301
361
  paginate(board.blog.posts.list, { limit: 100 }).pages()
302
362
  );
303
- const urls = [`${origin}/blog`];
363
+ const urls = [`${origin}${BOARD_PATHS.blog}`];
304
364
  const tagSlugs = /* @__PURE__ */ new Set();
305
365
  const authorSlugs = /* @__PURE__ */ new Set();
306
366
  for (const post of posts) {
307
- urls.push(`${origin}/blog/${post.slug}`);
367
+ urls.push(`${origin}${blogPostPath(post.slug)}`);
308
368
  for (const tag of post.tags) tagSlugs.add(tag.slug);
309
369
  for (const author of post.authors) authorSlugs.add(author.slug);
310
370
  }
311
371
  for (const slug of [...tagSlugs].sort())
312
- urls.push(`${origin}/blog/tag/${slug}`);
372
+ urls.push(`${origin}${blogTagPath(slug)}`);
313
373
  for (const slug of [...authorSlugs].sort()) {
314
- urls.push(`${origin}/blog/author/${slug}`);
374
+ urls.push(`${origin}${blogAuthorPath(slug)}`);
315
375
  }
316
376
  return urls;
317
377
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavuno/board",
3
- "version": "1.33.1",
3
+ "version": "1.34.0",
4
4
  "description": "Typed isomorphic client for the Cavuno Board API",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",
@@ -80,6 +80,16 @@
80
80
  "default": "./dist/sitemap.js"
81
81
  }
82
82
  },
83
+ "./paths": {
84
+ "import": {
85
+ "types": "./dist/paths.d.mts",
86
+ "default": "./dist/paths.mjs"
87
+ },
88
+ "require": {
89
+ "types": "./dist/paths.d.ts",
90
+ "default": "./dist/paths.js"
91
+ }
92
+ },
83
93
  "./server": {
84
94
  "import": {
85
95
  "types": "./dist/server.d.mts",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.33.1",
2
+ "version": "1.34.0",
3
3
  "skills": [
4
4
  {
5
5
  "name": "cavuno-board-account",