@profullstack/agenticjobs 0.3.0 → 0.4.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/cli/index.d.ts +9 -1
- package/dist/cli/index.js +87 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.d.ts +16 -0
- package/dist/client/client.js +8 -0
- package/dist/client/client.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/core/applications.js +4 -1
- package/dist/core/applications.js.map +1 -1
- package/dist/core/candidates.d.ts +42 -0
- package/dist/core/candidates.js +143 -0
- package/dist/core/candidates.js.map +1 -0
- package/dist/core/import-job.d.ts +36 -0
- package/dist/core/import-job.js +221 -0
- package/dist/core/import-job.js.map +1 -0
- package/dist/core/jobs.d.ts +29 -0
- package/dist/core/jobs.js +101 -31
- package/dist/core/jobs.js.map +1 -1
- package/dist/core/resumes.d.ts +23 -1
- package/dist/core/resumes.js +86 -9
- package/dist/core/resumes.js.map +1 -1
- package/dist/directory/fetch.d.ts +11 -1
- package/dist/directory/fetch.js +23 -8
- package/dist/directory/fetch.js.map +1 -1
- package/dist/markup/resume.js +7 -1
- package/dist/markup/resume.js.map +1 -1
- package/dist/schema/job.d.ts +13 -10
- package/dist/schema/job.js.map +1 -1
- package/dist/schema/query.js +8 -4
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/text.d.ts +12 -1
- package/dist/schema/text.js +14 -3
- package/dist/schema/text.js.map +1 -1
- package/dist/server/routes/api.js +183 -18
- package/dist/server/routes/api.js.map +1 -1
- package/dist/server/routes/discovery.js +162 -1
- package/dist/server/routes/discovery.js.map +1 -1
- package/dist/server/routes/pages.js +30 -1
- package/dist/server/routes/pages.js.map +1 -1
- package/dist/views/candidates.d.ts +47 -0
- package/dist/views/candidates.js +21 -0
- package/dist/views/candidates.js.map +1 -0
- package/dist/views/jobs.d.ts +13 -0
- package/dist/views/jobs.js +35 -10
- package/dist/views/jobs.js.map +1 -1
- package/dist/views/layout.js +2 -2
- package/dist/views/layout.js.map +1 -1
- package/dist/views/me.js +3 -1
- package/dist/views/me.js.map +1 -1
- package/dist/views/post.js +1 -1
- package/dist/views/post.js.map +1 -1
- package/docs/openjob.md +16 -9
- package/migrations/0006_board_only_applications.sql +34 -0
- package/migrations/0007_public_resumes.sql +24 -0
- package/migrations/0008_backfill_public_slugs.sql +57 -0
- package/migrations/0009_shorten_runaway_slugs.sql +21 -0
- package/package.json +1 -1
- package/web/public/app.css +45 -2
- package/web/public/sw.js +29 -5
package/dist/core/resumes.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { parseResume, resumeTemplate } from "../markup/resume.js";
|
|
10
10
|
import { clean, slugify, suffix } from "../schema/text.js";
|
|
11
|
+
import { nameOf } from "./candidates.js";
|
|
11
12
|
export const VISIBILITIES = ['private', 'link', 'public'];
|
|
12
13
|
export function isVisibility(value) {
|
|
13
14
|
return typeof value === 'string' && VISIBILITIES.includes(value);
|
|
@@ -21,6 +22,7 @@ function toResume(row) {
|
|
|
21
22
|
markdown: row.markdown,
|
|
22
23
|
parsed: row.parsed,
|
|
23
24
|
visibility: isVisibility(row.visibility) ? row.visibility : 'private',
|
|
25
|
+
publicSlug: row.public_slug,
|
|
24
26
|
sourceName: row.source_name,
|
|
25
27
|
createdAt: row.created_at,
|
|
26
28
|
updatedAt: row.updated_at,
|
|
@@ -29,8 +31,8 @@ function toResume(row) {
|
|
|
29
31
|
// The source bytes are never in the default projection: they are megabytes of
|
|
30
32
|
// PDF that no page needs, and selecting them by habit is how a list endpoint
|
|
31
33
|
// starts moving 40MB.
|
|
32
|
-
const SELECT = `select id, user_id, slug, title, markdown, parsed, visibility,
|
|
33
|
-
created_at, updated_at from resumes`;
|
|
34
|
+
const SELECT = `select id, user_id, slug, title, markdown, parsed, visibility, public_slug,
|
|
35
|
+
source_name, created_at, updated_at from resumes`;
|
|
34
36
|
export async function listResumes(pool, userId) {
|
|
35
37
|
const result = await pool.query(`${SELECT} where user_id = $1 order by updated_at desc`, [userId]);
|
|
36
38
|
return result.rows.map(toResume);
|
|
@@ -49,6 +51,79 @@ export async function getResumeById(pool, id) {
|
|
|
49
51
|
return row === undefined ? null : toResume(row);
|
|
50
52
|
}
|
|
51
53
|
/** For a shared link: only resumes the owner has opened up. */
|
|
54
|
+
/** Slugs are capped at this many characters, cut back to a whole word. */
|
|
55
|
+
const SLUG_MAX = 60;
|
|
56
|
+
function publicSlugBase(name) {
|
|
57
|
+
const full = slugify(name);
|
|
58
|
+
if (full === '')
|
|
59
|
+
return 'candidate';
|
|
60
|
+
if (full.length <= SLUG_MAX)
|
|
61
|
+
return full;
|
|
62
|
+
const cut = full.slice(0, SLUG_MAX);
|
|
63
|
+
const lastDash = cut.lastIndexOf('-');
|
|
64
|
+
const trimmed = lastDash > 20 ? cut.slice(0, lastDash) : cut;
|
|
65
|
+
return trimmed.replace(/-+$/, '') || 'candidate';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Saving a shared resume is what gives it its address.
|
|
69
|
+
*
|
|
70
|
+
* This lives here rather than in a route because it is a rule about the model:
|
|
71
|
+
* a resume that says it is shared has somewhere to be. It was in the web
|
|
72
|
+
* handler only, so publishing through the API or the CLI minted nothing and
|
|
73
|
+
* the resume stayed invisible with no sign of why.
|
|
74
|
+
*/
|
|
75
|
+
async function withPublicSlug(pool, resume) {
|
|
76
|
+
const publicSlug = await ensurePublicSlug(pool, resume);
|
|
77
|
+
return publicSlug === resume.publicSlug ? resume : { ...resume, publicSlug };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Give a shared resume a board-wide address, once.
|
|
81
|
+
*
|
|
82
|
+
* Named after the person, because the point of a candidate page is that it
|
|
83
|
+
* carries their name. Falls back to the resume's own title, and then to a
|
|
84
|
+
* random suffix, so a resume with no name in it is still addressable.
|
|
85
|
+
*
|
|
86
|
+
* The slug is minted on first share and then kept even if the resume is made
|
|
87
|
+
* private again and shared later: a URL that someone has already sent to an
|
|
88
|
+
* employer must not come back pointing at a different person.
|
|
89
|
+
*/
|
|
90
|
+
export async function ensurePublicSlug(pool, resume) {
|
|
91
|
+
if (resume.visibility === 'private')
|
|
92
|
+
return resume.publicSlug;
|
|
93
|
+
if (resume.publicSlug !== null)
|
|
94
|
+
return resume.publicSlug;
|
|
95
|
+
// Bounded, and cut at a word boundary. A slug is a URL, and a URL built out
|
|
96
|
+
// of somebody's document has to survive that document being malformed: an
|
|
97
|
+
// unbounded one produced a three thousand character address the first time
|
|
98
|
+
// this ran against a resume whose line breaks had been flattened.
|
|
99
|
+
const base = publicSlugBase(nameOf(resume));
|
|
100
|
+
for (let attempt = 0; attempt < 25; attempt += 1) {
|
|
101
|
+
const candidate = attempt === 0 ? base : `${base}-${attempt + 1}`;
|
|
102
|
+
const claimed = await pool.query(`update resumes set public_slug = $2 where id = $1 and public_slug is null
|
|
103
|
+
and not exists (select 1 from resumes where public_slug = $2)
|
|
104
|
+
returning public_slug`, [resume.id, candidate]);
|
|
105
|
+
if (claimed.rows.length > 0)
|
|
106
|
+
return candidate;
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/** The directory: resumes their owner chose to list. */
|
|
111
|
+
export async function listPublicResumes(pool, limit = 100) {
|
|
112
|
+
const result = await pool.query(`${SELECT} where visibility = 'public' and public_slug is not null
|
|
113
|
+
order by updated_at desc limit $1`, [Math.min(200, Math.max(1, limit))]);
|
|
114
|
+
return result.rows.map(toResume);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* One candidate page.
|
|
118
|
+
*
|
|
119
|
+
* Serves `link` as well as `public`, which is the difference between the two:
|
|
120
|
+
* a link resume is reachable by anyone holding the URL and is not listed.
|
|
121
|
+
*/
|
|
122
|
+
export async function getPublicResume(pool, publicSlug) {
|
|
123
|
+
const result = await pool.query(`${SELECT} where public_slug = $1 and visibility in ('link', 'public')`, [publicSlug]);
|
|
124
|
+
const row = result.rows[0];
|
|
125
|
+
return row === undefined ? null : toResume(row);
|
|
126
|
+
}
|
|
52
127
|
export async function getSharedResume(pool, id) {
|
|
53
128
|
const result = await pool.query(`${SELECT} where id = $1 and visibility in ('link', 'public')`, [id]);
|
|
54
129
|
const row = result.rows[0];
|
|
@@ -68,7 +143,8 @@ async function uniqueSlug(pool, userId, title) {
|
|
|
68
143
|
return `${base}-${Date.now().toString(36)}`;
|
|
69
144
|
}
|
|
70
145
|
export async function createResume(pool, userId, input) {
|
|
71
|
-
|
|
146
|
+
// OpenResume Markdown: the line breaks are the document.
|
|
147
|
+
const markdown = clean(input.markdown, 200_000, { multiline: true });
|
|
72
148
|
const parsed = parseResume(markdown);
|
|
73
149
|
// The document's own h1 is a better title than "Resume", and it is what the
|
|
74
150
|
// candidate would have typed anyway.
|
|
@@ -77,7 +153,7 @@ export async function createResume(pool, userId, input) {
|
|
|
77
153
|
const result = await pool.query(`insert into resumes (user_id, slug, title, markdown, parsed, visibility,
|
|
78
154
|
source_name, source_mime, source_bytes)
|
|
79
155
|
values ($1, $2, $3, $4, $5::jsonb, $6, $7, $8, $9)
|
|
80
|
-
returning id, user_id, slug, title, markdown, parsed, visibility, source_name,
|
|
156
|
+
returning id, user_id, slug, title, markdown, parsed, visibility, public_slug, source_name,
|
|
81
157
|
created_at, updated_at`, [
|
|
82
158
|
userId,
|
|
83
159
|
slug,
|
|
@@ -92,10 +168,11 @@ export async function createResume(pool, userId, input) {
|
|
|
92
168
|
const row = result.rows[0];
|
|
93
169
|
if (row === undefined)
|
|
94
170
|
throw new Error('resume insert returned no row');
|
|
95
|
-
return toResume(row);
|
|
171
|
+
return withPublicSlug(pool, toResume(row));
|
|
96
172
|
}
|
|
97
173
|
export async function updateResume(pool, userId, slug, input) {
|
|
98
|
-
|
|
174
|
+
// OpenResume Markdown: the line breaks are the document.
|
|
175
|
+
const markdown = clean(input.markdown, 200_000, { multiline: true });
|
|
99
176
|
const parsed = parseResume(markdown);
|
|
100
177
|
const result = await pool.query(`update resumes
|
|
101
178
|
set markdown = $3,
|
|
@@ -103,10 +180,10 @@ export async function updateResume(pool, userId, slug, input) {
|
|
|
103
180
|
title = coalesce(nullif($5, ''), title),
|
|
104
181
|
visibility = coalesce($6, visibility)
|
|
105
182
|
where user_id = $1 and slug = $2
|
|
106
|
-
returning id, user_id, slug, title, markdown, parsed, visibility,
|
|
107
|
-
created_at, updated_at`, [userId, slug, markdown, JSON.stringify(parsed), clean(input.title, 120), input.visibility ?? null]);
|
|
183
|
+
returning id, user_id, slug, title, markdown, parsed, visibility, public_slug,
|
|
184
|
+
source_name, created_at, updated_at`, [userId, slug, markdown, JSON.stringify(parsed), clean(input.title, 120), input.visibility ?? null]);
|
|
108
185
|
const row = result.rows[0];
|
|
109
|
-
return row === undefined ? null : toResume(row);
|
|
186
|
+
return row === undefined ? null : withPublicSlug(pool, toResume(row));
|
|
110
187
|
}
|
|
111
188
|
export async function deleteResume(pool, userId, slug) {
|
|
112
189
|
const result = await pool.query(`delete from resumes where user_id = $1 and slug = $2`, [
|
package/dist/core/resumes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resumes.js","sourceRoot":"","sources":["../../src/core/resumes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAmB,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"resumes.js","sourceRoot":"","sources":["../../src/core/resumes.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* response says about where it came from.
|
|
9
9
|
*/
|
|
10
10
|
import { type InstanceDescriptor } from '../schema/instance.ts';
|
|
11
|
-
export declare const USER_AGENT = "agenticjobs/0.
|
|
11
|
+
export declare const USER_AGENT = "agenticjobs/0.4.0 (+https://agenticjobs.work)";
|
|
12
12
|
export declare class FetchProblem extends Error {
|
|
13
13
|
}
|
|
14
14
|
export interface FetchOptions {
|
|
@@ -26,6 +26,16 @@ export interface FetchOptions {
|
|
|
26
26
|
* HTTP client at an address the origin check already rejected.
|
|
27
27
|
*/
|
|
28
28
|
export declare function fetchJson(url: string, options?: FetchOptions): Promise<unknown>;
|
|
29
|
+
/**
|
|
30
|
+
* The same guarded fetch, for a document rather than an API.
|
|
31
|
+
*
|
|
32
|
+
* Importing a job means fetching a URL a stranger chose, so every guard here
|
|
33
|
+
* matters: `publishable` refuses localhost and the private ranges, redirects
|
|
34
|
+
* may not leave the origin they started on, the body is measured as it
|
|
35
|
+
* arrives, and there is a timeout. None of that is worth reimplementing next
|
|
36
|
+
* to the copy that already had it.
|
|
37
|
+
*/
|
|
38
|
+
export declare function fetchText(url: string, options?: FetchOptions): Promise<string>;
|
|
29
39
|
/**
|
|
30
40
|
* Read an instance's descriptor from the instance itself.
|
|
31
41
|
*
|
package/dist/directory/fetch.js
CHANGED
|
@@ -24,6 +24,27 @@ export class FetchProblem extends Error {
|
|
|
24
24
|
* HTTP client at an address the origin check already rejected.
|
|
25
25
|
*/
|
|
26
26
|
export async function fetchJson(url, options = {}) {
|
|
27
|
+
const text = await fetchRaw(url, 'application/json', options);
|
|
28
|
+
try {
|
|
29
|
+
return JSON.parse(text);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
throw new FetchProblem(`${url} did not answer with JSON`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The same guarded fetch, for a document rather than an API.
|
|
37
|
+
*
|
|
38
|
+
* Importing a job means fetching a URL a stranger chose, so every guard here
|
|
39
|
+
* matters: `publishable` refuses localhost and the private ranges, redirects
|
|
40
|
+
* may not leave the origin they started on, the body is measured as it
|
|
41
|
+
* arrives, and there is a timeout. None of that is worth reimplementing next
|
|
42
|
+
* to the copy that already had it.
|
|
43
|
+
*/
|
|
44
|
+
export async function fetchText(url, options = {}) {
|
|
45
|
+
return fetchRaw(url, 'text/html, application/xhtml+xml;q=0.9, */*;q=0.5', options);
|
|
46
|
+
}
|
|
47
|
+
async function fetchRaw(url, accept, options) {
|
|
27
48
|
const origin = publishable(url);
|
|
28
49
|
if (origin === null)
|
|
29
50
|
throw new FetchProblem(`${url} is not an address we will fetch`);
|
|
@@ -39,7 +60,7 @@ export async function fetchJson(url, options = {}) {
|
|
|
39
60
|
redirect: 'manual',
|
|
40
61
|
signal: controller.signal,
|
|
41
62
|
headers: {
|
|
42
|
-
accept
|
|
63
|
+
accept,
|
|
43
64
|
'user-agent': USER_AGENT,
|
|
44
65
|
...(options.body === undefined ? {} : { 'content-type': 'application/json' }),
|
|
45
66
|
},
|
|
@@ -65,13 +86,7 @@ export async function fetchJson(url, options = {}) {
|
|
|
65
86
|
if (Number.isFinite(declared) && declared > cap) {
|
|
66
87
|
throw new FetchProblem(`${target} declared ${declared} bytes`);
|
|
67
88
|
}
|
|
68
|
-
|
|
69
|
-
try {
|
|
70
|
-
return JSON.parse(text);
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
throw new FetchProblem(`${target} did not answer with JSON`);
|
|
74
|
-
}
|
|
89
|
+
return readCapped(response, cap);
|
|
75
90
|
}
|
|
76
91
|
throw new FetchProblem(`${url} redirected too many times`);
|
|
77
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/directory/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAA2B,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,aAAa,IAAI,OAAO,8BAA8B,CAAC;AAEpF,gFAAgF;AAChF,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAClC,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,MAAM,OAAO,YAAa,SAAQ,KAAK;CAAG;AAU1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,UAAwB,EAAE;IACrE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,IAAI;QAAE,MAAM,IAAI,YAAY,CAAC,GAAG,GAAG,kCAAkC,CAAC,CAAC;IAEtF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC7C,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,GAAG,CAAC;QACjB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;gBACnC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;gBAC/B,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE;oBACP,MAAM
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/directory/fetch.ts"],"names":[],"mappings":"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"}
|
package/dist/markup/resume.js
CHANGED
|
@@ -26,7 +26,13 @@
|
|
|
26
26
|
const KINDS = [
|
|
27
27
|
[/^(work\s+)?experience$|^employment$|^work\s+history$/i, 'experience'],
|
|
28
28
|
[/^education$|^academic/i, 'education'],
|
|
29
|
-
|
|
29
|
+
// "Core Skills" and "Key Skills" are as common as the bare word, and a
|
|
30
|
+
// resume that used one of them had an empty skills list on its candidate
|
|
31
|
+
// card while the section sat right there in the document.
|
|
32
|
+
[
|
|
33
|
+
/^(core\s+|key\s+|technical\s+|primary\s+)?skills?$|^areas?\s+of\s+expertise$|^skills?\s+&?\s*(tools|technologies)$/i,
|
|
34
|
+
'skills',
|
|
35
|
+
],
|
|
30
36
|
[/^projects?$|^open\s+source$/i, 'projects'],
|
|
31
37
|
[/^summary$|^about$|^profile$|^objective$/i, 'summary'],
|
|
32
38
|
[/^links?$|^elsewhere$|^profiles?$/i, 'links'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/markup/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA8CH,+EAA+E;AAC/E,MAAM,KAAK,GAAuB;IAChC,CAAC,uDAAuD,EAAE,YAAY,CAAC;IACvE,CAAC,wBAAwB,EAAE,WAAW,CAAC;IACvC,
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/markup/resume.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/job.d.ts
CHANGED
|
@@ -77,21 +77,24 @@ export interface Job {
|
|
|
77
77
|
/**
|
|
78
78
|
* How to apply.
|
|
79
79
|
*
|
|
80
|
-
*
|
|
80
|
+
* There is one method, and it is this board. An application is a POST to this
|
|
81
81
|
* instance against a published schema, which is the only variant an agent can
|
|
82
|
-
* complete without a browser.
|
|
83
|
-
*
|
|
84
|
-
*
|
|
82
|
+
* complete without a browser.
|
|
83
|
+
*
|
|
84
|
+
* `url` and `email` used to exist here because employers ask for them. They
|
|
85
|
+
* are gone. A listing that sends an applicant to a careers portal is a link to
|
|
86
|
+
* a job rather than a job, and a board full of those is the thing this one was
|
|
87
|
+
* built not to be: an agent cannot complete an offsite form, so every such
|
|
88
|
+
* listing quietly excludes the readers this board exists for. A URL is still
|
|
89
|
+
* useful, but as somewhere to *import* a job from, never as somewhere to send
|
|
90
|
+
* an applicant to.
|
|
91
|
+
*
|
|
92
|
+
* The shape stays a tagged union with one member so the published JSON does
|
|
93
|
+
* not change and a second method, if one is ever justified, is additive.
|
|
85
94
|
*/
|
|
86
95
|
export type ApplyMethod = {
|
|
87
96
|
via: 'board';
|
|
88
97
|
schema: ApplySchema;
|
|
89
|
-
} | {
|
|
90
|
-
via: 'url';
|
|
91
|
-
url: string;
|
|
92
|
-
} | {
|
|
93
|
-
via: 'email';
|
|
94
|
-
email: string;
|
|
95
98
|
};
|
|
96
99
|
/**
|
|
97
100
|
* The shape of an application, published with the job.
|
package/dist/schema/job.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../src/schema/job.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,WAAW;IACX,UAAU;IACV,YAAY;IACZ,WAAW;CACH,CAAC;AAGX,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAGlE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAGxG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAGhF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAGtE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../src/schema/job.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW;IACX,WAAW;IACX,UAAU;IACV,YAAY;IACZ,WAAW;CACH,CAAC;AAGX,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAGlE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAGxG,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAGhF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAGtE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAU,CAAC;AA4F7E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;QAClF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;QAChF,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE;QACrG;YACE,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,4BAA4B;SACnC;KACF;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AA0BhG,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,UAAgC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,WAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzF,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5F,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5F,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC"}
|
package/dist/schema/query.js
CHANGED
|
@@ -60,8 +60,10 @@ export function parseQuery(params) {
|
|
|
60
60
|
workplace: isWorkplace(workplace) ? workplace : null,
|
|
61
61
|
seniority: isSeniority(seniority) ? seniority : null,
|
|
62
62
|
agentPolicy: isAgentPolicy(agentPolicy) ? agentPolicy : null,
|
|
63
|
-
tags
|
|
64
|
-
|
|
63
|
+
// `tag=a&tag=b` and `tags=a,b` mean the same thing. The second is what a
|
|
64
|
+
// badge links to and what a person types; the first is what the CLI's
|
|
65
|
+
// repeatable --tag produces.
|
|
66
|
+
tags: [...params.getAll('tag'), ...params.getAll('tags')]
|
|
65
67
|
.flatMap((value) => value.split(','))
|
|
66
68
|
.map((value) => value.trim().toLowerCase())
|
|
67
69
|
.filter((value) => value !== '')
|
|
@@ -86,8 +88,10 @@ export function queryToParams(query) {
|
|
|
86
88
|
params.set('seniority', query.seniority);
|
|
87
89
|
if (query.agentPolicy)
|
|
88
90
|
params.set('agentPolicy', query.agentPolicy);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
+
// Written back in the comma form, so a link a person can read is what ends
|
|
92
|
+
// up in the address bar and in anything that copies it.
|
|
93
|
+
if (query.tags.length > 0)
|
|
94
|
+
params.set('tags', query.tags.join(','));
|
|
91
95
|
if (query.salaryMin !== null)
|
|
92
96
|
params.set('salaryMin', String(query.salaryMin));
|
|
93
97
|
if (query.org)
|
package/dist/schema/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/schema/query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,WAAW,GAKZ,MAAM,UAAU,CAAC;AAElB,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAU,CAAC;AAmB/D,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAE7B,MAAM,CAAC,MAAM,WAAW,GAAa;IACnC,CAAC,EAAE,IAAI;IACP,cAAc,EAAE,IAAI;IACpB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,IAAI;IACf,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,CAAC;CACV,CAAC;AAEF,SAAS,GAAG,CAAC,MAAuB,EAAE,GAAW;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC;AAED,SAAS,OAAO,CAAC,KAAoB,EAAE,QAAgB,EAAE,GAAW,EAAE,GAAW;IAC/E,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE3C,OAAO;QACL,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;QACnB,cAAc,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;QACxE,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;QACpD,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;QACpD,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;QAC5D,IAAI,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/schema/query.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/text.d.ts
CHANGED
|
@@ -10,8 +10,19 @@
|
|
|
10
10
|
* printed into a terminal by the TUI and the CLI as well as escaped into HTML
|
|
11
11
|
* by the views, and the escape that starts an ANSI sequence is exactly the
|
|
12
12
|
* kind of character a source-level class is easy to get subtly wrong.
|
|
13
|
+
*
|
|
14
|
+
* `multiline` keeps newlines. Without it a job description posted from a
|
|
15
|
+
* Markdown file arrived as one paragraph, because a newline is a control
|
|
16
|
+
* character and this flattened it along with the rest: every heading, list and
|
|
17
|
+
* paragraph break in a description was silently destroyed on the way in, on a
|
|
18
|
+
* board that renders descriptions as Markdown. A newline cannot begin an
|
|
19
|
+
* escape sequence, so keeping it costs none of the safety this scan exists
|
|
20
|
+
* for. Everything else below 0x20, the ESC that starts an ANSI sequence
|
|
21
|
+
* included, still becomes a space.
|
|
13
22
|
*/
|
|
14
|
-
export declare function clean(value: unknown, max: number
|
|
23
|
+
export declare function clean(value: unknown, max: number, options?: {
|
|
24
|
+
multiline?: boolean;
|
|
25
|
+
}): string;
|
|
15
26
|
export declare function slugify(value: string): string;
|
|
16
27
|
/** A short, unambiguous suffix for slug collisions. No l/1/0/O. */
|
|
17
28
|
export declare function suffix(length?: number): string;
|
package/dist/schema/text.js
CHANGED
|
@@ -10,14 +10,25 @@
|
|
|
10
10
|
* printed into a terminal by the TUI and the CLI as well as escaped into HTML
|
|
11
11
|
* by the views, and the escape that starts an ANSI sequence is exactly the
|
|
12
12
|
* kind of character a source-level class is easy to get subtly wrong.
|
|
13
|
+
*
|
|
14
|
+
* `multiline` keeps newlines. Without it a job description posted from a
|
|
15
|
+
* Markdown file arrived as one paragraph, because a newline is a control
|
|
16
|
+
* character and this flattened it along with the rest: every heading, list and
|
|
17
|
+
* paragraph break in a description was silently destroyed on the way in, on a
|
|
18
|
+
* board that renders descriptions as Markdown. A newline cannot begin an
|
|
19
|
+
* escape sequence, so keeping it costs none of the safety this scan exists
|
|
20
|
+
* for. Everything else below 0x20, the ESC that starts an ANSI sequence
|
|
21
|
+
* included, still becomes a space.
|
|
13
22
|
*/
|
|
14
|
-
export function clean(value, max) {
|
|
23
|
+
export function clean(value, max, options = {}) {
|
|
15
24
|
if (typeof value !== 'string')
|
|
16
25
|
return '';
|
|
26
|
+
const source = options.multiline === true ? value.replace(/\r\n?/g, '\n') : value;
|
|
17
27
|
let out = '';
|
|
18
|
-
for (const char of
|
|
28
|
+
for (const char of source) {
|
|
19
29
|
const code = char.codePointAt(0) ?? 0;
|
|
20
|
-
|
|
30
|
+
const keep = options.multiline === true && code === 0x0a;
|
|
31
|
+
out += !keep && (code < 0x20 || code === 0x7f) ? ' ' : char;
|
|
21
32
|
}
|
|
22
33
|
return out.trim().slice(0, max);
|
|
23
34
|
}
|
package/dist/schema/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/schema/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/schema/text.ts"],"names":[],"mappings":"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"}
|