@componentonce/dom 0.1.0-beta.0 → 0.1.0-beta.1

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 CHANGED
@@ -1,7 +1,68 @@
1
1
  # @componentonce/dom
2
2
 
3
- Trusted ordinary DOM adapter for ComponentOnce.
3
+ Trusted ordinary DOM adapter for ComponentOnce. It has no React dependency.
4
4
 
5
- A DOM component receives three independent typed channels: persisted props, host-owned context, and per-render payload. Its implementation mounts into a host-owned Element and returns explicit update and destroy lifecycle methods.
5
+ A DOM component receives the same three independent channels as every ComponentOnce renderer: persisted Props, host-owned Context, and per-render Payload. Its implementation mounts into a host-owned Element and returns explicit update/destroy lifecycle methods.
6
6
 
7
- Typed mounts do not revalidate values unless explicitly requested. Use mountDomComponentBoundary when loading raw props or payload from storage or transport.
7
+ ## Define
8
+
9
+ ```ts
10
+ import {
11
+ createDomRequirement,
12
+ defineDomComponent,
13
+ } from "@componentonce/dom";
14
+
15
+ export const definition = defineDomComponent<
16
+ { readonly label: string },
17
+ { readonly format: (value: string) => string },
18
+ { readonly count: number }
19
+ >({
20
+ manifest: {
21
+ id: "example/plain-card",
22
+ version: "1.0.0",
23
+ requirements: [createDomRequirement("1")],
24
+ },
25
+ implementation: {
26
+ mount(target, input) {
27
+ const render = (next: typeof input) => {
28
+ target.textContent =
29
+ next.context.format(next.props.label) + ": " + next.payload.count;
30
+ };
31
+ render(input);
32
+
33
+ return {
34
+ update(next) {
35
+ render(next);
36
+ },
37
+ destroy() {
38
+ target.replaceChildren();
39
+ },
40
+ };
41
+ },
42
+ },
43
+ });
44
+ ```
45
+
46
+ ## Bind a host once
47
+
48
+ ```ts
49
+ const components = createDomHost<HostContext>({
50
+ capabilities: [{ name: "example-api", version: "1" }],
51
+ });
52
+
53
+ const mounted = components.mount({
54
+ definition,
55
+ target,
56
+ props,
57
+ context,
58
+ payload,
59
+ });
60
+ ```
61
+
62
+ The DOM adapter automatically supplies its own `browser-dom@1` capability. Application-specific capabilities and compatibility policy are bound once by `createDomHost`; each component still chooses its own Props and Payload types.
63
+
64
+ Low-level `mountDomComponent` and boundary helpers remain available.
65
+
66
+ ## Validation
67
+
68
+ Typed mounts do not revalidate values unless explicitly requested. `mountDomComponentBoundary` and the bound host's `mountBoundary` method validate unknown Props/Payload once before mounting.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,13 @@
1
1
  import { type ComponentOnceCapability, type ComponentOnceCapabilityCompatibility, type ComponentOnceDefinition, type ComponentOnceManifest, type ComponentOnceValidator } from "@componentonce/core";
2
+ /** Stable capability name for the DOM adapter contract. */
3
+ export declare const DOM_CAPABILITY_NAME = "browser-dom";
4
+ /** Current DOM adapter contract version exposed automatically by this package. */
5
+ export declare const DOM_CAPABILITY_VERSION = "1";
6
+ /** Create an explicit requirement for a DOM adapter contract version. */
7
+ export declare function createDomRequirement(version: string): {
8
+ readonly name: "browser-dom";
9
+ readonly version: string;
10
+ };
2
11
  /** Typed values passed to a DOM component instance. */
3
12
  export interface ComponentOnceDomRenderInput<TProps, THostContext, TPayload> {
4
13
  readonly props: TProps;
@@ -52,6 +61,28 @@ export interface ComponentOnceDomBoundaryMountInput<TProps, THostContext, TPaylo
52
61
  readonly hostCapabilities?: readonly ComponentOnceCapability[];
53
62
  readonly capabilityCompatibility?: ComponentOnceCapabilityCompatibility;
54
63
  }
64
+ /** Host-wide runtime policy bound once by createDomHost. */
65
+ export interface ComponentOnceDomHostOptions {
66
+ /** Additional application/runtime capabilities; the DOM adapter capability is added automatically. */
67
+ readonly capabilities?: readonly ComponentOnceCapability[];
68
+ /** Optional compatibility rule shared by every mount from this host helper. */
69
+ readonly capabilityCompatibility?: ComponentOnceCapabilityCompatibility;
70
+ }
71
+ /** Mount input for a DOM host whose capability policy has already been bound. */
72
+ export type ComponentOnceBoundDomMountInput<TProps, THostContext, TPayload> = Omit<ComponentOnceDomMountInput<TProps, THostContext, TPayload>, "hostCapabilities" | "capabilityCompatibility">;
73
+ /** Boundary mount input for a DOM host whose capability policy has already been bound. */
74
+ export type ComponentOnceBoundDomBoundaryMountInput<TProps, THostContext, TPayload> = Omit<ComponentOnceDomBoundaryMountInput<TProps, THostContext, TPayload>, "hostCapabilities" | "capabilityCompatibility">;
75
+ /** Concise DOM host facade with application types and runtime compatibility policy fixed once. */
76
+ export interface ComponentOnceDomHost<THostContext> {
77
+ /** Define a component while choosing its own persisted Props and per-render Payload types. */
78
+ define<TProps, TPayload>(input: DefineDomComponentInput<TProps, THostContext, TPayload>): ComponentOnceDomDefinition<TProps, THostContext, TPayload>;
79
+ /** Mount typed values using the host-wide capability policy. */
80
+ mount<TProps, TPayload>(input: ComponentOnceBoundDomMountInput<TProps, THostContext, TPayload>): ComponentOnceDomMountHandle<TProps, THostContext, TPayload>;
81
+ /** Validate unknown props/payload without changing the trusted host context. */
82
+ validateBoundary<TProps, TPayload>(definition: ComponentOnceDomDefinition<TProps, THostContext, TPayload>, input: ComponentOnceDomBoundaryInput<THostContext>): ComponentOnceDomRenderInput<TProps, THostContext, TPayload>;
83
+ /** Validate and mount unknown boundary values using the host-wide capability policy. */
84
+ mountBoundary<TProps, TPayload>(input: ComponentOnceBoundDomBoundaryMountInput<TProps, THostContext, TPayload>): ComponentOnceDomMountHandle<TProps, THostContext, TPayload>;
85
+ }
55
86
  /** DOM definition field that may provide a boundary validator. */
56
87
  export type ComponentOnceDomValidationField = "props" | "payload";
57
88
  /** Thrown when a raw boundary needs a validator that the definition did not provide. */
@@ -68,4 +99,11 @@ export declare function mountDomComponent<TProps, THostContext, TPayload>(input:
68
99
  export declare function validateDomComponentBoundary<TProps, THostContext, TPayload>(definition: ComponentOnceDomDefinition<TProps, THostContext, TPayload>, input: ComponentOnceDomBoundaryInput<THostContext>): ComponentOnceDomRenderInput<TProps, THostContext, TPayload>;
69
100
  /** Validate one raw boundary then mount without a second validation pass. */
70
101
  export declare function mountDomComponentBoundary<TProps, THostContext, TPayload>(input: ComponentOnceDomBoundaryMountInput<TProps, THostContext, TPayload>): ComponentOnceDomMountHandle<TProps, THostContext, TPayload>;
102
+ /**
103
+ * Create the normal application-facing DOM facade.
104
+ *
105
+ * The DOM capability is supplied by this adapter itself, so callers only bind application-specific
106
+ * capabilities and compatibility policy once.
107
+ */
108
+ export declare function createDomHost<THostContext>(options?: ComponentOnceDomHostOptions): ComponentOnceDomHost<THostContext>;
71
109
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,12 @@
1
1
  import { assertComponentOnceCompatible, } from "@componentonce/core";
2
+ /** Stable capability name for the DOM adapter contract. */
3
+ export const DOM_CAPABILITY_NAME = "browser-dom";
4
+ /** Current DOM adapter contract version exposed automatically by this package. */
5
+ export const DOM_CAPABILITY_VERSION = "1";
6
+ /** Create an explicit requirement for a DOM adapter contract version. */
7
+ export function createDomRequirement(version) {
8
+ return { name: DOM_CAPABILITY_NAME, version };
9
+ }
2
10
  /** Thrown when a raw boundary needs a validator that the definition did not provide. */
3
11
  export class ComponentOnceDomValidatorMissingError extends Error {
4
12
  field;
@@ -22,7 +30,7 @@ export function defineDomComponent(input) {
22
30
  }
23
31
  /** Mount one typed DOM definition after compatibility and optional validation checks. */
24
32
  export function mountDomComponent(input) {
25
- assertComponentOnceCompatible(input.definition.manifest, input.hostCapabilities ?? [], input.capabilityCompatibility);
33
+ assertComponentOnceCompatible(input.definition.manifest, withDomCapability(input.hostCapabilities), input.capabilityCompatibility);
26
34
  const validation = normalizeValidation(input.validation);
27
35
  const props = validation.props
28
36
  ? validateField(input.definition, "props", input.props)
@@ -59,6 +67,34 @@ export function mountDomComponentBoundary(input) {
59
67
  : { capabilityCompatibility: input.capabilityCompatibility }),
60
68
  });
61
69
  }
70
+ /**
71
+ * Create the normal application-facing DOM facade.
72
+ *
73
+ * The DOM capability is supplied by this adapter itself, so callers only bind application-specific
74
+ * capabilities and compatibility policy once.
75
+ */
76
+ export function createDomHost(options = {}) {
77
+ const hostCapabilities = options.capabilities;
78
+ const capabilityCompatibility = options.capabilityCompatibility;
79
+ return {
80
+ define: (input) => defineDomComponent(input),
81
+ mount: (input) => mountDomComponent({
82
+ ...input,
83
+ ...(hostCapabilities === undefined ? {} : { hostCapabilities }),
84
+ ...(capabilityCompatibility === undefined ? {} : { capabilityCompatibility }),
85
+ }),
86
+ validateBoundary: (definition, input) => validateDomComponentBoundary(definition, input),
87
+ mountBoundary: (input) => mountDomComponentBoundary({
88
+ ...input,
89
+ ...(hostCapabilities === undefined ? {} : { hostCapabilities }),
90
+ ...(capabilityCompatibility === undefined ? {} : { capabilityCompatibility }),
91
+ }),
92
+ };
93
+ }
94
+ function withDomCapability(available) {
95
+ const extra = (available ?? []).filter((capability) => capability.name !== DOM_CAPABILITY_NAME);
96
+ return [{ name: DOM_CAPABILITY_NAME, version: DOM_CAPABILITY_VERSION }, ...extra];
97
+ }
62
98
  function normalizeValidation(validation) {
63
99
  if (validation === true)
64
100
  return { props: true, payload: true };
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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"}
@@ -1,4 +1,4 @@
1
- import { defineDomComponent } from "@componentonce/dom";
1
+ import { createDomRequirement, defineDomComponent } from "@componentonce/dom";
2
2
 
3
3
  export const plainCard = defineDomComponent<
4
4
  { readonly title: string },
@@ -8,7 +8,7 @@ export const plainCard = defineDomComponent<
8
8
  manifest: {
9
9
  id: "example/plain-card",
10
10
  version: "1.0.0",
11
- requirements: [{ name: "browser-dom", version: "1" }],
11
+ requirements: [createDomRequirement("1")],
12
12
  },
13
13
  implementation: {
14
14
  mount(target, input) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@componentonce/dom",
3
- "version": "0.1.0-beta.0",
3
+ "version": "0.1.0-beta.1",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -14,7 +14,7 @@
14
14
  }
15
15
  },
16
16
  "dependencies": {
17
- "@componentonce/core": "0.1.0-beta.0"
17
+ "@componentonce/core": "0.1.0-beta.1"
18
18
  },
19
19
  "devDependencies": {
20
20
  "typescript": "^5.9.3",