@o-zone/scorer-core 1.1.3 → 2.0.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/auth.js +6 -6
- package/dist/auth.js.map +1 -1
- package/dist/competition/request.d.ts +34 -34
- package/dist/competition/request.d.ts.map +1 -1
- package/dist/competition/request.js +6 -6
- package/dist/competition/request.js.map +1 -1
- package/dist/helpers/position.test.js +42 -42
- package/dist/helpers/position.test.js.map +1 -1
- package/dist/race/good-entries.d.ts +3 -3
- package/dist/race/good-entries.d.ts.map +1 -1
- package/dist/race/index.d.ts +1 -1
- package/dist/race/index.d.ts.map +1 -1
- package/dist/race/index.js +1 -1
- package/dist/race/index.js.map +1 -1
- package/dist/race/request.d.ts +237 -237
- package/dist/race/request.d.ts.map +1 -1
- package/dist/race/request.js +13 -13
- package/dist/race/request.js.map +1 -1
- package/dist/router.d.ts +16 -7
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +42 -19
- package/dist/router.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
package/dist/race/request.js
CHANGED
|
@@ -19,52 +19,52 @@ const RaceTimingSchema = z
|
|
|
19
19
|
.loose();
|
|
20
20
|
const RaceRunSchema = z
|
|
21
21
|
.object({
|
|
22
|
-
id: z.number(),
|
|
23
|
-
run_status: z.string().nullish(),
|
|
24
22
|
class_position: z.number().nullish(),
|
|
23
|
+
id: z.number(),
|
|
25
24
|
race_timing: RaceTimingSchema,
|
|
25
|
+
run_status: z.string().nullish(),
|
|
26
26
|
})
|
|
27
27
|
.loose();
|
|
28
28
|
const AthleteSchema = z
|
|
29
29
|
.object({
|
|
30
|
-
id: z.number(),
|
|
31
30
|
club_id: z.number().nullish(),
|
|
31
|
+
id: z.number(),
|
|
32
32
|
is_nz_eligible: z.boolean().nullish().default(true),
|
|
33
33
|
})
|
|
34
34
|
.loose();
|
|
35
35
|
const RaceEntrySchema = z
|
|
36
36
|
.object({
|
|
37
|
-
id: z.number(),
|
|
38
|
-
status: z.enum(['entered', 'cancelled', 'implied', 'did-not-start']),
|
|
39
37
|
adhoc_name: z.string().nullish(),
|
|
40
|
-
is_group: z.boolean().nullish(),
|
|
41
38
|
athlete: AthleteSchema.nullish(),
|
|
39
|
+
id: z.number(),
|
|
40
|
+
is_group: z.boolean().nullish(),
|
|
42
41
|
race_runs: z.array(RaceRunSchema),
|
|
42
|
+
status: z.enum(['entered', 'cancelled', 'implied', 'did-not-start']),
|
|
43
43
|
})
|
|
44
44
|
.loose();
|
|
45
45
|
const RaceClassSchema = z
|
|
46
46
|
.object({
|
|
47
|
+
course_variant_id: z.number().nullish(),
|
|
47
48
|
id: z.number(),
|
|
48
49
|
name: z.string(),
|
|
49
|
-
course_variant_id: z.number().nullish(),
|
|
50
|
-
race_format: RaceClassFormatSchema.nullish(),
|
|
51
50
|
race_entries: z.array(RaceEntrySchema),
|
|
51
|
+
race_format: RaceClassFormatSchema.nullish(),
|
|
52
52
|
})
|
|
53
53
|
.loose();
|
|
54
54
|
const EventSchema = z
|
|
55
55
|
.object({
|
|
56
|
+
classification: z.enum(['local', 'regional', 'national', 'international']),
|
|
56
57
|
id: z.number(),
|
|
57
58
|
name: z.string(),
|
|
58
|
-
classification: z.enum(['local', 'regional', 'national', 'international']),
|
|
59
59
|
})
|
|
60
60
|
.loose();
|
|
61
61
|
const RaceSchema = z
|
|
62
62
|
.object({
|
|
63
|
+
event: EventSchema,
|
|
63
64
|
id: z.number(),
|
|
64
65
|
name: z.string(),
|
|
65
|
-
event: EventSchema,
|
|
66
|
-
race_format: RaceFormatSchema.nullish(),
|
|
67
66
|
race_classes: z.array(RaceClassSchema),
|
|
67
|
+
race_format: RaceFormatSchema.nullish(),
|
|
68
68
|
})
|
|
69
69
|
.loose();
|
|
70
70
|
const CompetitionClassSchema = z
|
|
@@ -76,9 +76,9 @@ const CompetitionClassSchema = z
|
|
|
76
76
|
.loose();
|
|
77
77
|
const CompetitionSchema = z
|
|
78
78
|
.object({
|
|
79
|
+
competition_classes: z.array(CompetitionClassSchema),
|
|
79
80
|
id: z.number(),
|
|
80
81
|
name: z.string(),
|
|
81
|
-
competition_classes: z.array(CompetitionClassSchema),
|
|
82
82
|
})
|
|
83
83
|
.loose();
|
|
84
84
|
export const EliminationRaceSchema = z
|
|
@@ -91,8 +91,8 @@ export const RaceScoreRequestSchema = z
|
|
|
91
91
|
.object({
|
|
92
92
|
competition: CompetitionSchema,
|
|
93
93
|
config: z.record(z.string(), z.any()),
|
|
94
|
-
race: RaceSchema,
|
|
95
94
|
eliminationRaces: z.array(EliminationRaceSchema).nullish(),
|
|
95
|
+
race: RaceSchema,
|
|
96
96
|
score: z.boolean().default(true),
|
|
97
97
|
tiebreak: z.boolean().default(false),
|
|
98
98
|
})
|
package/dist/race/request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/race/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;CACnE,CAAC,CAAC;AAKH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;CACnE,CAAC,CAAC;AAKH,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,KAAK,CAAC,qBAAqB,CAAC;SAC5B,OAAO,EAAE;CACb,CAAC;KACD,KAAK,EAAE,CAAC;AAKX,MAAM,aAAa,GAAG,CAAC;KACpB,MAAM,CAAC;IACN,
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/race/request.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
1
|
+
import { type ZodType } from 'zod';
|
|
2
|
+
import { type CompetitionScoreRequestLoose } from './competition';
|
|
3
|
+
import { type RaceScoreRequestLoose } from './race';
|
|
4
|
+
export type RouteHandler<B = Record<string, unknown>> = (req: Request, body: B) => Promise<Response>;
|
|
3
5
|
export type ScorerType = 'race' | 'competition';
|
|
4
|
-
export type RouteConfig = {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
export type RouteConfig<B = Record<string, unknown>, C = unknown> = {
|
|
7
|
+
bodySchema: ZodType<B>;
|
|
8
|
+
configSchema?: ZodType<C>;
|
|
9
|
+
handler: RouteHandler<B & {
|
|
10
|
+
config: C;
|
|
11
|
+
}>;
|
|
7
12
|
scorerType: ScorerType;
|
|
8
13
|
};
|
|
9
|
-
export declare const competitionScorer: (handler: RouteHandler
|
|
10
|
-
|
|
14
|
+
export declare const competitionScorer: <C>(handler: RouteHandler<CompetitionScoreRequestLoose & {
|
|
15
|
+
config: C;
|
|
16
|
+
}>, configSchema?: ZodType<C>) => RouteConfig<CompetitionScoreRequestLoose, C>;
|
|
17
|
+
export declare const raceScorer: <C>(handler: RouteHandler<RaceScoreRequestLoose & {
|
|
18
|
+
config: C;
|
|
19
|
+
}>, configSchema?: ZodType<C>) => RouteConfig<RaceScoreRequestLoose, C>;
|
|
11
20
|
export declare const router: (routes: Record<string, RouteConfig>) => ((req: Request) => Promise<Response>);
|
|
12
21
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAE7C,OAAO,EACL,KAAK,4BAA4B,EAElC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,qBAAqB,EAA0B,MAAM,QAAQ,CAAC;AAkB5E,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CACtD,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,KACJ,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,IAAI;IAClE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,YAAY,CAAC,CAAC,GAAG;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;IACzC,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,CAAC,EACjC,SAAS,YAAY,CAAC,4BAA4B,GAAG;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC,EACnE,eAAe,OAAO,CAAC,CAAC,CAAC,KACxB,WAAW,CAAC,4BAA4B,EAAE,CAAC,CAK5C,CAAC;AAEH,eAAO,MAAM,UAAU,GAAI,CAAC,EAC1B,SAAS,YAAY,CAAC,qBAAqB,GAAG;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC,EAC5D,eAAe,OAAO,CAAC,CAAC,CAAC,KACxB,WAAW,CAAC,qBAAqB,EAAE,CAAC,CAKrC,CAAC;AAEH,eAAO,MAAM,MAAM,GAEf,QAAQ,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAClC,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CA0GtC,CAAC"}
|
package/dist/router.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { authenticate } from './auth';
|
|
2
1
|
import { ZodError } from 'zod';
|
|
2
|
+
import { authenticate } from './auth';
|
|
3
|
+
import { CompetitionScoreRequestSchema, } from './competition';
|
|
4
|
+
import { RaceScoreRequestSchema } from './race';
|
|
3
5
|
const verify = async (req, body) => {
|
|
4
6
|
const token = req.headers.get('O-Zone-Endpoint-Verification');
|
|
5
7
|
if (!token) {
|
|
@@ -9,28 +11,22 @@ const verify = async (req, body) => {
|
|
|
9
11
|
console.log('[verify]', 'Authorized', token);
|
|
10
12
|
return new Response(JSON.stringify(body), {
|
|
11
13
|
headers: {
|
|
12
|
-
'O-Zone-Endpoint-Verification-Response': token,
|
|
13
14
|
'Content-Type': 'application/json',
|
|
15
|
+
'O-Zone-Endpoint-Verification-Response': token,
|
|
14
16
|
},
|
|
15
17
|
});
|
|
16
18
|
};
|
|
17
|
-
const getHandler = (config) => {
|
|
18
|
-
if (!config)
|
|
19
|
-
return undefined;
|
|
20
|
-
if (typeof config === 'function') {
|
|
21
|
-
return config;
|
|
22
|
-
}
|
|
23
|
-
return config.handler;
|
|
24
|
-
};
|
|
25
19
|
export const competitionScorer = (handler, configSchema) => ({
|
|
20
|
+
bodySchema: CompetitionScoreRequestSchema,
|
|
21
|
+
configSchema,
|
|
26
22
|
handler,
|
|
27
23
|
scorerType: 'competition',
|
|
28
|
-
configSchema,
|
|
29
24
|
});
|
|
30
25
|
export const raceScorer = (handler, configSchema) => ({
|
|
26
|
+
bodySchema: RaceScoreRequestSchema,
|
|
27
|
+
configSchema,
|
|
31
28
|
handler,
|
|
32
29
|
scorerType: 'race',
|
|
33
|
-
configSchema,
|
|
34
30
|
});
|
|
35
31
|
export const router = (routes) => async (req) => {
|
|
36
32
|
try {
|
|
@@ -40,9 +36,9 @@ export const router = (routes) => async (req) => {
|
|
|
40
36
|
case 'OPTIONS':
|
|
41
37
|
return new Response(null, {
|
|
42
38
|
headers: {
|
|
43
|
-
'Access-Control-Allow-Origin': 'null',
|
|
44
|
-
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
|
|
45
39
|
'Access-Control-Allow-Headers': 'Content-Type, Authorization, O-Zone-Endpoint-Verification',
|
|
40
|
+
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
|
|
41
|
+
'Access-Control-Allow-Origin': 'null',
|
|
46
42
|
},
|
|
47
43
|
});
|
|
48
44
|
case 'GET': {
|
|
@@ -54,17 +50,44 @@ export const router = (routes) => async (req) => {
|
|
|
54
50
|
}
|
|
55
51
|
console.log('[verify]', `Endpoint ${url.pathname}`);
|
|
56
52
|
return verify(req, {
|
|
53
|
+
config_schema: config.configSchema?.toJSONSchema(),
|
|
57
54
|
type: config.scorerType,
|
|
58
|
-
config_schema: config.configSchema,
|
|
59
55
|
});
|
|
60
56
|
}
|
|
61
57
|
case 'POST': {
|
|
62
58
|
const url = new URL(req.url);
|
|
63
|
-
const
|
|
64
|
-
if (!
|
|
59
|
+
const config = routes[url.pathname];
|
|
60
|
+
if (!config) {
|
|
65
61
|
return new Response('Not Found', { status: 404 });
|
|
66
62
|
}
|
|
67
|
-
|
|
63
|
+
const rawBody = await req.json().catch((err) => {
|
|
64
|
+
console.warn('[router]', `Invalid JSON body for ${url.pathname}`, err);
|
|
65
|
+
return undefined;
|
|
66
|
+
});
|
|
67
|
+
if (rawBody === undefined) {
|
|
68
|
+
return new Response('Invalid JSON body', { status: 400 });
|
|
69
|
+
}
|
|
70
|
+
const parsedBodyResult = config.bodySchema.safeParse(rawBody);
|
|
71
|
+
if (!parsedBodyResult.success) {
|
|
72
|
+
console.warn('[router]', `Request body parse failure for ${url.pathname}`, parsedBodyResult.error.issues);
|
|
73
|
+
return new Response(JSON.stringify(parsedBodyResult.error.issues), {
|
|
74
|
+
headers: { 'Content-Type': 'application/json' },
|
|
75
|
+
status: 400,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const parsedBody = parsedBodyResult.data;
|
|
79
|
+
if (config.configSchema) {
|
|
80
|
+
const parsedConfigResult = config.configSchema.safeParse(parsedBody.config);
|
|
81
|
+
if (!parsedConfigResult.success) {
|
|
82
|
+
console.warn('[router]', `Config parse failure for ${url.pathname}`, parsedConfigResult.error.issues);
|
|
83
|
+
return new Response(JSON.stringify(parsedConfigResult.error.issues), {
|
|
84
|
+
headers: { 'Content-Type': 'application/json' },
|
|
85
|
+
status: 400,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
parsedBody.config = parsedConfigResult.data;
|
|
89
|
+
}
|
|
90
|
+
return config.handler(req, parsedBody);
|
|
68
91
|
}
|
|
69
92
|
default:
|
|
70
93
|
return new Response('Method Not Allowed', { status: 405 });
|
|
@@ -76,8 +99,8 @@ export const router = (routes) => async (req) => {
|
|
|
76
99
|
}
|
|
77
100
|
if (err instanceof ZodError) {
|
|
78
101
|
return new Response(JSON.stringify(err.issues), {
|
|
79
|
-
status: 400,
|
|
80
102
|
headers: { 'Content-Type': 'application/json' },
|
|
103
|
+
status: 400,
|
|
81
104
|
});
|
|
82
105
|
}
|
|
83
106
|
console.error('Internal server error', err);
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type RouteConfig } from './router.js';
|
|
2
|
-
export { competitionScorer, raceScorer, } from './router.js';
|
|
3
2
|
export type { RouteConfig, RouteHandler, } from './router.js';
|
|
3
|
+
export { competitionScorer, raceScorer, } from './router.js';
|
|
4
4
|
export declare namespace Scorer {
|
|
5
5
|
const serve: (routes: Record<string, RouteConfig>) => void;
|
|
6
6
|
}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAU,MAAM,aAAa,CAAC;AAEvD,YAAY,EACV,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,UAAU,GACX,MAAM,aAAa,CAAC;AAKrB,yBAAiB,MAAM,CAAC;IACf,MAAM,KAAK,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,SAOxD,CAAC;CACH;AAED,eAAO,MAAM,IAAI,GACf,MACI;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,GACpD;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE,GACrD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,aAQtC,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -5,14 +5,14 @@ export var Scorer;
|
|
|
5
5
|
(function (Scorer) {
|
|
6
6
|
Scorer.serve = (routes) => {
|
|
7
7
|
const server = Bun.serve({
|
|
8
|
-
port: getPort(),
|
|
9
8
|
fetch: router(routes),
|
|
9
|
+
port: getPort(),
|
|
10
10
|
});
|
|
11
11
|
console.info(`Listening on ${server.url}`);
|
|
12
12
|
};
|
|
13
13
|
})(Scorer || (Scorer = {}));
|
|
14
14
|
export const done = (body) => new Response(JSON.stringify({ ...body, entries: body.success ? body.entries : null }), {
|
|
15
|
-
status: 200,
|
|
16
15
|
headers: { 'Content-Type': 'application/json' },
|
|
16
|
+
status: 200,
|
|
17
17
|
});
|
|
18
18
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,aAAa,CAAC;AAMvD,OAAO,EACL,iBAAiB,EACjB,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAElE,MAAM,KAAW,MAAM,CAStB;AATD,WAAiB,MAAM;IACR,YAAK,GAAG,CAAC,MAAmC,EAAE,EAAE;QAC3D,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;YACvB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,OAAO,EAAE;SAChB,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC,EATgB,MAAM,KAAN,MAAM,QAStB;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,IAGuC,EACvC,EAAE,CACF,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EACxE;IACE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;IAC/C,MAAM,EAAE,GAAG;CACZ,CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@o-zone/scorer-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Orienteering scoring core library with modular exports",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"zod": "^4.3.6"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@biomejs/biome": "^2.
|
|
37
|
+
"@biomejs/biome": "^2.4.14",
|
|
38
38
|
"@changesets/changelog-github": "^0.5.0",
|
|
39
39
|
"@changesets/cli": "^2.29.8",
|
|
40
40
|
"@total-typescript/ts-reset": "^0.6.1",
|