@archmax-ai/harness 1.0.0 → 1.1.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.
Files changed (48) hide show
  1. package/README.md +11 -6
  2. package/dist/assembly/compose.js +3 -1
  3. package/dist/assembly/compose.js.map +1 -1
  4. package/dist/authoring-skill/archmax-harness/SKILL.md +5 -2
  5. package/dist/authoring-skill/archmax-harness/references/backend-integration.md +25 -13
  6. package/dist/authoring-skill/archmax-harness/references/workflow-schema.md +36 -6
  7. package/dist/authoring-skill/archmax-harness/references/workflow-yaml.md +3 -0
  8. package/dist/core/attachments.d.ts +2 -0
  9. package/dist/core/attachments.js +2 -1
  10. package/dist/core/attachments.js.map +1 -1
  11. package/dist/core/file-operations.d.ts +6 -0
  12. package/dist/core/file-operations.js +29 -0
  13. package/dist/core/file-operations.js.map +1 -1
  14. package/dist/index.d.ts +5 -1
  15. package/dist/index.js +4 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/machine/signature-pattern.d.ts +24 -0
  18. package/dist/machine/signature-pattern.js +67 -0
  19. package/dist/machine/signature-pattern.js.map +1 -0
  20. package/dist/machine/signature.d.ts +137 -35
  21. package/dist/machine/signature.js +476 -25
  22. package/dist/machine/signature.js.map +1 -1
  23. package/dist/machine/spec-schema.d.ts +202 -1
  24. package/dist/machine/spec-schema.js +143 -4
  25. package/dist/machine/spec-schema.js.map +1 -1
  26. package/dist/public/spec.d.ts +5 -1
  27. package/dist/public/spec.js +4 -0
  28. package/dist/public/spec.js.map +1 -1
  29. package/dist/workflow/control-tools.js +3 -1
  30. package/dist/workflow/control-tools.js.map +1 -1
  31. package/dist/workflow/file-values.d.ts +4 -1
  32. package/dist/workflow/file-values.js +2 -0
  33. package/dist/workflow/file-values.js.map +1 -1
  34. package/dist/workflow/middleware.d.ts +2 -0
  35. package/dist/workflow/middleware.js +1 -0
  36. package/dist/workflow/middleware.js.map +1 -1
  37. package/dist/workflow/render-prompt.js +7 -2
  38. package/dist/workflow/render-prompt.js.map +1 -1
  39. package/dist/workflow/signature-checks.d.ts +8 -3
  40. package/dist/workflow/signature-checks.js +17 -4
  41. package/dist/workflow/signature-checks.js.map +1 -1
  42. package/dist/workflow/sub-workflow.js +4 -1
  43. package/dist/workflow/sub-workflow.js.map +1 -1
  44. package/package.json +3 -2
  45. package/skills/archmax-harness/SKILL.md +5 -2
  46. package/skills/archmax-harness/references/backend-integration.md +25 -13
  47. package/skills/archmax-harness/references/workflow-schema.md +36 -6
  48. package/skills/archmax-harness/references/workflow-yaml.md +3 -0
@@ -1,3 +1,16 @@
1
+ /**
2
+ * A trigger's signature, typed: what each `requires`/`returns` entry declares
3
+ * (its type and the rules its value must also meet), the one mapping from a
4
+ * signature to JSON Schema, and the one conformance rule.
5
+ *
6
+ * Pure and browser-safe — it depends on nothing but the spec's types and the
7
+ * linear-time pattern engine — so a host builds an MCP tool schema, a start
8
+ * form or request validation from exactly the mapping and rule the runtime
9
+ * enforces. Every runtime check (the turn boundary, `archmax_set_variables`, the
10
+ * completion check, a delegation and its settle) decides by
11
+ * {@link signatureValueIssues}; nothing else judges a value's type or rules.
12
+ */
13
+ import { compilePattern } from "./signature-pattern.js";
1
14
  /**
2
15
  * The types a signature entry may declare: JSON Schema's own type words, plus its
3
16
  * two string formats `date` and `date-time`, promoted because a host renders and
@@ -16,12 +29,38 @@ export const SIGNATURE_TYPES = [
16
29
  "array",
17
30
  "file",
18
31
  ];
32
+ /** The formats a `string` entry's `format` rule names. */
33
+ export const SIGNATURE_FORMATS = ["email", "url", "phone"];
34
+ /**
35
+ * The kinds of text a `string` entry's `content` rule declares. A declaration
36
+ * only: carried and mapped, never checked — what a kind permits is a host's call.
37
+ */
38
+ export const SIGNATURE_CONTENTS = ["text", "markdown", "html"];
39
+ /** The types each rule applies to. A rule on any other type, or on an untyped entry, is a load error. */
40
+ export const RULE_TYPES = {
41
+ format: ["string"],
42
+ pattern: ["string"],
43
+ minLength: ["string"],
44
+ maxLength: ["string"],
45
+ enum: ["string"],
46
+ content: ["string"],
47
+ minimum: ["integer", "number", "date", "date-time"],
48
+ maximum: ["integer", "number", "date", "date-time"],
49
+ minItems: ["array"],
50
+ maxItems: ["array"],
51
+ accept: ["file"],
52
+ maxSize: ["file"],
53
+ };
54
+ /** Every rule name, in the order an entry's rules are read and listed. */
55
+ export const SIGNATURE_RULE_NAMES = Object.keys(RULE_TYPES);
19
56
  // --- Normalizing -----------------------------------------------------------------
20
57
  /**
21
- * A `requires`/`returns` list as `{ name, type?, description? }` entries, in
22
- * declaration order: a bare name and `{ name }` are the same untyped entry.
23
- * Total — a list the schema refused (a scalar, an entry naming nothing) yields
24
- * what it can read, so `validate` can read a spec whose shape failed.
58
+ * A `requires`/`returns` list as `{ name, type?, description?, …rules }`
59
+ * entries, in declaration order: a bare name and `{ name }` are the same
60
+ * untyped entry. A rule is carried as written, except `maxSize`, read as bytes;
61
+ * `today` and `now` stay symbolic. Total — a list the schema refused (a scalar,
62
+ * an entry naming nothing, a rule its type does not take) yields what it can
63
+ * read, so `validate` can read a spec whose shape failed.
25
64
  */
26
65
  export function normalizeSignature(list) {
27
66
  if (!Array.isArray(list))
@@ -42,6 +81,8 @@ export function normalizeSignature(list) {
42
81
  entry.type = type;
43
82
  if (typeof description === "string" && description.trim() !== "")
44
83
  entry.description = description.trim();
84
+ if (entry.type)
85
+ Object.assign(entry, readRules(item, entry.type));
45
86
  entries.push(entry);
46
87
  }
47
88
  return entries;
@@ -50,6 +91,98 @@ export function normalizeSignature(list) {
50
91
  export function isSignatureType(value) {
51
92
  return typeof value === "string" && SIGNATURE_TYPES.includes(value);
52
93
  }
94
+ /** The rules of a declaration its type takes, each read only when it is well-shaped. */
95
+ function readRules(decl, type) {
96
+ const rules = {};
97
+ for (const rule of SIGNATURE_RULE_NAMES) {
98
+ if (!Object.hasOwn(decl, rule) || !RULE_TYPES[rule].includes(type))
99
+ continue;
100
+ const value = ruleValue(rule, type, decl[rule]);
101
+ if (value !== undefined)
102
+ rules[rule] = value;
103
+ }
104
+ return rules;
105
+ }
106
+ /** One rule's value as a normalized entry holds it, or `undefined` when it is malformed. */
107
+ function ruleValue(rule, type, value) {
108
+ switch (rule) {
109
+ case "format":
110
+ return SIGNATURE_FORMATS.includes(value) ? value : undefined;
111
+ case "content":
112
+ return SIGNATURE_CONTENTS.includes(value) ? value : undefined;
113
+ case "pattern":
114
+ return typeof value === "string" ? value : undefined;
115
+ case "minLength":
116
+ case "maxLength":
117
+ case "minItems":
118
+ case "maxItems":
119
+ return isCount(value) ? value : undefined;
120
+ case "enum":
121
+ case "accept":
122
+ return Array.isArray(value) && value.length > 0 && value.every((v) => typeof v === "string")
123
+ ? [...value]
124
+ : undefined;
125
+ case "minimum":
126
+ case "maximum":
127
+ return isBound(type, value) ? value : undefined;
128
+ case "maxSize":
129
+ return parseSize(value);
130
+ }
131
+ }
132
+ /** A length or count: a non-negative integer. */
133
+ export function isCount(value) {
134
+ return typeof value === "number" && Number.isInteger(value) && value >= 0;
135
+ }
136
+ /**
137
+ * Whether `value` is a well-formed `minimum`/`maximum` for `type`: a finite
138
+ * number for `integer`/`number`, a real `YYYY-MM-DD` or `today` for `date`, an
139
+ * RFC 3339 date-time or `now` for `date-time`.
140
+ */
141
+ export function isBound(type, value) {
142
+ switch (type) {
143
+ case "integer":
144
+ case "number":
145
+ return typeof value === "number" && Number.isFinite(value);
146
+ case "date":
147
+ return value === "today" || (typeof value === "string" && isFullDate(value));
148
+ case "date-time":
149
+ return value === "now" || (typeof value === "string" && isDateTime(value));
150
+ default:
151
+ return false;
152
+ }
153
+ }
154
+ /**
155
+ * Whether a `minimum` and a `maximum` for `type` leave room for a value: `true`
156
+ * unless both are literal and the minimum is above the maximum. `today` and
157
+ * `now` move, so a bound naming one is never out of order here.
158
+ */
159
+ export function boundsInOrder(type, minimum, maximum) {
160
+ if (!isBound(type, minimum) || !isBound(type, maximum))
161
+ return true;
162
+ if (typeof minimum === "number" && typeof maximum === "number")
163
+ return minimum <= maximum;
164
+ if (minimum === "today" || minimum === "now" || maximum === "today" || maximum === "now")
165
+ return true;
166
+ if (type === "date")
167
+ return minimum <= maximum;
168
+ return instantOf(minimum) <= instantOf(maximum);
169
+ }
170
+ const SIZE = /^(\d{1,15})(KB|MB)$/;
171
+ /**
172
+ * A `maxSize` in bytes: a non-negative integer as itself, `<n>KB` as n × 1,000,
173
+ * `<n>MB` as n × 1,000,000; `undefined` for anything else.
174
+ */
175
+ export function parseSize(value) {
176
+ if (isCount(value))
177
+ return Number.isSafeInteger(value) ? value : undefined;
178
+ if (typeof value !== "string")
179
+ return undefined;
180
+ const match = SIZE.exec(value);
181
+ if (!match)
182
+ return undefined;
183
+ const bytes = Number(match[1]) * (match[2] === "KB" ? 1_000 : 1_000_000);
184
+ return Number.isSafeInteger(bytes) ? bytes : undefined;
185
+ }
53
186
  /**
54
187
  * A trigger's normalized signature read from a parsed spec, or `undefined` when no
55
188
  * state declares the id. The same reading `WorkflowMachine.signatureForTrigger`
@@ -76,10 +209,12 @@ export function signatureForTrigger(spec, triggerId) {
76
209
  * The one mapping from signature entries to a JSON Schema object: one property
77
210
  * per entry in declaration order, the six JSON Schema type words as themselves,
78
211
  * `date`/`date-time`/`file` as a string with that `format`, an untyped entry as `{}`,
79
- * and every name `required` — each `requires` entry is mandatory, and the
80
- * completion check guarantees each `returns` entry is set. The delegation tool's
81
- * input schema is built by it, so a host building an MCP tool, a form or an API
82
- * body from the same signature describes exactly what the runtime enforces.
212
+ * each rule JSON Schema can express as its keyword, and every name `required` —
213
+ * each `requires` entry is mandatory, and the completion check guarantees each
214
+ * `returns` entry is set. The delegation tool's input schema is built by it, so
215
+ * a host building an MCP tool, a form or an API body from the same signature
216
+ * describes what the runtime enforces. Date bounds, `accept` and `maxSize` have
217
+ * no JSON Schema keyword and are left out; the runtime still enforces them.
83
218
  */
84
219
  export function signatureJsonSchema(entries) {
85
220
  const properties = {};
@@ -89,44 +224,343 @@ export function signatureJsonSchema(entries) {
89
224
  : entry.type
90
225
  ? { type: entry.type }
91
226
  : {};
227
+ if (entry.type)
228
+ Object.assign(property, ruleKeywords(entry, entry.type));
92
229
  if (entry.description)
93
230
  property.description = entry.description;
94
231
  properties[entry.name] = property;
95
232
  }
96
233
  return { type: "object", properties, required: entries.map((entry) => entry.name) };
97
234
  }
235
+ /** The E.164 grammar, as the `phone` format's check and its mapped `pattern` both spell it. */
236
+ const E164 = "^\\+[1-9][0-9]{1,14}$";
237
+ const CONTENT_MEDIA_TYPES = {
238
+ text: "text/plain",
239
+ markdown: "text/markdown",
240
+ html: "text/html",
241
+ };
242
+ /** The JSON Schema keywords an entry's rules map to, for the rules its type takes. */
243
+ function ruleKeywords(entry, type) {
244
+ const out = {};
245
+ if (type === "string") {
246
+ if (entry.format === "email")
247
+ out.format = "email";
248
+ if (entry.format === "url")
249
+ Object.assign(out, { format: "uri", pattern: "^https?://" });
250
+ if (entry.format === "phone")
251
+ out.pattern = E164;
252
+ if (entry.pattern !== undefined)
253
+ out.pattern = entry.pattern;
254
+ if (entry.minLength !== undefined)
255
+ out.minLength = entry.minLength;
256
+ if (entry.maxLength !== undefined)
257
+ out.maxLength = entry.maxLength;
258
+ if (entry.enum !== undefined)
259
+ out.enum = [...entry.enum];
260
+ if (entry.content !== undefined)
261
+ out.contentMediaType = CONTENT_MEDIA_TYPES[entry.content];
262
+ }
263
+ if (type === "integer" || type === "number") {
264
+ if (typeof entry.minimum === "number")
265
+ out.minimum = entry.minimum;
266
+ if (typeof entry.maximum === "number")
267
+ out.maximum = entry.maximum;
268
+ }
269
+ if (type === "array") {
270
+ if (entry.minItems !== undefined)
271
+ out.minItems = entry.minItems;
272
+ if (entry.maxItems !== undefined)
273
+ out.maxItems = entry.maxItems;
274
+ }
275
+ return out;
276
+ }
98
277
  // --- Conformance --------------------------------------------------------------------
99
278
  /**
100
279
  * The one conformance rule: one issue per entry whose name is not set in
101
- * `values`, and one per typed entry whose value does not conform, in declaration
102
- * order; an empty list when the map satisfies the signature. A name is set when
103
- * `values` holds it with any value but `undefined`. An untyped entry takes any
104
- * value, `null` included; a typed one never takes `null`. Nothing is coerced —
105
- * the string `"4"` is not an `integer`. A `file` value is judged by its shape
106
- * alone: whether a file is there, and whether the session may read it, is the
107
- * runtime's check where the value crosses a boundary.
108
- */
109
- export function signatureValueIssues(entries, values) {
280
+ * `values`, and one per typed entry whose value does not conform to its type
281
+ * or, conforming, breaks one of its rules, in declaration order; an empty list
282
+ * when the map satisfies the signature. A name is set when `values` holds it
283
+ * with any value but `undefined`. An untyped entry takes any value, `null`
284
+ * included; a typed one never takes `null`. Nothing is coerced or trimmed —
285
+ * the string `"4"` is not an `integer`, and `" a@b.co"` is not an email address.
286
+ *
287
+ * Rules are checked only on a value of the right type, and an entry reports
288
+ * only the first rule it breaks, in this order: `format`/`pattern`, `enum`,
289
+ * `minLength`/`maxLength`, `minimum`/`maximum`, `minItems`/`maxItems`,
290
+ * `accept`. `today` and `now` read `options.now`, the current time by default.
291
+ * Every check is synchronous and linear in the value's length; an authored
292
+ * `pattern` runs in RE2, never in `RegExp`. A `file` value is judged by its
293
+ * path alone: whether a file is there, whether the session may read it and
294
+ * how large it is, is the runtime's check where the value crosses a boundary.
295
+ */
296
+ export function signatureValueIssues(entries, values, options) {
110
297
  const issues = [];
298
+ const clock = lazyClock(options?.now);
111
299
  for (const entry of entries) {
112
300
  const value = Object.hasOwn(values, entry.name) ? values[entry.name] : undefined;
113
301
  if (value === undefined) {
114
302
  issues.push({ kind: "missing", name: entry.name, message: `'${entry.name}' is not set` });
115
303
  continue;
116
304
  }
117
- if (!entry.type || conforms(entry.type, value))
305
+ if (!entry.type)
118
306
  continue;
119
307
  const found = valueKind(value);
120
- issues.push({
121
- kind: "invalid",
122
- name: entry.name,
123
- type: entry.type,
124
- found,
125
- message: `'${entry.name}' must be ${TYPE_PHRASES[entry.type]}, but ${arrived(found, value)} arrived`,
126
- });
308
+ if (!conforms(entry.type, value)) {
309
+ issues.push({
310
+ kind: "invalid",
311
+ name: entry.name,
312
+ type: entry.type,
313
+ found,
314
+ message: `'${entry.name}' must be ${TYPE_PHRASES[entry.type]}, but ${arrived(found, value)} arrived`,
315
+ });
316
+ continue;
317
+ }
318
+ const broken = brokenRule(entry, entry.type, value, clock);
319
+ if (broken) {
320
+ issues.push({
321
+ kind: "invalid",
322
+ name: entry.name,
323
+ type: entry.type,
324
+ found,
325
+ rule: broken.rule,
326
+ message: `'${entry.name}' must ${broken.must}`,
327
+ });
328
+ }
127
329
  }
128
330
  return issues;
129
331
  }
332
+ /** The check's clock, read at most once and only when a date bound needs it. */
333
+ function lazyClock(now) {
334
+ let at = now;
335
+ return () => (at ??= new Date());
336
+ }
337
+ /**
338
+ * The first rule a value of the entry's type breaks, in the documented order,
339
+ * or `undefined` when it breaks none. Only the rules the type takes are read.
340
+ */
341
+ function brokenRule(entry, type, value, clock) {
342
+ const broken = (rule) => ({ rule, must: ruleWording(entry, type, rule).must });
343
+ switch (type) {
344
+ case "string": {
345
+ const text = value;
346
+ if (entry.format && !FORMAT_CHECKS[entry.format](text))
347
+ return broken("format");
348
+ if (entry.pattern !== undefined) {
349
+ const compiled = compilePattern(entry.pattern);
350
+ // A host-built entry can skip the parse; its pattern still fails closed.
351
+ if (!compiled.ok) {
352
+ return { rule: "pattern", must: `match ${entry.pattern}, which does not compile: ${compiled.error}` };
353
+ }
354
+ if (!compiled.test(text))
355
+ return broken("pattern");
356
+ }
357
+ if (entry.enum && !entry.enum.includes(text))
358
+ return broken("enum");
359
+ if (entry.minLength !== undefined || entry.maxLength !== undefined) {
360
+ const length = codePointsUpTo(text, Math.max(entry.minLength ?? 0, (entry.maxLength ?? -1) + 1));
361
+ if (entry.minLength !== undefined && length < entry.minLength)
362
+ return broken("minLength");
363
+ if (entry.maxLength !== undefined && length > entry.maxLength)
364
+ return broken("maxLength");
365
+ }
366
+ return undefined;
367
+ }
368
+ case "integer":
369
+ case "number": {
370
+ const number = value;
371
+ if (typeof entry.minimum === "number" && number < entry.minimum)
372
+ return broken("minimum");
373
+ if (typeof entry.maximum === "number" && number > entry.maximum)
374
+ return broken("maximum");
375
+ return undefined;
376
+ }
377
+ case "date": {
378
+ const day = value;
379
+ const bound = (b) => (b === "today" ? clock().toISOString().slice(0, 10) : b);
380
+ if (isBound(type, entry.minimum) && day < bound(entry.minimum))
381
+ return broken("minimum");
382
+ if (isBound(type, entry.maximum) && day > bound(entry.maximum))
383
+ return broken("maximum");
384
+ return undefined;
385
+ }
386
+ case "date-time": {
387
+ const at = instantOf(value);
388
+ const bound = (b) => (b === "now" ? clock().getTime() : instantOf(b));
389
+ if (isBound(type, entry.minimum) && at < bound(entry.minimum))
390
+ return broken("minimum");
391
+ if (isBound(type, entry.maximum) && at > bound(entry.maximum))
392
+ return broken("maximum");
393
+ return undefined;
394
+ }
395
+ case "array": {
396
+ const length = value.length;
397
+ if (entry.minItems !== undefined && length < entry.minItems)
398
+ return broken("minItems");
399
+ if (entry.maxItems !== undefined && length > entry.maxItems)
400
+ return broken("maxItems");
401
+ return undefined;
402
+ }
403
+ case "file": {
404
+ const extension = lastExtension(value);
405
+ if (entry.accept && !entry.accept.some((accepted) => accepted.toLowerCase() === extension)) {
406
+ return broken("accept");
407
+ }
408
+ return undefined;
409
+ }
410
+ default:
411
+ return undefined;
412
+ }
413
+ }
414
+ /**
415
+ * How one declared rule reads: `must`, what a refusal says the value must do
416
+ * (after "'name' must "), and `phrase`, the same rule as the prompt lists it
417
+ * beside the entry's type. `undefined` when the entry declares no such rule
418
+ * its type takes.
419
+ */
420
+ function ruleWording(entry, type, rule) {
421
+ if (entry[rule] === undefined || !RULE_TYPES[rule].includes(type))
422
+ return undefined;
423
+ const be = (phrase) => ({ must: `be ${phrase}`, phrase });
424
+ const dated = type === "date" || type === "date-time";
425
+ switch (rule) {
426
+ case "format":
427
+ return be(FORMAT_PHRASES[entry.format]);
428
+ case "pattern":
429
+ return { must: `match ${entry.pattern}`, phrase: `matching ${entry.pattern}` };
430
+ case "enum":
431
+ return be(`one of ${entry.enum.join(", ")}`);
432
+ case "minLength":
433
+ return be(`at least ${counted(entry.minLength, "character", "characters")}`);
434
+ case "maxLength":
435
+ return be(`at most ${counted(entry.maxLength, "character", "characters")}`);
436
+ case "content":
437
+ return be(CONTENT_PHRASES[entry.content]);
438
+ case "minimum":
439
+ return dated
440
+ ? { must: `not be before ${entry.minimum}`, phrase: `not before ${entry.minimum}` }
441
+ : be(`at least ${entry.minimum}`);
442
+ case "maximum":
443
+ return dated
444
+ ? { must: `not be after ${entry.maximum}`, phrase: `not after ${entry.maximum}` }
445
+ : be(`at most ${entry.maximum}`);
446
+ case "minItems": {
447
+ const phrase = `at least ${counted(entry.minItems, "entry", "entries")}`;
448
+ return { must: `hold ${phrase}`, phrase };
449
+ }
450
+ case "maxItems": {
451
+ const phrase = `at most ${counted(entry.maxItems, "entry", "entries")}`;
452
+ return { must: `hold ${phrase}`, phrase };
453
+ }
454
+ case "accept":
455
+ return be(`a ${oneOf(entry.accept)} file`);
456
+ case "maxSize":
457
+ return be(`at most ${formatSize(entry.maxSize)}`);
458
+ }
459
+ }
460
+ /**
461
+ * The rules an entry declares, as short phrases in declaration-table order
462
+ * (`an email address`, `at most 80 characters`, `not before today`): what the
463
+ * prompt lists beside the entry's type, in the words a refusal of each uses.
464
+ */
465
+ export function signatureRulePhrases(entry) {
466
+ if (!entry.type)
467
+ return [];
468
+ const type = entry.type;
469
+ return SIGNATURE_RULE_NAMES.flatMap((rule) => ruleWording(entry, type, rule)?.phrase ?? []);
470
+ }
471
+ /** What each format means, as a refusal and the prompt state it. */
472
+ const FORMAT_PHRASES = {
473
+ email: "an email address",
474
+ url: "an http(s) URL",
475
+ phone: "a phone number in international form, such as +4930123456",
476
+ };
477
+ /** What each declared kind of text reads as in the prompt. */
478
+ const CONTENT_PHRASES = {
479
+ text: "plain text",
480
+ markdown: "Markdown",
481
+ html: "HTML",
482
+ };
483
+ const FORMAT_CHECKS = {
484
+ email: isEmailAddress,
485
+ url: isHttpUrl,
486
+ phone: (value) => value.length <= 16 && PHONE.test(value),
487
+ };
488
+ const PHONE = new RegExp(E164);
489
+ /** WHATWG's `atext` and `.`: the characters a local part may hold. */
490
+ const LOCAL_PART = /^[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+$/;
491
+ const DOMAIN_LABEL = /^[A-Za-z0-9-]{1,63}$/;
492
+ /**
493
+ * The WHATWG "valid email address" grammar, the one `<input type=email>` uses,
494
+ * by hand so it is plainly linear: one `@`, a local part of `atext` and `.`, and
495
+ * a domain of labels of 1–63 letters, digits and `-`, none starting or ending
496
+ * with `-` — with at least two labels, so an address with no TLD
497
+ * (`ann@localhost`) is refused. No quoted local part, no address literal.
498
+ */
499
+ function isEmailAddress(value) {
500
+ const at = value.indexOf("@");
501
+ if (at <= 0 || at !== value.lastIndexOf("@"))
502
+ return false;
503
+ if (!LOCAL_PART.test(value.slice(0, at)))
504
+ return false;
505
+ const labels = value.slice(at + 1).split(".");
506
+ return (labels.length >= 2 &&
507
+ labels.every((label) => DOMAIN_LABEL.test(label) && !label.startsWith("-") && !label.endsWith("-")));
508
+ }
509
+ /**
510
+ * An absolute http(s) URL with no credentials, written as such: the scheme in
511
+ * lower case followed by `//` (the mapped schema's `^https?://` agrees), and no
512
+ * space or control character anywhere — the WHATWG parser would strip or
513
+ * encode those, and nothing is trimmed here.
514
+ */
515
+ function isHttpUrl(value) {
516
+ if (!value.startsWith("http://") && !value.startsWith("https://"))
517
+ return false;
518
+ for (let i = 0; i < value.length; i++) {
519
+ const code = value.charCodeAt(i);
520
+ if (code <= 0x20 || code === 0x7f)
521
+ return false;
522
+ }
523
+ let url;
524
+ try {
525
+ url = new URL(value);
526
+ }
527
+ catch {
528
+ return false;
529
+ }
530
+ return (url.protocol === "http:" || url.protocol === "https:") && url.username === "" && url.password === "";
531
+ }
532
+ /** The code points in `text`, counted no further than one past `limit`. */
533
+ function codePointsUpTo(text, limit) {
534
+ let count = 0;
535
+ for (const _ of text)
536
+ if (++count > limit)
537
+ break;
538
+ return count;
539
+ }
540
+ /**
541
+ * A `file` path's last extension, lower-cased with its leading `.`, or `""`
542
+ * when its file name has none (`notes`, `.env`).
543
+ */
544
+ export function lastExtension(path) {
545
+ const name = path.slice(path.lastIndexOf("/") + 1);
546
+ const dot = name.lastIndexOf(".");
547
+ return dot > 0 ? name.slice(dot).toLowerCase() : "";
548
+ }
549
+ /** A byte count as a refusal states it, 1,000-based: `10 MB`, `512 KB`, `1500 bytes`. */
550
+ export function formatSize(bytes) {
551
+ if (bytes >= 1_000_000 && bytes % 1_000_000 === 0)
552
+ return `${bytes / 1_000_000} MB`;
553
+ if (bytes >= 1_000 && bytes % 1_000 === 0)
554
+ return `${bytes / 1_000} KB`;
555
+ return counted(bytes, "byte", "bytes");
556
+ }
557
+ function counted(n, one, many) {
558
+ return `${n} ${n === 1 ? one : many}`;
559
+ }
560
+ /** `.pdf`, `.pdf or .png`, `.pdf, .png or .jpg`. */
561
+ function oneOf(items) {
562
+ return items.length === 1 ? items[0] : `${items.slice(0, -1).join(", ")} or ${items.at(-1)}`;
563
+ }
130
564
  /** Whether one value conforms to one signature type. */
131
565
  function conforms(type, value) {
132
566
  switch (type) {
@@ -223,6 +657,23 @@ function isDateTime(value) {
223
657
  return false;
224
658
  return true;
225
659
  }
660
+ const INSTANT = /^(\d{4})-(\d{2})-(\d{2})[Tt](\d{2}):(\d{2}):(\d{2})(\.\d+)?(?:[Zz]|([+-])(\d{2}):(\d{2}))$/;
661
+ /**
662
+ * An RFC 3339 date-time (one {@link isDateTime} accepts) as epoch milliseconds,
663
+ * its offset applied and its fraction kept — never `Date.parse`.
664
+ */
665
+ function instantOf(value) {
666
+ const match = INSTANT.exec(value);
667
+ if (!match)
668
+ return Number.NaN;
669
+ const at = new Date(0);
670
+ // setUTCFullYear, not Date.UTC, which reads a year below 100 as 19xx.
671
+ at.setUTCFullYear(Number(match[1]), Number(match[2]) - 1, Number(match[3]));
672
+ at.setUTCHours(Number(match[4]), Number(match[5]), Number(match[6]), 0);
673
+ const fraction = match[7] ? Number(match[7]) * 1000 : 0;
674
+ const offset = match[8] ? (match[8] === "-" ? -1 : 1) * (Number(match[9]) * 60 + Number(match[10])) * 60_000 : 0;
675
+ return at.getTime() + fraction - offset;
676
+ }
226
677
  function daysInMonth(year, month) {
227
678
  if (month === 2)
228
679
  return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 ? 29 : 28;
@@ -1 +1 @@
1
- {"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/machine/signature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/machine/signature.ts"],"names":[],"mappings":"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"}