@ontrails/core 0.2.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 (86) hide show
  1. package/CHANGELOG.md +849 -0
  2. package/README.md +190 -0
  3. package/package.json +36 -0
  4. package/src/activation-provenance.ts +116 -0
  5. package/src/activation-source-compatibility.ts +430 -0
  6. package/src/activation-source-derivation.ts +227 -0
  7. package/src/activation-source.ts +93 -0
  8. package/src/blob-ref.ts +90 -0
  9. package/src/branded.ts +135 -0
  10. package/src/collections.ts +99 -0
  11. package/src/compose-batch.ts +69 -0
  12. package/src/compose-schema.ts +36 -0
  13. package/src/context.ts +66 -0
  14. package/src/derive.ts +485 -0
  15. package/src/detours.ts +8 -0
  16. package/src/diagnostics.ts +21 -0
  17. package/src/draft.ts +350 -0
  18. package/src/entity.ts +346 -0
  19. package/src/error-rendering.ts +87 -0
  20. package/src/errors.ts +483 -0
  21. package/src/execute.ts +1577 -0
  22. package/src/fetch.ts +138 -0
  23. package/src/fire.ts +1172 -0
  24. package/src/glob.ts +81 -0
  25. package/src/guards.ts +37 -0
  26. package/src/index.ts +704 -0
  27. package/src/internal/fork-ctx.ts +69 -0
  28. package/src/layer-field-rendering.ts +193 -0
  29. package/src/layer.ts +81 -0
  30. package/src/observe.ts +361 -0
  31. package/src/path-scope.ts +66 -0
  32. package/src/path-security.ts +98 -0
  33. package/src/patterns/bulk.ts +16 -0
  34. package/src/patterns/change.ts +12 -0
  35. package/src/patterns/date-range.ts +12 -0
  36. package/src/patterns/index.ts +8 -0
  37. package/src/patterns/pagination.ts +22 -0
  38. package/src/patterns/progress.ts +13 -0
  39. package/src/patterns/sorting.ts +14 -0
  40. package/src/patterns/status.ts +11 -0
  41. package/src/patterns/timestamps.ts +12 -0
  42. package/src/permits.ts +12 -0
  43. package/src/queue.ts +163 -0
  44. package/src/redaction/index.ts +3 -0
  45. package/src/redaction/patterns.ts +50 -0
  46. package/src/redaction/redactor.ts +178 -0
  47. package/src/resilience.ts +234 -0
  48. package/src/resource-config.ts +804 -0
  49. package/src/resource.ts +194 -0
  50. package/src/result.ts +212 -0
  51. package/src/run.ts +76 -0
  52. package/src/runtime-builtins.ts +69 -0
  53. package/src/schedule-runtime.ts +689 -0
  54. package/src/schedule.ts +326 -0
  55. package/src/serialization.ts +265 -0
  56. package/src/sha256.ts +136 -0
  57. package/src/signal-diagnostics.ts +633 -0
  58. package/src/signal-ref.ts +111 -0
  59. package/src/signal.ts +104 -0
  60. package/src/store/accessor-protocol.ts +56 -0
  61. package/src/store/index.ts +4 -0
  62. package/src/structured-examples.ts +248 -0
  63. package/src/surface-derivation.ts +91 -0
  64. package/src/surface-filter.ts +101 -0
  65. package/src/surface-overlay.ts +694 -0
  66. package/src/surface-versioning.ts +42 -0
  67. package/src/topo.ts +835 -0
  68. package/src/tracing.ts +346 -0
  69. package/src/trail-id-glob.ts +15 -0
  70. package/src/trail.ts +1351 -0
  71. package/src/trails/derive-trail.ts +835 -0
  72. package/src/trails/index.ts +9 -0
  73. package/src/trails/ingest.ts +152 -0
  74. package/src/trails-db.ts +212 -0
  75. package/src/transport-error-map.ts +163 -0
  76. package/src/type-utils.ts +87 -0
  77. package/src/types.ts +300 -0
  78. package/src/validate-established-topo.ts +73 -0
  79. package/src/validate-topo.ts +725 -0
  80. package/src/validation.ts +330 -0
  81. package/src/version-marker.ts +716 -0
  82. package/src/version-resolution.ts +308 -0
  83. package/src/version-runtime.ts +120 -0
  84. package/src/webhook.ts +461 -0
  85. package/src/workspace.ts +244 -0
  86. package/src/zod-wrappers.ts +72 -0
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Shared Zod wrapper helpers.
3
+ *
4
+ * These helpers walk the wrapper layers of a Zod schema (default, optional,
5
+ * nullable) and rebuild the schema without any default wrappers so that
6
+ * downstream `.partial()` calls do not silently re-materialize defaults during
7
+ * validation. Both `@ontrails/core/trails/derive-trail.ts` and
8
+ * `@ontrails/store/src/store.ts` previously shipped near-identical copies of
9
+ * this walk — extracting them here keeps the wrapper semantics authored in one
10
+ * place so the two call sites cannot drift.
11
+ *
12
+ * Canonical behavior: `optional` wrappers are intentionally dropped. Every
13
+ * current call site applies `.partial()` to the stripped schema, which
14
+ * re-introduces `optional` across the whole shape. Preserving `optional` here
15
+ * would be redundant at best and would produce an `OptionalOptional<T>` shape
16
+ * in edge cases at worst. `nullable` wrappers are preserved because nullability
17
+ * is a semantic constraint that `.partial()` does not reintroduce.
18
+ */
19
+
20
+ import type { z } from 'zod';
21
+
22
+ const isWrapperType = (
23
+ type: string
24
+ ): type is 'default' | 'nullable' | 'optional' =>
25
+ type === 'default' || type === 'nullable' || type === 'optional';
26
+
27
+ const readInnerType = (schema: z.ZodType): z.ZodType =>
28
+ (schema.def as unknown as { innerType: z.ZodType }).innerType;
29
+
30
+ /**
31
+ * Strip `default` wrappers from a Zod type so that partial update schemas do
32
+ * not silently re-materialize defaults. Walks through all wrapper layers
33
+ * (`default`, `optional`, `nullable`), drops defaults, drops `optional` (the
34
+ * downstream `.partial()` reintroduces it across the whole shape), and
35
+ * preserves `nullable` so explicit nullability survives.
36
+ */
37
+ export const stripDefaultWrappers = (schema: z.ZodType): z.ZodType => {
38
+ let current = schema;
39
+ let isNullable = false;
40
+
41
+ while (isWrapperType(current.def.type)) {
42
+ if (current.def.type === 'nullable') {
43
+ isNullable = true;
44
+ }
45
+ current = readInnerType(current);
46
+ }
47
+
48
+ return isNullable ? current.nullable() : current;
49
+ };
50
+
51
+ type AnyObjectSchema = z.ZodObject<Record<string, z.ZodType>>;
52
+
53
+ const asObjectSchema = (schema: z.ZodType): AnyObjectSchema =>
54
+ schema as unknown as AnyObjectSchema;
55
+
56
+ /**
57
+ * Apply {@link stripDefaultWrappers} to every field in a Zod object shape and
58
+ * return the resulting shape record. Callers typically feed the result to
59
+ * `.extend()` + `.partial()`.
60
+ */
61
+ export const stripDefaultsFromShape = (
62
+ schema: z.ZodType
63
+ ): Record<string, z.ZodType> => {
64
+ const stripped: Record<string, z.ZodType> = {};
65
+ const objectSchema = asObjectSchema(schema);
66
+
67
+ for (const [field, value] of Object.entries(objectSchema.shape)) {
68
+ stripped[field] = stripDefaultWrappers(value);
69
+ }
70
+
71
+ return stripped;
72
+ };