@voidhash/mimic 0.0.2 → 0.0.3
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/.turbo/turbo-build.log +257 -42
- package/dist/Document.cjs +152 -0
- package/dist/Document.d.cts +67 -0
- package/dist/Document.d.cts.map +1 -0
- package/dist/Document.d.mts +68 -0
- package/dist/Document.d.mts.map +1 -0
- package/dist/Document.mjs +147 -0
- package/dist/Document.mjs.map +1 -0
- package/dist/EffectSchema.cjs +180 -0
- package/dist/EffectSchema.d.cts +84 -0
- package/dist/EffectSchema.d.cts.map +1 -0
- package/dist/EffectSchema.d.mts +84 -0
- package/dist/EffectSchema.d.mts.map +1 -0
- package/dist/EffectSchema.mjs +176 -0
- package/dist/EffectSchema.mjs.map +1 -0
- package/dist/FractionalIndex.cjs +365 -0
- package/dist/FractionalIndex.mjs +364 -0
- package/dist/FractionalIndex.mjs.map +1 -0
- package/dist/Operation.cjs +53 -0
- package/dist/Operation.d.cts +39 -0
- package/dist/Operation.d.cts.map +1 -0
- package/dist/Operation.d.mts +39 -0
- package/dist/Operation.d.mts.map +1 -0
- package/dist/Operation.mjs +46 -0
- package/dist/Operation.mjs.map +1 -0
- package/dist/OperationDefinition.cjs +13 -0
- package/dist/OperationDefinition.d.cts +12 -0
- package/dist/OperationDefinition.d.cts.map +1 -0
- package/dist/OperationDefinition.d.mts +12 -0
- package/dist/OperationDefinition.d.mts.map +1 -0
- package/dist/OperationDefinition.mjs +13 -0
- package/dist/OperationDefinition.mjs.map +1 -0
- package/dist/OperationPath.cjs +148 -0
- package/dist/OperationPath.d.cts +60 -0
- package/dist/OperationPath.d.cts.map +1 -0
- package/dist/OperationPath.d.mts +60 -0
- package/dist/OperationPath.d.mts.map +1 -0
- package/dist/OperationPath.mjs +138 -0
- package/dist/OperationPath.mjs.map +1 -0
- package/dist/{Presence-gWrmGBeu.cjs → Presence.cjs} +4 -39
- package/dist/{Presence-N8u7Eppr.d.mts → Presence.d.cts} +2 -2
- package/dist/Presence.d.cts.map +1 -0
- package/dist/{Presence-DKKP4v5X.d.cts → Presence.d.mts} +2 -2
- package/dist/Presence.d.mts.map +1 -0
- package/dist/{Presence-DdMVKcOv.mjs → Presence.mjs} +3 -28
- package/dist/Presence.mjs.map +1 -0
- package/dist/Primitive.cjs +52 -0
- package/dist/Primitive.d.cts +20 -0
- package/dist/Primitive.d.cts.map +1 -0
- package/dist/Primitive.d.mts +20 -0
- package/dist/Primitive.d.mts.map +1 -0
- package/dist/Primitive.mjs +48 -0
- package/dist/Primitive.mjs.map +1 -0
- package/dist/ProxyEnvironment.cjs +34 -0
- package/dist/ProxyEnvironment.d.cts +31 -0
- package/dist/ProxyEnvironment.d.cts.map +1 -0
- package/dist/ProxyEnvironment.d.mts +31 -0
- package/dist/ProxyEnvironment.d.mts.map +1 -0
- package/dist/ProxyEnvironment.mjs +29 -0
- package/dist/ProxyEnvironment.mjs.map +1 -0
- package/dist/Transaction.cjs +66 -0
- package/dist/Transaction.d.cts +56 -0
- package/dist/Transaction.d.cts.map +1 -0
- package/dist/Transaction.d.mts +56 -0
- package/dist/Transaction.d.mts.map +1 -0
- package/dist/Transaction.mjs +58 -0
- package/dist/Transaction.mjs.map +1 -0
- package/dist/Transform.cjs +11 -0
- package/dist/Transform.d.cts +21 -0
- package/dist/Transform.d.cts.map +1 -0
- package/dist/Transform.d.mts +21 -0
- package/dist/Transform.d.mts.map +1 -0
- package/dist/Transform.mjs +6 -0
- package/dist/Transform.mjs.map +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs +14 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.mjs +14 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs +27 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.mjs +27 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.cjs +16 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.mjs +16 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.cjs +11 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.mjs +11 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.cjs +18 -0
- package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.mjs +12 -0
- package/dist/_virtual/rolldown_runtime.cjs +43 -0
- package/dist/{chunk-CLMFDpHK.mjs → _virtual/rolldown_runtime.mjs} +1 -1
- package/dist/client/ClientDocument.cjs +590 -0
- package/dist/client/ClientDocument.d.cts +161 -0
- package/dist/client/ClientDocument.d.cts.map +1 -0
- package/dist/client/ClientDocument.d.mts +162 -0
- package/dist/client/ClientDocument.d.mts.map +1 -0
- package/dist/client/ClientDocument.mjs +586 -0
- package/dist/client/ClientDocument.mjs.map +1 -0
- package/dist/client/Rebase.cjs +204 -0
- package/dist/client/Rebase.d.cts +87 -0
- package/dist/client/Rebase.d.cts.map +1 -0
- package/dist/client/Rebase.d.mts +88 -0
- package/dist/client/Rebase.d.mts.map +1 -0
- package/dist/client/Rebase.mjs +198 -0
- package/dist/client/Rebase.mjs.map +1 -0
- package/dist/client/StateMonitor.cjs +133 -0
- package/dist/client/StateMonitor.d.cts +122 -0
- package/dist/client/StateMonitor.d.cts.map +1 -0
- package/dist/client/StateMonitor.d.mts +122 -0
- package/dist/client/StateMonitor.d.mts.map +1 -0
- package/dist/client/StateMonitor.mjs +129 -0
- package/dist/client/StateMonitor.mjs.map +1 -0
- package/dist/client/Transport.cjs +11 -0
- package/dist/client/Transport.d.cts +237 -0
- package/dist/client/Transport.d.cts.map +1 -0
- package/dist/client/Transport.d.mts +237 -0
- package/dist/client/Transport.d.mts.map +1 -0
- package/dist/client/Transport.mjs +6 -0
- package/dist/client/Transport.mjs.map +1 -0
- package/dist/client/WebSocketTransport.cjs +396 -0
- package/dist/client/WebSocketTransport.d.cts +29 -0
- package/dist/client/WebSocketTransport.d.cts.map +1 -0
- package/dist/client/WebSocketTransport.d.mts +29 -0
- package/dist/client/WebSocketTransport.d.mts.map +1 -0
- package/dist/client/WebSocketTransport.mjs +392 -0
- package/dist/client/WebSocketTransport.mjs.map +1 -0
- package/dist/client/errors.cjs +135 -0
- package/dist/client/errors.d.cts +87 -0
- package/dist/client/errors.d.cts.map +1 -0
- package/dist/client/errors.d.mts +87 -0
- package/dist/client/errors.d.mts.map +1 -0
- package/dist/client/errors.mjs +127 -0
- package/dist/client/errors.mjs.map +1 -0
- package/dist/client/index.cjs +22 -1424
- package/dist/client/index.d.cts +8 -692
- package/dist/client/index.d.mts +8 -692
- package/dist/client/index.mjs +9 -1413
- package/dist/index.cjs +20 -2973
- package/dist/index.d.cts +12 -419
- package/dist/index.d.mts +12 -419
- package/dist/index.mjs +13 -2968
- package/dist/primitives/Array.cjs +302 -0
- package/dist/primitives/Array.d.cts +95 -0
- package/dist/primitives/Array.d.cts.map +1 -0
- package/dist/primitives/Array.d.mts +95 -0
- package/dist/primitives/Array.d.mts.map +1 -0
- package/dist/primitives/Array.mjs +301 -0
- package/dist/primitives/Array.mjs.map +1 -0
- package/dist/primitives/Boolean.cjs +95 -0
- package/dist/primitives/Boolean.d.cts +44 -0
- package/dist/primitives/Boolean.d.cts.map +1 -0
- package/dist/primitives/Boolean.d.mts +44 -0
- package/dist/primitives/Boolean.d.mts.map +1 -0
- package/dist/primitives/Boolean.mjs +94 -0
- package/dist/primitives/Boolean.mjs.map +1 -0
- package/dist/primitives/Either.cjs +200 -0
- package/dist/primitives/Either.d.cts +113 -0
- package/dist/primitives/Either.d.cts.map +1 -0
- package/dist/primitives/Either.d.mts +113 -0
- package/dist/primitives/Either.d.mts.map +1 -0
- package/dist/primitives/Either.mjs +199 -0
- package/dist/primitives/Either.mjs.map +1 -0
- package/dist/primitives/Lazy.cjs +46 -0
- package/dist/primitives/Lazy.d.cts +46 -0
- package/dist/primitives/Lazy.d.cts.map +1 -0
- package/dist/primitives/Lazy.d.mts +46 -0
- package/dist/primitives/Lazy.d.mts.map +1 -0
- package/dist/primitives/Lazy.mjs +46 -0
- package/dist/primitives/Lazy.mjs.map +1 -0
- package/dist/primitives/Literal.cjs +91 -0
- package/dist/primitives/Literal.d.cts +46 -0
- package/dist/primitives/Literal.d.cts.map +1 -0
- package/dist/primitives/Literal.d.mts +46 -0
- package/dist/primitives/Literal.d.mts.map +1 -0
- package/dist/primitives/Literal.mjs +90 -0
- package/dist/primitives/Literal.mjs.map +1 -0
- package/dist/primitives/Number.cjs +115 -0
- package/dist/primitives/Number.d.cts +54 -0
- package/dist/primitives/Number.d.cts.map +1 -0
- package/dist/primitives/Number.d.mts +54 -0
- package/dist/primitives/Number.d.mts.map +1 -0
- package/dist/primitives/Number.mjs +114 -0
- package/dist/primitives/Number.mjs.map +1 -0
- package/dist/primitives/String.cjs +127 -0
- package/dist/primitives/String.d.cts +56 -0
- package/dist/primitives/String.d.cts.map +1 -0
- package/dist/primitives/String.d.mts +56 -0
- package/dist/primitives/String.d.mts.map +1 -0
- package/dist/primitives/String.mjs +126 -0
- package/dist/primitives/String.mjs.map +1 -0
- package/dist/primitives/Struct.cjs +207 -0
- package/dist/primitives/Struct.d.cts +96 -0
- package/dist/primitives/Struct.d.cts.map +1 -0
- package/dist/primitives/Struct.d.mts +97 -0
- package/dist/primitives/Struct.d.mts.map +1 -0
- package/dist/primitives/Struct.mjs +206 -0
- package/dist/primitives/Struct.mjs.map +1 -0
- package/dist/primitives/Tree.cjs +575 -0
- package/dist/primitives/Tree.d.cts +185 -0
- package/dist/primitives/Tree.d.cts.map +1 -0
- package/dist/primitives/Tree.d.mts +185 -0
- package/dist/primitives/Tree.d.mts.map +1 -0
- package/dist/primitives/Tree.mjs +574 -0
- package/dist/primitives/Tree.mjs.map +1 -0
- package/dist/primitives/TreeNode.cjs +73 -0
- package/dist/primitives/TreeNode.d.cts +92 -0
- package/dist/primitives/TreeNode.d.cts.map +1 -0
- package/dist/primitives/TreeNode.d.mts +93 -0
- package/dist/primitives/TreeNode.d.mts.map +1 -0
- package/dist/primitives/TreeNode.mjs +72 -0
- package/dist/primitives/TreeNode.mjs.map +1 -0
- package/dist/primitives/Union.cjs +170 -0
- package/dist/primitives/Union.d.cts +81 -0
- package/dist/primitives/Union.d.cts.map +1 -0
- package/dist/primitives/Union.d.mts +81 -0
- package/dist/primitives/Union.d.mts.map +1 -0
- package/dist/primitives/Union.mjs +169 -0
- package/dist/primitives/Union.mjs.map +1 -0
- package/dist/primitives/shared.cjs +60 -0
- package/dist/primitives/shared.d.cts +147 -0
- package/dist/primitives/shared.d.cts.map +1 -0
- package/dist/primitives/shared.d.mts +147 -0
- package/dist/primitives/shared.d.mts.map +1 -0
- package/dist/primitives/shared.mjs +58 -0
- package/dist/primitives/shared.mjs.map +1 -0
- package/dist/server/ServerDocument.cjs +110 -0
- package/dist/server/ServerDocument.d.cts +98 -0
- package/dist/server/ServerDocument.d.cts.map +1 -0
- package/dist/server/ServerDocument.d.mts +99 -0
- package/dist/server/ServerDocument.d.mts.map +1 -0
- package/dist/server/ServerDocument.mjs +106 -0
- package/dist/server/ServerDocument.mjs.map +1 -0
- package/dist/server/errors.cjs +85 -0
- package/dist/server/errors.d.cts +53 -0
- package/dist/server/errors.d.cts.map +1 -0
- package/dist/server/errors.d.mts +53 -0
- package/dist/server/errors.d.mts.map +1 -0
- package/dist/server/errors.mjs +81 -0
- package/dist/server/errors.mjs.map +1 -0
- package/dist/server/index.cjs +9 -185
- package/dist/server/index.d.cts +3 -148
- package/dist/server/index.d.mts +3 -148
- package/dist/server/index.mjs +3 -181
- package/dist/types/index.cjs +16 -0
- package/dist/types/index.d.cts +16 -0
- package/dist/types/index.d.cts.map +1 -0
- package/dist/types/index.d.mts +16 -0
- package/dist/types/index.d.mts.map +1 -0
- package/dist/types/index.mjs +12 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/utils/tree-helpers.cjs +443 -0
- package/dist/utils/tree-helpers.d.cts +280 -0
- package/dist/utils/tree-helpers.d.cts.map +1 -0
- package/dist/utils/tree-helpers.d.mts +280 -0
- package/dist/utils/tree-helpers.d.mts.map +1 -0
- package/dist/utils/tree-helpers.mjs +439 -0
- package/dist/utils/tree-helpers.mjs.map +1 -0
- package/package.json +2 -2
- package/tsdown.config.ts +1 -1
- package/dist/Document-ChuFrTk1.cjs +0 -571
- package/dist/Document-CwiAFTIq.mjs +0 -438
- package/dist/Document-CwiAFTIq.mjs.map +0 -1
- package/dist/Presence-DKKP4v5X.d.cts.map +0 -1
- package/dist/Presence-DdMVKcOv.mjs.map +0 -1
- package/dist/Presence-N8u7Eppr.d.mts.map +0 -1
- package/dist/Primitive-DqQFc3Gu.d.mts +0 -1180
- package/dist/Primitive-DqQFc3Gu.d.mts.map +0 -1
- package/dist/Primitive-awpEjnKL.d.cts +0 -1180
- package/dist/Primitive-awpEjnKL.d.cts.map +0 -1
- package/dist/client/index.d.cts.map +0 -1
- package/dist/client/index.d.mts.map +0 -1
- package/dist/client/index.mjs.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/server/index.d.cts.map +0 -1
- package/dist/server/index.d.mts.map +0 -1
- package/dist/server/index.mjs.map +0 -1
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_defineProperty = require('../_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs');
|
|
3
|
+
const require_objectSpread2 = require('../_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs');
|
|
4
|
+
const require_shared = require('./shared.cjs');
|
|
5
|
+
const require_OperationDefinition = require('../OperationDefinition.cjs');
|
|
6
|
+
const require_OperationPath = require('../OperationPath.cjs');
|
|
7
|
+
const require_Operation = require('../Operation.cjs');
|
|
8
|
+
const require_FractionalIndex = require('../FractionalIndex.cjs');
|
|
9
|
+
require('../Primitive.cjs');
|
|
10
|
+
let effect = require("effect");
|
|
11
|
+
|
|
12
|
+
//#region src/primitives/Array.ts
|
|
13
|
+
/**
|
|
14
|
+
* Sort array entries by their fractional position
|
|
15
|
+
*/
|
|
16
|
+
const sortByPos = (entries) => [...entries].sort((a, b) => a.pos < b.pos ? -1 : a.pos > b.pos ? 1 : 0);
|
|
17
|
+
/**
|
|
18
|
+
* Generate a fractional position between two positions
|
|
19
|
+
*/
|
|
20
|
+
const generatePosBetween = (left, right) => {
|
|
21
|
+
const charSet = require_FractionalIndex.base62CharSet();
|
|
22
|
+
return effect.Effect.runSync(require_FractionalIndex.generateKeyBetween(left, right, charSet));
|
|
23
|
+
};
|
|
24
|
+
var ArrayPrimitive = class ArrayPrimitive {
|
|
25
|
+
constructor(schema) {
|
|
26
|
+
require_defineProperty._defineProperty(this, "_tag", "ArrayPrimitive");
|
|
27
|
+
require_defineProperty._defineProperty(this, "_State", void 0);
|
|
28
|
+
require_defineProperty._defineProperty(this, "_Proxy", void 0);
|
|
29
|
+
require_defineProperty._defineProperty(this, "_TRequired", void 0);
|
|
30
|
+
require_defineProperty._defineProperty(this, "_THasDefault", void 0);
|
|
31
|
+
require_defineProperty._defineProperty(this, "TSetInput", void 0);
|
|
32
|
+
require_defineProperty._defineProperty(this, "TUpdateInput", void 0);
|
|
33
|
+
require_defineProperty._defineProperty(this, "_schema", void 0);
|
|
34
|
+
require_defineProperty._defineProperty(this, "_opDefinitions", {
|
|
35
|
+
set: require_OperationDefinition.make({
|
|
36
|
+
kind: "array.set",
|
|
37
|
+
payload: effect.Schema.Unknown,
|
|
38
|
+
target: effect.Schema.Unknown,
|
|
39
|
+
apply: (payload) => payload
|
|
40
|
+
}),
|
|
41
|
+
insert: require_OperationDefinition.make({
|
|
42
|
+
kind: "array.insert",
|
|
43
|
+
payload: effect.Schema.Unknown,
|
|
44
|
+
target: effect.Schema.Unknown,
|
|
45
|
+
apply: (payload) => payload
|
|
46
|
+
}),
|
|
47
|
+
remove: require_OperationDefinition.make({
|
|
48
|
+
kind: "array.remove",
|
|
49
|
+
payload: effect.Schema.Unknown,
|
|
50
|
+
target: effect.Schema.Unknown,
|
|
51
|
+
apply: (payload) => payload
|
|
52
|
+
}),
|
|
53
|
+
move: require_OperationDefinition.make({
|
|
54
|
+
kind: "array.move",
|
|
55
|
+
payload: effect.Schema.Unknown,
|
|
56
|
+
target: effect.Schema.Unknown,
|
|
57
|
+
apply: (payload) => payload
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
require_defineProperty._defineProperty(this, "_internal", {
|
|
61
|
+
createProxy: (env, operationPath) => {
|
|
62
|
+
const elementPrimitive = this._schema.element;
|
|
63
|
+
const getCurrentState = () => {
|
|
64
|
+
const state = env.getState(operationPath);
|
|
65
|
+
if (!state || !globalThis.Array.isArray(state)) return [];
|
|
66
|
+
return sortByPos(state);
|
|
67
|
+
};
|
|
68
|
+
const applyElementDefaults = (value) => {
|
|
69
|
+
return require_shared.applyDefaults(elementPrimitive, value);
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
get: () => {
|
|
73
|
+
return getCurrentState();
|
|
74
|
+
},
|
|
75
|
+
set: (values) => {
|
|
76
|
+
const entries = [];
|
|
77
|
+
let prevPos = null;
|
|
78
|
+
for (const value of values) {
|
|
79
|
+
const id = env.generateId();
|
|
80
|
+
const pos = generatePosBetween(prevPos, null);
|
|
81
|
+
const mergedValue = applyElementDefaults(value);
|
|
82
|
+
entries.push({
|
|
83
|
+
id,
|
|
84
|
+
pos,
|
|
85
|
+
value: mergedValue
|
|
86
|
+
});
|
|
87
|
+
prevPos = pos;
|
|
88
|
+
}
|
|
89
|
+
env.addOperation(require_Operation.fromDefinition(operationPath, this._opDefinitions.set, entries));
|
|
90
|
+
},
|
|
91
|
+
push: (value) => {
|
|
92
|
+
const sorted = getCurrentState();
|
|
93
|
+
const lastPos = sorted.length > 0 ? sorted[sorted.length - 1].pos : null;
|
|
94
|
+
const id = env.generateId();
|
|
95
|
+
const pos = generatePosBetween(lastPos, null);
|
|
96
|
+
const mergedValue = applyElementDefaults(value);
|
|
97
|
+
env.addOperation(require_Operation.fromDefinition(operationPath, this._opDefinitions.insert, {
|
|
98
|
+
id,
|
|
99
|
+
pos,
|
|
100
|
+
value: mergedValue
|
|
101
|
+
}));
|
|
102
|
+
},
|
|
103
|
+
insertAt: (index, value) => {
|
|
104
|
+
const sorted = getCurrentState();
|
|
105
|
+
const leftPos = index > 0 && sorted[index - 1] ? sorted[index - 1].pos : null;
|
|
106
|
+
const rightPos = index < sorted.length && sorted[index] ? sorted[index].pos : null;
|
|
107
|
+
const id = env.generateId();
|
|
108
|
+
const pos = generatePosBetween(leftPos, rightPos);
|
|
109
|
+
const mergedValue = applyElementDefaults(value);
|
|
110
|
+
env.addOperation(require_Operation.fromDefinition(operationPath, this._opDefinitions.insert, {
|
|
111
|
+
id,
|
|
112
|
+
pos,
|
|
113
|
+
value: mergedValue
|
|
114
|
+
}));
|
|
115
|
+
},
|
|
116
|
+
remove: (id) => {
|
|
117
|
+
env.addOperation(require_Operation.fromDefinition(operationPath, this._opDefinitions.remove, { id }));
|
|
118
|
+
},
|
|
119
|
+
move: (id, toIndex) => {
|
|
120
|
+
const without = getCurrentState().filter((e) => e.id !== id);
|
|
121
|
+
const clampedIndex = Math.max(0, Math.min(toIndex, without.length));
|
|
122
|
+
const pos = generatePosBetween(clampedIndex > 0 && without[clampedIndex - 1] ? without[clampedIndex - 1].pos : null, clampedIndex < without.length && without[clampedIndex] ? without[clampedIndex].pos : null);
|
|
123
|
+
env.addOperation(require_Operation.fromDefinition(operationPath, this._opDefinitions.move, {
|
|
124
|
+
id,
|
|
125
|
+
pos
|
|
126
|
+
}));
|
|
127
|
+
},
|
|
128
|
+
at: (id) => {
|
|
129
|
+
const elementPath = operationPath.append(id);
|
|
130
|
+
return elementPrimitive._internal.createProxy(env, elementPath);
|
|
131
|
+
},
|
|
132
|
+
find: (predicate) => {
|
|
133
|
+
const found = getCurrentState().find((entry) => predicate(entry.value, entry.id));
|
|
134
|
+
if (!found) return void 0;
|
|
135
|
+
const elementPath = operationPath.append(found.id);
|
|
136
|
+
return elementPrimitive._internal.createProxy(env, elementPath);
|
|
137
|
+
},
|
|
138
|
+
toSnapshot: () => {
|
|
139
|
+
return getCurrentState().map((entry) => {
|
|
140
|
+
const elementPath = operationPath.append(entry.id);
|
|
141
|
+
const elementProxy = elementPrimitive._internal.createProxy(env, elementPath);
|
|
142
|
+
return {
|
|
143
|
+
id: entry.id,
|
|
144
|
+
value: elementProxy.toSnapshot()
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
},
|
|
150
|
+
applyOperation: (state, operation) => {
|
|
151
|
+
const path = operation.path;
|
|
152
|
+
const tokens = path.toTokens().filter((t) => t !== "");
|
|
153
|
+
const currentState = state !== null && state !== void 0 ? state : [];
|
|
154
|
+
let newState;
|
|
155
|
+
if (tokens.length === 0) switch (operation.kind) {
|
|
156
|
+
case "array.set": {
|
|
157
|
+
const payload = operation.payload;
|
|
158
|
+
if (!globalThis.Array.isArray(payload)) throw new require_shared.ValidationError(`ArrayPrimitive.set requires an array payload`);
|
|
159
|
+
newState = payload;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case "array.insert": {
|
|
163
|
+
const { id, pos, value } = operation.payload;
|
|
164
|
+
newState = [...currentState, {
|
|
165
|
+
id,
|
|
166
|
+
pos,
|
|
167
|
+
value
|
|
168
|
+
}];
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
case "array.remove": {
|
|
172
|
+
const { id } = operation.payload;
|
|
173
|
+
newState = currentState.filter((entry) => entry.id !== id);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
case "array.move": {
|
|
177
|
+
const { id, pos } = operation.payload;
|
|
178
|
+
newState = currentState.map((entry) => entry.id === id ? require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, entry), {}, { pos }) : entry);
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
default: throw new require_shared.ValidationError(`ArrayPrimitive cannot apply operation of kind: ${operation.kind}`);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
const elementId = tokens[0];
|
|
185
|
+
const entryIndex = currentState.findIndex((entry) => entry.id === elementId);
|
|
186
|
+
if (entryIndex === -1) throw new require_shared.ValidationError(`Array element not found with ID: ${elementId}`);
|
|
187
|
+
const elementPrimitive = this._schema.element;
|
|
188
|
+
const remainingPath = path.shift();
|
|
189
|
+
const elementOperation = require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, operation), {}, { path: remainingPath });
|
|
190
|
+
const currentEntry = currentState[entryIndex];
|
|
191
|
+
const newValue = elementPrimitive._internal.applyOperation(currentEntry.value, elementOperation);
|
|
192
|
+
const mutableState = [...currentState];
|
|
193
|
+
mutableState[entryIndex] = require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, currentEntry), {}, { value: newValue });
|
|
194
|
+
newState = mutableState;
|
|
195
|
+
}
|
|
196
|
+
require_shared.runValidators(newState, this._schema.validators);
|
|
197
|
+
return newState;
|
|
198
|
+
},
|
|
199
|
+
getInitialState: () => {
|
|
200
|
+
return this._schema.defaultValue;
|
|
201
|
+
},
|
|
202
|
+
transformOperation: (clientOp, serverOp) => {
|
|
203
|
+
const clientPath = clientOp.path;
|
|
204
|
+
const serverPath = serverOp.path;
|
|
205
|
+
if (!require_OperationPath.pathsOverlap(clientPath, serverPath)) return {
|
|
206
|
+
type: "transformed",
|
|
207
|
+
operation: clientOp
|
|
208
|
+
};
|
|
209
|
+
if (serverOp.kind === "array.remove") {
|
|
210
|
+
const removedId = serverOp.payload.id;
|
|
211
|
+
const clientTokens$1 = clientPath.toTokens().filter((t) => t !== "");
|
|
212
|
+
const serverTokens$1 = serverPath.toTokens().filter((t) => t !== "");
|
|
213
|
+
if (clientTokens$1.length > serverTokens$1.length) {
|
|
214
|
+
if (clientTokens$1[serverTokens$1.length] === removedId) return { type: "noop" };
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (serverOp.kind === "array.insert" && clientOp.kind === "array.insert") return {
|
|
218
|
+
type: "transformed",
|
|
219
|
+
operation: clientOp
|
|
220
|
+
};
|
|
221
|
+
if (serverOp.kind === "array.move" && clientOp.kind === "array.move") {
|
|
222
|
+
if (serverOp.payload.id === clientOp.payload.id) return {
|
|
223
|
+
type: "transformed",
|
|
224
|
+
operation: clientOp
|
|
225
|
+
};
|
|
226
|
+
return {
|
|
227
|
+
type: "transformed",
|
|
228
|
+
operation: clientOp
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
if (require_OperationPath.pathsEqual(clientPath, serverPath)) return {
|
|
232
|
+
type: "transformed",
|
|
233
|
+
operation: clientOp
|
|
234
|
+
};
|
|
235
|
+
if (serverOp.kind === "array.set" && require_OperationPath.isPrefix(serverPath, clientPath)) return {
|
|
236
|
+
type: "transformed",
|
|
237
|
+
operation: clientOp
|
|
238
|
+
};
|
|
239
|
+
const clientTokens = clientPath.toTokens().filter((t) => t !== "");
|
|
240
|
+
const serverTokens = serverPath.toTokens().filter((t) => t !== "");
|
|
241
|
+
if (clientTokens.length > 0 && serverTokens.length > 0) {
|
|
242
|
+
if (clientTokens[0] !== serverTokens[0]) return {
|
|
243
|
+
type: "transformed",
|
|
244
|
+
operation: clientOp
|
|
245
|
+
};
|
|
246
|
+
const elementPrimitive = this._schema.element;
|
|
247
|
+
const clientOpForElement = require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, clientOp), {}, { path: clientOp.path.shift() });
|
|
248
|
+
const serverOpForElement = require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, serverOp), {}, { path: serverOp.path.shift() });
|
|
249
|
+
const result = elementPrimitive._internal.transformOperation(clientOpForElement, serverOpForElement);
|
|
250
|
+
if (result.type === "transformed") return {
|
|
251
|
+
type: "transformed",
|
|
252
|
+
operation: require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, result.operation), {}, { path: clientOp.path })
|
|
253
|
+
};
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
type: "transformed",
|
|
258
|
+
operation: clientOp
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
this._schema = schema;
|
|
263
|
+
}
|
|
264
|
+
/** Mark this array as required */
|
|
265
|
+
required() {
|
|
266
|
+
return new ArrayPrimitive(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, this._schema), {}, { required: true }));
|
|
267
|
+
}
|
|
268
|
+
/** Set a default value for this array */
|
|
269
|
+
default(defaultValue) {
|
|
270
|
+
return new ArrayPrimitive(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, this._schema), {}, { defaultValue }));
|
|
271
|
+
}
|
|
272
|
+
/** Get the element primitive */
|
|
273
|
+
get element() {
|
|
274
|
+
return this._schema.element;
|
|
275
|
+
}
|
|
276
|
+
/** Add a custom validation rule */
|
|
277
|
+
refine(fn, message) {
|
|
278
|
+
return new ArrayPrimitive(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, this._schema), {}, { validators: [...this._schema.validators, {
|
|
279
|
+
validate: fn,
|
|
280
|
+
message
|
|
281
|
+
}] }));
|
|
282
|
+
}
|
|
283
|
+
/** Minimum array length */
|
|
284
|
+
minLength(length) {
|
|
285
|
+
return this.refine((v) => v.length >= length, `Array must have at least ${length} elements`);
|
|
286
|
+
}
|
|
287
|
+
/** Maximum array length */
|
|
288
|
+
maxLength(length) {
|
|
289
|
+
return this.refine((v) => v.length <= length, `Array must have at most ${length} elements`);
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
/** Creates a new ArrayPrimitive with the given element type */
|
|
293
|
+
const Array = (element) => new ArrayPrimitive({
|
|
294
|
+
required: false,
|
|
295
|
+
defaultValue: void 0,
|
|
296
|
+
element,
|
|
297
|
+
validators: []
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
//#endregion
|
|
301
|
+
exports.Array = Array;
|
|
302
|
+
exports.ArrayPrimitive = ArrayPrimitive;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { AnyPrimitive, InferProxy, InferSetInput, InferSnapshot, InferState, Primitive, PrimitiveInternal, Validator } from "./shared.cjs";
|
|
2
|
+
import { StructPrimitive, StructSetInput } from "./Struct.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/primitives/Array.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Entry in an ordered array with ID and fractional position
|
|
8
|
+
*/
|
|
9
|
+
interface ArrayEntry<T> {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly pos: string;
|
|
12
|
+
readonly value: T;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Entry in an array snapshot with ID and value snapshot
|
|
16
|
+
*/
|
|
17
|
+
interface ArrayEntrySnapshot<TElement extends AnyPrimitive> {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly value: InferSnapshot<TElement>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Snapshot type for arrays - always an array (never undefined)
|
|
23
|
+
*/
|
|
24
|
+
type ArraySnapshot<TElement extends AnyPrimitive> = readonly ArrayEntrySnapshot<TElement>[];
|
|
25
|
+
/**
|
|
26
|
+
* Compute the input type for array element values.
|
|
27
|
+
* Uses StructSetInput directly for struct elements so that:
|
|
28
|
+
* - Fields that are required AND have no default must be provided
|
|
29
|
+
* - Fields that are optional OR have defaults can be omitted
|
|
30
|
+
*
|
|
31
|
+
* For non-struct elements, falls back to InferSetInput.
|
|
32
|
+
*/
|
|
33
|
+
type ArrayElementSetInput<TElement extends AnyPrimitive> = TElement extends StructPrimitive<infer TFields, any, any> ? StructSetInput<TFields> : InferSetInput<TElement>;
|
|
34
|
+
interface ArrayProxy<TElement extends AnyPrimitive> {
|
|
35
|
+
/** Gets the current array entries (sorted by position) */
|
|
36
|
+
get(): ArrayState<TElement>;
|
|
37
|
+
/** Replaces the entire array with new values (generates new IDs and positions, applies defaults) */
|
|
38
|
+
set(values: readonly ArrayElementSetInput<TElement>[]): void;
|
|
39
|
+
/** Appends a value to the end of the array (applies defaults for struct elements) */
|
|
40
|
+
push(value: ArrayElementSetInput<TElement>): void;
|
|
41
|
+
/** Inserts a value at the specified visual index (applies defaults for struct elements) */
|
|
42
|
+
insertAt(index: number, value: ArrayElementSetInput<TElement>): void;
|
|
43
|
+
/** Removes the element with the specified ID */
|
|
44
|
+
remove(id: string): void;
|
|
45
|
+
/** Moves an element to a new visual index */
|
|
46
|
+
move(id: string, toIndex: number): void;
|
|
47
|
+
/** Returns a proxy for the element with the specified ID */
|
|
48
|
+
at(id: string): InferProxy<TElement>;
|
|
49
|
+
/** Finds an element by predicate and returns its proxy */
|
|
50
|
+
find(predicate: (value: InferState<TElement>, id: string) => boolean): InferProxy<TElement> | undefined;
|
|
51
|
+
/** Returns a readonly snapshot of the array for rendering (always returns an array, never undefined) */
|
|
52
|
+
toSnapshot(): ArraySnapshot<TElement>;
|
|
53
|
+
}
|
|
54
|
+
/** The state type for arrays - an array of entries */
|
|
55
|
+
type ArrayState<TElement extends AnyPrimitive> = readonly ArrayEntry<InferState<TElement>>[];
|
|
56
|
+
interface ArrayPrimitiveSchema<TElement extends AnyPrimitive> {
|
|
57
|
+
readonly required: boolean;
|
|
58
|
+
readonly defaultValue: ArrayState<TElement> | undefined;
|
|
59
|
+
readonly element: TElement;
|
|
60
|
+
readonly validators: readonly Validator<ArrayState<TElement>>[];
|
|
61
|
+
}
|
|
62
|
+
/** Input type for array set() - an array of element set inputs */
|
|
63
|
+
type ArraySetInput<TElement extends AnyPrimitive> = readonly ArrayElementSetInput<TElement>[];
|
|
64
|
+
/** Input type for array update() - same as set() for arrays */
|
|
65
|
+
type ArrayUpdateInput<TElement extends AnyPrimitive> = readonly ArrayElementSetInput<TElement>[];
|
|
66
|
+
declare class ArrayPrimitive<TElement extends AnyPrimitive, TRequired extends boolean = false, THasDefault extends boolean = false> implements Primitive<ArrayState<TElement>, ArrayProxy<TElement>, TRequired, THasDefault, ArraySetInput<TElement>, ArrayUpdateInput<TElement>> {
|
|
67
|
+
readonly _tag: "ArrayPrimitive";
|
|
68
|
+
readonly _State: ArrayState<TElement>;
|
|
69
|
+
readonly _Proxy: ArrayProxy<TElement>;
|
|
70
|
+
readonly _TRequired: TRequired;
|
|
71
|
+
readonly _THasDefault: THasDefault;
|
|
72
|
+
readonly TSetInput: ArraySetInput<TElement>;
|
|
73
|
+
readonly TUpdateInput: ArrayUpdateInput<TElement>;
|
|
74
|
+
private readonly _schema;
|
|
75
|
+
private readonly _opDefinitions;
|
|
76
|
+
constructor(schema: ArrayPrimitiveSchema<TElement>);
|
|
77
|
+
/** Mark this array as required */
|
|
78
|
+
required(): ArrayPrimitive<TElement, true, THasDefault>;
|
|
79
|
+
/** Set a default value for this array */
|
|
80
|
+
default(defaultValue: ArrayState<TElement>): ArrayPrimitive<TElement, TRequired, true>;
|
|
81
|
+
/** Get the element primitive */
|
|
82
|
+
get element(): TElement;
|
|
83
|
+
/** Add a custom validation rule */
|
|
84
|
+
refine(fn: (value: ArrayState<TElement>) => boolean, message: string): ArrayPrimitive<TElement, TRequired, THasDefault>;
|
|
85
|
+
/** Minimum array length */
|
|
86
|
+
minLength(length: number): ArrayPrimitive<TElement, TRequired, THasDefault>;
|
|
87
|
+
/** Maximum array length */
|
|
88
|
+
maxLength(length: number): ArrayPrimitive<TElement, TRequired, THasDefault>;
|
|
89
|
+
readonly _internal: PrimitiveInternal<ArrayState<TElement>, ArrayProxy<TElement>>;
|
|
90
|
+
}
|
|
91
|
+
/** Creates a new ArrayPrimitive with the given element type */
|
|
92
|
+
declare const Array: <TElement extends AnyPrimitive>(element: TElement) => ArrayPrimitive<TElement, false, false>;
|
|
93
|
+
//#endregion
|
|
94
|
+
export { Array, ArrayElementSetInput, ArrayEntry, ArrayEntrySnapshot, ArrayPrimitive, ArrayProxy, ArraySetInput, ArraySnapshot, ArrayState, ArrayUpdateInput };
|
|
95
|
+
//# sourceMappingURL=Array.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Array.d.cts","names":[],"sources":["../../src/primitives/Array.ts"],"sourcesContent":[],"mappings":";;;;;;;AAgBA;AAuBiB,UAvBA,UAuBkB,CAAA,CAAA,CAAA,CAAA;EAAkB,SAAA,EAAA,EAAA,MAAA;EAErB,SAAA,GAAA,EAAA,MAAA;EAAd,SAAA,KAAA,EAtBA,CAsBA;;AAMlB;;;AAAoE,UARnD,kBAQmD,CAAA,iBARf,YAQe,CAAA,CAAA;EAAkB,SAAA,EAAA,EAAA,MAAA;EAU1E,SAAA,KAAA,EAhBM,aAgBc,CAhBA,QAgBA,CAAA;;;;;AAE1B,KAZM,aAYN,CAAA,iBAZqC,YAYrC,CAAA,GAAA,SAZ8D,kBAY9D,CAZiF,QAYjF,CAAA,EAAA;;;;AAGN;;;;;AAIuB,KATX,oBASW,CAAA,iBAT2B,YAS3B,CAAA,GARrB,QAQqB,SARJ,eAQI,CAAA,KAAA,QAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAPjB,cAOiB,CAPF,OAOE,CAAA,GANjB,aAMiB,CANH,QAMG,CAAA;AAEY,UANlB,UAMkB,CAAA,iBANU,YAMV,CAAA,CAAA;EAArB;EAEwC,GAAA,EAAA,EAN7C,UAM6C,CANlC,QAMkC,CAAA;EAArB;EAMJ,GAAA,CAAA,MAAA,EAAA,SAVN,oBAUM,CAVe,QAUf,CAAA,EAAA,CAAA,EAAA,IAAA;EAAX;EAEmB,IAAA,CAAA,KAAA,EAVvB,oBAUuB,CAVF,QAUE,CAAA,CAAA,EAAA,IAAA;EAAX;EAA0D,QAAA,CAAA,KAAA,EAAA,MAAA,EAAA,KAAA,EARnD,oBAQmD,CAR9B,QAQ8B,CAAA,CAAA,EAAA,IAAA;EAAX;EAE3C,MAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAd;EAAa,IAAA,CAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAIjB;EAA4B,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EARtB,UAQsB,CARX,QAQW,CAAA;EAA+C;EAAX,IAAA,CAAA,SAAA,EAAA,CAAA,KAAA,EANlD,UAMkD,CANvC,QAMuC,CAAA,EAAA,EAAA,EAAA,MAAA,EAAA,GAAA,OAAA,CAAA,EANH,UAMG,CANQ,QAMR,CAAA,GAAA,SAAA;EAAX;EAAU,UAAA,EAAA,EAJ3D,aAI2D,CAJ7C,QAI6C,CAAA;AAAyB;;AAIhE,KAJxB,UAIwB,CAAA,iBAJI,YAIJ,CAAA,GAAA,SAJ6B,UAI7B,CAJwC,UAIxC,CAJmD,QAInD,CAAA,CAAA,EAAA;UAF1B,oBAEe,CAAA,iBAFuB,YAEvB,CAAA,CAAA;EACL,SAAA,QAAA,EAAA,OAAA;EACiC,SAAA,YAAA,EAF5B,UAE4B,CAFjB,QAEiB,CAAA,GAAA,SAAA;EAAX,SAAA,OAAA,EADtB,QACsB;EAAV,SAAA,UAAA,EAAA,SAAA,SAAA,CAAU,UAAV,CAAqB,QAArB,CAAA,CAAA,EAAA;;AAIhC;AAA2C,KAA/B,aAA+B,CAAA,iBAAA,YAAA,CAAA,GAAA,SAAyB,oBAAzB,CAA8C,QAA9C,CAAA,EAAA;;AAAyB,KAGxD,gBAHwD,CAAA,iBAGtB,YAHsB,CAAA,GAAA,SAGG,oBAHH,CAGwB,QAHxB,CAAA,EAAA;AAAoB,cAK3E,cAL2E,CAAA,iBAK3C,YAL2C,EAAA,kBAAA,OAAA,GAAA,KAAA,EAAA,oBAAA,OAAA,GAAA,KAAA,CAAA,YAM3E,SAN2E,CAMjE,UANiE,CAMtD,QANsD,CAAA,EAM3C,UAN2C,CAMhC,QANgC,CAAA,EAMrB,SANqB,EAMV,WANU,EAMG,aANH,CAMiB,QANjB,CAAA,EAM4B,gBAN5B,CAM6C,QAN7C,CAAA,CAAA,CAAA;EAG5E,SAAA,IAAA,EAAA,gBAAgB;EAAkB,SAAA,MAAA,EAM1B,UAN0B,CAMf,QANe,CAAA;EAA8C,SAAA,MAAA,EAOxE,UAPwE,CAO7D,QAP6D,CAAA;EAArB,SAAA,UAAA,EAQ/C,SAR+C;EAAoB,SAAA,YAAA,EASjE,WATiE;EAE9E,SAAA,SAAc,EAQJ,aARI,CAQU,QARV,CAAA;EAAkB,SAAA,YAAA,EASnB,gBATmB,CASF,QATE,CAAA;EACX,iBAAA,OAAA;EAAX,iBAAA,cAAA;EAAiC,WAAA,CAAA,MAAA,EAuClC,oBAvCkC,CAuCb,QAvCa,CAAA;EAAX;EAAsB,QAAA,CAAA,CAAA,EA4CrD,cA5CqD,CA4CtC,QA5CsC,EAAA,IAAA,EA4CtB,WA5CsB,CAAA;EAAW;EAA2B,OAAA,CAAA,YAAA,EAoDjF,UApDiF,CAoDtE,QApDsE,CAAA,CAAA,EAoD1D,cApD0D,CAoD3C,QApD2C,EAoDjC,SApDiC,EAAA,IAAA,CAAA;EAAd;EAA0C,IAAA,OAAA,CAAA,CAAA,EA4DpH,QA5DoH;EAAjB;EAGrF,MAAA,CAAA,EAAA,EAAA,CAAA,KAAA,EA8DV,UA9DU,CA8DC,QA9DD,CAAA,EAAA,GAAA,OAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EA8D0C,cA9D1C,CA8DyD,QA9DzD,EA8DmE,SA9DnE,EA8D8E,WA9D9E,CAAA;EAAX;EACW,SAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAqEF,cArEE,CAqEa,QArEb,EAqEuB,SArEvB,EAqEkC,WArElC,CAAA;EAAX;EACI,SAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EA4EK,cA5EL,CA4EoB,QA5EpB,EA4E8B,SA5E9B,EA4EyC,WA5EzC,CAAA;EACE,SAAA,SAAA,EAkFJ,iBAlFI,CAkFc,UAlFd,CAkFyB,QAlFzB,CAAA,EAkFoC,UAlFpC,CAkF+C,QAlF/C,CAAA,CAAA;;;AAEiB,cA6X9B,KA7X8B,EAAA,CAAA,iBA6XJ,YA7XI,CAAA,CAAA,OAAA,EA6XmB,QA7XnB,EAAA,GA6X8B,cA7X9B,CA6X6C,QA7X7C,EAAA,KAAA,EAAA,KAAA,CAAA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { AnyPrimitive, InferProxy, InferSetInput, InferSnapshot, InferState, Primitive, PrimitiveInternal, Validator } from "./shared.mjs";
|
|
2
|
+
import { StructPrimitive, StructSetInput } from "./Struct.mjs";
|
|
3
|
+
import "../Primitive.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/primitives/Array.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Entry in an ordered array with ID and fractional position
|
|
8
|
+
*/
|
|
9
|
+
interface ArrayEntry<T> {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly pos: string;
|
|
12
|
+
readonly value: T;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Entry in an array snapshot with ID and value snapshot
|
|
16
|
+
*/
|
|
17
|
+
interface ArrayEntrySnapshot<TElement extends AnyPrimitive> {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly value: InferSnapshot<TElement>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Snapshot type for arrays - always an array (never undefined)
|
|
23
|
+
*/
|
|
24
|
+
type ArraySnapshot<TElement extends AnyPrimitive> = readonly ArrayEntrySnapshot<TElement>[];
|
|
25
|
+
/**
|
|
26
|
+
* Compute the input type for array element values.
|
|
27
|
+
* Uses StructSetInput directly for struct elements so that:
|
|
28
|
+
* - Fields that are required AND have no default must be provided
|
|
29
|
+
* - Fields that are optional OR have defaults can be omitted
|
|
30
|
+
*
|
|
31
|
+
* For non-struct elements, falls back to InferSetInput.
|
|
32
|
+
*/
|
|
33
|
+
type ArrayElementSetInput<TElement extends AnyPrimitive> = TElement extends StructPrimitive<infer TFields, any, any> ? StructSetInput<TFields> : InferSetInput<TElement>;
|
|
34
|
+
interface ArrayProxy<TElement extends AnyPrimitive> {
|
|
35
|
+
/** Gets the current array entries (sorted by position) */
|
|
36
|
+
get(): ArrayState<TElement>;
|
|
37
|
+
/** Replaces the entire array with new values (generates new IDs and positions, applies defaults) */
|
|
38
|
+
set(values: readonly ArrayElementSetInput<TElement>[]): void;
|
|
39
|
+
/** Appends a value to the end of the array (applies defaults for struct elements) */
|
|
40
|
+
push(value: ArrayElementSetInput<TElement>): void;
|
|
41
|
+
/** Inserts a value at the specified visual index (applies defaults for struct elements) */
|
|
42
|
+
insertAt(index: number, value: ArrayElementSetInput<TElement>): void;
|
|
43
|
+
/** Removes the element with the specified ID */
|
|
44
|
+
remove(id: string): void;
|
|
45
|
+
/** Moves an element to a new visual index */
|
|
46
|
+
move(id: string, toIndex: number): void;
|
|
47
|
+
/** Returns a proxy for the element with the specified ID */
|
|
48
|
+
at(id: string): InferProxy<TElement>;
|
|
49
|
+
/** Finds an element by predicate and returns its proxy */
|
|
50
|
+
find(predicate: (value: InferState<TElement>, id: string) => boolean): InferProxy<TElement> | undefined;
|
|
51
|
+
/** Returns a readonly snapshot of the array for rendering (always returns an array, never undefined) */
|
|
52
|
+
toSnapshot(): ArraySnapshot<TElement>;
|
|
53
|
+
}
|
|
54
|
+
/** The state type for arrays - an array of entries */
|
|
55
|
+
type ArrayState<TElement extends AnyPrimitive> = readonly ArrayEntry<InferState<TElement>>[];
|
|
56
|
+
interface ArrayPrimitiveSchema<TElement extends AnyPrimitive> {
|
|
57
|
+
readonly required: boolean;
|
|
58
|
+
readonly defaultValue: ArrayState<TElement> | undefined;
|
|
59
|
+
readonly element: TElement;
|
|
60
|
+
readonly validators: readonly Validator<ArrayState<TElement>>[];
|
|
61
|
+
}
|
|
62
|
+
/** Input type for array set() - an array of element set inputs */
|
|
63
|
+
type ArraySetInput<TElement extends AnyPrimitive> = readonly ArrayElementSetInput<TElement>[];
|
|
64
|
+
/** Input type for array update() - same as set() for arrays */
|
|
65
|
+
type ArrayUpdateInput<TElement extends AnyPrimitive> = readonly ArrayElementSetInput<TElement>[];
|
|
66
|
+
declare class ArrayPrimitive<TElement extends AnyPrimitive, TRequired extends boolean = false, THasDefault extends boolean = false> implements Primitive<ArrayState<TElement>, ArrayProxy<TElement>, TRequired, THasDefault, ArraySetInput<TElement>, ArrayUpdateInput<TElement>> {
|
|
67
|
+
readonly _tag: "ArrayPrimitive";
|
|
68
|
+
readonly _State: ArrayState<TElement>;
|
|
69
|
+
readonly _Proxy: ArrayProxy<TElement>;
|
|
70
|
+
readonly _TRequired: TRequired;
|
|
71
|
+
readonly _THasDefault: THasDefault;
|
|
72
|
+
readonly TSetInput: ArraySetInput<TElement>;
|
|
73
|
+
readonly TUpdateInput: ArrayUpdateInput<TElement>;
|
|
74
|
+
private readonly _schema;
|
|
75
|
+
private readonly _opDefinitions;
|
|
76
|
+
constructor(schema: ArrayPrimitiveSchema<TElement>);
|
|
77
|
+
/** Mark this array as required */
|
|
78
|
+
required(): ArrayPrimitive<TElement, true, THasDefault>;
|
|
79
|
+
/** Set a default value for this array */
|
|
80
|
+
default(defaultValue: ArrayState<TElement>): ArrayPrimitive<TElement, TRequired, true>;
|
|
81
|
+
/** Get the element primitive */
|
|
82
|
+
get element(): TElement;
|
|
83
|
+
/** Add a custom validation rule */
|
|
84
|
+
refine(fn: (value: ArrayState<TElement>) => boolean, message: string): ArrayPrimitive<TElement, TRequired, THasDefault>;
|
|
85
|
+
/** Minimum array length */
|
|
86
|
+
minLength(length: number): ArrayPrimitive<TElement, TRequired, THasDefault>;
|
|
87
|
+
/** Maximum array length */
|
|
88
|
+
maxLength(length: number): ArrayPrimitive<TElement, TRequired, THasDefault>;
|
|
89
|
+
readonly _internal: PrimitiveInternal<ArrayState<TElement>, ArrayProxy<TElement>>;
|
|
90
|
+
}
|
|
91
|
+
/** Creates a new ArrayPrimitive with the given element type */
|
|
92
|
+
declare const Array: <TElement extends AnyPrimitive>(element: TElement) => ArrayPrimitive<TElement, false, false>;
|
|
93
|
+
//#endregion
|
|
94
|
+
export { Array, ArrayElementSetInput, ArrayEntry, ArrayEntrySnapshot, ArrayPrimitive, ArrayProxy, ArraySetInput, ArraySnapshot, ArrayState, ArrayUpdateInput };
|
|
95
|
+
//# sourceMappingURL=Array.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Array.d.mts","names":[],"sources":["../../src/primitives/Array.ts"],"sourcesContent":[],"mappings":"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"}
|