@cavelang/solver 0.35.0 → 0.36.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 (119) hide show
  1. package/README.md +2155 -3
  2. package/dist/src/adapter.d.ts +6 -0
  3. package/dist/src/adapter.d.ts.map +1 -1
  4. package/dist/src/adapter.js +3 -0
  5. package/dist/src/adapter.js.map +1 -1
  6. package/dist/src/balanced-reduce.d.ts +3 -0
  7. package/dist/src/balanced-reduce.d.ts.map +1 -0
  8. package/dist/src/balanced-reduce.js +10 -0
  9. package/dist/src/balanced-reduce.js.map +1 -0
  10. package/dist/src/canonical-owned.d.ts +5 -0
  11. package/dist/src/canonical-owned.d.ts.map +1 -0
  12. package/dist/src/canonical-owned.js +206 -0
  13. package/dist/src/canonical-owned.js.map +1 -0
  14. package/dist/src/canonical.d.ts +3 -2
  15. package/dist/src/canonical.d.ts.map +1 -1
  16. package/dist/src/canonical.js +12 -85
  17. package/dist/src/canonical.js.map +1 -1
  18. package/dist/src/capability.d.ts.map +1 -1
  19. package/dist/src/capability.js +43 -33
  20. package/dist/src/capability.js.map +1 -1
  21. package/dist/src/clone.d.ts +3 -0
  22. package/dist/src/clone.d.ts.map +1 -0
  23. package/dist/src/clone.js +54 -0
  24. package/dist/src/clone.js.map +1 -0
  25. package/dist/src/constant-sign.d.ts +5 -0
  26. package/dist/src/constant-sign.d.ts.map +1 -0
  27. package/dist/src/constant-sign.js +54 -0
  28. package/dist/src/constant-sign.js.map +1 -0
  29. package/dist/src/context.d.ts +6 -0
  30. package/dist/src/context.d.ts.map +1 -0
  31. package/dist/src/context.js +151 -0
  32. package/dist/src/context.js.map +1 -0
  33. package/dist/src/diagnostic-text.d.ts +3 -0
  34. package/dist/src/diagnostic-text.d.ts.map +1 -0
  35. package/dist/src/diagnostic-text.js +5 -0
  36. package/dist/src/diagnostic-text.js.map +1 -0
  37. package/dist/src/evaluate-expression.d.ts +4 -0
  38. package/dist/src/evaluate-expression.d.ts.map +1 -0
  39. package/dist/src/evaluate-expression.js +24 -0
  40. package/dist/src/evaluate-expression.js.map +1 -0
  41. package/dist/src/exact.d.ts +2 -0
  42. package/dist/src/exact.d.ts.map +1 -1
  43. package/dist/src/exact.js +125 -28
  44. package/dist/src/exact.js.map +1 -1
  45. package/dist/src/explain.d.ts +4 -0
  46. package/dist/src/explain.d.ts.map +1 -1
  47. package/dist/src/explain.js +330 -91
  48. package/dist/src/explain.js.map +1 -1
  49. package/dist/src/explanation-budget.d.ts +14 -0
  50. package/dist/src/explanation-budget.d.ts.map +1 -0
  51. package/dist/src/explanation-budget.js +46 -0
  52. package/dist/src/explanation-budget.js.map +1 -0
  53. package/dist/src/expression-key.d.ts +8 -0
  54. package/dist/src/expression-key.d.ts.map +1 -0
  55. package/dist/src/expression-key.js +54 -0
  56. package/dist/src/expression-key.js.map +1 -0
  57. package/dist/src/fraction-product.d.ts +3 -0
  58. package/dist/src/fraction-product.d.ts.map +1 -0
  59. package/dist/src/fraction-product.js +13 -0
  60. package/dist/src/fraction-product.js.map +1 -0
  61. package/dist/src/fraction-sum.d.ts +3 -0
  62. package/dist/src/fraction-sum.d.ts.map +1 -0
  63. package/dist/src/fraction-sum.js +23 -0
  64. package/dist/src/fraction-sum.js.map +1 -0
  65. package/dist/src/integer-gcd.d.ts +3 -0
  66. package/dist/src/integer-gcd.d.ts.map +1 -0
  67. package/dist/src/integer-gcd.js +50 -0
  68. package/dist/src/integer-gcd.js.map +1 -0
  69. package/dist/src/linear.d.ts +2 -1
  70. package/dist/src/linear.d.ts.map +1 -1
  71. package/dist/src/linear.js +85 -17
  72. package/dist/src/linear.js.map +1 -1
  73. package/dist/src/numeric-size.d.ts +2 -0
  74. package/dist/src/numeric-size.d.ts.map +1 -0
  75. package/dist/src/numeric-size.js +33 -0
  76. package/dist/src/numeric-size.js.map +1 -0
  77. package/dist/src/options.d.ts +4 -0
  78. package/dist/src/options.d.ts.map +1 -0
  79. package/dist/src/options.js +18 -0
  80. package/dist/src/options.js.map +1 -0
  81. package/dist/src/result.d.ts +4 -0
  82. package/dist/src/result.d.ts.map +1 -0
  83. package/dist/src/result.js +29 -0
  84. package/dist/src/result.js.map +1 -0
  85. package/dist/src/solve.d.ts.map +1 -1
  86. package/dist/src/solve.js +34 -3
  87. package/dist/src/solve.js.map +1 -1
  88. package/dist/src/validate.d.ts +5 -0
  89. package/dist/src/validate.d.ts.map +1 -1
  90. package/dist/src/validate.js +323 -65
  91. package/dist/src/validate.js.map +1 -1
  92. package/dist/src/workflow.d.ts.map +1 -1
  93. package/dist/src/workflow.js +98 -26
  94. package/dist/src/workflow.js.map +1 -1
  95. package/package.json +2 -2
  96. package/src/adapter.ts +9 -0
  97. package/src/balanced-reduce.ts +9 -0
  98. package/src/canonical-owned.ts +186 -0
  99. package/src/canonical.ts +14 -90
  100. package/src/capability.ts +41 -30
  101. package/src/clone.ts +47 -0
  102. package/src/constant-sign.ts +59 -0
  103. package/src/context.ts +114 -0
  104. package/src/diagnostic-text.ts +4 -0
  105. package/src/evaluate-expression.ts +21 -0
  106. package/src/exact.ts +122 -27
  107. package/src/explain.ts +342 -94
  108. package/src/explanation-budget.ts +47 -0
  109. package/src/expression-key.ts +45 -0
  110. package/src/fraction-product.ts +10 -0
  111. package/src/fraction-sum.ts +20 -0
  112. package/src/integer-gcd.ts +47 -0
  113. package/src/linear.ts +82 -16
  114. package/src/numeric-size.ts +26 -0
  115. package/src/options.ts +18 -0
  116. package/src/result.ts +28 -0
  117. package/src/solve.ts +34 -3
  118. package/src/validate.ts +312 -66
  119. package/src/workflow.ts +92 -26
@@ -0,0 +1,4 @@
1
+ import type { Options } from './adapter.ts';
2
+ /** Validate option names and capture supplied fields before applying defaults. */
3
+ export declare const validateOptions: (options: Options) => Options;
4
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,kFAAkF;AAClF,eAAO,MAAM,eAAe,GAAI,SAAS,OAAO,KAAG,OAYlD,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { diagnosticText } from "./diagnostic-text.js";
2
+ import { mergeLimits } from "./validate.js";
3
+ /** Validate option names and capture supplied fields before applying defaults. */
4
+ export const validateOptions = (options) => {
5
+ if (options === null || typeof options !== 'object' || Array.isArray(options)) {
6
+ throw new TypeError('solver options must be an object');
7
+ }
8
+ for (const key of Object.keys(options)) {
9
+ if (key !== 'limits' && key !== 'unsatCore')
10
+ throw new TypeError(`unknown solver option ${diagnosticText(key)}`);
11
+ }
12
+ const unsatCore = options.unsatCore;
13
+ if (unsatCore !== undefined && typeof unsatCore !== 'boolean') {
14
+ throw new TypeError('solver option unsatCore must be a Boolean');
15
+ }
16
+ return { unsatCore, limits: mergeLimits(options.limits) };
17
+ };
18
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAW,EAAE;IAC3D,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAA;IACzD,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,WAAW;YAAE,MAAM,IAAI,SAAS,CAAC,yBAAyB,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAClH,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IACnC,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,SAAS,KAAK,SAAS,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,2CAA2C,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;AAC3D,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Result } from './adapter.ts';
2
+ /** Capture the reported outcome before checking the adapter's proof contract. */
3
+ export declare const captureResult: (input: Result) => Result;
4
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,iFAAiF;AACjF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAsB7C,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { clone } from "./clone.js";
2
+ import { resultMetadata, unknownReason } from "./validate.js";
3
+ /** Capture the reported outcome before checking the adapter's proof contract. */
4
+ export const captureResult = (input) => {
5
+ const result = clone(input);
6
+ if (result === null || typeof result !== 'object' || Array.isArray(result)) {
7
+ throw new TypeError('solver result must be an object');
8
+ }
9
+ switch (result.status) {
10
+ case 'optimal':
11
+ if (result.optimalityProved !== true)
12
+ throw new TypeError('optimal solver result requires optimalityProved: true');
13
+ break;
14
+ case 'unsatisfied':
15
+ if (result.infeasibilityProved !== true)
16
+ throw new TypeError('unsatisfied solver result requires infeasibilityProved: true');
17
+ break;
18
+ case 'satisfied':
19
+ break;
20
+ case 'unknown':
21
+ unknownReason(result.reason);
22
+ break;
23
+ default:
24
+ throw new TypeError('solver result status must be satisfied, optimal, unsatisfied or unknown');
25
+ }
26
+ resultMetadata(result);
27
+ return result;
28
+ };
29
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/result.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7D,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IACrD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAA;IACxD,CAAC;IACD,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,SAAS;YACZ,IAAI,MAAM,CAAC,gBAAgB,KAAK,IAAI;gBAAE,MAAM,IAAI,SAAS,CAAC,uDAAuD,CAAC,CAAA;YAClH,MAAK;QACP,KAAK,aAAa;YAChB,IAAI,MAAM,CAAC,mBAAmB,KAAK,IAAI;gBAAE,MAAM,IAAI,SAAS,CAAC,8DAA8D,CAAC,CAAA;YAC5H,MAAK;QACP,KAAK,WAAW;YACd,MAAK;QACP,KAAK,SAAS;YACZ,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC5B,MAAK;QACP;YACE,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAA;IAClG,CAAC;IACD,cAAc,CAAC,MAAM,CAAC,CAAA;IACtB,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"solve.d.ts","sourceRoot":"","sources":["../../src/solve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAElE,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAevC,6EAA6E;AAC7E,eAAO,MAAM,GAAG,GAAU,SAAS,aAAa,EAAE,OAAO,KAAK,EAAE,UAAS,OAAY,KAAG,OAAO,CAAC,MAAM,CAErG,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,GAC7B,SAAS,aAAa,EACtB,OAAO,KAAK,EACZ,UAAS,OAAY,EACrB,UAAS,OAAO,CAAC,OAAY,KAC5B,OAAO,CAAC,OAAO,CAAC,MAAM,CAGxB,CAAA"}
1
+ {"version":3,"file":"solve.d.ts","sourceRoot":"","sources":["../../src/solve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGlE,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAiCvC,6EAA6E;AAC7E,eAAO,MAAM,GAAG,GAAU,SAAS,aAAa,EAAE,OAAO,KAAK,EAAE,UAAS,OAAY,KAAG,OAAO,CAAC,MAAM,CAErG,CAAA;AAED,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,GAC7B,SAAS,aAAa,EACtB,OAAO,KAAK,EACZ,UAAS,OAAY,EACrB,UAAS,OAAO,CAAC,OAAY,KAC5B,OAAO,CAAC,OAAO,CAAC,MAAM,CAYxB,CAAA"}
package/dist/src/solve.js CHANGED
@@ -1,14 +1,36 @@
1
+ import { captureResult } from "./result.js";
2
+ import { validateContext } from "./context.js";
3
+ import { clone } from "./clone.js";
1
4
  import * as Capability from "./capability.js";
5
+ import * as Canonical from "./canonical.js";
2
6
  import * as Explain from "./explain.js";
3
7
  import * as Validate from "./validate.js";
8
+ import { validateOptions } from "./options.js";
9
+ const freeze = (value) => {
10
+ const pending = [value];
11
+ const seen = new Set();
12
+ while (pending.length > 0) {
13
+ const next = pending.pop();
14
+ if (next === null || typeof next !== 'object' || seen.has(next))
15
+ continue;
16
+ seen.add(next);
17
+ for (const child of Object.values(next))
18
+ pending.push(child);
19
+ Object.freeze(next);
20
+ }
21
+ return value;
22
+ };
4
23
  const prepared = (adapter, model, options) => {
5
- const limits = Validate.mergeLimits(options.limits);
24
+ options = validateOptions(options);
25
+ const limits = Object.freeze(Validate.mergeLimits(options.limits));
26
+ model = clone(model);
6
27
  Validate.model(model, limits);
28
+ model = freeze(model);
7
29
  const unsatCore = options.unsatCore ?? false;
8
30
  const missing = Capability.missing(adapter, model, unsatCore);
9
31
  if (missing.length > 0)
10
32
  throw new Capability.UnsupportedModelError(adapter.backend.name, missing);
11
- return { limits, run: () => adapter.solve(model, { limits, unsatCore }) };
33
+ return { model, limits, run: async () => captureResult(await adapter.solve(model, { limits, unsatCore })) };
12
34
  };
13
35
  /** Validates and negotiates a model before crossing the adapter boundary. */
14
36
  export const run = async (adapter, model, options = {}) => {
@@ -17,6 +39,15 @@ export const run = async (adapter, model, options = {}) => {
17
39
  /** Solve and return a traceable JSON explanation envelope. */
18
40
  export const runWithExplanation = async (adapter, model, options = {}, context = {}) => {
19
41
  const solve = prepared(adapter, model, options);
20
- return Explain.report(model, await solve.run(), solve.limits, context);
42
+ validateContext(context);
43
+ const snapshot = clone(context);
44
+ validateContext(snapshot);
45
+ if (snapshot.modelDigest !== undefined) {
46
+ const digest = Canonical.digest(solve.model, solve.limits);
47
+ if (snapshot.modelDigest !== digest) {
48
+ throw new TypeError(`scenario model digest ${snapshot.modelDigest} does not match ${digest}`);
49
+ }
50
+ }
51
+ return Explain.report(solve.model, await solve.run(), solve.limits, snapshot);
21
52
  };
22
53
  //# sourceMappingURL=solve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"solve.js","sourceRoot":"","sources":["../../src/solve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,MAAM,QAAQ,GAAG,CAAC,OAAsB,EAAE,KAAY,EAAE,OAAgB,EAGtE,EAAE;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC7D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACjG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;AAC3E,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,OAAsB,EAAE,KAAY,EAAE,UAAmB,EAAE,EAAmB,EAAE;IACxG,OAAO,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAA;AAChD,CAAC,CAAA;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,OAAsB,EACtB,KAAY,EACZ,UAAmB,EAAE,EACrB,UAA2B,EAAE,EACJ,EAAE;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC/C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACxE,CAAC,CAAA"}
1
+ {"version":3,"file":"solve.js","sourceRoot":"","sources":["../../src/solve.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,10 @@
1
1
  import type { Limits } from './adapter.ts';
2
2
  import { type Model } from './model.ts';
3
+ export { validateContext as explanationContext } from './context.ts';
4
+ /** Validate a portable unknown-outcome reason without changing its contents. */
5
+ export declare const unknownReason: (value: unknown) => void;
6
+ /** Validate metadata shared by adapter results and explanation runs. */
7
+ export declare const resultMetadata: (value: unknown) => void;
3
8
  export type Stats = {
4
9
  readonly variables: number;
5
10
  readonly constraints: number;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAG1C,OAAO,EAA2B,KAAK,KAAK,EAAgC,MAAM,YAAY,CAAA;AAE9F,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;gBAExB,QAAQ,EAAE,SAAS,MAAM,EAAE;CAKxC;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;gBAEZ,KAAK,EAAE,MAAM,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOjE;AA2LD,eAAO,MAAM,WAAW,GAAI,QAAO,OAAO,CAAC,MAAM,CAAM,KAAG,MAQzD,CAAA;AAgBD,sEAAsE;AACtE,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,aAAY,OAAO,CAAC,MAAM,CAAM,KAAG,KAoFtE,CAAA"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,OAAO,EAA2B,KAAK,KAAK,EAAgC,MAAM,YAAY,CAAA;AAE9F,OAAO,EAAE,eAAe,IAAI,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEpE,gFAAgF;AAChF,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,IAY9C,CAAA;AAED,wEAAwE;AACxE,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,IA4B/C,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;gBAExB,QAAQ,EAAE,SAAS,MAAM,EAAE;CAKxC;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;gBAEZ,KAAK,EAAE,MAAM,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOjE;AAuTD,eAAO,MAAM,WAAW,GAAI,QAAO,OAAO,CAAC,MAAM,CAAM,KAAG,MAgBzD,CAAA;AAgBD,sEAAsE;AACtE,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,aAAY,OAAO,CAAC,MAAM,CAAM,KAAG,KAoJtE,CAAA"}