@venn-lang/contracts 0.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 (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +254 -0
  3. package/dist/index.d.ts +620 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +1342 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/node.d.mts +287 -0
  8. package/dist/node.d.mts.map +1 -0
  9. package/dist/node.mjs +387 -0
  10. package/dist/node.mjs.map +1 -0
  11. package/dist/signal-source.types-BI3TYaCi.d.ts +317 -0
  12. package/dist/signal-source.types-BI3TYaCi.d.ts.map +1 -0
  13. package/dist/testing.d.ts +84 -0
  14. package/dist/testing.d.ts.map +1 -0
  15. package/dist/testing.js +276 -0
  16. package/dist/testing.js.map +1 -0
  17. package/package.json +77 -0
  18. package/src/capabilities/host-capability.ts +18 -0
  19. package/src/capabilities/index.ts +2 -0
  20. package/src/conformance/expect-venn-error.ts +18 -0
  21. package/src/conformance/harness.types.ts +14 -0
  22. package/src/conformance/index.ts +2 -0
  23. package/src/dotenv/dotenv-files.ts +30 -0
  24. package/src/dotenv/index.ts +2 -0
  25. package/src/dotenv/parse-dotenv.ts +34 -0
  26. package/src/errors/contract-codes.ts +37 -0
  27. package/src/errors/index.ts +7 -0
  28. package/src/errors/venn-error.ts +20 -0
  29. package/src/host/create-host.ts +16 -0
  30. package/src/host/create-node-host.ts +29 -0
  31. package/src/host/create-test-host.ts +28 -0
  32. package/src/host/create-worker-host.ts +32 -0
  33. package/src/host/host.types.ts +26 -0
  34. package/src/host/index.ts +5 -0
  35. package/src/host/unavailable.ts +23 -0
  36. package/src/index.ts +10 -0
  37. package/src/logger/console-logger.ts +12 -0
  38. package/src/logger/index.ts +3 -0
  39. package/src/logger/logger.types.ts +18 -0
  40. package/src/logger/memory-logger.ts +12 -0
  41. package/src/node.ts +8 -0
  42. package/src/port/assert-capabilities.ts +18 -0
  43. package/src/port/assert-port-shape.ts +18 -0
  44. package/src/port/bind-port.ts +28 -0
  45. package/src/port/index.ts +5 -0
  46. package/src/port/missing-capabilities.ts +14 -0
  47. package/src/port/port.types.ts +36 -0
  48. package/src/ports/clock/clock.port.ts +15 -0
  49. package/src/ports/clock/clock.types.ts +17 -0
  50. package/src/ports/clock/index.ts +4 -0
  51. package/src/ports/clock/system-clock.ts +9 -0
  52. package/src/ports/clock/virtual-clock.ts +22 -0
  53. package/src/ports/console/console.port.ts +13 -0
  54. package/src/ports/console/console.types.ts +17 -0
  55. package/src/ports/console/index.ts +3 -0
  56. package/src/ports/console/memory-console.ts +36 -0
  57. package/src/ports/console/node-console.ts +80 -0
  58. package/src/ports/file-system/file-system.errors.ts +10 -0
  59. package/src/ports/file-system/file-system.port.ts +12 -0
  60. package/src/ports/file-system/file-system.types.ts +27 -0
  61. package/src/ports/file-system/index.ts +6 -0
  62. package/src/ports/file-system/memory-fs.ts +46 -0
  63. package/src/ports/file-system/node-fs.ts +93 -0
  64. package/src/ports/index.ts +9 -0
  65. package/src/ports/lock-provider/fake-lock.ts +6 -0
  66. package/src/ports/lock-provider/in-process-lock.ts +26 -0
  67. package/src/ports/lock-provider/index.ts +4 -0
  68. package/src/ports/lock-provider/lock-provider.port.ts +16 -0
  69. package/src/ports/lock-provider/lock-provider.types.ts +8 -0
  70. package/src/ports/manifest-provider/default-manifest.ts +31 -0
  71. package/src/ports/manifest-provider/edit/edit-dependency.ts +82 -0
  72. package/src/ports/manifest-provider/edit/index.ts +7 -0
  73. package/src/ports/manifest-provider/edit/table-span.ts +39 -0
  74. package/src/ports/manifest-provider/index.ts +31 -0
  75. package/src/ports/manifest-provider/manifest.port.ts +16 -0
  76. package/src/ports/manifest-provider/manifest.types.ts +54 -0
  77. package/src/ports/manifest-provider/memory-manifest.ts +14 -0
  78. package/src/ports/manifest-provider/project.types.ts +94 -0
  79. package/src/ports/manifest-provider/read/index.ts +15 -0
  80. package/src/ports/manifest-provider/read/read-dependencies.ts +27 -0
  81. package/src/ports/manifest-provider/read/read-package.ts +32 -0
  82. package/src/ports/manifest-provider/read/read-profiles.ts +32 -0
  83. package/src/ports/manifest-provider/read/read-targets.ts +37 -0
  84. package/src/ports/manifest-provider/read/read-tooling.ts +15 -0
  85. package/src/ports/manifest-provider/read/read-workspace.ts +22 -0
  86. package/src/ports/manifest-provider/read/scalars.ts +35 -0
  87. package/src/ports/manifest-provider/read-run-settings.ts +38 -0
  88. package/src/ports/manifest-provider/resolve-alias.ts +22 -0
  89. package/src/ports/manifest-provider/toml/index.ts +3 -0
  90. package/src/ports/manifest-provider/toml/parse-toml.ts +52 -0
  91. package/src/ports/manifest-provider/toml/read-value.ts +104 -0
  92. package/src/ports/manifest-provider/toml/sections.ts +39 -0
  93. package/src/ports/manifest-provider/toml-docs.ts +27 -0
  94. package/src/ports/manifest-provider/toml-manifest.ts +41 -0
  95. package/src/ports/process-provider/fake-process.ts +32 -0
  96. package/src/ports/process-provider/index.ts +10 -0
  97. package/src/ports/process-provider/node-spawn.ts +52 -0
  98. package/src/ports/process-provider/process-provider.port.ts +13 -0
  99. package/src/ports/process-provider/process-provider.types.ts +47 -0
  100. package/src/ports/random/fixed-random.ts +10 -0
  101. package/src/ports/random/index.ts +4 -0
  102. package/src/ports/random/random.port.ts +13 -0
  103. package/src/ports/random/random.types.ts +10 -0
  104. package/src/ports/random/seeded-random.ts +19 -0
  105. package/src/ports/secret-provider/env-secrets.ts +19 -0
  106. package/src/ports/secret-provider/index.ts +6 -0
  107. package/src/ports/secret-provider/memory-secrets.ts +15 -0
  108. package/src/ports/secret-provider/secret-provider.port.ts +13 -0
  109. package/src/ports/secret-provider/secret-provider.types.ts +17 -0
  110. package/src/ports/secret-provider/secret.ts +17 -0
  111. package/src/ports/signal-source/fake-signals.ts +44 -0
  112. package/src/ports/signal-source/index.ts +11 -0
  113. package/src/ports/signal-source/node-signals.ts +33 -0
  114. package/src/ports/signal-source/signal-source.port.ts +13 -0
  115. package/src/ports/signal-source/signal-source.types.ts +24 -0
  116. package/src/testing.ts +16 -0
@@ -0,0 +1,33 @@
1
+ import { constants } from "node:os";
2
+ import process from "node:process";
3
+ import type { SignalSource, SystemSignal, Unsubscribe } from "./signal-source.types.js";
4
+
5
+ /**
6
+ * Whether this platform knows the signal.
7
+ *
8
+ * Not every name exists everywhere: `SIGBREAK` is Windows only, and subscribing
9
+ * to an unknown one throws. Asking first turns a crash at start up into a
10
+ * subscription that never fires.
11
+ */
12
+ export function isKnownSignal(signal: SystemSignal): boolean {
13
+ return signal in constants.signals;
14
+ }
15
+
16
+ /**
17
+ * The real one: the signals this process receives.
18
+ *
19
+ * Lives behind `@venn-lang/contracts/node` because it touches `node:process`, so the
20
+ * main entry stays neutral and still runs in the editor's worker.
21
+ */
22
+ export function createNodeSignals(): SignalSource {
23
+ return {
24
+ on: (signal, handler): Unsubscribe => {
25
+ if (!isKnownSignal(signal)) return () => {};
26
+ const listener = () => handler(signal);
27
+ process.on(signal, listener);
28
+ return () => {
29
+ process.off(signal, listener);
30
+ };
31
+ },
32
+ };
33
+ }
@@ -0,0 +1,13 @@
1
+ import type { Port } from "../../port/index.js";
2
+ import type { SignalSource } from "./signal-source.types.js";
3
+
4
+ /**
5
+ * The {@link SignalSource} contract. Implementations: `node-signals`,
6
+ * `fake-signals`.
7
+ */
8
+ export const SignalSourcePort: Port<SignalSource> = {
9
+ id: "venn.port.signals",
10
+ version: 1,
11
+ requires: ["process"],
12
+ methods: ["on"],
13
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The ways a system asks a program to stop. `SIGBREAK` is Windows' Ctrl+Break,
3
+ * `SIGHUP` is the terminal itself going away.
4
+ */
5
+ export const ALL_SIGNALS = ["SIGINT", "SIGTERM", "SIGBREAK", "SIGHUP"] as const;
6
+
7
+ /** One signal name, drawn from {@link ALL_SIGNALS}. */
8
+ export type SystemSignal = (typeof ALL_SIGNALS)[number];
9
+
10
+ /** Called on every delivery of the signal it was registered for. */
11
+ export type SignalHandler = (signal: SystemSignal) => void;
12
+
13
+ /** Drops a subscription. Calling it more than once is harmless. */
14
+ export type Unsubscribe = () => void;
15
+
16
+ /**
17
+ * Where a program hears the system asking it to stop.
18
+ *
19
+ * The double matters more than usual here: raising a true SIGINT inside a test
20
+ * run stops the test runner, not the code under test.
21
+ */
22
+ export interface SignalSource {
23
+ on(signal: SystemSignal, handler: SignalHandler): Unsubscribe;
24
+ }
package/src/testing.ts ADDED
@@ -0,0 +1,16 @@
1
+ // @venn-lang/contracts/testing: the conformance harness (TCK). It imports vitest and
2
+ // fast-check, so it stays out of the runtime bundle. Any package can run these
3
+ // suites against its own implementation.
4
+ export type { ConformanceSpec, PortFactory } from "./conformance/index.js";
5
+ export { expectVennError } from "./conformance/index.js";
6
+ export { clockConformance } from "./ports/clock/clock.suite.js";
7
+ export { fileSystemConformance } from "./ports/file-system/file-system.suite.js";
8
+ export { lockProviderConformance } from "./ports/lock-provider/lock-provider.suite.js";
9
+ export { manifestProviderConformance } from "./ports/manifest-provider/manifest.suite.js";
10
+ export { processProviderConformance } from "./ports/process-provider/process-provider.suite.js";
11
+ export { randomConformance } from "./ports/random/random.suite.js";
12
+ export { secretProviderConformance } from "./ports/secret-provider/secret-provider.suite.js";
13
+ export {
14
+ type SignalSpec,
15
+ signalSourceConformance,
16
+ } from "./ports/signal-source/signal-source.suite.js";