placementt-core 1.300.1018 → 1.300.1020

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.
@@ -3,3 +3,4 @@ export * from "./registry";
3
3
  export * from "./destinationsConfig";
4
4
  export * from "./placement";
5
5
  export * from "./events";
6
+ export * from "./jobRoles";
@@ -19,4 +19,5 @@ __exportStar(require("./registry"), exports);
19
19
  __exportStar(require("./destinationsConfig"), exports);
20
20
  __exportStar(require("./placement"), exports);
21
21
  __exportStar(require("./events"), exports);
22
+ __exportStar(require("./jobRoles"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/callables/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,6CAA2B;AAC3B,uDAAqC;AACrC,8CAA4B;AAC5B,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/callables/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,6CAA2B;AAC3B,uDAAqC;AACrC,8CAA4B;AAC5B,2CAAyB;AACzB,6CAA2B"}
@@ -0,0 +1,426 @@
1
+ import { z } from "zod";
2
+ /** The student-facing profile of one job role. Deliberately a subset of
3
+ * LmiOccupation: no SOC codes, region codes or source/vintage fields, since none of
4
+ * that means anything to a fifteen-year-old. */
5
+ declare const jobRoleProfile: z.ZodObject<{
6
+ soc: z.ZodString;
7
+ title: z.ZodString;
8
+ description: z.ZodOptional<z.ZodString>;
9
+ entryRoutes: z.ZodOptional<z.ZodString>;
10
+ salary: z.ZodOptional<z.ZodObject<{
11
+ year: z.ZodOptional<z.ZodNumber>;
12
+ lower: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
13
+ typical: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
14
+ upper: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
15
+ byRegion: z.ZodOptional<z.ZodArray<z.ZodObject<{
16
+ regionName: z.ZodString;
17
+ median: z.ZodNullable<z.ZodNumber>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ regionName: string;
20
+ median: number | null;
21
+ }, {
22
+ regionName: string;
23
+ median: number | null;
24
+ }>, "many">>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ upper?: number | null | undefined;
27
+ lower?: number | null | undefined;
28
+ year?: number | undefined;
29
+ typical?: number | null | undefined;
30
+ byRegion?: {
31
+ regionName: string;
32
+ median: number | null;
33
+ }[] | undefined;
34
+ }, {
35
+ upper?: number | null | undefined;
36
+ lower?: number | null | undefined;
37
+ year?: number | undefined;
38
+ typical?: number | null | undefined;
39
+ byRegion?: {
40
+ regionName: string;
41
+ median: number | null;
42
+ }[] | undefined;
43
+ }>>;
44
+ employment: z.ZodOptional<z.ZodObject<{
45
+ year: z.ZodOptional<z.ZodNumber>;
46
+ byRegion: z.ZodOptional<z.ZodArray<z.ZodObject<{
47
+ regionName: z.ZodString;
48
+ jobs: z.ZodNullable<z.ZodNumber>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ jobs: number | null;
51
+ regionName: string;
52
+ }, {
53
+ jobs: number | null;
54
+ regionName: string;
55
+ }>, "many">>;
56
+ }, "strip", z.ZodTypeAny, {
57
+ year?: number | undefined;
58
+ byRegion?: {
59
+ jobs: number | null;
60
+ regionName: string;
61
+ }[] | undefined;
62
+ }, {
63
+ year?: number | undefined;
64
+ byRegion?: {
65
+ jobs: number | null;
66
+ regionName: string;
67
+ }[] | undefined;
68
+ }>>;
69
+ skills: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
70
+ apprenticeshipStandards: z.ZodOptional<z.ZodArray<z.ZodObject<{
71
+ name: z.ZodString;
72
+ level: z.ZodNumber;
73
+ }, "strip", z.ZodTypeAny, {
74
+ name: string;
75
+ level: number;
76
+ }, {
77
+ name: string;
78
+ level: number;
79
+ }>, "many">>;
80
+ }, "strip", z.ZodTypeAny, {
81
+ title: string;
82
+ soc: string;
83
+ description?: string | undefined;
84
+ skills?: string[] | undefined;
85
+ employment?: {
86
+ year?: number | undefined;
87
+ byRegion?: {
88
+ jobs: number | null;
89
+ regionName: string;
90
+ }[] | undefined;
91
+ } | undefined;
92
+ entryRoutes?: string | undefined;
93
+ salary?: {
94
+ upper?: number | null | undefined;
95
+ lower?: number | null | undefined;
96
+ year?: number | undefined;
97
+ typical?: number | null | undefined;
98
+ byRegion?: {
99
+ regionName: string;
100
+ median: number | null;
101
+ }[] | undefined;
102
+ } | undefined;
103
+ apprenticeshipStandards?: {
104
+ name: string;
105
+ level: number;
106
+ }[] | undefined;
107
+ }, {
108
+ title: string;
109
+ soc: string;
110
+ description?: string | undefined;
111
+ skills?: string[] | undefined;
112
+ employment?: {
113
+ year?: number | undefined;
114
+ byRegion?: {
115
+ jobs: number | null;
116
+ regionName: string;
117
+ }[] | undefined;
118
+ } | undefined;
119
+ entryRoutes?: string | undefined;
120
+ salary?: {
121
+ upper?: number | null | undefined;
122
+ lower?: number | null | undefined;
123
+ year?: number | undefined;
124
+ typical?: number | null | undefined;
125
+ byRegion?: {
126
+ regionName: string;
127
+ median: number | null;
128
+ }[] | undefined;
129
+ } | undefined;
130
+ apprenticeshipStandards?: {
131
+ name: string;
132
+ level: number;
133
+ }[] | undefined;
134
+ }>;
135
+ /** The student-facing profile of one job role, as `jobRoles-getJobRoles` returns it.
136
+ * Exported so the cards that render it don't restate the shape. */
137
+ export type JobRoleProfile = z.infer<typeof jobRoleProfile>;
138
+ export declare const jobRolesCallables: {
139
+ "jobRoles-searchJobRoles": {
140
+ request: z.ZodObject<{
141
+ query: z.ZodString;
142
+ /** Rows to return. The student search asks for 5; capped server-side. */
143
+ limit: z.ZodOptional<z.ZodNumber>;
144
+ }, "strip", z.ZodTypeAny, {
145
+ query: string;
146
+ limit?: number | undefined;
147
+ }, {
148
+ query: string;
149
+ limit?: number | undefined;
150
+ }>;
151
+ response: z.ZodObject<{
152
+ results: z.ZodArray<z.ZodObject<{
153
+ soc: z.ZodString;
154
+ title: z.ZodString;
155
+ }, "strip", z.ZodTypeAny, {
156
+ title: string;
157
+ soc: string;
158
+ }, {
159
+ title: string;
160
+ soc: string;
161
+ }>, "many">;
162
+ }, "strip", z.ZodTypeAny, {
163
+ results: {
164
+ title: string;
165
+ soc: string;
166
+ }[];
167
+ }, {
168
+ results: {
169
+ title: string;
170
+ soc: string;
171
+ }[];
172
+ }>;
173
+ };
174
+ "jobRoles-getJobRoles": {
175
+ request: z.ZodObject<{
176
+ socs: z.ZodArray<z.ZodString, "many">;
177
+ }, "strip", z.ZodTypeAny, {
178
+ socs: string[];
179
+ }, {
180
+ socs: string[];
181
+ }>;
182
+ response: z.ZodObject<{
183
+ /** Keyed by SOC. A code with no occupation doc is simply absent. */
184
+ roles: z.ZodRecord<z.ZodString, z.ZodObject<{
185
+ soc: z.ZodString;
186
+ title: z.ZodString;
187
+ description: z.ZodOptional<z.ZodString>;
188
+ entryRoutes: z.ZodOptional<z.ZodString>;
189
+ salary: z.ZodOptional<z.ZodObject<{
190
+ year: z.ZodOptional<z.ZodNumber>;
191
+ lower: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
192
+ typical: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
193
+ upper: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
194
+ byRegion: z.ZodOptional<z.ZodArray<z.ZodObject<{
195
+ regionName: z.ZodString;
196
+ median: z.ZodNullable<z.ZodNumber>;
197
+ }, "strip", z.ZodTypeAny, {
198
+ regionName: string;
199
+ median: number | null;
200
+ }, {
201
+ regionName: string;
202
+ median: number | null;
203
+ }>, "many">>;
204
+ }, "strip", z.ZodTypeAny, {
205
+ upper?: number | null | undefined;
206
+ lower?: number | null | undefined;
207
+ year?: number | undefined;
208
+ typical?: number | null | undefined;
209
+ byRegion?: {
210
+ regionName: string;
211
+ median: number | null;
212
+ }[] | undefined;
213
+ }, {
214
+ upper?: number | null | undefined;
215
+ lower?: number | null | undefined;
216
+ year?: number | undefined;
217
+ typical?: number | null | undefined;
218
+ byRegion?: {
219
+ regionName: string;
220
+ median: number | null;
221
+ }[] | undefined;
222
+ }>>;
223
+ employment: z.ZodOptional<z.ZodObject<{
224
+ year: z.ZodOptional<z.ZodNumber>;
225
+ byRegion: z.ZodOptional<z.ZodArray<z.ZodObject<{
226
+ regionName: z.ZodString;
227
+ jobs: z.ZodNullable<z.ZodNumber>;
228
+ }, "strip", z.ZodTypeAny, {
229
+ jobs: number | null;
230
+ regionName: string;
231
+ }, {
232
+ jobs: number | null;
233
+ regionName: string;
234
+ }>, "many">>;
235
+ }, "strip", z.ZodTypeAny, {
236
+ year?: number | undefined;
237
+ byRegion?: {
238
+ jobs: number | null;
239
+ regionName: string;
240
+ }[] | undefined;
241
+ }, {
242
+ year?: number | undefined;
243
+ byRegion?: {
244
+ jobs: number | null;
245
+ regionName: string;
246
+ }[] | undefined;
247
+ }>>;
248
+ skills: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
249
+ apprenticeshipStandards: z.ZodOptional<z.ZodArray<z.ZodObject<{
250
+ name: z.ZodString;
251
+ level: z.ZodNumber;
252
+ }, "strip", z.ZodTypeAny, {
253
+ name: string;
254
+ level: number;
255
+ }, {
256
+ name: string;
257
+ level: number;
258
+ }>, "many">>;
259
+ }, "strip", z.ZodTypeAny, {
260
+ title: string;
261
+ soc: string;
262
+ description?: string | undefined;
263
+ skills?: string[] | undefined;
264
+ employment?: {
265
+ year?: number | undefined;
266
+ byRegion?: {
267
+ jobs: number | null;
268
+ regionName: string;
269
+ }[] | undefined;
270
+ } | undefined;
271
+ entryRoutes?: string | undefined;
272
+ salary?: {
273
+ upper?: number | null | undefined;
274
+ lower?: number | null | undefined;
275
+ year?: number | undefined;
276
+ typical?: number | null | undefined;
277
+ byRegion?: {
278
+ regionName: string;
279
+ median: number | null;
280
+ }[] | undefined;
281
+ } | undefined;
282
+ apprenticeshipStandards?: {
283
+ name: string;
284
+ level: number;
285
+ }[] | undefined;
286
+ }, {
287
+ title: string;
288
+ soc: string;
289
+ description?: string | undefined;
290
+ skills?: string[] | undefined;
291
+ employment?: {
292
+ year?: number | undefined;
293
+ byRegion?: {
294
+ jobs: number | null;
295
+ regionName: string;
296
+ }[] | undefined;
297
+ } | undefined;
298
+ entryRoutes?: string | undefined;
299
+ salary?: {
300
+ upper?: number | null | undefined;
301
+ lower?: number | null | undefined;
302
+ year?: number | undefined;
303
+ typical?: number | null | undefined;
304
+ byRegion?: {
305
+ regionName: string;
306
+ median: number | null;
307
+ }[] | undefined;
308
+ } | undefined;
309
+ apprenticeshipStandards?: {
310
+ name: string;
311
+ level: number;
312
+ }[] | undefined;
313
+ }>>;
314
+ }, "strip", z.ZodTypeAny, {
315
+ roles: Record<string, {
316
+ title: string;
317
+ soc: string;
318
+ description?: string | undefined;
319
+ skills?: string[] | undefined;
320
+ employment?: {
321
+ year?: number | undefined;
322
+ byRegion?: {
323
+ jobs: number | null;
324
+ regionName: string;
325
+ }[] | undefined;
326
+ } | undefined;
327
+ entryRoutes?: string | undefined;
328
+ salary?: {
329
+ upper?: number | null | undefined;
330
+ lower?: number | null | undefined;
331
+ year?: number | undefined;
332
+ typical?: number | null | undefined;
333
+ byRegion?: {
334
+ regionName: string;
335
+ median: number | null;
336
+ }[] | undefined;
337
+ } | undefined;
338
+ apprenticeshipStandards?: {
339
+ name: string;
340
+ level: number;
341
+ }[] | undefined;
342
+ }>;
343
+ }, {
344
+ roles: Record<string, {
345
+ title: string;
346
+ soc: string;
347
+ description?: string | undefined;
348
+ skills?: string[] | undefined;
349
+ employment?: {
350
+ year?: number | undefined;
351
+ byRegion?: {
352
+ jobs: number | null;
353
+ regionName: string;
354
+ }[] | undefined;
355
+ } | undefined;
356
+ entryRoutes?: string | undefined;
357
+ salary?: {
358
+ upper?: number | null | undefined;
359
+ lower?: number | null | undefined;
360
+ year?: number | undefined;
361
+ typical?: number | null | undefined;
362
+ byRegion?: {
363
+ regionName: string;
364
+ median: number | null;
365
+ }[] | undefined;
366
+ } | undefined;
367
+ apprenticeshipStandards?: {
368
+ name: string;
369
+ level: number;
370
+ }[] | undefined;
371
+ }>;
372
+ }>;
373
+ };
374
+ "jobRoles-updateJobPreferences": {
375
+ request: z.ZodObject<{
376
+ /** Roles to heart. Ignored if already present, so the added date sticks. */
377
+ add: z.ZodOptional<z.ZodArray<z.ZodObject<{
378
+ soc: z.ZodString;
379
+ title: z.ZodString;
380
+ }, "strip", z.ZodTypeAny, {
381
+ title: string;
382
+ soc: string;
383
+ }, {
384
+ title: string;
385
+ soc: string;
386
+ }>, "many">>;
387
+ /** SOC codes to un-heart. */
388
+ remove: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
389
+ }, "strip", z.ZodTypeAny, {
390
+ add?: {
391
+ title: string;
392
+ soc: string;
393
+ }[] | undefined;
394
+ remove?: string[] | undefined;
395
+ }, {
396
+ add?: {
397
+ title: string;
398
+ soc: string;
399
+ }[] | undefined;
400
+ remove?: string[] | undefined;
401
+ }>;
402
+ response: z.ZodObject<{
403
+ currentJobPreferences: z.ZodRecord<z.ZodString, z.ZodObject<{
404
+ title: z.ZodString;
405
+ added: z.ZodString;
406
+ }, "strip", z.ZodTypeAny, {
407
+ title: string;
408
+ added: string;
409
+ }, {
410
+ title: string;
411
+ added: string;
412
+ }>>;
413
+ }, "strip", z.ZodTypeAny, {
414
+ currentJobPreferences: Record<string, {
415
+ title: string;
416
+ added: string;
417
+ }>;
418
+ }, {
419
+ currentJobPreferences: Record<string, {
420
+ title: string;
421
+ added: string;
422
+ }>;
423
+ }>;
424
+ };
425
+ };
426
+ export {};
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jobRolesCallables = void 0;
4
+ const zod_1 = require("zod");
5
+ /**
6
+ * Contracts for the `jobRoles` backend module
7
+ * (`Placementt-Backend/functions/src/jobRoles.ts`).
8
+ *
9
+ * The student-facing read side of the LMI data. Searching and reading occupations
10
+ * goes through callables rather than straight Firestore reads because the LMI
11
+ * collections are admin-imported reference data with no per-student ownership to
12
+ * write a security rule against — a callable is the narrower door, and it lets the
13
+ * search stay one round trip instead of the three the admin console makes.
14
+ */
15
+ /** One row a student can heart. `title` is the alias they searched for, not
16
+ * necessarily the occupation's own name. */
17
+ const jobRoleResult = zod_1.z.object({
18
+ soc: zod_1.z.string(),
19
+ title: zod_1.z.string(),
20
+ });
21
+ /** The student-facing profile of one job role. Deliberately a subset of
22
+ * LmiOccupation: no SOC codes, region codes or source/vintage fields, since none of
23
+ * that means anything to a fifteen-year-old. */
24
+ const jobRoleProfile = zod_1.z.object({
25
+ soc: zod_1.z.string(),
26
+ title: zod_1.z.string(),
27
+ description: zod_1.z.string().optional(),
28
+ entryRoutes: zod_1.z.string().optional(),
29
+ salary: zod_1.z.object({
30
+ year: zod_1.z.number().optional(),
31
+ lower: zod_1.z.number().nullable().optional(),
32
+ typical: zod_1.z.number().nullable().optional(),
33
+ upper: zod_1.z.number().nullable().optional(),
34
+ byRegion: zod_1.z.array(zod_1.z.object({
35
+ regionName: zod_1.z.string(),
36
+ median: zod_1.z.number().nullable(),
37
+ })).optional(),
38
+ }).optional(),
39
+ employment: zod_1.z.object({
40
+ year: zod_1.z.number().optional(),
41
+ byRegion: zod_1.z.array(zod_1.z.object({
42
+ regionName: zod_1.z.string(),
43
+ jobs: zod_1.z.number().nullable(),
44
+ })).optional(),
45
+ }).optional(),
46
+ skills: zod_1.z.array(zod_1.z.string()).optional(),
47
+ apprenticeshipStandards: zod_1.z.array(zod_1.z.object({
48
+ name: zod_1.z.string(),
49
+ level: zod_1.z.number(),
50
+ })).optional(),
51
+ });
52
+ exports.jobRolesCallables = {
53
+ "jobRoles-searchJobRoles": {
54
+ request: zod_1.z.object({
55
+ query: zod_1.z.string(),
56
+ /** Rows to return. The student search asks for 5; capped server-side. */
57
+ limit: zod_1.z.number().optional(),
58
+ }),
59
+ response: zod_1.z.object({
60
+ results: zod_1.z.array(jobRoleResult),
61
+ }),
62
+ },
63
+ "jobRoles-getJobRoles": {
64
+ request: zod_1.z.object({
65
+ socs: zod_1.z.array(zod_1.z.string()),
66
+ }),
67
+ response: zod_1.z.object({
68
+ /** Keyed by SOC. A code with no occupation doc is simply absent. */
69
+ roles: zod_1.z.record(jobRoleProfile),
70
+ }),
71
+ },
72
+ "jobRoles-updateJobPreferences": {
73
+ request: zod_1.z.object({
74
+ /** Roles to heart. Ignored if already present, so the added date sticks. */
75
+ add: zod_1.z.array(jobRoleResult).optional(),
76
+ /** SOC codes to un-heart. */
77
+ remove: zod_1.z.array(zod_1.z.string()).optional(),
78
+ }),
79
+ response: zod_1.z.object({
80
+ currentJobPreferences: zod_1.z.record(zod_1.z.object({
81
+ title: zod_1.z.string(),
82
+ added: zod_1.z.string(),
83
+ })),
84
+ }),
85
+ },
86
+ };
87
+ //# sourceMappingURL=jobRoles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobRoles.js","sourceRoot":"","sources":["../../src/callables/jobRoles.ts"],"names":[],"mappings":"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"}