@cavuno/board 4.26.0 → 4.28.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/CHANGELOG.md +134 -0
- package/dist/{_spec-EgN7VmAI.d.mts → _spec-DQvmsp5o.d.mts} +589 -67
- package/dist/{_spec-EgN7VmAI.d.ts → _spec-DQvmsp5o.d.ts} +589 -67
- package/dist/bin.mjs +7989 -10
- package/dist/{blog-BIjFcNcm.d.ts → blog-CUkvhn3c.d.ts} +1 -1
- package/dist/{blog-T7gQ0ciz.d.mts → blog-CvuObn9O.d.mts} +1 -1
- package/dist/{board-CsEAgsKh.d.ts → board-CCG1pO6r.d.ts} +25 -4
- package/dist/{board-q0svBKW3.d.mts → board-D6xOidUX.d.mts} +25 -4
- package/dist/{breadcrumbs-CFcCjuG7.d.mts → breadcrumbs-BBvJ5gq-.d.mts} +2 -2
- package/dist/{breadcrumbs-xuDid8BS.d.ts → breadcrumbs-D2Cwrju4.d.ts} +2 -2
- package/dist/browser/cavuno-board.global.min.js +1 -1
- package/dist/{chunk-DP2ZZZEO.mjs → chunk-EHSB2VAJ.mjs} +5 -0
- package/dist/doctor.js +7989 -10
- package/dist/doctor.mjs +7989 -10
- package/dist/filters.d.mts +19 -3
- package/dist/filters.d.ts +19 -3
- package/dist/filters.js +10 -1
- package/dist/filters.mjs +10 -1
- package/dist/format.d.mts +4 -4
- package/dist/format.d.ts +4 -4
- package/dist/index.d.mts +251 -14
- package/dist/index.d.ts +251 -14
- package/dist/index.js +218 -26
- package/dist/index.mjs +214 -27
- package/dist/{jobs-ub3gywNQ.d.ts → jobs-CEIuahbz.d.ts} +26 -2
- package/dist/{jobs-CfrxlDMU.d.mts → jobs-DjMcghv6.d.mts} +26 -2
- package/dist/{search-DKS7OIn2.d.mts → search-C0LiPXVb.d.mts} +1 -1
- package/dist/{search-Dx1TiAZk.d.ts → search-D-EjtZH3.d.ts} +1 -1
- package/dist/{seo-BbG2Ujyo.d.ts → seo-CjNGqZZH.d.ts} +1 -1
- package/dist/{seo-CI3wLKUW.d.mts → seo-DCQp8V1c.d.mts} +1 -1
- package/dist/seo-files.d.mts +2 -2
- package/dist/seo-files.d.ts +2 -2
- package/dist/seo.d.mts +6 -6
- package/dist/seo.d.ts +6 -6
- package/dist/server.d.mts +6 -6
- package/dist/server.d.ts +6 -6
- package/dist/server.mjs +1 -1
- package/dist/sitemap.d.mts +6 -6
- package/dist/sitemap.d.ts +6 -6
- package/dist/sitemap.mjs +1 -1
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/package.json +2 -1
- package/skills/cavuno-board-account/SKILL.md +122 -1
- package/skills/cavuno-board-collections/SKILL.md +148 -0
- package/skills/cavuno-board-companies/SKILL.md +43 -1
- package/skills/cavuno-board-errors/SKILL.md +1 -1
- package/skills/cavuno-board-filters/SKILL.md +160 -1
- package/skills/cavuno-board-format/SKILL.md +52 -0
- package/skills/cavuno-board-paywall/SKILL.md +5 -2
- package/skills/cavuno-board-post-a-job/SKILL.md +88 -0
- package/skills/cavuno-board-salaries/SKILL.md +7 -0
- package/skills/manifest.json +11 -4
package/dist/filters.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-DjMcghv6.mjs';
|
|
2
|
+
import './_spec-DQvmsp5o.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
|
|
@@ -15,6 +15,8 @@ import './_spec-EgN7VmAI.mjs';
|
|
|
15
15
|
* seniority: filters.seniority,
|
|
16
16
|
* remoteOption: filters.remoteOption ? [filters.remoteOption] : undefined,
|
|
17
17
|
* ```
|
|
18
|
+
* Category is a `jobs.search` filter only: pass `filters.category` as
|
|
19
|
+
* `filters.categories` in the search body.
|
|
18
20
|
* Company slugs are the URL identity; the API accepts them directly via
|
|
19
21
|
* `companySlug` — never resolve slug→id client-side.
|
|
20
22
|
*
|
|
@@ -45,6 +47,12 @@ interface ListingFilters {
|
|
|
45
47
|
* wire as `companySlug` (`jobs.list` query / `jobs.search` filters).
|
|
46
48
|
*/
|
|
47
49
|
company?: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Category filter as category SLUGS (a term's `sourceSlug` or
|
|
52
|
+
* `canonicalSlug`). Multi-select, comma-joined in URLs, matched as any-of.
|
|
53
|
+
* Map to the wire as `categories` in `jobs.search` filters.
|
|
54
|
+
*/
|
|
55
|
+
category?: string[];
|
|
48
56
|
/** Result ordering; absent ⇒ `relevance`. */
|
|
49
57
|
sort?: JobSort;
|
|
50
58
|
}
|
|
@@ -61,6 +69,12 @@ declare function parseSeniority(raw: unknown): Seniority[] | undefined;
|
|
|
61
69
|
* (the wire max; keep FIRST 10). Open value set (no vocabulary).
|
|
62
70
|
*/
|
|
63
71
|
declare function parseCompany(raw: unknown): string[] | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Normalise raw category-slug input with the same semantics as
|
|
74
|
+
* {@link parseCompany}: an array or comma-string; trim, lowercase, drop
|
|
75
|
+
* empties, dedupe preserving order, cap at 10 (the wire max; keep FIRST 10).
|
|
76
|
+
*/
|
|
77
|
+
declare function parseCategory(raw: unknown): string[] | undefined;
|
|
64
78
|
/**
|
|
65
79
|
* Validate raw URL search params into the supported listing filters,
|
|
66
80
|
* dropping unknown values (never throwing — listing URLs are public input).
|
|
@@ -68,7 +82,9 @@ declare function parseCompany(raw: unknown): string[] | undefined;
|
|
|
68
82
|
* @example
|
|
69
83
|
* parseListingFilters({ seniority: 'senior,lead', company: 'acme', sort: 'newest' });
|
|
70
84
|
* // { seniority: ['senior', 'lead'], company: ['acme'], sort: 'newest' }
|
|
85
|
+
* parseListingFilters({ category: 'engineering,design' });
|
|
86
|
+
* // { category: ['engineering', 'design'] }
|
|
71
87
|
*/
|
|
72
88
|
declare function parseListingFilters(search: Record<string, unknown>): ListingFilters;
|
|
73
89
|
|
|
74
|
-
export { DEFAULT_SORT, EMPLOYMENT_TYPES, JOB_SORTS, type ListingFilters, REMOTE_OPTIONS, SENIORITIES, parseCompany, parseListingFilters, parseSeniority };
|
|
90
|
+
export { DEFAULT_SORT, EMPLOYMENT_TYPES, JOB_SORTS, type ListingFilters, REMOTE_OPTIONS, SENIORITIES, parseCategory, parseCompany, parseListingFilters, parseSeniority };
|
package/dist/filters.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-CEIuahbz.js';
|
|
2
|
+
import './_spec-DQvmsp5o.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
|
|
@@ -15,6 +15,8 @@ import './_spec-EgN7VmAI.js';
|
|
|
15
15
|
* seniority: filters.seniority,
|
|
16
16
|
* remoteOption: filters.remoteOption ? [filters.remoteOption] : undefined,
|
|
17
17
|
* ```
|
|
18
|
+
* Category is a `jobs.search` filter only: pass `filters.category` as
|
|
19
|
+
* `filters.categories` in the search body.
|
|
18
20
|
* Company slugs are the URL identity; the API accepts them directly via
|
|
19
21
|
* `companySlug` — never resolve slug→id client-side.
|
|
20
22
|
*
|
|
@@ -45,6 +47,12 @@ interface ListingFilters {
|
|
|
45
47
|
* wire as `companySlug` (`jobs.list` query / `jobs.search` filters).
|
|
46
48
|
*/
|
|
47
49
|
company?: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Category filter as category SLUGS (a term's `sourceSlug` or
|
|
52
|
+
* `canonicalSlug`). Multi-select, comma-joined in URLs, matched as any-of.
|
|
53
|
+
* Map to the wire as `categories` in `jobs.search` filters.
|
|
54
|
+
*/
|
|
55
|
+
category?: string[];
|
|
48
56
|
/** Result ordering; absent ⇒ `relevance`. */
|
|
49
57
|
sort?: JobSort;
|
|
50
58
|
}
|
|
@@ -61,6 +69,12 @@ declare function parseSeniority(raw: unknown): Seniority[] | undefined;
|
|
|
61
69
|
* (the wire max; keep FIRST 10). Open value set (no vocabulary).
|
|
62
70
|
*/
|
|
63
71
|
declare function parseCompany(raw: unknown): string[] | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Normalise raw category-slug input with the same semantics as
|
|
74
|
+
* {@link parseCompany}: an array or comma-string; trim, lowercase, drop
|
|
75
|
+
* empties, dedupe preserving order, cap at 10 (the wire max; keep FIRST 10).
|
|
76
|
+
*/
|
|
77
|
+
declare function parseCategory(raw: unknown): string[] | undefined;
|
|
64
78
|
/**
|
|
65
79
|
* Validate raw URL search params into the supported listing filters,
|
|
66
80
|
* dropping unknown values (never throwing — listing URLs are public input).
|
|
@@ -68,7 +82,9 @@ declare function parseCompany(raw: unknown): string[] | undefined;
|
|
|
68
82
|
* @example
|
|
69
83
|
* parseListingFilters({ seniority: 'senior,lead', company: 'acme', sort: 'newest' });
|
|
70
84
|
* // { seniority: ['senior', 'lead'], company: ['acme'], sort: 'newest' }
|
|
85
|
+
* parseListingFilters({ category: 'engineering,design' });
|
|
86
|
+
* // { category: ['engineering', 'design'] }
|
|
71
87
|
*/
|
|
72
88
|
declare function parseListingFilters(search: Record<string, unknown>): ListingFilters;
|
|
73
89
|
|
|
74
|
-
export { DEFAULT_SORT, EMPLOYMENT_TYPES, JOB_SORTS, type ListingFilters, REMOTE_OPTIONS, SENIORITIES, parseCompany, parseListingFilters, parseSeniority };
|
|
90
|
+
export { DEFAULT_SORT, EMPLOYMENT_TYPES, JOB_SORTS, type ListingFilters, REMOTE_OPTIONS, SENIORITIES, parseCategory, parseCompany, parseListingFilters, parseSeniority };
|
package/dist/filters.js
CHANGED
|
@@ -25,6 +25,7 @@ __export(filters_exports, {
|
|
|
25
25
|
JOB_SORTS: () => JOB_SORTS,
|
|
26
26
|
REMOTE_OPTIONS: () => REMOTE_OPTIONS,
|
|
27
27
|
SENIORITIES: () => SENIORITIES,
|
|
28
|
+
parseCategory: () => parseCategory,
|
|
28
29
|
parseCompany: () => parseCompany,
|
|
29
30
|
parseListingFilters: () => parseListingFilters,
|
|
30
31
|
parseSeniority: () => parseSeniority
|
|
@@ -59,6 +60,7 @@ var JOB_SORTS = [
|
|
|
59
60
|
];
|
|
60
61
|
var DEFAULT_SORT = "relevance";
|
|
61
62
|
var COMPANY_SLUG_MAX = 10;
|
|
63
|
+
var CATEGORY_SLUG_MAX = 10;
|
|
62
64
|
var SENIORITY_LOOKUP = new Set(SENIORITIES);
|
|
63
65
|
function parseSeniority(raw) {
|
|
64
66
|
const values = Array.isArray(raw) ? raw : typeof raw === "string" && raw ? raw.split(",") : [];
|
|
@@ -75,6 +77,12 @@ function parseSeniority(raw) {
|
|
|
75
77
|
return result.length > 0 ? result : void 0;
|
|
76
78
|
}
|
|
77
79
|
function parseCompany(raw) {
|
|
80
|
+
return parseSlugList(raw, COMPANY_SLUG_MAX);
|
|
81
|
+
}
|
|
82
|
+
function parseCategory(raw) {
|
|
83
|
+
return parseSlugList(raw, CATEGORY_SLUG_MAX);
|
|
84
|
+
}
|
|
85
|
+
function parseSlugList(raw, max) {
|
|
78
86
|
const values = Array.isArray(raw) ? raw : typeof raw === "string" && raw ? raw.split(",") : [];
|
|
79
87
|
const result = [];
|
|
80
88
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -84,7 +92,7 @@ function parseCompany(raw) {
|
|
|
84
92
|
if (!normalized || seen.has(normalized)) continue;
|
|
85
93
|
seen.add(normalized);
|
|
86
94
|
result.push(normalized);
|
|
87
|
-
if (result.length >=
|
|
95
|
+
if (result.length >= max) break;
|
|
88
96
|
}
|
|
89
97
|
return result.length > 0 ? result : void 0;
|
|
90
98
|
}
|
|
@@ -97,6 +105,7 @@ function parseListingFilters(search) {
|
|
|
97
105
|
) ? search.employmentType : void 0,
|
|
98
106
|
seniority: parseSeniority(search.seniority),
|
|
99
107
|
company: parseCompany(search.company),
|
|
108
|
+
category: parseCategory(search.category),
|
|
100
109
|
sort: JOB_SORTS.includes(search.sort) ? search.sort : void 0
|
|
101
110
|
};
|
|
102
111
|
}
|
package/dist/filters.mjs
CHANGED
|
@@ -28,6 +28,7 @@ var JOB_SORTS = [
|
|
|
28
28
|
];
|
|
29
29
|
var DEFAULT_SORT = "relevance";
|
|
30
30
|
var COMPANY_SLUG_MAX = 10;
|
|
31
|
+
var CATEGORY_SLUG_MAX = 10;
|
|
31
32
|
var SENIORITY_LOOKUP = new Set(SENIORITIES);
|
|
32
33
|
function parseSeniority(raw) {
|
|
33
34
|
const values = Array.isArray(raw) ? raw : typeof raw === "string" && raw ? raw.split(",") : [];
|
|
@@ -44,6 +45,12 @@ function parseSeniority(raw) {
|
|
|
44
45
|
return result.length > 0 ? result : void 0;
|
|
45
46
|
}
|
|
46
47
|
function parseCompany(raw) {
|
|
48
|
+
return parseSlugList(raw, COMPANY_SLUG_MAX);
|
|
49
|
+
}
|
|
50
|
+
function parseCategory(raw) {
|
|
51
|
+
return parseSlugList(raw, CATEGORY_SLUG_MAX);
|
|
52
|
+
}
|
|
53
|
+
function parseSlugList(raw, max) {
|
|
47
54
|
const values = Array.isArray(raw) ? raw : typeof raw === "string" && raw ? raw.split(",") : [];
|
|
48
55
|
const result = [];
|
|
49
56
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -53,7 +60,7 @@ function parseCompany(raw) {
|
|
|
53
60
|
if (!normalized || seen.has(normalized)) continue;
|
|
54
61
|
seen.add(normalized);
|
|
55
62
|
result.push(normalized);
|
|
56
|
-
if (result.length >=
|
|
63
|
+
if (result.length >= max) break;
|
|
57
64
|
}
|
|
58
65
|
return result.length > 0 ? result : void 0;
|
|
59
66
|
}
|
|
@@ -66,6 +73,7 @@ function parseListingFilters(search) {
|
|
|
66
73
|
) ? search.employmentType : void 0,
|
|
67
74
|
seniority: parseSeniority(search.seniority),
|
|
68
75
|
company: parseCompany(search.company),
|
|
76
|
+
category: parseCategory(search.category),
|
|
69
77
|
sort: JOB_SORTS.includes(search.sort) ? search.sort : void 0
|
|
70
78
|
};
|
|
71
79
|
}
|
|
@@ -75,6 +83,7 @@ export {
|
|
|
75
83
|
JOB_SORTS,
|
|
76
84
|
REMOTE_OPTIONS,
|
|
77
85
|
SENIORITIES,
|
|
86
|
+
parseCategory,
|
|
78
87
|
parseCompany,
|
|
79
88
|
parseListingFilters,
|
|
80
89
|
parseSeniority
|
package/dist/format.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-
|
|
2
|
-
import { C as CustomFieldDefinition } from './board-
|
|
3
|
-
import { C as CustomFieldValues } from './jobs-
|
|
4
|
-
import './_spec-
|
|
1
|
+
export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-BBvJ5gq-.mjs';
|
|
2
|
+
import { C as CustomFieldDefinition } from './board-D6xOidUX.mjs';
|
|
3
|
+
import { C as CustomFieldValues } from './jobs-DjMcghv6.mjs';
|
|
4
|
+
import './_spec-DQvmsp5o.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Date display helpers in the board language (required leading parameter,
|
package/dist/format.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-
|
|
2
|
-
import { C as CustomFieldDefinition } from './board-
|
|
3
|
-
import { C as CustomFieldValues } from './jobs-
|
|
4
|
-
import './_spec-
|
|
1
|
+
export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-D2Cwrju4.js';
|
|
2
|
+
import { C as CustomFieldDefinition } from './board-CCG1pO6r.js';
|
|
3
|
+
import { C as CustomFieldValues } from './jobs-CEIuahbz.js';
|
|
4
|
+
import './_spec-DQvmsp5o.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Date display helpers in the board language (required leading parameter,
|