@ts-runtypes/core 0.9.3 → 0.10.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 (150) hide show
  1. package/dist/cjs/createRTFBinary.js +1 -1
  2. package/dist/cjs/createRTFunctions.d.ts +7 -7
  3. package/dist/cjs/createRTFunctions.js +8 -12
  4. package/dist/cjs/fnHash.d.ts +3 -1
  5. package/dist/cjs/fnHash.js +18 -1
  6. package/dist/cjs/formats/datetime/dateTime-pure-fns.js +313 -313
  7. package/dist/cjs/formats/string/string-formats-pure-fns.js +118 -118
  8. package/dist/cjs/{fnHashes.generated.d.ts → go-generated/fnHashes.generated.d.ts} +29 -15
  9. package/dist/cjs/go-generated/fnHashes.generated.js +49 -0
  10. package/dist/cjs/index.d.ts +6 -6
  11. package/dist/cjs/index.js +9 -10
  12. package/dist/cjs/markers.d.ts +6 -0
  13. package/dist/cjs/mocking/mockBigIntFormat.js +2 -2
  14. package/dist/cjs/mocking/mockInvalid.js +2 -2
  15. package/dist/cjs/mocking/mockNumberFormat.js +2 -2
  16. package/dist/cjs/mocking/mockOversized.js +2 -2
  17. package/dist/cjs/mocking/mockRegistry.d.ts +1 -1
  18. package/dist/cjs/mocking/mockStringFormat.js +2 -2
  19. package/dist/cjs/mocking/mockTemporal.js +16 -16
  20. package/dist/cjs/mocking/mockType.js +53 -53
  21. package/dist/cjs/overrideRTFunctions.d.ts +2 -3
  22. package/dist/cjs/overrideRTFunctions.js +2 -3
  23. package/dist/cjs/runtypes/circular-pure-fns.d.ts +10 -0
  24. package/dist/cjs/runtypes/circular-pure-fns.js +115 -0
  25. package/dist/cjs/runtypes/circular.d.ts +0 -5
  26. package/dist/cjs/runtypes/circular.js +0 -256
  27. package/dist/cjs/runtypes/entryTuple.d.ts +7 -2
  28. package/dist/cjs/runtypes/entryTuple.js +7 -48
  29. package/dist/cjs/runtypes/pure-fns-utils.d.ts +1 -3
  30. package/dist/cjs/runtypes/pure-fns-utils.js +53 -77
  31. package/dist/cjs/runtypes/pureFn.d.ts +6 -3
  32. package/dist/cjs/runtypes/pureFn.js +64 -12
  33. package/dist/cjs/runtypes/rtUtils.d.ts +7 -1
  34. package/dist/cjs/runtypes/rtUtils.js +24 -1
  35. package/dist/cjs/runtypes/types.d.ts +5 -6
  36. package/dist/cjs/standard/createStandardSchema.js +2 -6
  37. package/dist/createRTFBinary.d.ts.map +1 -1
  38. package/dist/createRTFBinary.js +1 -1
  39. package/dist/createRTFBinary.js.map +1 -1
  40. package/dist/createRTFunctions.d.ts +7 -7
  41. package/dist/createRTFunctions.d.ts.map +1 -1
  42. package/dist/createRTFunctions.js +7 -11
  43. package/dist/createRTFunctions.js.map +1 -1
  44. package/dist/fnHash.d.ts +3 -1
  45. package/dist/fnHash.d.ts.map +1 -1
  46. package/dist/fnHash.js +18 -1
  47. package/dist/fnHash.js.map +1 -1
  48. package/dist/formats/datetime/dateTime-pure-fns.js +313 -313
  49. package/dist/formats/string/string-formats-pure-fns.js +118 -118
  50. package/dist/{fnHashes.generated.d.ts → go-generated/fnHashes.generated.d.ts} +29 -15
  51. package/dist/go-generated/fnHashes.generated.d.ts.map +1 -0
  52. package/dist/go-generated/fnHashes.generated.js +47 -0
  53. package/dist/go-generated/fnHashes.generated.js.map +1 -0
  54. package/dist/{runTypeKind.d.ts → go-generated/runTypeKind.generated.d.ts} +1 -1
  55. package/dist/go-generated/runTypeKind.generated.d.ts.map +1 -0
  56. package/dist/{runTypeKind.js → go-generated/runTypeKind.generated.js} +1 -1
  57. package/dist/go-generated/runTypeKind.generated.js.map +1 -0
  58. package/dist/index.d.ts +6 -6
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -5
  61. package/dist/index.js.map +1 -1
  62. package/dist/markers.d.ts +6 -0
  63. package/dist/markers.d.ts.map +1 -1
  64. package/dist/mocking/mockBigIntFormat.js +1 -1
  65. package/dist/mocking/mockBigIntFormat.js.map +1 -1
  66. package/dist/mocking/mockInvalid.js +1 -1
  67. package/dist/mocking/mockInvalid.js.map +1 -1
  68. package/dist/mocking/mockNumberFormat.js +1 -1
  69. package/dist/mocking/mockNumberFormat.js.map +1 -1
  70. package/dist/mocking/mockOversized.js +1 -1
  71. package/dist/mocking/mockOversized.js.map +1 -1
  72. package/dist/mocking/mockRegistry.d.ts +1 -1
  73. package/dist/mocking/mockRegistry.d.ts.map +1 -1
  74. package/dist/mocking/mockStringFormat.js +1 -1
  75. package/dist/mocking/mockStringFormat.js.map +1 -1
  76. package/dist/mocking/mockTemporal.js +1 -1
  77. package/dist/mocking/mockTemporal.js.map +1 -1
  78. package/dist/mocking/mockType.js +1 -1
  79. package/dist/mocking/mockType.js.map +1 -1
  80. package/dist/overrideRTFunctions.d.ts +2 -3
  81. package/dist/overrideRTFunctions.d.ts.map +1 -1
  82. package/dist/overrideRTFunctions.js +1 -2
  83. package/dist/overrideRTFunctions.js.map +1 -1
  84. package/dist/runtypes/circular-pure-fns.d.ts +11 -0
  85. package/dist/runtypes/circular-pure-fns.d.ts.map +1 -0
  86. package/dist/runtypes/circular-pure-fns.js +114 -0
  87. package/dist/runtypes/circular-pure-fns.js.map +1 -0
  88. package/dist/runtypes/circular.d.ts +0 -5
  89. package/dist/runtypes/circular.d.ts.map +1 -1
  90. package/dist/runtypes/circular.js +0 -252
  91. package/dist/runtypes/circular.js.map +1 -1
  92. package/dist/runtypes/entryTuple.d.ts +7 -2
  93. package/dist/runtypes/entryTuple.d.ts.map +1 -1
  94. package/dist/runtypes/entryTuple.js +7 -48
  95. package/dist/runtypes/entryTuple.js.map +1 -1
  96. package/dist/runtypes/pure-fns-utils.d.ts +1 -3
  97. package/dist/runtypes/pure-fns-utils.d.ts.map +1 -1
  98. package/dist/runtypes/pure-fns-utils.js +52 -76
  99. package/dist/runtypes/pure-fns-utils.js.map +1 -1
  100. package/dist/runtypes/pureFn.d.ts +6 -3
  101. package/dist/runtypes/pureFn.d.ts.map +1 -1
  102. package/dist/runtypes/pureFn.js +61 -12
  103. package/dist/runtypes/pureFn.js.map +1 -1
  104. package/dist/runtypes/rtUtils.d.ts +7 -1
  105. package/dist/runtypes/rtUtils.d.ts.map +1 -1
  106. package/dist/runtypes/rtUtils.js +23 -1
  107. package/dist/runtypes/rtUtils.js.map +1 -1
  108. package/dist/runtypes/types.d.ts +5 -6
  109. package/dist/runtypes/types.d.ts.map +1 -1
  110. package/dist/standard/createStandardSchema.d.ts.map +1 -1
  111. package/dist/standard/createStandardSchema.js +2 -6
  112. package/dist/standard/createStandardSchema.js.map +1 -1
  113. package/package.json +3 -3
  114. package/skills/rt-enrich-types/SKILL.md +11 -12
  115. package/skills/runtypes-friendly-type/SKILL.md +19 -19
  116. package/skills/runtypes-mock-data/SKILL.md +9 -9
  117. package/src/createRTFBinary.ts +8 -10
  118. package/src/createRTFunctions.ts +79 -61
  119. package/src/enrich/friendlyText.ts +1 -1
  120. package/src/fnHash.ts +30 -1
  121. package/src/go-generated/README.md +37 -0
  122. package/src/{fnHashes.generated.ts → go-generated/fnHashes.generated.ts} +41 -10
  123. package/src/{runTypeKind.ts → go-generated/runTypeKind.generated.ts} +5 -3
  124. package/src/index.ts +21 -18
  125. package/src/markers.ts +44 -4
  126. package/src/mocking/mockBigIntFormat.ts +1 -1
  127. package/src/mocking/mockInvalid.ts +1 -1
  128. package/src/mocking/mockNumberFormat.ts +1 -1
  129. package/src/mocking/mockOversized.ts +1 -1
  130. package/src/mocking/mockRegistry.ts +1 -1
  131. package/src/mocking/mockStringFormat.ts +1 -1
  132. package/src/mocking/mockTemporal.ts +1 -1
  133. package/src/mocking/mockType.ts +2 -2
  134. package/src/overrideRTFunctions.ts +4 -10
  135. package/src/runtypes/circular-pure-fns.ts +184 -0
  136. package/src/runtypes/circular.ts +12 -294
  137. package/src/runtypes/entryTuple.ts +37 -80
  138. package/src/runtypes/pure-fns-utils.ts +14 -46
  139. package/src/runtypes/pureFn.ts +186 -36
  140. package/src/runtypes/rtUtils.ts +54 -4
  141. package/src/runtypes/types.ts +15 -8
  142. package/src/standard/createStandardSchema.ts +5 -16
  143. package/dist/cjs/fnHashes.generated.js +0 -31
  144. package/dist/fnHashes.generated.d.ts.map +0 -1
  145. package/dist/fnHashes.generated.js +0 -29
  146. package/dist/fnHashes.generated.js.map +0 -1
  147. package/dist/runTypeKind.d.ts.map +0 -1
  148. package/dist/runTypeKind.js.map +0 -1
  149. /package/dist/cjs/{runTypeKind.d.ts → go-generated/runTypeKind.generated.d.ts} +0 -0
  150. /package/dist/cjs/{runTypeKind.js → go-generated/runTypeKind.generated.js} +0 -0
@@ -35,7 +35,7 @@ function binarySizingKey(schemaId, injected) {
35
35
  function createBinaryEncoder(valOrSchema, options, id) {
36
36
  const schemaId = (0, rtUtils_ts_1.isRunTypeSchema)(valOrSchema) ? valOrSchema.id : undefined;
37
37
  const cacheKey = options?.cacheKey ?? binarySizingKey(schemaId, id);
38
- const encodeFn = (0, entryTuple_ts_1.resolveEntryTupleFn)('createBinaryEncoder', noopToBinaryFn, schemaId, id, options?.rejectCircularRefs);
38
+ const encodeFn = (0, entryTuple_ts_1.resolveEntryTupleFn)('createBinaryEncoder', noopToBinaryFn, schemaId, id);
39
39
  const sizeStrategy = options?.sizeStrategy ?? 'dynamic';
40
40
  if (sizeStrategy === 'precalculate') {
41
41
  const fn = (value) => {
@@ -28,10 +28,12 @@ export type GetValidationErrorsFn = (value: unknown, path?: RTValidationErrorPat
28
28
  export interface HasUnknownKeysOptions {
29
29
  checkNonRTProps?: boolean;
30
30
  }
31
+ export interface HasUnknownKeysCompileOptions {
32
+ runsAfterValidation?: boolean;
33
+ }
31
34
  export type HasUnknownKeysFn = (value: unknown, options?: HasUnknownKeysOptions) => boolean;
32
- export type StripUnknownKeysFn = (value: unknown) => unknown;
35
+ export type CloneExactShapeFn<T = unknown> = (value: T) => T;
33
36
  export type UnknownKeyErrorsFn = (value: unknown, path?: RTValidationErrorPathSegment[], errors?: RTValidationError[]) => RTValidationError[];
34
- export type UnknownKeysToUndefinedFn = (value: unknown) => unknown;
35
37
  export type FormatTransformValue<T> = T extends string ? string : T extends number ? number : T extends boolean ? boolean : T extends readonly (infer E)[] ? FormatTransformValue<E>[] : T extends object ? {
36
38
  [K in keyof T]: FormatTransformValue<T[K]>;
37
39
  } : T;
@@ -52,10 +54,9 @@ export type JsonDecoderOptions = {
52
54
  };
53
55
  export declare const createValidate: (<T>(schema: RunType<T>, options?: CompTimeFnArgs<ValidateOptions>, id?: InjectTypeFnArgs<T, "val">) => ValidateFn<T>) & (<T>(val?: T, options?: CompTimeFnArgs<ValidateOptions>, id?: InjectTypeFnArgs<T, "val">) => ValidateFn<T>);
54
56
  export declare const createGetValidationErrors: (<T>(schema: RunType<T>, options?: CompTimeFnArgs<ValidateOptions>, id?: InjectTypeFnArgs<T, "verr">) => GetValidationErrorsFn) & (<T>(val?: T, options?: CompTimeFnArgs<ValidateOptions>, id?: InjectTypeFnArgs<T, "verr">) => GetValidationErrorsFn);
55
- export declare const createHasUnknownKeys: (<T>(schema: RunType<T>, id?: InjectTypeFnArgs<T, "huk">) => HasUnknownKeysFn) & (<T>(val?: T, id?: InjectTypeFnArgs<T, "huk">) => HasUnknownKeysFn);
56
- export declare const createStripUnknownKeys: (<T>(schema: RunType<T>, id?: InjectTypeFnArgs<T, "suk">) => StripUnknownKeysFn) & (<T>(val?: T, id?: InjectTypeFnArgs<T, "suk">) => StripUnknownKeysFn);
57
+ export declare const createHasUnknownKeys: (<T>(schema: RunType<T>, options?: CompTimeFnArgs<HasUnknownKeysCompileOptions>, id?: InjectTypeFnArgs<T, "huk">) => HasUnknownKeysFn) & (<T>(val?: T, options?: CompTimeFnArgs<HasUnknownKeysCompileOptions>, id?: InjectTypeFnArgs<T, "huk">) => HasUnknownKeysFn);
58
+ export declare const createCloneExactShape: (<T>(schema: RunType<T>, id?: InjectTypeFnArgs<T, "ces">) => CloneExactShapeFn<T>) & (<T>(val?: T, id?: InjectTypeFnArgs<T, "ces">) => CloneExactShapeFn<T>);
57
59
  export declare const createUnknownKeyErrors: (<T>(schema: RunType<T>, id?: InjectTypeFnArgs<T, "uke">) => UnknownKeyErrorsFn) & (<T>(val?: T, id?: InjectTypeFnArgs<T, "uke">) => UnknownKeyErrorsFn);
58
- export declare const createUnknownKeysToUndefined: (<T>(schema: RunType<T>, id?: InjectTypeFnArgs<T, "uku">) => UnknownKeysToUndefinedFn) & (<T>(val?: T, id?: InjectTypeFnArgs<T, "uku">) => UnknownKeysToUndefinedFn);
59
60
  export declare const createFormatTransform: (<T>(schema: RunType<T>, id?: InjectTypeFnArgs<T, "fmt">) => FormatTransformFn<T>) & (<T>(val?: T, id?: InjectTypeFnArgs<T, "fmt">) => FormatTransformFn<T>);
60
61
  export declare function createJsonEncoder<T>(schema: RunType<T>, options?: CompTimeFnArgs<JsonEncoderOptions>, id?: InjectTypeFnArgs<T, 'jsonEncoder'>): JsonEncoderFn;
61
62
  export declare function createJsonEncoder<T>(val?: T, options?: CompTimeFnArgs<JsonEncoderOptions>, id?: InjectTypeFnArgs<T, 'jsonEncoder'>): JsonEncoderFn;
@@ -65,9 +66,8 @@ export interface RTFunctionByKey {
65
66
  val: ValidateFn;
66
67
  verr: GetValidationErrorsFn;
67
68
  huk: HasUnknownKeysFn;
68
- suk: StripUnknownKeysFn;
69
+ ces: CloneExactShapeFn;
69
70
  uke: UnknownKeyErrorsFn;
70
- uku: UnknownKeysToUndefinedFn;
71
71
  fmt: FormatTransformFn<unknown>;
72
72
  jsonEncoder: JsonEncoderFn;
73
73
  jsonDecoder: JsonDecoderFn;
@@ -1,20 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createFormatTransform = exports.createUnknownKeysToUndefined = exports.createUnknownKeyErrors = exports.createStripUnknownKeys = exports.createHasUnknownKeys = exports.createGetValidationErrors = exports.createValidate = void 0;
3
+ exports.createFormatTransform = exports.createUnknownKeyErrors = exports.createCloneExactShape = exports.createHasUnknownKeys = exports.createGetValidationErrors = exports.createValidate = void 0;
4
4
  exports.createJsonEncoder = createJsonEncoder;
5
5
  exports.createJsonDecoder = createJsonDecoder;
6
6
  exports.getRTFunction = getRTFunction;
7
7
  const rtUtils_ts_1 = require("./runtypes/rtUtils.js");
8
8
  const entryTuple_ts_1 = require("./runtypes/entryTuple.js");
9
- function resolveTupleEntry(fnName, identityFn, val, args, rejectCircularRefs) {
9
+ function resolveTupleEntry(fnName, identityFn, val, args) {
10
10
  const schemaId = (0, rtUtils_ts_1.isRunTypeSchema)(val) ? val.id : undefined;
11
- return (0, entryTuple_ts_1.resolveEntryTupleFn)(fnName, identityFn, schemaId, args, rejectCircularRefs);
12
- }
13
- function readRejectCircularRefs(options) {
14
- return options?.rejectCircularRefs;
11
+ return (0, entryTuple_ts_1.resolveEntryTupleFn)(fnName, identityFn, schemaId, args);
15
12
  }
16
13
  function createTypeFnArgsFunction(fnName, identityFn) {
17
- return (val, options, args) => resolveTupleEntry(fnName, identityFn, val, args, readRejectCircularRefs(options));
14
+ return (val, _options, args) => resolveTupleEntry(fnName, identityFn, val, args);
18
15
  }
19
16
  function createRTFunction(fnName, identityFn) {
20
17
  return (val, args) => resolveTupleEntry(fnName, identityFn, val, args);
@@ -24,15 +21,14 @@ const getValidationErrorsIdentity = () => [];
24
21
  const unknownKeyErrorsIdentity = () => [];
25
22
  exports.createValidate = createTypeFnArgsFunction('createValidate', (() => true));
26
23
  exports.createGetValidationErrors = createTypeFnArgsFunction('createGetValidationErrors', getValidationErrorsIdentity);
27
- exports.createHasUnknownKeys = createRTFunction('createHasUnknownKeys', () => false);
28
- exports.createStripUnknownKeys = createRTFunction('createStripUnknownKeys', identityValueFn);
24
+ exports.createHasUnknownKeys = createTypeFnArgsFunction('createHasUnknownKeys', () => false);
25
+ exports.createCloneExactShape = createRTFunction('createCloneExactShape', identityValueFn);
29
26
  exports.createUnknownKeyErrors = createRTFunction('createUnknownKeyErrors', unknownKeyErrorsIdentity);
30
- exports.createUnknownKeysToUndefined = createRTFunction('createUnknownKeysToUndefined', identityValueFn);
31
27
  exports.createFormatTransform = createRTFunction('createFormatTransform', identityValueFn);
32
28
  const jsonStringifyFallback = (v) => JSON.stringify(v);
33
29
  const jsonParseFallback = (s) => JSON.parse(s);
34
- function createJsonEncoder(valOrSchema, options, id) {
35
- return resolveTupleEntry('createJsonEncoder', jsonStringifyFallback, valOrSchema, id, options?.rejectCircularRefs);
30
+ function createJsonEncoder(valOrSchema, _options, id) {
31
+ return resolveTupleEntry('createJsonEncoder', jsonStringifyFallback, valOrSchema, id);
36
32
  }
37
33
  function createJsonDecoder(valOrSchema, options, id) {
38
34
  return resolveTupleEntry('createJsonDecoder', jsonParseFallback, valOrSchema, id);
@@ -1,8 +1,10 @@
1
- import { FN_HASHES } from './fnHashes.generated.ts';
1
+ import { FN_HASHES } from './go-generated/fnHashes.generated.ts';
2
2
  export type FnHashKey = keyof typeof FN_HASHES;
3
3
  export interface FnHashOptions {
4
4
  noLiterals?: boolean;
5
5
  noIsArrayCheck?: boolean;
6
6
  strategy?: string;
7
+ runsAfterValidation?: boolean;
8
+ rejectCircularRefs?: boolean;
7
9
  }
8
10
  export declare function getFnHash(fnKey: FnHashKey | (string & {}), options?: FnHashOptions): string;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getFnHash = getFnHash;
4
- const fnHashes_generated_ts_1 = require("./fnHashes.generated.js");
4
+ const fnHashes_generated_ts_1 = require("./go-generated/fnHashes.generated.js");
5
5
  function validateVariantToken(options) {
6
6
  if (!options)
7
7
  return '';
@@ -15,6 +15,19 @@ function validateVariantToken(options) {
15
15
  }
16
16
  return hit ? suffix : '';
17
17
  }
18
+ function hasUnknownKeysVariantToken(options) {
19
+ if (!options)
20
+ return '';
21
+ let suffix = 'O';
22
+ let hit = false;
23
+ for (const [name, letter] of fnHashes_generated_ts_1.HAS_UNKNOWN_KEYS_OPTION_LETTERS) {
24
+ if (options[name]) {
25
+ suffix += letter;
26
+ hit = true;
27
+ }
28
+ }
29
+ return hit ? suffix : '';
30
+ }
18
31
  function getFnHash(fnKey, options) {
19
32
  const entry = fnHashes_generated_ts_1.FN_HASHES[fnKey];
20
33
  if (!entry)
@@ -24,6 +37,10 @@ function getFnHash(fnKey, options) {
24
37
  token = validateVariantToken(options);
25
38
  else if (entry.axis === 'jsonStrategy')
26
39
  token = options?.strategy ?? entry.defaultVariant ?? '';
40
+ else if (entry.axis === 'hasUnknownKeysOptions')
41
+ token = hasUnknownKeysVariantToken(options);
42
+ if (entry.circularGuarded && options?.rejectCircularRefs)
43
+ token += 'C';
27
44
  const hash = entry.variants[token];
28
45
  if (hash === undefined)
29
46
  throw new Error(`getFnHash: fnKey ${JSON.stringify(fnKey)} has no ${JSON.stringify(token)} variant`);