@valancex/valance 0.4.0 → 0.6.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.
- package/README.md +5 -4
- package/dist/errors.d.ts +30 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +22 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +41 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -12
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -1
- package/dist/internal.js.map +1 -1
- package/dist/web-manifest.d.ts +74 -0
- package/dist/web-manifest.d.ts.map +1 -0
- package/dist/web-manifest.js +151 -0
- package/dist/web-manifest.js.map +1 -0
- package/dist/web-payload.d.ts +19 -0
- package/dist/web-payload.d.ts.map +1 -0
- package/dist/web-payload.js +15 -0
- package/dist/web-payload.js.map +1 -0
- package/dist/web.d.ts +34 -4
- package/dist/web.d.ts.map +1 -1
- package/dist/web.js +79 -6
- package/dist/web.js.map +1 -1
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ import { renderToHtml } from "@valancex/valance/web/server";
|
|
|
13
13
|
- **Install** (a strict package manager resolves only what you declare, so declare the application-level and build-time packages yourself):
|
|
14
14
|
|
|
15
15
|
```console
|
|
16
|
-
$ pnpm add @valancex/valance @valancex/nexus@^0.10.3 @valancex/mesh-runtime@^0.9.0 @valancex/port-web@^0.
|
|
16
|
+
$ pnpm add @valancex/valance @valancex/nexus@^0.10.3 @valancex/mesh-runtime@^0.9.0 @valancex/port-web@^0.3.0 effect@^3.10.0
|
|
17
17
|
$ pnpm add -D @valancex/mesh-compiler@^0.9.0
|
|
18
18
|
```
|
|
19
19
|
|
|
@@ -22,15 +22,16 @@ import { renderToHtml } from "@valancex/valance/web/server";
|
|
|
22
22
|
| `@valancex/valance` | the release you target | this package |
|
|
23
23
|
| `@valancex/nexus` | `^0.10.3` | **application-level**: your commands, state handles and capabilities are written against it. Also this package's own dependency, so use the same range and one copy is shared |
|
|
24
24
|
| `@valancex/mesh-runtime` | `^0.8.0 \|\| ^0.9.0` | peer: renders programs at run time (the one runtime: NEXUS 0.10.3 shares it) |
|
|
25
|
-
| `@valancex/port-web` | `^0.
|
|
25
|
+
| `@valancex/port-web` | `^0.3.0` | optional peer: needed for `./web` and `./web/server` |
|
|
26
26
|
| `effect` | `^3.10.0` | peer |
|
|
27
27
|
| `@valancex/mesh-compiler` | `^0.9.0` | **build time only** (devDependency): compiles MPRX to the `program` each view takes (`compileProgram`) |
|
|
28
28
|
|
|
29
|
-
- **Async work and startup:** a command can wait; once admitted it belongs to the application, and closing the application cancels it. Loading and failure are ordinary state. The optional `start` field of `define` names a command the application runs once when it starts (added in 0.4.0). See [Async work](https://github.com/ValanceX/Valance/blob/main/docs/learn/async-work.md) and [Startup work](https://github.com/ValanceX/Valance/blob/main/docs/learn/startup-work.md).
|
|
29
|
+
- **Async work and startup:** a command can wait; once admitted it belongs to the application, and closing the application cancels it. Loading and failure are ordinary state; `command(state).waiting` writes a Promise-shaped one without NEXUS or Effect (added in 0.5.0). The optional `start` field of `define` names a command the application runs once when it starts (added in 0.4.0). See [Async work](https://github.com/ValanceX/Valance/blob/main/docs/learn/async-work.md) and [Startup work](https://github.com/ValanceX/Valance/blob/main/docs/learn/startup-work.md).
|
|
30
30
|
- **Lifetimes:** the application, each mount and each history live in separate, caller-owned `Scope`s; closing one never closes another. Closing the application's `Scope` ends commits (state stays readable); mounts then end inert.
|
|
31
31
|
- **Presentation:** a mount presents committed state as a latest-state consumer: it may skip superseded intermediate states and converges on the latest. Same view is an `update`, another view a `draw`; `hydrate` takes over server markup and then behaves like `mount`. A mount's failure is local to it; recovery is a fresh mount.
|
|
32
32
|
- **History:** `Web.history` follows committed state and runs the application's own navigate command on popstate; it owns its listener's `Scope` only.
|
|
33
|
+
- **Refusals:** work turned away because the application is closing is a defect with a stable code; `isRefusal(defect)` tells it from a bug.
|
|
33
34
|
- **Status:** pre-1.0. `./internal` is the composition protocol for binding authors and tests, unstable by design.
|
|
34
|
-
- **The contract:** [`docs/V1_CONTRACT.md`](https://github.com/ValanceX/Valance/blob/main/docs/V1_CONTRACT.md) states what VALANCE guarantees, what the caller owns and what is not guaranteed. Engineering constraints: [`docs/CONSTRAINTS.md`](https://github.com/ValanceX/Valance/blob/main/docs/CONSTRAINTS.md). Historical investigation record: [`docs/FINDINGS.md`](https://github.com/ValanceX/Valance/blob/main/docs/FINDINGS.md). Release notes: [`docs/releases/v0.
|
|
35
|
+
- **The contract:** [`docs/V1_CONTRACT.md`](https://github.com/ValanceX/Valance/blob/main/docs/V1_CONTRACT.md) states what VALANCE guarantees, what the caller owns and what is not guaranteed. Engineering constraints: [`docs/CONSTRAINTS.md`](https://github.com/ValanceX/Valance/blob/main/docs/CONSTRAINTS.md). Historical investigation record: [`docs/FINDINGS.md`](https://github.com/ValanceX/Valance/blob/main/docs/FINDINGS.md). Release notes: [`docs/releases/v0.5.md`](https://github.com/ValanceX/Valance/blob/main/docs/releases/v0.5.md) (current), [`v0.4.md`](https://github.com/ValanceX/Valance/blob/main/docs/releases/v0.4.md), [`v0.3.md`](https://github.com/ValanceX/Valance/blob/main/docs/releases/v0.3.md), [`v0.2.1.md`](https://github.com/ValanceX/Valance/blob/main/docs/releases/v0.2.1.md), [`v0.2.md`](https://github.com/ValanceX/Valance/blob/main/docs/releases/v0.2.md), [`v0.1.md`](https://github.com/ValanceX/Valance/blob/main/docs/releases/v0.1.md).
|
|
35
36
|
|
|
36
37
|
MIT licensed.
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Why VALANCE died with a defect: the stable identity of a `ValanceError`. */
|
|
2
|
+
export type ValanceErrorCode =
|
|
3
|
+
/** Admission is closed: the application's Scope is closing (it is draining), so no new command, event or navigation is admitted. A refusal. */
|
|
4
|
+
"admission-closed"
|
|
5
|
+
/** The application ended before its first render: the state stream is over, so `mount` or `hydrate` has nothing to draw. A refusal. */
|
|
6
|
+
| "application-ended"
|
|
7
|
+
/** The handle is not one `start` returned. A refusal. */
|
|
8
|
+
| "not-an-application"
|
|
9
|
+
/** A command table holds a bare name that is not a command. A mistake in the definition. */
|
|
10
|
+
| "bare-command-binding"
|
|
11
|
+
/** A render names a view the definition doesn't have. A mistake in the definition. */
|
|
12
|
+
| "unknown-view"
|
|
13
|
+
/** A target reported an interaction before anything was drawn. A mistake in the target. */
|
|
14
|
+
| "target-not-drawn";
|
|
15
|
+
/**
|
|
16
|
+
* The defect VALANCE dies with for misuse and for work refused because the application is closing. It is a defect, never a typed
|
|
17
|
+
* failure; typed failures carry `_tag`, and a thrown or dying error carries `code` (as NEXUS's `Runtime.Refusal` does). Messages are for people.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ValanceError extends Error {
|
|
20
|
+
readonly code: ValanceErrorCode;
|
|
21
|
+
constructor(code: ValanceErrorCode, message: string);
|
|
22
|
+
}
|
|
23
|
+
/** Whether `value` is a `ValanceError`, by its shape and not its class, so it works across two installed copies of the package. */
|
|
24
|
+
export declare const isValanceError: (value: unknown) => value is ValanceError;
|
|
25
|
+
/**
|
|
26
|
+
* Whether `value`, usually a defect taken from a `Cause`, is a refusal: work turned away because the application, or the NEXUS runtime under
|
|
27
|
+
* it, is closing or has ended (or the handle was never one). A command that races a shutdown reads this to tell the refusal from a bug.
|
|
28
|
+
*/
|
|
29
|
+
export declare const isRefusal: (value: unknown) => boolean;
|
|
30
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB;AAC1B,+IAA+I;AAC7I,kBAAkB;AACpB,uIAAuI;GACrI,mBAAmB;AACrB,yDAAyD;GACvD,oBAAoB;AACtB,4FAA4F;GAC1F,sBAAsB;AACxB,sFAAsF;GACpF,cAAc;AAChB,2FAA2F;GACzF,kBAAkB,CAAC;AAEvB;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBAEpB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAKpD;AAID,mIAAmI;AACnI,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,YAC+H,CAAC;AAEzL;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,OACoI,CAAC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as Nexus from "@valancex/nexus";
|
|
2
|
+
/**
|
|
3
|
+
* The defect VALANCE dies with for misuse and for work refused because the application is closing. It is a defect, never a typed
|
|
4
|
+
* failure; typed failures carry `_tag`, and a thrown or dying error carries `code` (as NEXUS's `Runtime.Refusal` does). Messages are for people.
|
|
5
|
+
*/
|
|
6
|
+
export class ValanceError extends Error {
|
|
7
|
+
code;
|
|
8
|
+
constructor(code, message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.name = "ValanceError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const CODES = new Set(["admission-closed", "application-ended", "not-an-application", "bare-command-binding", "unknown-view", "target-not-drawn"]);
|
|
15
|
+
/** Whether `value` is a `ValanceError`, by its shape and not its class, so it works across two installed copies of the package. */
|
|
16
|
+
export const isValanceError = (value) => value instanceof Error && value.name === "ValanceError" && typeof value.code === "string" && CODES.has(value.code);
|
|
17
|
+
/**
|
|
18
|
+
* Whether `value`, usually a defect taken from a `Cause`, is a refusal: work turned away because the application, or the NEXUS runtime under
|
|
19
|
+
* it, is closing or has ended (or the handle was never one). A command that races a shutdown reads this to tell the refusal from a bug.
|
|
20
|
+
*/
|
|
21
|
+
export const isRefusal = (value) => Nexus.Runtime.isRefusal(value) || (isValanceError(value) && (value.code === "admission-closed" || value.code === "application-ended" || value.code === "not-an-application"));
|
|
22
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAiBzC;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAmB;IAEhC,YAAY,IAAsB,EAAE,OAAe;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,KAAK,GAAwB,IAAI,GAAG,CAAmB,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAE1L,mIAAmI;AACnI,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAyB,EAAE,CACtE,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,OAAQ,KAAuC,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAE,KAAqC,CAAC,IAAI,CAAC,CAAC;AAEzL;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE,CACnD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,8 +22,14 @@ import type { BoundaryValue, RenderTree, SourceSpan } from "@valancex/mesh-runti
|
|
|
22
22
|
import * as Nexus from "@valancex/nexus";
|
|
23
23
|
import { type DispatchExit } from "./internal.js";
|
|
24
24
|
import { Effect, Exit, Schema, Scope } from "effect";
|
|
25
|
+
export { isRefusal, isValanceError, ValanceError } from "./errors.js";
|
|
26
|
+
export type { ValanceErrorCode } from "./errors.js";
|
|
25
27
|
/** What a command binding may require: only what the NEXUS application runtime itself provides. */
|
|
26
28
|
export type Ambient = Nexus.Capability.EnvironmentShape | Nexus.Event.EventBusShape;
|
|
29
|
+
/** A compiled view description: what `compileProgram` returns as `program`, and what a view's `program` takes. Opaque; VALANCE never looks inside it. */
|
|
30
|
+
export type Program = Nexus.Mesh.Program;
|
|
31
|
+
/** The state as `commands` receives it, for typing a `commands` function written apart from `define` (for example, to derive the manifest from it). */
|
|
32
|
+
export type StateHandle<S> = Nexus.State.StateHandle<S>;
|
|
27
33
|
/** One MESH program the application can show, and the manifest-shaped values it is rendered from. */
|
|
28
34
|
export interface View<S> {
|
|
29
35
|
/** MESH program: templates compiled at build time, and the manifest's text. */
|
|
@@ -90,6 +96,40 @@ type RequirementOf<V> = V extends Nexus.Command.Command<any, any, any, infer Req
|
|
|
90
96
|
export declare const define: <S, T extends CommandTable<any, Ambient>, V extends string>(definition: Omit<ApplicationDefinition<S, never, never, V>, "commands"> & {
|
|
91
97
|
readonly commands: (state: Nexus.State.StateHandle<S>) => T;
|
|
92
98
|
}) => ApplicationDefinition<S, ErrorOf<T[keyof T]> | Nexus.Command.CommandValidationError, Extract<RequirementOf<T[keyof T]>, Ambient>, V>;
|
|
99
|
+
/** How a waiting command's work ended: the value it produced, or what its Promise rejected with, as received. */
|
|
100
|
+
export type Outcome<A> = {
|
|
101
|
+
readonly ok: true;
|
|
102
|
+
readonly value: A;
|
|
103
|
+
} | {
|
|
104
|
+
readonly ok: false;
|
|
105
|
+
readonly error: unknown;
|
|
106
|
+
};
|
|
107
|
+
/** What a command that waits says. Every function is a plain function of the state; none may throw (a throw is a defect, as in any command). */
|
|
108
|
+
export interface Waiting<S, I, A> {
|
|
109
|
+
/** The state when the run starts, before the work: typically "loading". Optional: the state may already say so (start-time work). */
|
|
110
|
+
readonly begin?: (input: I, current: S) => S;
|
|
111
|
+
/** The work: the only asynchronous thing. `signal` aborts when the run is interrupted (the application closes). Its result, or rejection, reaches `settle`. */
|
|
112
|
+
readonly work: (input: I, signal: AbortSignal) => Promise<A>;
|
|
113
|
+
/**
|
|
114
|
+
* Is the result still relevant to the state as it is NOW? Asked when the work ends, in the same step as the commit; false and nothing is committed. **Required**, because a
|
|
115
|
+
* result that no longer fits the application must not land silently. This is relevance to the application's state; it is separate from, and in addition to, a newer run of this
|
|
116
|
+
* same command superseding an older one, which needs no code.
|
|
117
|
+
*/
|
|
118
|
+
readonly wanted: (input: I, current: S) => boolean;
|
|
119
|
+
/** The state once the work has ended and the result is wanted: success and failure alike are ordinary state. */
|
|
120
|
+
readonly settle: (outcome: Outcome<A>, input: I, current: S) => S;
|
|
121
|
+
}
|
|
122
|
+
/** What `command(state)` returns: the pure-transition forms, and `waiting`. */
|
|
123
|
+
export interface CommandMaker<S> {
|
|
124
|
+
(transition: (current: S) => S): Nexus.Command.Command<{}, void, never, never>;
|
|
125
|
+
<I>(input: Schema.Schema<I>, transition: (input: I, current: S) => S): Nexus.Command.Command<I, void, never, never>;
|
|
126
|
+
/**
|
|
127
|
+
* A command that waits. Once admitted it belongs to the application until it settles or is interrupted; closing the application aborts `work`'s signal and nothing commits afterwards.
|
|
128
|
+
* **A newer run of the same command supersedes an older one**: the older run is NOT cancelled (its work continues, and its caller sees it complete) but its result is discarded,
|
|
129
|
+
* success or failure. Whether a result is still wanted by the state is `wanted`'s question, answered per run.
|
|
130
|
+
*/
|
|
131
|
+
waiting<I, A>(input: Schema.Schema<I>, spec: Waiting<S, I, A>): Nexus.Command.Command<I, void, never, never>;
|
|
132
|
+
}
|
|
93
133
|
/**
|
|
94
134
|
* Binds the application's state, and returns the function that makes commands whose whole behavior is a pure transition of it:
|
|
95
135
|
* `transition` receives the validated input and the current state, and returns the next state. The input is validated by `input`
|
|
@@ -111,10 +151,7 @@ export declare const define: <S, T extends CommandTable<any, Ambient>, V extends
|
|
|
111
151
|
* transition together cannot do this: TypeScript then types the returned literals from a type parameter of that same call, and widens them.)
|
|
112
152
|
* A returned object is not checked for excess properties, the same as returning it from `state.update`.
|
|
113
153
|
*/
|
|
114
|
-
export declare const command: <S>(state: Nexus.State.StateHandle<S>) =>
|
|
115
|
-
(transition: (current: S) => S): Nexus.Command.Command<{}, void, never, never>;
|
|
116
|
-
<I>(input: Schema.Schema<I>, transition: (input: I, current: S) => S): Nexus.Command.Command<I, void, never, never>;
|
|
117
|
-
};
|
|
154
|
+
export declare const command: <S>(state: Nexus.State.StateHandle<S>) => CommandMaker<S>;
|
|
118
155
|
/**
|
|
119
156
|
* An entry's behavior: it runs the command `run`, with the input `input` makes from the entry's arguments, as plain values in order (an absent
|
|
120
157
|
* argument is `undefined`). Without `input` the command is given `{}`, the input of a command that takes none. `input`'s result is
|
|
@@ -237,5 +274,4 @@ export declare const mount: <S, E>(application: ApplicationHandle<S, E>, create:
|
|
|
237
274
|
export declare const hydrate: <S, E, H>(application: ApplicationHandle<S, E>, create: TargetFactory<HydratableTarget<H>>) => Effect.Effect<Mounted<E> & {
|
|
238
275
|
readonly hydration: H;
|
|
239
276
|
}, Nexus.Mesh.MeshDiagnostics, Scope.Scope>;
|
|
240
|
-
export {};
|
|
241
277
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAiB,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGnG,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { declaredEvents } from "@valancex/mesh-runtime";
|
|
2
2
|
import * as Nexus from "@valancex/nexus";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { ValanceError } from "./errors.js";
|
|
4
|
+
import { handleOf, INPUT_KEY, runningOf } from "./internal.js";
|
|
5
|
+
import { Cause, Deferred, Effect, Exit, Fiber, Layer, Schema, Stream } from "effect";
|
|
6
|
+
export { isRefusal, isValanceError, ValanceError } from "./errors.js";
|
|
5
7
|
/**
|
|
6
8
|
* The definition, typed. An application is data: defining one starts nothing. `E` is the union of every failure in the command table (each command may fail
|
|
7
9
|
* differently), plus `CommandValidationError`: every command's input is validated, and a table of bare command names (which have no `entry` to carry it)
|
|
@@ -11,6 +13,7 @@ import { Deferred, Effect, Exit, Fiber, Layer, Schema, Stream } from "effect";
|
|
|
11
13
|
export const define = (definition) => definition;
|
|
12
14
|
/** The diagnostic id of a command made by `command`: it has no author-chosen id, and the id only decorates `CommandValidationError.command`. */
|
|
13
15
|
const TRANSITION_COMMAND = "valance.command";
|
|
16
|
+
const WAITING_COMMAND = "valance.waiting";
|
|
14
17
|
/** The input of a command that takes none. */
|
|
15
18
|
const NO_INPUT = Schema.Struct({});
|
|
16
19
|
/**
|
|
@@ -37,9 +40,25 @@ const NO_INPUT = Schema.Struct({});
|
|
|
37
40
|
export const command = (state) => {
|
|
38
41
|
const make = (input, transition) => Nexus.Command.define(TRANSITION_COMMAND, input, (decoded) => Effect.asVoid(state.update((current) => Effect.sync(() => transition(decoded, current)))));
|
|
39
42
|
// The one-argument form is the two-argument form with the empty input: the same `Command`, validated, admitted and run in the same way.
|
|
40
|
-
|
|
43
|
+
const transition = ((a, b) => b === undefined
|
|
41
44
|
? make(NO_INPUT, (_input, current) => a(current))
|
|
42
45
|
: make(a, b));
|
|
46
|
+
return Object.assign(transition, {
|
|
47
|
+
waiting: (input, spec) => {
|
|
48
|
+
let latest = 0; // this command's newest run: created with the command, so there is one per started application
|
|
49
|
+
return Nexus.Command.define(WAITING_COMMAND, input, (decoded) => Effect.gen(function* () {
|
|
50
|
+
const mine = ++latest;
|
|
51
|
+
if (spec.begin !== undefined) {
|
|
52
|
+
yield* state.update((current) => Effect.sync(() => spec.begin(decoded, current)));
|
|
53
|
+
}
|
|
54
|
+
// A Promise's rejection is `unknown` and is passed to `settle` exactly as received. Interruption (the application closing, or the caller's) is not a failure: it ends the
|
|
55
|
+
// run here, aborts `signal`, and `settle` never runs.
|
|
56
|
+
const outcome = yield* Effect.tryPromise({ try: (signal) => spec.work(decoded, signal), catch: (error) => error }).pipe(Effect.map((value) => ({ ok: true, value })), Effect.catchAll((error) => Effect.succeed({ ok: false, error })));
|
|
57
|
+
// Both questions are asked in the same atomic step as the commit: is this still the newest run of this command, and is the result still wanted by the state as it is now.
|
|
58
|
+
yield* state.update((current) => Effect.sync(() => mine === latest && spec.wanted(decoded, current) ? spec.settle(outcome, decoded, current) : current));
|
|
59
|
+
}).pipe(Effect.asVoid));
|
|
60
|
+
},
|
|
61
|
+
});
|
|
43
62
|
};
|
|
44
63
|
/** The field names of a command's struct input, in order; `undefined` when the input is not a struct. */
|
|
45
64
|
const fieldsOf = (schema) => {
|
|
@@ -54,6 +73,12 @@ const bareBinding = (command) => {
|
|
|
54
73
|
const fields = fieldsOf(command.input);
|
|
55
74
|
return entry(command, (...values) => fields === undefined ? values[0] : Object.fromEntries(fields.map((field, index) => [field, values[index]])));
|
|
56
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* A bare command bound to receive its input WHOLE, as one argument: what history supplies when its `navigate` names a bare command. The navigation fact `stateOf` reads from a
|
|
78
|
+
* URL is not an event's arguments but the command's input, so the positional rule of `bareBinding` (a struct takes its arguments as fields, in order) does not apply to it. The
|
|
79
|
+
* input is validated by the command's schema as always.
|
|
80
|
+
*/
|
|
81
|
+
const wholeBinding = (command) => entry(command, (...values) => values[0]);
|
|
57
82
|
/** What an entry's argument is to the application: the value itself, or `undefined` when the argument is absent. */
|
|
58
83
|
const plain = (argument) => "value" in argument ? argument.value : undefined;
|
|
59
84
|
/**
|
|
@@ -106,7 +131,7 @@ export const start = (app, options = {}) => Effect.gen(function* () {
|
|
|
106
131
|
commands[key] = value;
|
|
107
132
|
}
|
|
108
133
|
else if (typeof value === "function") {
|
|
109
|
-
throw new
|
|
134
|
+
throw new ValanceError("bare-command-binding", `VALANCE: "${key}" is a bare command name, so it must hold a command; a binding (entry) belongs under a "component/name" key`);
|
|
110
135
|
}
|
|
111
136
|
else {
|
|
112
137
|
named.set(key, bareBinding(value));
|
|
@@ -115,6 +140,11 @@ export const start = (app, options = {}) => Effect.gen(function* () {
|
|
|
115
140
|
for (const [name, binding] of named) {
|
|
116
141
|
commands[`app/${name}`] ??= binding;
|
|
117
142
|
}
|
|
143
|
+
for (const [key, value] of Object.entries(given)) {
|
|
144
|
+
if (!key.includes("/")) {
|
|
145
|
+
commands[INPUT_KEY(key)] ??= wholeBinding(value);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
118
148
|
for (const { event } of declared) {
|
|
119
149
|
const bound = named.get(event.command);
|
|
120
150
|
if (bound !== undefined) {
|
|
@@ -146,7 +176,7 @@ export const start = (app, options = {}) => Effect.gen(function* () {
|
|
|
146
176
|
// defect, by Effect's own means. The command leaves the registry on every exit.
|
|
147
177
|
const admit = (effect) => Effect.acquireUseRelease(Effect.withFiberRuntime((fiber) => Effect.sync(() => {
|
|
148
178
|
if (admissionClosed) {
|
|
149
|
-
throw new
|
|
179
|
+
throw new ValanceError("admission-closed", "VALANCE: admission is closed (draining)");
|
|
150
180
|
}
|
|
151
181
|
admitted.add(fiber);
|
|
152
182
|
})), () => effect, () => Effect.withFiberRuntime((fiber) => Effect.sync(() => { admitted.delete(fiber); })));
|
|
@@ -163,7 +193,7 @@ export const start = (app, options = {}) => Effect.gen(function* () {
|
|
|
163
193
|
values: Stream.mapEffect(Stream.changes(Stream.mapEffect(state.values, () => state.get)), renderOf),
|
|
164
194
|
dispatch: (viewed, handler, payload) => {
|
|
165
195
|
const host = hosts.get(viewed.view);
|
|
166
|
-
return host === undefined ? Effect.die(new
|
|
196
|
+
return host === undefined ? Effect.die(new ValanceError("unknown-view", `no view named ${viewed.view}`)) : inApplication(host.dispatch(viewed.render, handler, payload));
|
|
167
197
|
},
|
|
168
198
|
state: state.get,
|
|
169
199
|
states: state.values,
|
|
@@ -175,7 +205,8 @@ export const start = (app, options = {}) => Effect.gen(function* () {
|
|
|
175
205
|
};
|
|
176
206
|
// Start-time work: the SAME admission as `invoke` and dispatch, with no caller. Last step before the handle exists, after every failure `start` can have, so a
|
|
177
207
|
// failed start runs nothing. The fiber registers itself first (`admit`); a Scope close that wins the race finds admission closed and the work dies unrun.
|
|
178
|
-
// `Effect.exit` keeps its exit from being an unhandled fiber failure: nobody joins it.
|
|
208
|
+
// `Effect.exit` keeps its exit from being an unhandled fiber failure: nobody joins it. A failure is LOGGED (`Effect.logError`, as a failed popstate is, C28),
|
|
209
|
+
// never returned: there is no caller to return it to, and the state stays the only channel. Interruption and a refusal by a closing application are not failures.
|
|
179
210
|
if (app.start !== undefined) {
|
|
180
211
|
const startKey = app.start.includes("/") ? app.start : `app/${app.start}`;
|
|
181
212
|
const binding = Object.hasOwn(commands, startKey) ? commands[startKey] : undefined;
|
|
@@ -183,7 +214,7 @@ export const start = (app, options = {}) => Effect.gen(function* () {
|
|
|
183
214
|
if (binding === undefined) {
|
|
184
215
|
return yield* Effect.fail({ _tag: "UnmappedCommand", component, name });
|
|
185
216
|
}
|
|
186
|
-
Nexus.Runtime.runFork(nexus.runtime, Effect.exit(admit(binding([]))));
|
|
217
|
+
Nexus.Runtime.runFork(nexus.runtime, Effect.exit(admit(binding([])).pipe(Effect.tapErrorCause((cause) => admissionClosed || Cause.isInterruptedOnly(cause) ? Effect.void : Effect.logError("start-time work failed", cause)))));
|
|
187
218
|
}
|
|
188
219
|
return handleOf(running);
|
|
189
220
|
});
|
|
@@ -197,10 +228,18 @@ const connect = (application, create, first) => Effect.gen(function* () {
|
|
|
197
228
|
const target = create((handler, payload) => {
|
|
198
229
|
const render = drawn.current;
|
|
199
230
|
if (render === undefined) {
|
|
200
|
-
throw new
|
|
231
|
+
throw new ValanceError("target-not-drawn", "the target reported an interaction before anything was drawn");
|
|
201
232
|
}
|
|
202
233
|
// `dispatch` runs inside the application (its platform's FiberRefs apply) and nothing flows back (NEXUS I44).
|
|
203
|
-
|
|
234
|
+
const fiber = Effect.runFork(Effect.exit(running.dispatch(render, handler, payload)).pipe(Effect.tap((exit) => Effect.sync(() => { dispatched.push(exit); }))));
|
|
235
|
+
// A dispatch that has ended is settled: it leaves `pending` at once, so a long-lived mount whose host never calls `settled` doesn't hold every fiber.
|
|
236
|
+
pending.push(fiber);
|
|
237
|
+
fiber.addObserver(() => {
|
|
238
|
+
const index = pending.indexOf(fiber);
|
|
239
|
+
if (index >= 0) {
|
|
240
|
+
pending.splice(index, 1);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
204
243
|
});
|
|
205
244
|
// `running.values` is the render of the current state, then of the latest state after each wake-up (superseded intermediate states may be
|
|
206
245
|
// skipped, never reordered): the first element is the first draw (or hydration), no commit can fall between. A later render of the SAME view is
|
|
@@ -226,13 +265,13 @@ const connect = (application, create, first) => Effect.gen(function* () {
|
|
|
226
265
|
// Ending before the first render (a diagnostic, a failure of the target, an application that ended) is mount's failure.
|
|
227
266
|
Effect.onExit((exit) => Exit.match(exit, {
|
|
228
267
|
onFailure: (cause) => Deferred.failCause(firstDone, cause),
|
|
229
|
-
onSuccess: () => Deferred.die(firstDone, new
|
|
268
|
+
onSuccess: () => Deferred.die(firstDone, new ValanceError("application-ended", "the application ended before its first render")),
|
|
230
269
|
})), Effect.forkIn(scope));
|
|
231
270
|
// The first render, or the follower's end. The follower's own `onExit` above completes `firstDone` when the follower ran; a follower that never got to run (its Scope
|
|
232
271
|
// was already closed, or closed before it started) is interrupted without running anything, so its exit is the only signal left: `mount` ends with that interruption.
|
|
233
272
|
const result = yield* Effect.raceFirst(Deferred.await(firstDone), Effect.flatMap(Fiber.await(follower), (exit) => Exit.match(exit, {
|
|
234
273
|
onFailure: (cause) => Effect.failCause(cause),
|
|
235
|
-
onSuccess: () => Effect.die(new
|
|
274
|
+
onSuccess: () => Effect.die(new ValanceError("application-ended", "the application ended before its first render")),
|
|
236
275
|
})));
|
|
237
276
|
// Scope finalizers run in reverse: this runs before the application ends.
|
|
238
277
|
yield* Effect.addFinalizer(() => Effect.gen(function* () {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/internal.d.ts
CHANGED
|
@@ -44,4 +44,6 @@ export interface Running<S, E> {
|
|
|
44
44
|
export declare const handleOf: <S, E>(running: Running<S, E>) => ApplicationHandle<S, E>;
|
|
45
45
|
/** The `Running` a handle fronts. For bindings (and tests): an application's caller never needs it. */
|
|
46
46
|
export declare const runningOf: <S, E>(handle: ApplicationHandle<S, E>) => Running<S, E>;
|
|
47
|
+
/** The registry key under which a bare command receives its input WHOLE (the navigation fact history reads from a URL). Reserved for history's `navigate`; not a key a MESH program declares or a caller needs. */
|
|
48
|
+
export declare const INPUT_KEY: (name: string) => string;
|
|
47
49
|
//# sourceMappingURL=internal.d.ts.map
|
package/dist/internal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;AAE5H,2GAA2G;AAC3G,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC;IAC3B,4GAA4G;IAC5G,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnE,sQAAsQ;IACtQ,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnE;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IAC9N,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjC,iHAAiH;IACjH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;CAC1I;AAID,0HAA0H;AAC1H,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,CAAC,EAAE,SAAS,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAM7E,CAAC;AAEF,uGAAuG;AACvG,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAQ7E,CAAC;AAEF,mNAAmN;AACnN,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAA8B,CAAC"}
|
package/dist/internal.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ValanceError } from "./errors.js";
|
|
1
2
|
const registry = new WeakMap();
|
|
2
3
|
/** The public face of a `Running`: its `state` and `invoke`, and nothing else. Registered, so bindings can resolve it. */
|
|
3
4
|
export const handleOf = (running) => {
|
|
@@ -9,8 +10,10 @@ export const handleOf = (running) => {
|
|
|
9
10
|
export const runningOf = (handle) => {
|
|
10
11
|
const running = registry.get(handle);
|
|
11
12
|
if (running === undefined) {
|
|
12
|
-
throw new
|
|
13
|
+
throw new ValanceError("not-an-application", "not an application handle that Valance started");
|
|
13
14
|
}
|
|
14
15
|
return running;
|
|
15
16
|
};
|
|
17
|
+
/** The registry key under which a bare command receives its input WHOLE (the navigation fact history reads from a URL). Reserved for history's `navigate`; not a key a MESH program declares or a caller needs. */
|
|
18
|
+
export const INPUT_KEY = (name) => `navigation/${name}`;
|
|
16
19
|
//# sourceMappingURL=internal.js.map
|
package/dist/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoC3C,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAiC,CAAC;AAE9D,0HAA0H;AAC1H,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAO,OAAsB,EAA2B,EAAE;IAChF,MAAM,MAAM,GAA4B,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAExG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAA2C,CAAC,CAAC;IAElE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,uGAAuG;AACvG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAO,MAA+B,EAAiB,EAAE;IAChF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CAAC,oBAAoB,EAAE,gDAAgD,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,OAAmC,CAAC;AAC7C,CAAC,CAAC;AAEF,mNAAmN;AACnN,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The MESH component manifest, derived. A manifest says which tags a view's templates may use and what each takes, and what the view itself may read and run. All of that
|
|
3
|
+
* is already stated by the application:
|
|
4
|
+
*
|
|
5
|
+
* tags and their props and events the Web primitives table (PORT's realization of each tag), the same one the target is given
|
|
6
|
+
* what a view may read the view's scope Schema, which also types its `scope` function
|
|
7
|
+
* what a view may run the command table: each bare command's input Schema gives its parameters, in field order (the order `start` already binds arguments in)
|
|
8
|
+
*
|
|
9
|
+
* What is fixed plumbing and never written by anyone: the format version, the (empty) named types, the (empty) commands and scope of a primitive, and the two reserved
|
|
10
|
+
* structural tags, `mesh-if` and `mesh-each`.
|
|
11
|
+
*
|
|
12
|
+
* What is NOT derived, and why (each is an error here, not a silent default):
|
|
13
|
+
* - an exact `"component/name"` command key: `entry`'s adapter turns an event's arguments into the command's input with an opaque function, so the parameters a template
|
|
14
|
+
* passes cannot be known. Name the command by its bare name (arguments in field order), or write the manifest by hand.
|
|
15
|
+
* - the kind of an event's payload: a payload function does not say what it builds. Build the event with `Web.event(type, { kind, of })`.
|
|
16
|
+
* - an optional text prop: whether a prop must be written is not stated by its realization, so every prop is required except a boolean one (a boolean attribute is absent
|
|
17
|
+
* when false). To make a text prop optional, write the manifest by hand.
|
|
18
|
+
* Build time only; it imports nothing at run time and is pure.
|
|
19
|
+
*/
|
|
20
|
+
import type { WebPrimitives } from "@valancex/port-web";
|
|
21
|
+
import type * as Nexus from "@valancex/nexus";
|
|
22
|
+
import { Schema } from "effect";
|
|
23
|
+
export declare class ManifestError extends Error {
|
|
24
|
+
readonly path: string;
|
|
25
|
+
readonly _tag = "ManifestError";
|
|
26
|
+
constructor(path: string, reason: string);
|
|
27
|
+
}
|
|
28
|
+
/** A MESH type (manifest format 1). */
|
|
29
|
+
export type MeshType = {
|
|
30
|
+
readonly kind: "string" | "number" | "boolean" | "null" | "any";
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: "list";
|
|
33
|
+
readonly element: MeshType;
|
|
34
|
+
} | {
|
|
35
|
+
readonly kind: "record";
|
|
36
|
+
readonly fields: Readonly<Record<string, {
|
|
37
|
+
readonly type: MeshType;
|
|
38
|
+
readonly required: boolean;
|
|
39
|
+
}>>;
|
|
40
|
+
} | {
|
|
41
|
+
readonly kind: "optional";
|
|
42
|
+
readonly type: MeshType;
|
|
43
|
+
};
|
|
44
|
+
export interface Manifest {
|
|
45
|
+
readonly version: 1;
|
|
46
|
+
readonly types: Readonly<Record<string, never>>;
|
|
47
|
+
readonly components: Readonly<Record<string, {
|
|
48
|
+
readonly props: Readonly<Record<string, {
|
|
49
|
+
readonly type: MeshType;
|
|
50
|
+
readonly required: boolean;
|
|
51
|
+
}>>;
|
|
52
|
+
readonly events: Readonly<Record<string, {
|
|
53
|
+
readonly payload?: MeshType;
|
|
54
|
+
}>>;
|
|
55
|
+
readonly commands: Readonly<Record<string, {
|
|
56
|
+
readonly parameters: ReadonlyArray<{
|
|
57
|
+
readonly name: string;
|
|
58
|
+
readonly type: MeshType;
|
|
59
|
+
}>;
|
|
60
|
+
}>>;
|
|
61
|
+
readonly scope: Readonly<Record<string, MeshType>>;
|
|
62
|
+
}>>;
|
|
63
|
+
}
|
|
64
|
+
export interface ManifestOptions {
|
|
65
|
+
/** The application's Web realization table: its tags, and each tag's props and events. */
|
|
66
|
+
readonly primitives: WebPrimitives;
|
|
67
|
+
/** Each view's scope Schema, by the view's name (its key in `define`'s `views`): every name the view's template may read. */
|
|
68
|
+
readonly scopes: Readonly<Record<string, Schema.Schema<any, any, never>>>;
|
|
69
|
+
/** The application's `commands`: the very function `define` takes. It is called once, with a state that fails if the table reads it while being built. */
|
|
70
|
+
readonly commands: (state: Nexus.State.StateHandle<any>) => Readonly<Record<string, unknown>>;
|
|
71
|
+
}
|
|
72
|
+
/** The manifest of an application, derived from its Web primitives table, its views' scope Schemas and its command table. Pass it to `compileProgram` as JSON. */
|
|
73
|
+
export declare const manifest: (options: ManifestOptions) => Manifest;
|
|
74
|
+
//# sourceMappingURL=web-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-manifest.d.ts","sourceRoot":"","sources":["../src/web-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,KAAK,KAAK,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAoB,MAAM,QAAQ,CAAC;AAIlD,qBAAa,aAAc,SAAQ,KAAK;IAG1B,QAAQ,CAAC,IAAI,EAAE,MAAM;IAFjC,QAAQ,CAAC,IAAI,mBAAmB;gBAEX,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAIlD;AAED,uCAAuC;AACvC,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAA;CAAE,GAC/H;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;YAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC,CAAC;QAClG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAA;SAAE,CAAC,CAAC,CAAC;QAC3E,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;gBAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC,CAAC,CAAC;QACxI,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;KACpD,CAAC,CAAC,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,6HAA6H;IAC7H,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1E,0JAA0J;IAC1J,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC/F;AA4ID,kKAAkK;AAClK,eAAO,MAAM,QAAQ,GAAI,SAAS,eAAe,KAAG,QAmCnD,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { SchemaAST as AST } from "effect";
|
|
2
|
+
import { payloadKindOf } from "./web-payload.js";
|
|
3
|
+
export class ManifestError extends Error {
|
|
4
|
+
path;
|
|
5
|
+
_tag = "ManifestError";
|
|
6
|
+
constructor(path, reason) {
|
|
7
|
+
super(`${path}: ${reason}`);
|
|
8
|
+
this.path = path;
|
|
9
|
+
this.name = "ManifestError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const typeOf = (ast, path) => {
|
|
13
|
+
switch (ast._tag) {
|
|
14
|
+
case "StringKeyword": return { kind: "string" };
|
|
15
|
+
case "NumberKeyword": return { kind: "number" };
|
|
16
|
+
case "BooleanKeyword": return { kind: "boolean" };
|
|
17
|
+
case "AnyKeyword":
|
|
18
|
+
case "UnknownKeyword": return { kind: "any" };
|
|
19
|
+
case "Literal":
|
|
20
|
+
if (ast.literal === null) {
|
|
21
|
+
return { kind: "null" };
|
|
22
|
+
}
|
|
23
|
+
return { kind: typeof ast.literal === "number" ? "number" : typeof ast.literal === "boolean" ? "boolean" : "string" };
|
|
24
|
+
case "Refinement": return typeOf(ast.from, path);
|
|
25
|
+
case "Union": {
|
|
26
|
+
const members = ast.types.filter((member) => member._tag !== "UndefinedKeyword");
|
|
27
|
+
const kinds = new Set(members.map((member) => typeOf(member, path)).map((type) => JSON.stringify(type)));
|
|
28
|
+
if (kinds.size !== 1) {
|
|
29
|
+
throw new ManifestError(path, `a union of different kinds has no MESH type${members.some((member) => member._tag === "Literal" && member.literal === null) ? " (null is a value in MESH, a type of its own; MESH has no union, so say which)" : ""}`);
|
|
30
|
+
}
|
|
31
|
+
const only = typeOf(members[0], path);
|
|
32
|
+
return members.length === ast.types.length ? only : { kind: "optional", type: only };
|
|
33
|
+
}
|
|
34
|
+
case "TupleType":
|
|
35
|
+
if (ast.elements.length === 0 && ast.rest.length === 1) {
|
|
36
|
+
return { kind: "list", element: typeOf(ast.rest[0].type, `${path}[]`) };
|
|
37
|
+
}
|
|
38
|
+
throw new ManifestError(path, "a fixed-length tuple has no MESH type; use an array");
|
|
39
|
+
case "TypeLiteral": {
|
|
40
|
+
if (ast.indexSignatures.length > 0) {
|
|
41
|
+
throw new ManifestError(path, "a record with an index signature has no MESH type; name its fields");
|
|
42
|
+
}
|
|
43
|
+
return { kind: "record", fields: Object.fromEntries(ast.propertySignatures.map((property) => [String(property.name), fieldOf(property, `${path}.${String(property.name)}`)])) };
|
|
44
|
+
}
|
|
45
|
+
default:
|
|
46
|
+
throw new ManifestError(path, `${ast._tag} has no MESH type`);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const fieldOf = (property, path) => {
|
|
50
|
+
const withoutUndefined = property.type._tag === "Union" ? AST.Union.make(property.type.types.filter((member) => member._tag !== "UndefinedKeyword")) : property.type;
|
|
51
|
+
// `p?: T` (and `p?: T | undefined`) may be left out; `p: T | undefined` must be written but may be absent.
|
|
52
|
+
return property.isOptional
|
|
53
|
+
? { type: typeOf(withoutUndefined, path), required: false }
|
|
54
|
+
: { type: typeOf(property.type, path), required: true };
|
|
55
|
+
};
|
|
56
|
+
const structOf = (schema, path) => {
|
|
57
|
+
const ast = AST.typeAST(schema.ast);
|
|
58
|
+
if (ast._tag !== "TypeLiteral" || ast.indexSignatures.length > 0) {
|
|
59
|
+
throw new ManifestError(path, "must be a Schema.Struct: it names the values the view reads");
|
|
60
|
+
}
|
|
61
|
+
return ast;
|
|
62
|
+
};
|
|
63
|
+
// ---- the three sources ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
64
|
+
const propOf = (name, realization, path) => {
|
|
65
|
+
switch (realization.kind) {
|
|
66
|
+
case "attribute":
|
|
67
|
+
case "controlled":
|
|
68
|
+
case "text-property": return { type: { kind: "string" }, required: true };
|
|
69
|
+
case "boolean-attribute": return { type: { kind: "boolean" }, required: false };
|
|
70
|
+
case "property": return { type: { kind: realization.holds === "value" ? "any" : realization.holds }, required: realization.holds !== "boolean" };
|
|
71
|
+
default: throw new ManifestError(path, `the realization of prop \`${name}\` is not one this version derives (${String(realization.kind)})`);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const tagOf = (tag, primitive) => ({
|
|
75
|
+
props: Object.fromEntries(Object.entries(primitive.props ?? {}).map(([name, realization]) => [name, propOf(name, realization, `${tag}.${name}`)])),
|
|
76
|
+
events: Object.fromEntries(Object.entries(primitive.events ?? {}).map(([name, realization]) => {
|
|
77
|
+
if (realization.payload === undefined) {
|
|
78
|
+
return [name, {}];
|
|
79
|
+
}
|
|
80
|
+
const kind = payloadKindOf(realization);
|
|
81
|
+
if (kind === undefined) {
|
|
82
|
+
throw new ManifestError(`${tag}.${name}`, "the event builds a payload, but the kind of that payload is not declared. Build it with Web.event(type, { kind, of }): a function does not say what it builds");
|
|
83
|
+
}
|
|
84
|
+
return [name, { payload: { kind } }];
|
|
85
|
+
})),
|
|
86
|
+
commands: {},
|
|
87
|
+
scope: {},
|
|
88
|
+
});
|
|
89
|
+
const commandsOf = (table, views) => {
|
|
90
|
+
const commands = {};
|
|
91
|
+
for (const [key, value] of Object.entries(table)) {
|
|
92
|
+
if (key.startsWith("app/")) {
|
|
93
|
+
continue; // an entry for `invoke`, history and `start`: no template runs it
|
|
94
|
+
}
|
|
95
|
+
if (key.includes("/")) {
|
|
96
|
+
throw new ManifestError(key, `an exact "component/name" key binds an \`entry\`, whose adapter turns the event's arguments into the command's input with a function; the parameters a template passes cannot be derived from it${views.has(key.split("/")[0]) ? "" : " (and the component is not one of the views)"}. Name the command by its bare name, whose arguments are its input's fields in order, or write the manifest by hand`);
|
|
97
|
+
}
|
|
98
|
+
if (typeof value !== "object" || value === null || !("input" in value)) {
|
|
99
|
+
throw new ManifestError(key, "a bare name must hold a command (a function such as an `entry` belongs under an exact key)");
|
|
100
|
+
}
|
|
101
|
+
const input = value.input;
|
|
102
|
+
const ast = AST.typeAST(input.ast);
|
|
103
|
+
commands[key] = {
|
|
104
|
+
parameters: ast._tag === "TypeLiteral" && ast.indexSignatures.length === 0
|
|
105
|
+
? ast.propertySignatures.map((property) => {
|
|
106
|
+
const field = fieldOf(property, `${key}.${String(property.name)}`);
|
|
107
|
+
if (!field.required) {
|
|
108
|
+
throw new ManifestError(`${key}.${String(property.name)}`, "an optional input field cannot be a manifest parameter: every parameter is required, and an invocation passes exactly that many arguments");
|
|
109
|
+
}
|
|
110
|
+
return { name: String(property.name), type: field.type };
|
|
111
|
+
})
|
|
112
|
+
: [{ name: "value", type: typeOf(ast, key) }],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return commands;
|
|
116
|
+
};
|
|
117
|
+
const noState = new Proxy({}, { get: (_target, property) => { throw new ManifestError("commands", `the table read state.${String(property)} while it was being built; a table is built without reading state (commands read it when they RUN)`); } });
|
|
118
|
+
/** The manifest of an application, derived from its Web primitives table, its views' scope Schemas and its command table. Pass it to `compileProgram` as JSON. */
|
|
119
|
+
export const manifest = (options) => {
|
|
120
|
+
const views = new Set(Object.keys(options.scopes));
|
|
121
|
+
const commands = commandsOf(options.commands(noState), views);
|
|
122
|
+
for (const name of [...Object.keys(options.primitives), ...views]) {
|
|
123
|
+
if (name === "mesh-if" || name === "mesh-each") {
|
|
124
|
+
throw new ManifestError(name, "is reserved by MESH for conditional and repeated structure, and is declared for you");
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
for (const view of views) {
|
|
128
|
+
if (Object.hasOwn(options.primitives, view)) {
|
|
129
|
+
throw new ManifestError(view, "is both a view and a primitive tag");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
version: 1,
|
|
134
|
+
types: {},
|
|
135
|
+
components: {
|
|
136
|
+
...Object.fromEntries(Object.entries(options.primitives).map(([tag, primitive]) => [tag, tagOf(tag, primitive)])),
|
|
137
|
+
"mesh-if": { props: { when: { type: { kind: "boolean" }, required: true } }, events: {}, commands: {}, scope: {} },
|
|
138
|
+
"mesh-each": { props: { items: { type: { kind: "list", element: { kind: "any" } }, required: true }, as: { type: { kind: "string" }, required: true }, key: { type: { kind: "any" }, required: true } }, events: {}, commands: {}, scope: {} },
|
|
139
|
+
...Object.fromEntries(Object.entries(options.scopes).map(([view, schema]) => [view, {
|
|
140
|
+
props: {},
|
|
141
|
+
events: {},
|
|
142
|
+
commands, // a bare command is every view's, as `start` binds it to every declared `component/name`
|
|
143
|
+
scope: Object.fromEntries(structOf(schema, view).propertySignatures.map((property) => {
|
|
144
|
+
const field = fieldOf(property, `${view}.${String(property.name)}`);
|
|
145
|
+
return [String(property.name), field.required ? field.type : { kind: "optional", type: field.type }];
|
|
146
|
+
})),
|
|
147
|
+
}])),
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=web-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-manifest.js","sourceRoot":"","sources":["../src/web-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An event's payload, with its kind declared. PORT's event realization builds a payload with a function, and a function does not say what kind of value it builds; MESH's
|
|
3
|
+
* manifest must. `event` builds the realization and remembers the kind, so `manifest` (./web-manifest.ts) can state it without a second declaration. The result is an
|
|
4
|
+
* ordinary PORT `EventRealization`: it works in any primitives table whether or not a manifest is derived from it.
|
|
5
|
+
*/
|
|
6
|
+
import type { BoundaryValue } from "@valancex/mesh-runtime";
|
|
7
|
+
import type { EventRealization } from "@valancex/port-web";
|
|
8
|
+
export type PayloadKind = "string" | "number" | "boolean" | "any";
|
|
9
|
+
/** The kind `event` declared for `realization`, or undefined for one built any other way. */
|
|
10
|
+
export declare const payloadKindOf: (realization: EventRealization) => PayloadKind | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* The DOM event `type` constitutes the event. With `payload`, the event carries the value `of(event, element)` builds, of the declared `kind`: `event("input", { kind: "string",
|
|
13
|
+
* of: (_event, element) => (element as HTMLInputElement).value })`. Without it, the event carries nothing.
|
|
14
|
+
*/
|
|
15
|
+
export declare const event: (type: string, payload?: {
|
|
16
|
+
readonly kind: PayloadKind;
|
|
17
|
+
readonly of: (event: Event, element: Element) => BoundaryValue;
|
|
18
|
+
}) => EventRealization;
|
|
19
|
+
//# sourceMappingURL=web-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-payload.d.ts","sourceRoot":"","sources":["../src/web-payload.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;AAIlE,6FAA6F;AAC7F,eAAO,MAAM,aAAa,GAAI,aAAa,gBAAgB,KAAG,WAAW,GAAG,SAAmC,CAAC;AAEhH;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,UAAU;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,aAAa,CAAA;CAAE,KAAG,gBAQ9I,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const kinds = new WeakMap();
|
|
2
|
+
/** The kind `event` declared for `realization`, or undefined for one built any other way. */
|
|
3
|
+
export const payloadKindOf = (realization) => kinds.get(realization);
|
|
4
|
+
/**
|
|
5
|
+
* The DOM event `type` constitutes the event. With `payload`, the event carries the value `of(event, element)` builds, of the declared `kind`: `event("input", { kind: "string",
|
|
6
|
+
* of: (_event, element) => (element as HTMLInputElement).value })`. Without it, the event carries nothing.
|
|
7
|
+
*/
|
|
8
|
+
export const event = (type, payload) => {
|
|
9
|
+
const realization = payload === undefined ? { type } : { type, payload: payload.of };
|
|
10
|
+
if (payload !== undefined) {
|
|
11
|
+
kinds.set(realization, payload.kind);
|
|
12
|
+
}
|
|
13
|
+
return realization;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=web-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-payload.js","sourceRoot":"","sources":["../src/web-payload.ts"],"names":[],"mappings":"AAUA,MAAM,KAAK,GAAG,IAAI,OAAO,EAAuB,CAAC;AAEjD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAA6B,EAA2B,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAEhH;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAwG,EAAoB,EAAE;IAChK,MAAM,WAAW,GAAqB,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IAEvG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
|
package/dist/web.d.ts
CHANGED
|
@@ -3,12 +3,25 @@
|
|
|
3
3
|
* It adds nothing to PORT: it fixes `container` and `primitives` (the application's Web realization
|
|
4
4
|
* table, which is target configuration, not part of the application) and hands PORT the report callback.
|
|
5
5
|
*/
|
|
6
|
-
import type { HydrationResult, WebPort, WebPortOptions, WebPrimitives } from "@valancex/port-web";
|
|
6
|
+
import type { HydrationResult, WebPort, WebPortOptions, WebPrimitive, WebPrimitives } from "@valancex/port-web";
|
|
7
7
|
import type { BoundaryValue } from "@valancex/mesh-runtime";
|
|
8
8
|
import type { Ambient, ApplicationDefinition, ApplicationHandle, Mounted, StartOptions, TargetFactory } from "./index.js";
|
|
9
9
|
import { Effect, Scope } from "effect";
|
|
10
|
-
export type { HydrationResult, WebPrimitives } from "@valancex/port-web";
|
|
11
|
-
export { attribute, booleanAttribute, property, textProperty } from "@valancex/port-web";
|
|
10
|
+
export type { HydrationResult, WebPrimitive, WebPrimitives } from "@valancex/port-web";
|
|
11
|
+
export { attribute, booleanAttribute, controlled, property, textProperty } from "@valancex/port-web";
|
|
12
|
+
export { event } from "./web-payload.js";
|
|
13
|
+
export type { PayloadKind } from "./web-payload.js";
|
|
14
|
+
/**
|
|
15
|
+
* A link: an `<a>` whose one prop, `href`, is the destination. It declares no event: with `history` and a `container` (which `run` supplies), a click on it is the
|
|
16
|
+
* application's own navigation (see `HistoryOptions.container`), and without them it is an ordinary anchor. Put it in the primitives table under the name the view uses.
|
|
17
|
+
*/
|
|
18
|
+
export declare const link: WebPrimitive;
|
|
19
|
+
/**
|
|
20
|
+
* A text field: an `<input>` whose `value` is the application's text and whose `input` event carries what the user typed (a string). After every presentation the field shows
|
|
21
|
+
* exactly the rendered value (PORT's `controlled`), so state and screen cannot disagree; an edit the application declines is reasserted by the next presentation. Put it in the
|
|
22
|
+
* primitives table under the name the view uses.
|
|
23
|
+
*/
|
|
24
|
+
export declare const textField: WebPrimitive;
|
|
12
25
|
export declare const target: (options: Omit<WebPortOptions, "report">) => TargetFactory<WebPort>;
|
|
13
26
|
export interface HistoryOptions<S> {
|
|
14
27
|
/** The window whose URL and history are kept in step with the application (the container's own: `container.ownerDocument.defaultView`). */
|
|
@@ -17,8 +30,25 @@ export interface HistoryOptions<S> {
|
|
|
17
30
|
readonly urlOf: (state: S) => string;
|
|
18
31
|
/** What a URL says about the application: the one argument of the navigate binding. The application's, too. */
|
|
19
32
|
readonly stateOf: (url: URL) => BoundaryValue;
|
|
20
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* The application's navigate command. Either a **bare command name**, whose input is the navigation fact itself (the object `stateOf` returns), validated by the command's
|
|
35
|
+
* schema as always: `navigate: "go"` with `go: command(Schema.Struct({ id: Schema.String }), …)` and `stateOf: (url) => ({ id: … })`. Or an **exact binding key**
|
|
36
|
+
* (`"app/navigate"`), the same entry a MESH intent uses, for a command whose arguments need adapting.
|
|
37
|
+
*/
|
|
21
38
|
readonly navigate: string;
|
|
39
|
+
/**
|
|
40
|
+
* The document's title for a state, kept in step with the URL: set for the first state and for every later one, Back and Forward included. A title lives in the document's head,
|
|
41
|
+
* outside the container the view is drawn in, so it is not part of a view and the server cannot take it from one: the server's document writes the result of this same function
|
|
42
|
+
* for the state it rendered. Absent: the title is left alone.
|
|
43
|
+
*/
|
|
44
|
+
readonly titleOf?: (state: S) => string;
|
|
45
|
+
/**
|
|
46
|
+
* The element whose links are navigations. When given, a plain left click on an `<a href>` inside it that leads somewhere in this application's origin is a navigation
|
|
47
|
+
* request, exactly as a popstate is: `navigate` runs with `stateOf(destination)`, and the URL follows the state like any other navigation. The browser keeps every
|
|
48
|
+
* other click: Ctrl, Meta, Shift or Alt held, a non-primary button, `target` other than `_self`, `download`, another origin, a link to a place in the page you are
|
|
49
|
+
* already on (a `#fragment`), and a click something else already handled (`defaultPrevented`). Absent: links are ordinary anchors. `run` passes its own container.
|
|
50
|
+
*/
|
|
51
|
+
readonly container?: Element;
|
|
22
52
|
}
|
|
23
53
|
/**
|
|
24
54
|
* Keeps `location` and the application in step, in both directions, until the caller's Scope closes.
|
package/dist/web.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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"}
|
package/dist/web.js
CHANGED
|
@@ -1,9 +1,48 @@
|
|
|
1
|
-
import { createWebPort } from "@valancex/port-web";
|
|
1
|
+
import { attribute, controlled, createWebPort } from "@valancex/port-web";
|
|
2
2
|
import { hydrate, mount, start } from "./index.js";
|
|
3
|
-
import { runningOf } from "./internal.js";
|
|
3
|
+
import { INPUT_KEY, runningOf } from "./internal.js";
|
|
4
|
+
import { event } from "./web-payload.js";
|
|
4
5
|
import { Cause, Effect, Exit, Fiber, Option, Queue, Scope, Stream } from "effect";
|
|
5
|
-
export { attribute, booleanAttribute, property, textProperty } from "@valancex/port-web";
|
|
6
|
+
export { attribute, booleanAttribute, controlled, property, textProperty } from "@valancex/port-web";
|
|
7
|
+
export { event } from "./web-payload.js";
|
|
8
|
+
/**
|
|
9
|
+
* A link: an `<a>` whose one prop, `href`, is the destination. It declares no event: with `history` and a `container` (which `run` supplies), a click on it is the
|
|
10
|
+
* application's own navigation (see `HistoryOptions.container`), and without them it is an ordinary anchor. Put it in the primitives table under the name the view uses.
|
|
11
|
+
*/
|
|
12
|
+
export const link = { element: "a", props: { href: attribute("href") } };
|
|
13
|
+
/**
|
|
14
|
+
* A text field: an `<input>` whose `value` is the application's text and whose `input` event carries what the user typed (a string). After every presentation the field shows
|
|
15
|
+
* exactly the rendered value (PORT's `controlled`), so state and screen cannot disagree; an edit the application declines is reasserted by the next presentation. Put it in the
|
|
16
|
+
* primitives table under the name the view uses.
|
|
17
|
+
*/
|
|
18
|
+
export const textField = {
|
|
19
|
+
element: "input",
|
|
20
|
+
props: { value: controlled("value") },
|
|
21
|
+
events: { input: event("input", { kind: "string", of: (_event, element) => element.value }) },
|
|
22
|
+
};
|
|
6
23
|
export const target = (options) => (report) => createWebPort({ ...options, report });
|
|
24
|
+
/**
|
|
25
|
+
* Where a click on a link inside `container` goes, when it is the application's to handle; otherwise undefined and the browser keeps it. See `HistoryOptions.container`.
|
|
26
|
+
* Pure over the event, the window and the container: it prevents nothing and starts nothing.
|
|
27
|
+
*/
|
|
28
|
+
const linkDestination = (event, win, container) => {
|
|
29
|
+
if (event.defaultPrevented || event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const origin = event.target;
|
|
33
|
+
const from = origin !== null && typeof origin.closest === "function" ? origin : origin?.parentElement ?? null;
|
|
34
|
+
const anchor = from?.closest("a[href]");
|
|
35
|
+
if (anchor === null || anchor === undefined || !container.contains(anchor) || (anchor.target !== "" && anchor.target !== "_self") || anchor.hasAttribute("download")) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
const destination = new URL(anchor.href, win.location.href);
|
|
39
|
+
const here = new URL(win.location.href);
|
|
40
|
+
// Another origin (including mailto: and tel:, whose origin is "null"), or a place in the page already shown: the browser's.
|
|
41
|
+
if (destination.origin !== here.origin || (destination.hash !== "" && destination.pathname === here.pathname && destination.search === here.search)) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return destination;
|
|
45
|
+
};
|
|
7
46
|
/**
|
|
8
47
|
* Keeps `location` and the application in step, in both directions, until the caller's Scope closes.
|
|
9
48
|
*
|
|
@@ -30,8 +69,14 @@ export const history = (application, options) => Effect.gen(function* () {
|
|
|
30
69
|
const scope = yield* Effect.scope;
|
|
31
70
|
const { window: win } = options;
|
|
32
71
|
const popped = yield* Queue.unbounded();
|
|
72
|
+
const { container } = options;
|
|
73
|
+
// A bare `navigate` names a command that takes the navigation fact as its input; an exact key ("app/navigate") is the binding it always was.
|
|
74
|
+
const navigateKey = options.navigate.includes("/") ? options.navigate : INPUT_KEY(options.navigate);
|
|
33
75
|
// The application URL of the last state this mechanism has accounted for. Unset until the first state: the baseline.
|
|
34
76
|
let last;
|
|
77
|
+
// A link click whose destination starts at the top is waiting for its URL to be written: the browser records the position of the entry being left WHEN the URL is pushed, so the
|
|
78
|
+
// reset must come after the push, never before it, or Back would restore the top.
|
|
79
|
+
let top = false;
|
|
35
80
|
const follower = yield* Stream.runForEach(Stream.merge(Stream.map(running.states, (state) => ({ _tag: "state", state })), Stream.map(Stream.fromQueue(popped), (href) => ({ _tag: "popstate", href }))), (event) => (event._tag === "state"
|
|
36
81
|
? Effect.sync(() => {
|
|
37
82
|
const url = options.urlOf(event.state);
|
|
@@ -41,11 +86,21 @@ export const history = (application, options) => Effect.gen(function* () {
|
|
|
41
86
|
else if (url !== last) {
|
|
42
87
|
last = url;
|
|
43
88
|
win.history.pushState(null, "", url);
|
|
89
|
+
if (top) {
|
|
90
|
+
top = false;
|
|
91
|
+
if (win.scrollY !== 0 || win.scrollX !== 0) {
|
|
92
|
+
win.scrollTo(0, 0);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// After the URL, so a title function that throws cannot keep the URL from following the state.
|
|
97
|
+
if (options.titleOf !== undefined) {
|
|
98
|
+
win.document.title = options.titleOf(event.state);
|
|
44
99
|
}
|
|
45
100
|
})
|
|
46
101
|
: Effect.gen(function* () {
|
|
47
102
|
// Through the application's own entry: it runs in the application, and a failure or defect is logged, never the follower's.
|
|
48
|
-
yield* running.invoke(
|
|
103
|
+
yield* running.invoke(navigateKey, [{ value: options.stateOf(new URL(event.href)) }]).pipe(Effect.catchAllCause((cause) => Effect.logError("popstate navigation failed", cause)));
|
|
49
104
|
// The state the popstate produced is the new baseline, whatever URL history happens to hold for it.
|
|
50
105
|
last = options.urlOf(yield* running.state);
|
|
51
106
|
})).pipe(
|
|
@@ -54,9 +109,27 @@ export const history = (application, options) => Effect.gen(function* () {
|
|
|
54
109
|
Effect.catchAllCause((cause) => Effect.logError("history synchronization failed", cause)))).pipe(Effect.forkIn(scope));
|
|
55
110
|
const onPopState = () => { Queue.unsafeOffer(popped, win.location.href); };
|
|
56
111
|
win.addEventListener("popstate", onPopState);
|
|
112
|
+
// A link click is a navigation request. It is NOT handled by the follower: the navigate command may wait (it may load what the destination shows), and a wait in the follower
|
|
113
|
+
// would hold every URL write behind it. The command is the application's, started like any invoke; the state it commits is what the follower sees, and pushes.
|
|
114
|
+
const onClick = (event) => {
|
|
115
|
+
const destination = container === undefined ? undefined : linkDestination(event, win, container);
|
|
116
|
+
if (destination === undefined) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
// A link click is a page change, and a page change starts at the top, as a native link does (taking the click took that with it). The follower does it, after it writes the URL.
|
|
121
|
+
// Back and Forward are not this: the browser restores their position itself. A destination with a #fragment is the application's own to scroll to.
|
|
122
|
+
top = destination.hash === "";
|
|
123
|
+
Effect.runFork(running.invoke(navigateKey, [{ value: options.stateOf(destination) }]).pipe(Effect.flatMap(() => running.state),
|
|
124
|
+
// The command is done. If the state's URL is the one already written, no push is coming (or it already happened): nothing is waiting for the top any more.
|
|
125
|
+
Effect.flatMap((state) => Effect.sync(() => { if (options.urlOf(state) === last) {
|
|
126
|
+
top = false;
|
|
127
|
+
} })), Effect.catchAllCause((cause) => Effect.sync(() => { top = false; }).pipe(Effect.zipRight(Effect.logError("link navigation failed", cause)))), Effect.forkIn(scope)));
|
|
128
|
+
};
|
|
129
|
+
container?.addEventListener("click", onClick);
|
|
57
130
|
// Reverse order of the scope: before the application ends.
|
|
58
131
|
yield* Effect.addFinalizer(() => Effect.gen(function* () {
|
|
59
|
-
yield* Effect.sync(() => { win.removeEventListener("popstate", onPopState); });
|
|
132
|
+
yield* Effect.sync(() => { win.removeEventListener("popstate", onPopState); container?.removeEventListener("click", onClick); });
|
|
60
133
|
yield* Fiber.interrupt(follower);
|
|
61
134
|
}));
|
|
62
135
|
});
|
|
@@ -79,7 +152,7 @@ export const run = async (app, options) => {
|
|
|
79
152
|
const web = target({ container: options.container, primitives: options.primitives });
|
|
80
153
|
const mounted = options.present === "hydrate" ? yield* hydrate(handle, web) : yield* mount(handle, web);
|
|
81
154
|
if (options.history !== undefined) {
|
|
82
|
-
yield* history(handle, options.history);
|
|
155
|
+
yield* history(handle, { container: options.container, ...options.history });
|
|
83
156
|
}
|
|
84
157
|
return { handle, mounted };
|
|
85
158
|
});
|
package/dist/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@valancex/valance",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "VALANCE application composition: starts a NEXUS application, renders it with MESH, and realizes it on a PORT target.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,6 +27,10 @@
|
|
|
27
27
|
"types": "./dist/web-server.d.ts",
|
|
28
28
|
"default": "./dist/web-server.js"
|
|
29
29
|
},
|
|
30
|
+
"./web/build": {
|
|
31
|
+
"types": "./dist/web-manifest.d.ts",
|
|
32
|
+
"default": "./dist/web-manifest.js"
|
|
33
|
+
},
|
|
30
34
|
"./internal": {
|
|
31
35
|
"types": "./dist/internal.d.ts",
|
|
32
36
|
"default": "./dist/internal.js"
|
|
@@ -38,11 +42,11 @@
|
|
|
38
42
|
"dist"
|
|
39
43
|
],
|
|
40
44
|
"dependencies": {
|
|
41
|
-
"@valancex/nexus": "^0.
|
|
45
|
+
"@valancex/nexus": "^0.11.0"
|
|
42
46
|
},
|
|
43
47
|
"peerDependencies": {
|
|
44
48
|
"@valancex/mesh-runtime": "^0.8.0 || ^0.9.0",
|
|
45
|
-
"@valancex/port-web": "^0.
|
|
49
|
+
"@valancex/port-web": "^0.3.0",
|
|
46
50
|
"effect": "^3.10.0"
|
|
47
51
|
},
|
|
48
52
|
"peerDependenciesMeta": {
|
|
@@ -54,7 +58,7 @@
|
|
|
54
58
|
"@types/node": "^22.0.0",
|
|
55
59
|
"@valancex/mesh-compiler": "^0.9.0",
|
|
56
60
|
"@valancex/mesh-runtime": "^0.9.0",
|
|
57
|
-
"@valancex/port-web": "^0.
|
|
61
|
+
"@valancex/port-web": "^0.3.0",
|
|
58
62
|
"effect": "^3.10.0",
|
|
59
63
|
"typescript": "^5.6.0",
|
|
60
64
|
"vitest": "^3.2.0"
|