@flyingrobots/bijou 5.0.0 → 7.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 (127) hide show
  1. package/README.md +64 -0
  2. package/dist/core/active-binding-collection.d.ts +49 -0
  3. package/dist/core/active-binding-collection.d.ts.map +1 -0
  4. package/dist/core/active-binding-collection.js +264 -0
  5. package/dist/core/active-binding-collection.js.map +1 -0
  6. package/dist/core/app-shell-composition.d.ts +44 -0
  7. package/dist/core/app-shell-composition.d.ts.map +1 -0
  8. package/dist/core/app-shell-composition.js +123 -0
  9. package/dist/core/app-shell-composition.js.map +1 -0
  10. package/dist/core/binding-frame-update.d.ts +18 -0
  11. package/dist/core/binding-frame-update.d.ts.map +1 -0
  12. package/dist/core/binding-frame-update.js +133 -0
  13. package/dist/core/binding-frame-update.js.map +1 -0
  14. package/dist/core/binding-lifecycle.d.ts +65 -0
  15. package/dist/core/binding-lifecycle.d.ts.map +1 -0
  16. package/dist/core/binding-lifecycle.js +357 -0
  17. package/dist/core/binding-lifecycle.js.map +1 -0
  18. package/dist/core/binding.d.ts +192 -0
  19. package/dist/core/binding.d.ts.map +1 -0
  20. package/dist/core/binding.js +587 -0
  21. package/dist/core/binding.js.map +1 -0
  22. package/dist/core/block-metadata.d.ts +113 -0
  23. package/dist/core/block-metadata.d.ts.map +1 -0
  24. package/dist/core/block-metadata.js +376 -0
  25. package/dist/core/block-metadata.js.map +1 -0
  26. package/dist/core/block-tree-render.d.ts +17 -0
  27. package/dist/core/block-tree-render.d.ts.map +1 -0
  28. package/dist/core/block-tree-render.js +186 -0
  29. package/dist/core/block-tree-render.js.map +1 -0
  30. package/dist/core/component-metadata.d.ts +63 -0
  31. package/dist/core/component-metadata.d.ts.map +1 -0
  32. package/dist/core/component-metadata.js +158 -0
  33. package/dist/core/component-metadata.js.map +1 -0
  34. package/dist/core/components/dag-edges.d.ts +9 -3
  35. package/dist/core/components/dag-edges.d.ts.map +1 -1
  36. package/dist/core/components/dag-edges.js +41 -10
  37. package/dist/core/components/dag-edges.js.map +1 -1
  38. package/dist/core/components/dag-render.d.ts +1 -1
  39. package/dist/core/components/dag-render.d.ts.map +1 -1
  40. package/dist/core/components/dag-render.js +193 -72
  41. package/dist/core/components/dag-render.js.map +1 -1
  42. package/dist/core/components/dag-source.d.ts +4 -0
  43. package/dist/core/components/dag-source.d.ts.map +1 -1
  44. package/dist/core/components/dag-source.js +10 -0
  45. package/dist/core/components/dag-source.js.map +1 -1
  46. package/dist/core/components/dag.d.ts +13 -0
  47. package/dist/core/components/dag.d.ts.map +1 -1
  48. package/dist/core/components/dag.js.map +1 -1
  49. package/dist/core/components/index.d.ts +2 -2
  50. package/dist/core/components/index.d.ts.map +1 -1
  51. package/dist/core/components/index.js.map +1 -1
  52. package/dist/core/components/table-v3.d.ts +1 -1
  53. package/dist/core/components/table-v3.d.ts.map +1 -1
  54. package/dist/core/components/table-v3.js +136 -21
  55. package/dist/core/components/table-v3.js.map +1 -1
  56. package/dist/core/components/table.d.ts +36 -6
  57. package/dist/core/components/table.d.ts.map +1 -1
  58. package/dist/core/components/table.js +530 -74
  59. package/dist/core/components/table.js.map +1 -1
  60. package/dist/core/fixture-promotion.d.ts +33 -0
  61. package/dist/core/fixture-promotion.d.ts.map +1 -0
  62. package/dist/core/fixture-promotion.js +62 -0
  63. package/dist/core/fixture-promotion.js.map +1 -0
  64. package/dist/core/graphql-bijou-block.d.ts +94 -0
  65. package/dist/core/graphql-bijou-block.d.ts.map +1 -0
  66. package/dist/core/graphql-bijou-block.js +570 -0
  67. package/dist/core/graphql-bijou-block.js.map +1 -0
  68. package/dist/core/layout/envelope.d.ts +174 -0
  69. package/dist/core/layout/envelope.d.ts.map +1 -0
  70. package/dist/core/layout/envelope.js +336 -0
  71. package/dist/core/layout/envelope.js.map +1 -0
  72. package/dist/core/mode-lowering.d.ts +48 -0
  73. package/dist/core/mode-lowering.d.ts.map +1 -0
  74. package/dist/core/mode-lowering.js +176 -0
  75. package/dist/core/mode-lowering.js.map +1 -0
  76. package/dist/core/render/differ.d.ts.map +1 -1
  77. package/dist/core/render/differ.js +10 -1
  78. package/dist/core/render/differ.js.map +1 -1
  79. package/dist/core/schema-block.d.ts +63 -0
  80. package/dist/core/schema-block.d.ts.map +1 -0
  81. package/dist/core/schema-block.js +361 -0
  82. package/dist/core/schema-block.js.map +1 -0
  83. package/dist/core/selection.d.ts +127 -0
  84. package/dist/core/selection.d.ts.map +1 -0
  85. package/dist/core/selection.js +350 -0
  86. package/dist/core/selection.js.map +1 -0
  87. package/dist/core/standard-blocks.d.ts +264 -0
  88. package/dist/core/standard-blocks.d.ts.map +1 -0
  89. package/dist/core/standard-blocks.js +2518 -0
  90. package/dist/core/standard-blocks.js.map +1 -0
  91. package/dist/core/story-capture.d.ts +48 -0
  92. package/dist/core/story-capture.d.ts.map +1 -0
  93. package/dist/core/story-capture.js +64 -0
  94. package/dist/core/story-capture.js.map +1 -0
  95. package/dist/core/text/wrap.d.ts.map +1 -1
  96. package/dist/core/text/wrap.js +37 -20
  97. package/dist/core/text/wrap.js.map +1 -1
  98. package/dist/core/theme/builder.d.ts +91 -0
  99. package/dist/core/theme/builder.d.ts.map +1 -0
  100. package/dist/core/theme/builder.js +238 -0
  101. package/dist/core/theme/builder.js.map +1 -0
  102. package/dist/core/theme/doctor.d.ts +52 -0
  103. package/dist/core/theme/doctor.d.ts.map +1 -0
  104. package/dist/core/theme/doctor.js +224 -0
  105. package/dist/core/theme/doctor.js.map +1 -0
  106. package/dist/core/theme/dtcg.d.ts.map +1 -1
  107. package/dist/core/theme/dtcg.js +10 -1
  108. package/dist/core/theme/dtcg.js.map +1 -1
  109. package/dist/core/theme/index.d.ts +5 -1
  110. package/dist/core/theme/index.d.ts.map +1 -1
  111. package/dist/core/theme/index.js +4 -1
  112. package/dist/core/theme/index.js.map +1 -1
  113. package/dist/core/theme/presets.d.ts +17 -1
  114. package/dist/core/theme/presets.d.ts.map +1 -1
  115. package/dist/core/theme/presets.js +139 -1
  116. package/dist/core/theme/presets.js.map +1 -1
  117. package/dist/core/theme/tokens.d.ts +1 -1
  118. package/dist/core/theme/tokens.d.ts.map +1 -1
  119. package/dist/core/ui-scene-ir.d.ts +195 -0
  120. package/dist/core/ui-scene-ir.d.ts.map +1 -0
  121. package/dist/core/ui-scene-ir.js +571 -0
  122. package/dist/core/ui-scene-ir.js.map +1 -0
  123. package/dist/index.d.ts +19 -2
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +21 -2
  126. package/dist/index.js.map +1 -1
  127. package/package.json +2 -2
@@ -0,0 +1,133 @@
1
+ import { isActiveBindingCollection, } from './active-binding-collection.js';
2
+ import { bindingFrameFromSnapshots, isBindingSnapshot, isProviderScope, resolveProviderRequirements, } from './binding.js';
3
+ import { bindingLifecycleRecord, invalidateBinding, isBindingLifecycleRecord, } from './binding-lifecycle.js';
4
+ export function bindingFrameUpdateFromSnapshots(input) {
5
+ if (!isObjectRecord(input)) {
6
+ throw new Error('binding frame update: input must be an object');
7
+ }
8
+ if (!isActiveBindingCollection(input.collection)) {
9
+ throw new Error('binding frame update: collection was not created by activeBindingCollection()');
10
+ }
11
+ if (!isProviderScope(input.scope)) {
12
+ throw new Error('binding frame update: scope was not created by providerScope()');
13
+ }
14
+ if (!Array.isArray(input.snapshots)) {
15
+ throw new Error('binding frame update: snapshots must be an array');
16
+ }
17
+ input.snapshots.forEach((snapshot, index) => {
18
+ if (!isBindingSnapshot(snapshot)) {
19
+ throw new Error(`binding frame update: snapshot at index ${index} was not created by bindingSnapshot()`);
20
+ }
21
+ });
22
+ const resolutions = resolveProviderRequirements(input.collection.requirements(), input.scope);
23
+ const providerAssignmentMismatches = providerAssignmentMismatchIssues(input.collection, resolutions);
24
+ const mismatchedRequirementIds = new Set(providerAssignmentMismatches.map((issue) => issue.path));
25
+ const effectiveResolutions = resolutions.filter((resolution) => !mismatchedRequirementIds.has(resolution.requirementId));
26
+ const effectiveSnapshots = input.snapshots.filter((snapshot) => !mismatchedRequirementIds.has(snapshot.requirementId));
27
+ const assembly = bindingFrameFromSnapshots({
28
+ resolutions: effectiveResolutions,
29
+ snapshots: effectiveSnapshots,
30
+ });
31
+ const records = invalidateUpdatedRecords({
32
+ records: input.records ?? lifecycleRecordsForResolvedCollection(input.collection, resolutions),
33
+ resolutions: effectiveResolutions,
34
+ snapshots: effectiveSnapshots,
35
+ });
36
+ return Object.freeze({
37
+ frame: assembly.frame,
38
+ records,
39
+ resolutions,
40
+ issues: freezeIssues([
41
+ ...providerAssignmentMismatches,
42
+ ...assembly.issues,
43
+ ]),
44
+ facts: assembly.facts,
45
+ });
46
+ }
47
+ function lifecycleRecordsForResolvedCollection(collection, resolutions) {
48
+ const resolutionsByRequirementId = new Map();
49
+ resolutions.forEach((resolution) => {
50
+ resolutionsByRequirementId.set(resolution.requirementId, resolution);
51
+ });
52
+ return Object.freeze(collection.entries().map((entry) => {
53
+ const resolution = resolutionsByRequirementId.get(entry.requirement.id);
54
+ return bindingLifecycleRecord({
55
+ owner: entry.owner,
56
+ requirementId: entry.requirement.id,
57
+ providerId: entry.providerId ?? resolution?.providerId,
58
+ facts: entry.requirement.facts,
59
+ });
60
+ }));
61
+ }
62
+ function invalidateUpdatedRecords(options) {
63
+ if (!Array.isArray(options.records)) {
64
+ throw new Error('binding frame update: records must be an array');
65
+ }
66
+ const resolutionsByRequirementId = new Map();
67
+ options.resolutions.forEach((resolution) => {
68
+ resolutionsByRequirementId.set(resolution.requirementId, resolution);
69
+ });
70
+ const snapshotsByRequirementId = new Map();
71
+ options.snapshots.forEach((snapshot) => {
72
+ snapshotsByRequirementId.set(snapshot.requirementId, snapshot);
73
+ });
74
+ return Object.freeze(options.records.map((record, index) => {
75
+ if (!isBindingLifecycleRecord(record)) {
76
+ throw new Error(`binding frame update: record at index ${index} was not created by bindingLifecycleRecord()`);
77
+ }
78
+ const snapshot = snapshotsByRequirementId.get(record.requirementId);
79
+ const resolution = resolutionsByRequirementId.get(record.requirementId);
80
+ if (snapshot === undefined
81
+ || resolution === undefined
82
+ || resolution.providerId === undefined
83
+ || snapshot.providerId !== resolution.providerId) {
84
+ return record;
85
+ }
86
+ if (hasProviderUpdateInvalidation(record, snapshot)) {
87
+ return record;
88
+ }
89
+ return invalidateBinding(record, {
90
+ reason: 'provider-update',
91
+ providerId: snapshot.providerId,
92
+ snapshotVersion: snapshot.version,
93
+ });
94
+ }));
95
+ }
96
+ function hasProviderUpdateInvalidation(record, snapshot) {
97
+ return record.invalidations.some((invalidation) => (invalidation.reason === 'provider-update'
98
+ && invalidation.providerId === snapshot.providerId
99
+ && invalidation.snapshotVersion === snapshot.version));
100
+ }
101
+ function providerAssignmentMismatchIssues(collection, resolutions) {
102
+ const providerIdsByRequirementId = new Map();
103
+ collection.entries().forEach((entry) => {
104
+ if (entry.providerId !== undefined) {
105
+ providerIdsByRequirementId.set(entry.requirement.id, entry.providerId);
106
+ }
107
+ });
108
+ return freezeIssues(resolutions.flatMap((resolution) => {
109
+ const expectedProviderId = providerIdsByRequirementId.get(resolution.requirementId);
110
+ if (expectedProviderId === undefined
111
+ || resolution.providerId === undefined
112
+ || resolution.providerId === expectedProviderId) {
113
+ return [];
114
+ }
115
+ return [{
116
+ severity: 'error',
117
+ code: 'provider.assignment-mismatch',
118
+ message: `Resolved provider ${resolution.providerId} for requirement `
119
+ + `${resolution.requirementId}; expected ${expectedProviderId}`,
120
+ path: resolution.requirementId,
121
+ }];
122
+ }));
123
+ }
124
+ function freezeIssues(issues) {
125
+ if (issues.length === 0) {
126
+ return Object.freeze([]);
127
+ }
128
+ return Object.freeze(issues.map((issue) => Object.freeze({ ...issue })));
129
+ }
130
+ function isObjectRecord(value) {
131
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value));
132
+ }
133
+ //# sourceMappingURL=binding-frame-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-frame-update.js","sourceRoot":"","sources":["../../src/core/binding-frame-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { BindingFact, ProviderId, RequirementId } from './binding.js';
2
+ declare const BINDING_LIFECYCLE_OWNER_BRAND: unique symbol;
3
+ declare const BINDING_LIFECYCLE_RECORD_BRAND: unique symbol;
4
+ export type BindingLifecycleState = 'active' | 'suspended' | 'disposed';
5
+ export type BindingLifecycleOwnerKind = 'view' | 'block' | 'app-shell' | 'runtime';
6
+ export type BindingInvalidationReason = 'provider-update' | 'owner-suspended' | 'owner-disposed' | 'scope-changed' | 'manual';
7
+ export type BindingLifecycleTransitionReason = 'activate' | 'suspend' | 'dispose' | 'invalidate';
8
+ export interface BindingLifecycleOwnerInput {
9
+ readonly id: string;
10
+ readonly kind: string;
11
+ readonly label?: string;
12
+ }
13
+ export interface BindingLifecycleOwner {
14
+ readonly [BINDING_LIFECYCLE_OWNER_BRAND]: true;
15
+ readonly id: string;
16
+ readonly kind: BindingLifecycleOwnerKind;
17
+ readonly label?: string;
18
+ }
19
+ export interface BindingInvalidationInput {
20
+ readonly reason: BindingInvalidationReason;
21
+ readonly providerId?: string;
22
+ readonly snapshotVersion?: number;
23
+ }
24
+ export interface BindingInvalidation {
25
+ readonly requirementId: RequirementId;
26
+ readonly providerId?: ProviderId;
27
+ readonly reason: BindingInvalidationReason;
28
+ readonly snapshotVersion?: number;
29
+ }
30
+ export interface BindingLifecycleTransition {
31
+ readonly from: BindingLifecycleState;
32
+ readonly to: BindingLifecycleState;
33
+ readonly reason: BindingLifecycleTransitionReason;
34
+ }
35
+ export interface BindingLifecycleRecordInput {
36
+ readonly owner: BindingLifecycleOwner;
37
+ readonly requirementId: string;
38
+ readonly providerId?: string;
39
+ readonly state?: BindingLifecycleState;
40
+ readonly version?: number;
41
+ readonly invalidations?: readonly BindingInvalidation[];
42
+ readonly transitions?: readonly BindingLifecycleTransition[];
43
+ readonly facts?: readonly BindingFact[];
44
+ }
45
+ export interface BindingLifecycleRecord {
46
+ readonly [BINDING_LIFECYCLE_RECORD_BRAND]: true;
47
+ readonly owner: BindingLifecycleOwner;
48
+ readonly requirementId: RequirementId;
49
+ readonly providerId?: ProviderId;
50
+ readonly state: BindingLifecycleState;
51
+ readonly version: number;
52
+ readonly invalidations: readonly BindingInvalidation[];
53
+ readonly transitions: readonly BindingLifecycleTransition[];
54
+ readonly facts: readonly BindingFact[];
55
+ }
56
+ export declare function defineBindingLifecycleOwner(input: BindingLifecycleOwnerInput): BindingLifecycleOwner;
57
+ export declare function isBindingLifecycleOwner(value: unknown): value is BindingLifecycleOwner;
58
+ export declare function bindingLifecycleRecord(input: BindingLifecycleRecordInput): BindingLifecycleRecord;
59
+ export declare function isBindingLifecycleRecord(value: unknown): value is BindingLifecycleRecord;
60
+ export declare function activateBinding(record: BindingLifecycleRecord): BindingLifecycleRecord;
61
+ export declare function suspendBinding(record: BindingLifecycleRecord): BindingLifecycleRecord;
62
+ export declare function disposeBinding(record: BindingLifecycleRecord): BindingLifecycleRecord;
63
+ export declare function invalidateBinding(record: BindingLifecycleRecord, input: BindingInvalidationInput): BindingLifecycleRecord;
64
+ export {};
65
+ //# sourceMappingURL=binding-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/binding-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,357 @@
1
+ const BINDING_LIFECYCLE_OWNER_BRAND = Symbol('BindingLifecycleOwner');
2
+ const BINDING_LIFECYCLE_RECORD_BRAND = Symbol('BindingLifecycleRecord');
3
+ const BINDING_LIFECYCLE_STATES = [
4
+ 'active',
5
+ 'suspended',
6
+ 'disposed',
7
+ ];
8
+ const BINDING_LIFECYCLE_OWNER_KINDS = [
9
+ 'view',
10
+ 'block',
11
+ 'app-shell',
12
+ 'runtime',
13
+ ];
14
+ const BINDING_INVALIDATION_REASONS = [
15
+ 'provider-update',
16
+ 'owner-suspended',
17
+ 'owner-disposed',
18
+ 'scope-changed',
19
+ 'manual',
20
+ ];
21
+ const BINDING_TRANSITION_REASONS = [
22
+ 'activate',
23
+ 'suspend',
24
+ 'dispose',
25
+ 'invalidate',
26
+ ];
27
+ const EMPTY_BINDING_INVALIDATIONS = Object.freeze([]);
28
+ const EMPTY_BINDING_TRANSITIONS = Object.freeze([]);
29
+ const EMPTY_BINDING_FACTS = Object.freeze([]);
30
+ export function defineBindingLifecycleOwner(input) {
31
+ const kind = normalizeRequiredText({
32
+ scope: 'binding lifecycle owner',
33
+ field: 'kind',
34
+ value: input.kind,
35
+ });
36
+ if (!isBindingLifecycleOwnerKind(kind)) {
37
+ throw new Error(`binding lifecycle owner: unsupported kind ${kind}`);
38
+ }
39
+ const owner = {
40
+ id: normalizeRequiredText({
41
+ scope: 'binding lifecycle owner',
42
+ field: 'id',
43
+ value: input.id,
44
+ }),
45
+ kind,
46
+ label: optionalTrimmedText(input.label),
47
+ };
48
+ Object.defineProperty(owner, BINDING_LIFECYCLE_OWNER_BRAND, { value: true });
49
+ return Object.freeze(owner);
50
+ }
51
+ export function isBindingLifecycleOwner(value) {
52
+ return Boolean(value
53
+ && typeof value === 'object'
54
+ && Object.prototype.hasOwnProperty.call(value, BINDING_LIFECYCLE_OWNER_BRAND)
55
+ && value[BINDING_LIFECYCLE_OWNER_BRAND] === true);
56
+ }
57
+ export function bindingLifecycleRecord(input) {
58
+ if (!isBindingLifecycleOwner(input.owner)) {
59
+ throw new Error('binding lifecycle: owner was not created by defineBindingLifecycleOwner()');
60
+ }
61
+ const state = input.state ?? 'active';
62
+ if (!isBindingLifecycleState(state)) {
63
+ throw new Error(`binding lifecycle: unsupported state ${String(state)}`);
64
+ }
65
+ const version = input.version ?? 1;
66
+ if (!Number.isInteger(version) || version < 1) {
67
+ throw new Error('binding lifecycle: version must be a positive integer');
68
+ }
69
+ const requirementId = normalizeRequiredText({
70
+ scope: 'binding lifecycle',
71
+ field: 'requirementId',
72
+ value: input.requirementId,
73
+ });
74
+ const providerId = optionalRequiredText({
75
+ scope: 'binding lifecycle',
76
+ field: 'providerId',
77
+ value: input.providerId,
78
+ });
79
+ const invalidations = freezeInvalidations(input.invalidations, requirementId);
80
+ const transitions = freezeTransitions(input.transitions, state);
81
+ const record = {
82
+ owner: input.owner,
83
+ requirementId,
84
+ providerId,
85
+ state,
86
+ version,
87
+ invalidations,
88
+ transitions,
89
+ facts: freezeFacts(input.facts),
90
+ };
91
+ Object.defineProperty(record, BINDING_LIFECYCLE_RECORD_BRAND, { value: true });
92
+ return Object.freeze(record);
93
+ }
94
+ export function isBindingLifecycleRecord(value) {
95
+ return Boolean(value
96
+ && typeof value === 'object'
97
+ && Object.prototype.hasOwnProperty.call(value, BINDING_LIFECYCLE_RECORD_BRAND)
98
+ && value[BINDING_LIFECYCLE_RECORD_BRAND] === true);
99
+ }
100
+ export function activateBinding(record) {
101
+ assertLifecycleRecord(record);
102
+ assertNotDisposed(record, 'activate');
103
+ if (record.state === 'active') {
104
+ throw new Error(`binding lifecycle: binding ${record.requirementId} is already active`);
105
+ }
106
+ return transitionRecord(record, 'active', 'activate');
107
+ }
108
+ export function suspendBinding(record) {
109
+ assertLifecycleRecord(record);
110
+ assertNotDisposed(record, 'suspend');
111
+ if (record.state === 'suspended') {
112
+ throw new Error(`binding lifecycle: binding ${record.requirementId} is already suspended`);
113
+ }
114
+ return transitionRecord(record, 'suspended', 'suspend');
115
+ }
116
+ export function disposeBinding(record) {
117
+ assertLifecycleRecord(record);
118
+ if (record.state === 'disposed') {
119
+ throw new Error(`binding lifecycle: binding ${record.requirementId} is already disposed`);
120
+ }
121
+ return transitionRecord(record, 'disposed', 'dispose');
122
+ }
123
+ export function invalidateBinding(record, input) {
124
+ assertLifecycleRecord(record);
125
+ assertNotDisposed(record, 'invalidate');
126
+ if (!isBindingInvalidationReason(input.reason)) {
127
+ throw new Error(`binding invalidation: unsupported reason ${String(input.reason)}`);
128
+ }
129
+ if (input.snapshotVersion !== undefined
130
+ && (!Number.isInteger(input.snapshotVersion) || input.snapshotVersion < 1)) {
131
+ throw new Error('binding invalidation: snapshotVersion must be a positive integer');
132
+ }
133
+ const providerId = optionalRequiredText({
134
+ scope: 'binding invalidation',
135
+ field: 'providerId',
136
+ value: input.providerId,
137
+ }) ?? record.providerId;
138
+ const invalidation = freezeInvalidation({
139
+ requirementId: record.requirementId,
140
+ providerId,
141
+ reason: input.reason,
142
+ snapshotVersion: input.snapshotVersion,
143
+ });
144
+ return bindingLifecycleRecord({
145
+ owner: record.owner,
146
+ requirementId: record.requirementId,
147
+ providerId: record.providerId,
148
+ state: record.state,
149
+ version: record.version + 1,
150
+ invalidations: [...record.invalidations, invalidation],
151
+ transitions: [
152
+ ...record.transitions,
153
+ freezeTransition({
154
+ from: record.state,
155
+ to: record.state,
156
+ reason: 'invalidate',
157
+ }),
158
+ ],
159
+ facts: record.facts,
160
+ });
161
+ }
162
+ function transitionRecord(record, to, reason) {
163
+ return bindingLifecycleRecord({
164
+ owner: record.owner,
165
+ requirementId: record.requirementId,
166
+ providerId: record.providerId,
167
+ state: to,
168
+ version: record.version + 1,
169
+ invalidations: record.invalidations,
170
+ transitions: [
171
+ ...record.transitions,
172
+ freezeTransition({
173
+ from: record.state,
174
+ to,
175
+ reason,
176
+ }),
177
+ ],
178
+ facts: record.facts,
179
+ });
180
+ }
181
+ function assertLifecycleRecord(record) {
182
+ if (!isBindingLifecycleRecord(record)) {
183
+ throw new Error('binding lifecycle: record was not created by bindingLifecycleRecord()');
184
+ }
185
+ }
186
+ function assertNotDisposed(record, action) {
187
+ if (record.state === 'disposed') {
188
+ throw new Error(`binding lifecycle: disposed binding ${record.requirementId} cannot ${action}`);
189
+ }
190
+ }
191
+ function freezeInvalidations(invalidations, expectedRequirementId) {
192
+ if (invalidations === undefined || invalidations.length === 0) {
193
+ return EMPTY_BINDING_INVALIDATIONS;
194
+ }
195
+ return Object.freeze(invalidations.map((invalidation) => {
196
+ const frozen = freezeInvalidation(invalidation);
197
+ if (frozen.requirementId !== expectedRequirementId) {
198
+ throw new Error(`binding lifecycle: invalidation requirement ${frozen.requirementId} `
199
+ + `does not match record requirement ${expectedRequirementId}`);
200
+ }
201
+ return frozen;
202
+ }));
203
+ }
204
+ function freezeInvalidation(invalidation) {
205
+ const reason = invalidation.reason;
206
+ if (!isBindingInvalidationReason(reason)) {
207
+ throw new Error(`binding invalidation: unsupported reason ${String(reason)}`);
208
+ }
209
+ if (invalidation.snapshotVersion !== undefined
210
+ && (!Number.isInteger(invalidation.snapshotVersion) || invalidation.snapshotVersion < 1)) {
211
+ throw new Error('binding invalidation: snapshotVersion must be a positive integer');
212
+ }
213
+ return Object.freeze({
214
+ requirementId: normalizeRequiredText({
215
+ scope: 'binding invalidation',
216
+ field: 'requirementId',
217
+ value: invalidation.requirementId,
218
+ }),
219
+ providerId: optionalRequiredText({
220
+ scope: 'binding invalidation',
221
+ field: 'providerId',
222
+ value: invalidation.providerId,
223
+ }),
224
+ reason,
225
+ snapshotVersion: invalidation.snapshotVersion,
226
+ });
227
+ }
228
+ function freezeTransitions(transitions, expectedState) {
229
+ if (transitions === undefined || transitions.length === 0) {
230
+ return EMPTY_BINDING_TRANSITIONS;
231
+ }
232
+ const frozenTransitions = transitions.map(freezeTransition);
233
+ for (let index = 1; index < frozenTransitions.length; index += 1) {
234
+ const previous = frozenTransitions[index - 1];
235
+ const current = frozenTransitions[index];
236
+ if (previous === undefined || current === undefined) {
237
+ throw new Error(`binding lifecycle: missing transition at index ${index}`);
238
+ }
239
+ if (previous.to !== current.from) {
240
+ throw new Error(`binding lifecycle: transition chain is discontinuous at index ${index}`);
241
+ }
242
+ }
243
+ const finalTransition = frozenTransitions.at(-1);
244
+ if (finalTransition !== undefined && finalTransition.to !== expectedState) {
245
+ throw new Error(`binding lifecycle: final transition state ${finalTransition.to} `
246
+ + `does not match record state ${expectedState}`);
247
+ }
248
+ return Object.freeze(frozenTransitions);
249
+ }
250
+ function freezeTransition(transition) {
251
+ if (!isBindingLifecycleState(transition.from)) {
252
+ throw new Error(`binding transition: unsupported from state ${String(transition.from)}`);
253
+ }
254
+ if (!isBindingLifecycleState(transition.to)) {
255
+ throw new Error(`binding transition: unsupported to state ${String(transition.to)}`);
256
+ }
257
+ if (!isBindingTransitionReason(transition.reason)) {
258
+ throw new Error(`binding transition: unsupported reason ${String(transition.reason)}`);
259
+ }
260
+ assertAllowedTransition(transition);
261
+ return Object.freeze({
262
+ from: transition.from,
263
+ to: transition.to,
264
+ reason: transition.reason,
265
+ });
266
+ }
267
+ function assertAllowedTransition(transition) {
268
+ if (transition.from === 'disposed') {
269
+ throw new Error(`binding transition: disposed bindings cannot transition to ${transition.to}`);
270
+ }
271
+ const expectedReason = expectedTransitionReason(transition.from, transition.to);
272
+ if (expectedReason === undefined) {
273
+ throw new Error(`binding transition: unsupported ${transition.from} -> ${transition.to}`);
274
+ }
275
+ if (transition.reason !== expectedReason) {
276
+ throw new Error(`binding transition: reason ${transition.reason} does not match `
277
+ + `${transition.from} -> ${transition.to}`);
278
+ }
279
+ }
280
+ function expectedTransitionReason(from, to) {
281
+ if (from === 'active' && to === 'suspended') {
282
+ return 'suspend';
283
+ }
284
+ if (from === 'active' && to === 'disposed') {
285
+ return 'dispose';
286
+ }
287
+ if (from === 'suspended' && to === 'active') {
288
+ return 'activate';
289
+ }
290
+ if (from === 'suspended' && to === 'disposed') {
291
+ return 'dispose';
292
+ }
293
+ if ((from === 'active' || from === 'suspended') && from === to) {
294
+ return 'invalidate';
295
+ }
296
+ return undefined;
297
+ }
298
+ function freezeFacts(facts) {
299
+ if (facts === undefined || facts.length === 0) {
300
+ return EMPTY_BINDING_FACTS;
301
+ }
302
+ return deepFreeze([...facts]);
303
+ }
304
+ function normalizeRequiredText(options) {
305
+ const normalized = options.value.trim();
306
+ if (normalized === '') {
307
+ throw new Error(`${options.scope}: ${options.field} is required`);
308
+ }
309
+ return normalized;
310
+ }
311
+ function optionalRequiredText(options) {
312
+ if (options.value === undefined) {
313
+ return undefined;
314
+ }
315
+ return normalizeRequiredText({
316
+ scope: options.scope,
317
+ field: options.field,
318
+ value: options.value,
319
+ });
320
+ }
321
+ function optionalTrimmedText(value) {
322
+ if (value === undefined) {
323
+ return undefined;
324
+ }
325
+ const normalized = value.trim();
326
+ return normalized === '' ? undefined : normalized;
327
+ }
328
+ function isBindingLifecycleState(value) {
329
+ return BINDING_LIFECYCLE_STATES.includes(value);
330
+ }
331
+ function isBindingLifecycleOwnerKind(value) {
332
+ return BINDING_LIFECYCLE_OWNER_KINDS.includes(value);
333
+ }
334
+ function isBindingInvalidationReason(value) {
335
+ return BINDING_INVALIDATION_REASONS.includes(value);
336
+ }
337
+ function isBindingTransitionReason(value) {
338
+ return BINDING_TRANSITION_REASONS.includes(value);
339
+ }
340
+ function deepFreeze(value, seen = new WeakSet()) {
341
+ if (value === null || typeof value !== 'object') {
342
+ return value;
343
+ }
344
+ const objectValue = value;
345
+ if (seen.has(objectValue)) {
346
+ return value;
347
+ }
348
+ seen.add(objectValue);
349
+ for (const key of Reflect.ownKeys(objectValue)) {
350
+ const descriptor = Object.getOwnPropertyDescriptor(objectValue, key);
351
+ if (descriptor !== undefined && 'value' in descriptor) {
352
+ deepFreeze(descriptor.value, seen);
353
+ }
354
+ }
355
+ return Object.freeze(value);
356
+ }
357
+ //# sourceMappingURL=binding-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-lifecycle.js","sourceRoot":"","sources":["../../src/core/binding-lifecycle.ts"],"names":[],"mappings":"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"}