@cavuno/board 4.14.0 → 4.16.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 +22 -0
- package/dist/{_spec-CzS_E61o.d.mts → _spec-DdWB8z1Z.d.mts} +11 -1
- package/dist/{_spec-CzS_E61o.d.ts → _spec-DdWB8z1Z.d.ts} +11 -1
- package/dist/analytics.d.mts +58 -0
- package/dist/analytics.d.ts +58 -0
- package/dist/analytics.js +222 -0
- package/dist/analytics.mjs +199 -0
- package/dist/bin.mjs +99 -26
- package/dist/{blog-CtRz0ZlI.d.ts → blog-B7xorPBw.d.ts} +1 -1
- package/dist/{blog-D4R04cZP.d.mts → blog-DopIQsKV.d.mts} +1 -1
- package/dist/{board-MqLMXY48.d.ts → board-Bpnqn4Rg.d.ts} +2 -2
- package/dist/{board-CXE7dnk9.d.mts → board-CkgTW4cC.d.mts} +2 -2
- package/dist/{breadcrumbs-bbEYB2CD.d.mts → breadcrumbs-CAppxMoS.d.mts} +2 -2
- package/dist/{breadcrumbs-DdEy2bpQ.d.ts → breadcrumbs-DelEqbSz.d.ts} +2 -2
- package/dist/browser/cavuno-board.global.min.js +1 -1
- package/dist/doctor.js +93 -21
- package/dist/doctor.mjs +93 -21
- package/dist/filters.d.mts +2 -2
- package/dist/filters.d.ts +2 -2
- package/dist/format.d.mts +4 -4
- package/dist/format.d.ts +4 -4
- package/dist/index.d.mts +16 -11
- package/dist/index.d.ts +16 -11
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{jobs-DDJDUH3q.d.ts → jobs-CExc4QdI.d.ts} +1 -1
- package/dist/{jobs-CsrNGyvS.d.mts → jobs-Dq0TTcRf.d.mts} +1 -1
- package/dist/{search-B3nCRBqd.d.ts → search-CZOec95V.d.ts} +1 -1
- package/dist/{search-Bnx30Fe2.d.mts → search-D6hau3d4.d.mts} +1 -1
- package/dist/{seo-BUDWv2pv.d.ts → seo-C1hFa0-v.d.ts} +1 -1
- package/dist/{seo-aSJ3zVx9.d.mts → seo-CJSwd_ss.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/sitemap.d.mts +6 -6
- package/dist/sitemap.d.ts +6 -6
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/package.json +11 -1
- package/skills/manifest.json +1 -1
package/dist/doctor.js
CHANGED
|
@@ -147,11 +147,83 @@ function summarize(results) {
|
|
|
147
147
|
};
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
// src/doctor/
|
|
150
|
+
// src/doctor/analytics-surface.ts
|
|
151
151
|
var import_node_fs2 = require("fs");
|
|
152
152
|
var import_node_path2 = require("path");
|
|
153
|
+
var ANALYTICS = record("static.analytics-surface", 1);
|
|
154
|
+
var SOURCE_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|astro|svelte|vue|mdx)$/;
|
|
155
|
+
var TEST_FILE = /\.(?:test|spec)\./;
|
|
156
|
+
var FORBIDDEN = [
|
|
157
|
+
{ id: "window.Tinybird", re: /\bwindow\.Tinybird\b/ },
|
|
158
|
+
{ id: "@tinybirdco/flock", re: /@tinybirdco\/flock/ },
|
|
159
|
+
{ id: "CAVUNO_TRACKER_TOKEN", re: /\bCAVUNO_TRACKER_TOKEN\b/ }
|
|
160
|
+
];
|
|
161
|
+
var SCAN_ROOTS = ["src", "app", "apps"];
|
|
162
|
+
var SKIP_DIR_NAMES = /* @__PURE__ */ new Set([
|
|
163
|
+
"node_modules",
|
|
164
|
+
"dist",
|
|
165
|
+
".git",
|
|
166
|
+
".turbo",
|
|
167
|
+
"coverage",
|
|
168
|
+
"paraglide"
|
|
169
|
+
]);
|
|
170
|
+
function walkFiles(root, out) {
|
|
171
|
+
if (!(0, import_node_fs2.existsSync)(root)) return;
|
|
172
|
+
for (const entry of (0, import_node_fs2.readdirSync)(root)) {
|
|
173
|
+
if (SKIP_DIR_NAMES.has(entry)) continue;
|
|
174
|
+
const full = (0, import_node_path2.join)(root, entry);
|
|
175
|
+
const st = (0, import_node_fs2.statSync)(full);
|
|
176
|
+
if (st.isDirectory()) {
|
|
177
|
+
walkFiles(full, out);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (SOURCE_EXT.test(entry) && !TEST_FILE.test(entry)) {
|
|
181
|
+
out.push(full);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function checkAnalyticsSurface(projectRoot) {
|
|
186
|
+
const files = [];
|
|
187
|
+
for (const name of SCAN_ROOTS) {
|
|
188
|
+
walkFiles((0, import_node_path2.join)(projectRoot, name), files);
|
|
189
|
+
}
|
|
190
|
+
if (files.length === 0) {
|
|
191
|
+
return ANALYTICS(
|
|
192
|
+
"skip",
|
|
193
|
+
"no src/, app/, or apps/ tree to scan for analytics surface"
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
const hits = [];
|
|
197
|
+
for (const file of files) {
|
|
198
|
+
let text;
|
|
199
|
+
try {
|
|
200
|
+
text = (0, import_node_fs2.readFileSync)(file, "utf8");
|
|
201
|
+
} catch {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
for (const rule of FORBIDDEN) {
|
|
205
|
+
if (rule.re.test(text)) {
|
|
206
|
+
hits.push(`${(0, import_node_path2.relative)(projectRoot, file)}:${rule.id}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (hits.length === 0) {
|
|
211
|
+
return ANALYTICS(
|
|
212
|
+
"pass",
|
|
213
|
+
"no Tinybird-branded analytics APIs in app source"
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
return ANALYTICS(
|
|
217
|
+
"fail",
|
|
218
|
+
`use @cavuno/board/analytics + CAVUNO_BOARD only \u2014 found ${hits.slice(0, 8).join(", ")}${hits.length > 8 ? ` (+${hits.length - 8} more)` : ""}`
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// src/doctor/cookie-conformance.ts
|
|
223
|
+
var import_node_fs3 = require("fs");
|
|
224
|
+
var import_node_path3 = require("path");
|
|
153
225
|
var COOKIE = record("static.cookie-codec", 1);
|
|
154
|
-
var
|
|
226
|
+
var SOURCE_EXT2 = /\.(ts|tsx|js|jsx|mjs|cjs|astro|svelte|vue)$/;
|
|
155
227
|
var REMEDIATION = "set cookies only through the SDK server cookie codec (buildCookie/buildClearCookie from @cavuno/board/server)";
|
|
156
228
|
var SET_COOKIE_SINK = /set-cookie/i;
|
|
157
229
|
var DOCUMENT_COOKIE_ASSIGN = /document\.cookie\s*\+?=(?!=)/i;
|
|
@@ -254,23 +326,23 @@ function hasGeneratedBanner(text) {
|
|
|
254
326
|
function walkSourceFiles(dir, out) {
|
|
255
327
|
let entries;
|
|
256
328
|
try {
|
|
257
|
-
entries = (0,
|
|
329
|
+
entries = (0, import_node_fs3.readdirSync)(dir);
|
|
258
330
|
} catch {
|
|
259
331
|
return;
|
|
260
332
|
}
|
|
261
333
|
for (const name of entries) {
|
|
262
334
|
if (name === "node_modules" || name.startsWith(".")) continue;
|
|
263
335
|
if (GENERATED_DIRS.has(name) || GENERATED_FILE.test(name)) continue;
|
|
264
|
-
const full = (0,
|
|
336
|
+
const full = (0, import_node_path3.join)(dir, name);
|
|
265
337
|
let st;
|
|
266
338
|
try {
|
|
267
|
-
st = (0,
|
|
339
|
+
st = (0, import_node_fs3.statSync)(full);
|
|
268
340
|
} catch {
|
|
269
341
|
continue;
|
|
270
342
|
}
|
|
271
343
|
if (st.isDirectory()) {
|
|
272
344
|
walkSourceFiles(full, out);
|
|
273
|
-
} else if (st.isFile() &&
|
|
345
|
+
} else if (st.isFile() && SOURCE_EXT2.test(name)) {
|
|
274
346
|
out.push(full);
|
|
275
347
|
}
|
|
276
348
|
}
|
|
@@ -280,8 +352,8 @@ function truncate(line, max = 120) {
|
|
|
280
352
|
return t.length > max ? `${t.slice(0, max)}\u2026` : t;
|
|
281
353
|
}
|
|
282
354
|
function checkCookieCodecConformance(projectRoot) {
|
|
283
|
-
const srcDir = (0,
|
|
284
|
-
if (!(0,
|
|
355
|
+
const srcDir = (0, import_node_path3.join)(projectRoot, "src");
|
|
356
|
+
if (!(0, import_node_fs3.existsSync)(srcDir)) {
|
|
285
357
|
return [
|
|
286
358
|
COOKIE(
|
|
287
359
|
"skip",
|
|
@@ -293,10 +365,10 @@ function checkCookieCodecConformance(projectRoot) {
|
|
|
293
365
|
walkSourceFiles(srcDir, files);
|
|
294
366
|
const findings = [];
|
|
295
367
|
for (const file of files) {
|
|
296
|
-
const rel = (0,
|
|
368
|
+
const rel = (0, import_node_path3.relative)(projectRoot, file).split("\\").join("/");
|
|
297
369
|
let text;
|
|
298
370
|
try {
|
|
299
|
-
text = (0,
|
|
371
|
+
text = (0, import_node_fs3.readFileSync)(file, "utf8");
|
|
300
372
|
} catch {
|
|
301
373
|
continue;
|
|
302
374
|
}
|
|
@@ -556,8 +628,8 @@ async function runReadProbes(fetchImpl, frontendUrl, seo) {
|
|
|
556
628
|
}
|
|
557
629
|
|
|
558
630
|
// src/doctor/run.ts
|
|
559
|
-
var
|
|
560
|
-
var
|
|
631
|
+
var import_node_fs4 = require("fs");
|
|
632
|
+
var import_node_path4 = require("path");
|
|
561
633
|
var STATIC_API = record("static.api", 1);
|
|
562
634
|
var STATIC_BOARD = record("static.board", 1);
|
|
563
635
|
var STATIC_SKILLS = record("static.skills", 1);
|
|
@@ -635,8 +707,8 @@ var SKILL_ROOTS = [
|
|
|
635
707
|
".cursor/skills"
|
|
636
708
|
];
|
|
637
709
|
function checkSkillsFreshness(projectRoot) {
|
|
638
|
-
const roots = SKILL_ROOTS.map((root) => (0,
|
|
639
|
-
(root) => (0,
|
|
710
|
+
const roots = SKILL_ROOTS.map((root) => (0, import_node_path4.join)(projectRoot, root)).filter(
|
|
711
|
+
(root) => (0, import_node_fs4.existsSync)(root)
|
|
640
712
|
);
|
|
641
713
|
if (roots.length === 0) {
|
|
642
714
|
return STATIC_SKILLS(
|
|
@@ -649,10 +721,10 @@ function checkSkillsFreshness(projectRoot) {
|
|
|
649
721
|
const seen = /* @__PURE__ */ new Set();
|
|
650
722
|
for (const root of roots) {
|
|
651
723
|
for (const skill of corpus.skills) {
|
|
652
|
-
const copied = (0,
|
|
653
|
-
if (!(0,
|
|
724
|
+
const copied = (0, import_node_path4.join)(root, skill.name, "SKILL.md");
|
|
725
|
+
if (!(0, import_node_fs4.existsSync)(copied)) continue;
|
|
654
726
|
seen.add(skill.name);
|
|
655
|
-
if ((0,
|
|
727
|
+
if ((0, import_node_fs4.readFileSync)(copied, "utf8") !== skill.content) {
|
|
656
728
|
stale.add(skill.name);
|
|
657
729
|
}
|
|
658
730
|
}
|
|
@@ -700,10 +772,10 @@ async function runDoctor(options) {
|
|
|
700
772
|
} else {
|
|
701
773
|
results.push(STATIC_BOARD("skip", "env checks failed \u2014 fix them first"));
|
|
702
774
|
}
|
|
703
|
-
|
|
704
|
-
results.push(
|
|
705
|
-
|
|
706
|
-
);
|
|
775
|
+
const projectRoot = options.projectRoot ?? process.cwd();
|
|
776
|
+
results.push(checkSkillsFreshness(projectRoot));
|
|
777
|
+
results.push(...checkCookieCodecConformance(projectRoot));
|
|
778
|
+
results.push(checkAnalyticsSurface(projectRoot));
|
|
707
779
|
results.push(
|
|
708
780
|
...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl, seo) : skipReadProbes("no --frontend <url> given")
|
|
709
781
|
);
|
package/dist/doctor.mjs
CHANGED
|
@@ -117,11 +117,83 @@ function summarize(results) {
|
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
// src/doctor/
|
|
120
|
+
// src/doctor/analytics-surface.ts
|
|
121
121
|
import { existsSync, readdirSync as readdirSync2, readFileSync as readFileSync2, statSync } from "fs";
|
|
122
122
|
import { join, relative } from "path";
|
|
123
|
+
var ANALYTICS = record("static.analytics-surface", 1);
|
|
124
|
+
var SOURCE_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|astro|svelte|vue|mdx)$/;
|
|
125
|
+
var TEST_FILE = /\.(?:test|spec)\./;
|
|
126
|
+
var FORBIDDEN = [
|
|
127
|
+
{ id: "window.Tinybird", re: /\bwindow\.Tinybird\b/ },
|
|
128
|
+
{ id: "@tinybirdco/flock", re: /@tinybirdco\/flock/ },
|
|
129
|
+
{ id: "CAVUNO_TRACKER_TOKEN", re: /\bCAVUNO_TRACKER_TOKEN\b/ }
|
|
130
|
+
];
|
|
131
|
+
var SCAN_ROOTS = ["src", "app", "apps"];
|
|
132
|
+
var SKIP_DIR_NAMES = /* @__PURE__ */ new Set([
|
|
133
|
+
"node_modules",
|
|
134
|
+
"dist",
|
|
135
|
+
".git",
|
|
136
|
+
".turbo",
|
|
137
|
+
"coverage",
|
|
138
|
+
"paraglide"
|
|
139
|
+
]);
|
|
140
|
+
function walkFiles(root, out) {
|
|
141
|
+
if (!existsSync(root)) return;
|
|
142
|
+
for (const entry of readdirSync2(root)) {
|
|
143
|
+
if (SKIP_DIR_NAMES.has(entry)) continue;
|
|
144
|
+
const full = join(root, entry);
|
|
145
|
+
const st = statSync(full);
|
|
146
|
+
if (st.isDirectory()) {
|
|
147
|
+
walkFiles(full, out);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (SOURCE_EXT.test(entry) && !TEST_FILE.test(entry)) {
|
|
151
|
+
out.push(full);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function checkAnalyticsSurface(projectRoot) {
|
|
156
|
+
const files = [];
|
|
157
|
+
for (const name of SCAN_ROOTS) {
|
|
158
|
+
walkFiles(join(projectRoot, name), files);
|
|
159
|
+
}
|
|
160
|
+
if (files.length === 0) {
|
|
161
|
+
return ANALYTICS(
|
|
162
|
+
"skip",
|
|
163
|
+
"no src/, app/, or apps/ tree to scan for analytics surface"
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
const hits = [];
|
|
167
|
+
for (const file of files) {
|
|
168
|
+
let text;
|
|
169
|
+
try {
|
|
170
|
+
text = readFileSync2(file, "utf8");
|
|
171
|
+
} catch {
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
for (const rule of FORBIDDEN) {
|
|
175
|
+
if (rule.re.test(text)) {
|
|
176
|
+
hits.push(`${relative(projectRoot, file)}:${rule.id}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (hits.length === 0) {
|
|
181
|
+
return ANALYTICS(
|
|
182
|
+
"pass",
|
|
183
|
+
"no Tinybird-branded analytics APIs in app source"
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
return ANALYTICS(
|
|
187
|
+
"fail",
|
|
188
|
+
`use @cavuno/board/analytics + CAVUNO_BOARD only \u2014 found ${hits.slice(0, 8).join(", ")}${hits.length > 8 ? ` (+${hits.length - 8} more)` : ""}`
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// src/doctor/cookie-conformance.ts
|
|
193
|
+
import { existsSync as existsSync2, readdirSync as readdirSync3, readFileSync as readFileSync3, statSync as statSync2 } from "fs";
|
|
194
|
+
import { join as join2, relative as relative2 } from "path";
|
|
123
195
|
var COOKIE = record("static.cookie-codec", 1);
|
|
124
|
-
var
|
|
196
|
+
var SOURCE_EXT2 = /\.(ts|tsx|js|jsx|mjs|cjs|astro|svelte|vue)$/;
|
|
125
197
|
var REMEDIATION = "set cookies only through the SDK server cookie codec (buildCookie/buildClearCookie from @cavuno/board/server)";
|
|
126
198
|
var SET_COOKIE_SINK = /set-cookie/i;
|
|
127
199
|
var DOCUMENT_COOKIE_ASSIGN = /document\.cookie\s*\+?=(?!=)/i;
|
|
@@ -224,23 +296,23 @@ function hasGeneratedBanner(text) {
|
|
|
224
296
|
function walkSourceFiles(dir, out) {
|
|
225
297
|
let entries;
|
|
226
298
|
try {
|
|
227
|
-
entries =
|
|
299
|
+
entries = readdirSync3(dir);
|
|
228
300
|
} catch {
|
|
229
301
|
return;
|
|
230
302
|
}
|
|
231
303
|
for (const name of entries) {
|
|
232
304
|
if (name === "node_modules" || name.startsWith(".")) continue;
|
|
233
305
|
if (GENERATED_DIRS.has(name) || GENERATED_FILE.test(name)) continue;
|
|
234
|
-
const full =
|
|
306
|
+
const full = join2(dir, name);
|
|
235
307
|
let st;
|
|
236
308
|
try {
|
|
237
|
-
st =
|
|
309
|
+
st = statSync2(full);
|
|
238
310
|
} catch {
|
|
239
311
|
continue;
|
|
240
312
|
}
|
|
241
313
|
if (st.isDirectory()) {
|
|
242
314
|
walkSourceFiles(full, out);
|
|
243
|
-
} else if (st.isFile() &&
|
|
315
|
+
} else if (st.isFile() && SOURCE_EXT2.test(name)) {
|
|
244
316
|
out.push(full);
|
|
245
317
|
}
|
|
246
318
|
}
|
|
@@ -250,8 +322,8 @@ function truncate(line, max = 120) {
|
|
|
250
322
|
return t.length > max ? `${t.slice(0, max)}\u2026` : t;
|
|
251
323
|
}
|
|
252
324
|
function checkCookieCodecConformance(projectRoot) {
|
|
253
|
-
const srcDir =
|
|
254
|
-
if (!
|
|
325
|
+
const srcDir = join2(projectRoot, "src");
|
|
326
|
+
if (!existsSync2(srcDir)) {
|
|
255
327
|
return [
|
|
256
328
|
COOKIE(
|
|
257
329
|
"skip",
|
|
@@ -263,10 +335,10 @@ function checkCookieCodecConformance(projectRoot) {
|
|
|
263
335
|
walkSourceFiles(srcDir, files);
|
|
264
336
|
const findings = [];
|
|
265
337
|
for (const file of files) {
|
|
266
|
-
const rel =
|
|
338
|
+
const rel = relative2(projectRoot, file).split("\\").join("/");
|
|
267
339
|
let text;
|
|
268
340
|
try {
|
|
269
|
-
text =
|
|
341
|
+
text = readFileSync3(file, "utf8");
|
|
270
342
|
} catch {
|
|
271
343
|
continue;
|
|
272
344
|
}
|
|
@@ -526,8 +598,8 @@ async function runReadProbes(fetchImpl, frontendUrl, seo) {
|
|
|
526
598
|
}
|
|
527
599
|
|
|
528
600
|
// src/doctor/run.ts
|
|
529
|
-
import { existsSync as
|
|
530
|
-
import { join as
|
|
601
|
+
import { existsSync as existsSync3, readFileSync as readFileSync4 } from "fs";
|
|
602
|
+
import { join as join3 } from "path";
|
|
531
603
|
var STATIC_API = record("static.api", 1);
|
|
532
604
|
var STATIC_BOARD = record("static.board", 1);
|
|
533
605
|
var STATIC_SKILLS = record("static.skills", 1);
|
|
@@ -605,8 +677,8 @@ var SKILL_ROOTS = [
|
|
|
605
677
|
".cursor/skills"
|
|
606
678
|
];
|
|
607
679
|
function checkSkillsFreshness(projectRoot) {
|
|
608
|
-
const roots = SKILL_ROOTS.map((root) =>
|
|
609
|
-
(root) =>
|
|
680
|
+
const roots = SKILL_ROOTS.map((root) => join3(projectRoot, root)).filter(
|
|
681
|
+
(root) => existsSync3(root)
|
|
610
682
|
);
|
|
611
683
|
if (roots.length === 0) {
|
|
612
684
|
return STATIC_SKILLS(
|
|
@@ -619,10 +691,10 @@ function checkSkillsFreshness(projectRoot) {
|
|
|
619
691
|
const seen = /* @__PURE__ */ new Set();
|
|
620
692
|
for (const root of roots) {
|
|
621
693
|
for (const skill of corpus.skills) {
|
|
622
|
-
const copied =
|
|
623
|
-
if (!
|
|
694
|
+
const copied = join3(root, skill.name, "SKILL.md");
|
|
695
|
+
if (!existsSync3(copied)) continue;
|
|
624
696
|
seen.add(skill.name);
|
|
625
|
-
if (
|
|
697
|
+
if (readFileSync4(copied, "utf8") !== skill.content) {
|
|
626
698
|
stale.add(skill.name);
|
|
627
699
|
}
|
|
628
700
|
}
|
|
@@ -670,10 +742,10 @@ async function runDoctor(options) {
|
|
|
670
742
|
} else {
|
|
671
743
|
results.push(STATIC_BOARD("skip", "env checks failed \u2014 fix them first"));
|
|
672
744
|
}
|
|
673
|
-
|
|
674
|
-
results.push(
|
|
675
|
-
|
|
676
|
-
);
|
|
745
|
+
const projectRoot = options.projectRoot ?? process.cwd();
|
|
746
|
+
results.push(checkSkillsFreshness(projectRoot));
|
|
747
|
+
results.push(...checkCookieCodecConformance(projectRoot));
|
|
748
|
+
results.push(checkAnalyticsSurface(projectRoot));
|
|
677
749
|
results.push(
|
|
678
750
|
...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl, seo) : skipReadProbes("no --frontend <url> given")
|
|
679
751
|
);
|
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-Dq0TTcRf.mjs';
|
|
2
|
+
import './_spec-DdWB8z1Z.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
|
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-CExc4QdI.js';
|
|
2
|
+
import './_spec-DdWB8z1Z.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
|
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-CAppxMoS.mjs';
|
|
2
|
+
import { C as CustomFieldDefinition } from './board-CkgTW4cC.mjs';
|
|
3
|
+
import { C as CustomFieldValues } from './jobs-Dq0TTcRf.mjs';
|
|
4
|
+
import './_spec-DdWB8z1Z.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-DelEqbSz.js';
|
|
2
|
+
import { C as CustomFieldDefinition } from './board-Bpnqn4Rg.js';
|
|
3
|
+
import { C as CustomFieldValues } from './jobs-CExc4QdI.js';
|
|
4
|
+
import './_spec-DdWB8z1Z.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Date display helpers in the board language (required leading parameter,
|
package/dist/index.d.mts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { S as Schemas, c as components } from './_spec-
|
|
2
|
-
import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-
|
|
3
|
-
export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-
|
|
4
|
-
import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-
|
|
5
|
-
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-
|
|
6
|
-
export { B as BoardSeo } from './seo-
|
|
7
|
-
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-
|
|
8
|
-
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-
|
|
9
|
-
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-
|
|
10
|
-
export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-
|
|
1
|
+
import { S as Schemas, c as components } from './_spec-DdWB8z1Z.mjs';
|
|
2
|
+
import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-D6hau3d4.mjs';
|
|
3
|
+
export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-D6hau3d4.mjs';
|
|
4
|
+
import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-CkgTW4cC.mjs';
|
|
5
|
+
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-CkgTW4cC.mjs';
|
|
6
|
+
export { B as BoardSeo } from './seo-CJSwd_ss.mjs';
|
|
7
|
+
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-Dq0TTcRf.mjs';
|
|
8
|
+
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-Dq0TTcRf.mjs';
|
|
9
|
+
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DopIQsKV.mjs';
|
|
10
|
+
export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-DopIQsKV.mjs';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
|
|
@@ -143,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
|
|
|
143
143
|
* constant because the package is platform-neutral and cannot read
|
|
144
144
|
* package.json at runtime.
|
|
145
145
|
*/
|
|
146
|
-
declare const SDK_VERSION = "4.
|
|
146
|
+
declare const SDK_VERSION = "4.16.0";
|
|
147
147
|
|
|
148
148
|
type SavedJob = Schemas['SavedJob'];
|
|
149
149
|
type SavedJobsListQuery = {
|
|
@@ -921,6 +921,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
921
921
|
gtmId: string | null;
|
|
922
922
|
metaPixelId: string | null;
|
|
923
923
|
linkedInPartnerId: string | null;
|
|
924
|
+
linkedInConversionSignUpId: string | null;
|
|
925
|
+
linkedInConversionLoginId: string | null;
|
|
926
|
+
linkedInConversionApplyClickId: string | null;
|
|
927
|
+
linkedInConversionApplySubmitId: string | null;
|
|
928
|
+
linkedInConversionJobAlertSubscribeId: string | null;
|
|
924
929
|
cookieConsentRequired: boolean;
|
|
925
930
|
};
|
|
926
931
|
ads: {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { S as Schemas, c as components } from './_spec-
|
|
2
|
-
import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-
|
|
3
|
-
export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-
|
|
4
|
-
import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-
|
|
5
|
-
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-
|
|
6
|
-
export { B as BoardSeo } from './seo-
|
|
7
|
-
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-
|
|
8
|
-
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-
|
|
9
|
-
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-
|
|
10
|
-
export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-
|
|
1
|
+
import { S as Schemas, c as components } from './_spec-DdWB8z1Z.js';
|
|
2
|
+
import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-CZOec95V.js';
|
|
3
|
+
export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-CZOec95V.js';
|
|
4
|
+
import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-Bpnqn4Rg.js';
|
|
5
|
+
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-Bpnqn4Rg.js';
|
|
6
|
+
export { B as BoardSeo } from './seo-C1hFa0-v.js';
|
|
7
|
+
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-CExc4QdI.js';
|
|
8
|
+
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-CExc4QdI.js';
|
|
9
|
+
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-B7xorPBw.js';
|
|
10
|
+
export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-B7xorPBw.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
|
|
@@ -143,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
|
|
|
143
143
|
* constant because the package is platform-neutral and cannot read
|
|
144
144
|
* package.json at runtime.
|
|
145
145
|
*/
|
|
146
|
-
declare const SDK_VERSION = "4.
|
|
146
|
+
declare const SDK_VERSION = "4.16.0";
|
|
147
147
|
|
|
148
148
|
type SavedJob = Schemas['SavedJob'];
|
|
149
149
|
type SavedJobsListQuery = {
|
|
@@ -921,6 +921,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
921
921
|
gtmId: string | null;
|
|
922
922
|
metaPixelId: string | null;
|
|
923
923
|
linkedInPartnerId: string | null;
|
|
924
|
+
linkedInConversionSignUpId: string | null;
|
|
925
|
+
linkedInConversionLoginId: string | null;
|
|
926
|
+
linkedInConversionApplyClickId: string | null;
|
|
927
|
+
linkedInConversionApplySubmitId: string | null;
|
|
928
|
+
linkedInConversionJobAlertSubscribeId: string | null;
|
|
924
929
|
cookieConsentRequired: boolean;
|
|
925
930
|
};
|
|
926
931
|
ads: {
|
package/dist/index.js
CHANGED
package/dist/index.mjs
CHANGED
package/dist/seo-files.d.mts
CHANGED
package/dist/seo-files.d.ts
CHANGED
package/dist/seo.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
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-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-DopIQsKV.mjs';
|
|
2
|
+
import { e as JsonLdObject } from './breadcrumbs-CAppxMoS.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-CAppxMoS.mjs';
|
|
4
|
+
import './_spec-DdWB8z1Z.mjs';
|
|
5
|
+
import './board-CkgTW4cC.mjs';
|
|
6
|
+
import './jobs-Dq0TTcRf.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-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
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-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-B7xorPBw.js';
|
|
2
|
+
import { e as JsonLdObject } from './breadcrumbs-DelEqbSz.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-DelEqbSz.js';
|
|
4
|
+
import './_spec-DdWB8z1Z.js';
|
|
5
|
+
import './board-Bpnqn4Rg.js';
|
|
6
|
+
import './jobs-CExc4QdI.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Blog structured data on the `@cavuno/board` wire types, transcribed from
|