tempest.games 0.2.72 → 0.2.74
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/CHANGELOG.md +14 -0
- package/app/assets/{index-BQfBw87O.js → index-DQgXn3W_.js} +23 -23
- package/app/index.html +1 -1
- package/bin/backend.bun.js +215 -928
- package/bin/backend.worker.game.bun.js +0 -713
- package/bin/backend.worker.tribunal.bun.js +219 -932
- package/bin/frontend.bun.js +215 -928
- package/bin/setup-db.bun.js +178 -178
- package/package.json +11 -11
|
@@ -42,9 +42,6 @@ function getState(...params) {
|
|
|
42
42
|
function join(options) {
|
|
43
43
|
return createJoin(IMPLICIT.STORE, options);
|
|
44
44
|
}
|
|
45
|
-
function getInternalRelations(token) {
|
|
46
|
-
return getInternalRelationsFromStore(token, IMPLICIT.STORE);
|
|
47
|
-
}
|
|
48
45
|
var PRETTY_TOKEN_TYPES = {
|
|
49
46
|
atom_family: `atom family`,
|
|
50
47
|
atom: `atom`,
|
|
@@ -114,28 +111,9 @@ var $validatedKey = Symbol.for(`claim`);
|
|
|
114
111
|
function simpleCompound(a, b) {
|
|
115
112
|
return [a, b].sort().join(`\x1F`);
|
|
116
113
|
}
|
|
117
|
-
function decomposeCompound(compound) {
|
|
118
|
-
if (typeof compound === `string` === false)
|
|
119
|
-
return null;
|
|
120
|
-
const [typeTag, components] = compound.split(`==`);
|
|
121
|
-
if (!components)
|
|
122
|
-
return null;
|
|
123
|
-
const type = typeTag.slice(4);
|
|
124
|
-
const [a, b] = components.split(`++`);
|
|
125
|
-
if (type && a && b)
|
|
126
|
-
return [
|
|
127
|
-
type,
|
|
128
|
-
a,
|
|
129
|
-
b
|
|
130
|
-
];
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
114
|
function selectorFamily(options) {
|
|
134
115
|
return createSelectorFamily(IMPLICIT.STORE, options);
|
|
135
116
|
}
|
|
136
|
-
function transaction(options) {
|
|
137
|
-
return createTransaction(IMPLICIT.STORE, options);
|
|
138
|
-
}
|
|
139
117
|
|
|
140
118
|
// ../../packages/atom.io/dist/json/index.js
|
|
141
119
|
function parseJson(str) {
|
|
@@ -300,9 +278,6 @@ var UList = class UList2 extends Set {
|
|
|
300
278
|
};
|
|
301
279
|
|
|
302
280
|
// ../../packages/atom.io/dist/internal/index.js
|
|
303
|
-
function arbitrary(random = Math.random) {
|
|
304
|
-
return random().toString(36).slice(2);
|
|
305
|
-
}
|
|
306
281
|
function newest(scion) {
|
|
307
282
|
while (scion.child !== null)
|
|
308
283
|
scion = scion.child;
|
|
@@ -894,426 +869,12 @@ var Junction = class Junction2 {
|
|
|
894
869
|
function isReservedIntrospectionKey(value) {
|
|
895
870
|
return value.startsWith(`\uD83D\uDD0D `);
|
|
896
871
|
}
|
|
897
|
-
var abortTransaction = (target) => {
|
|
898
|
-
target.logger.info(`\uD83E\uDE82`, `transaction`, target.transactionMeta.update.token.key, `Aborting transaction`);
|
|
899
|
-
target.parent.child = null;
|
|
900
|
-
};
|
|
901
|
-
function actUponStore(store, token, id) {
|
|
902
|
-
return (...parameters) => {
|
|
903
|
-
return withdraw(store, token).run(parameters, id);
|
|
904
|
-
};
|
|
905
|
-
}
|
|
906
|
-
function ingestAtomUpdateEvent(store, event, applying) {
|
|
907
|
-
const { token, update: { newValue, oldValue } } = event;
|
|
908
|
-
setIntoStore(store, token, applying === `newValue` ? newValue : oldValue);
|
|
909
|
-
}
|
|
910
|
-
function getTrace(error) {
|
|
911
|
-
const { stack } = error;
|
|
912
|
-
if (stack)
|
|
913
|
-
return `
|
|
914
|
-
` + stack.split(`
|
|
915
|
-
`)?.slice(1)?.join(`
|
|
916
|
-
`);
|
|
917
|
-
return ``;
|
|
918
|
-
}
|
|
919
|
-
function allocateIntoStore(store, provenance, key, dependsOn = `any`) {
|
|
920
|
-
const origin = provenance;
|
|
921
|
-
const stringKey = stringifyJson(key);
|
|
922
|
-
const invalidKeys = [];
|
|
923
|
-
const target = newest(store);
|
|
924
|
-
if (Array.isArray(origin))
|
|
925
|
-
for (const formerClaim of origin) {
|
|
926
|
-
const claimString = stringifyJson(formerClaim);
|
|
927
|
-
if (target.molecules.get(claimString))
|
|
928
|
-
store.moleculeGraph.set(claimString, stringKey, { source: claimString });
|
|
929
|
-
else
|
|
930
|
-
invalidKeys.push(claimString);
|
|
931
|
-
}
|
|
932
|
-
else {
|
|
933
|
-
const claimString = stringifyJson(origin);
|
|
934
|
-
if (target.molecules.get(claimString))
|
|
935
|
-
store.moleculeGraph.set(claimString, stringKey, { source: claimString });
|
|
936
|
-
else
|
|
937
|
-
invalidKeys.push(claimString);
|
|
938
|
-
}
|
|
939
|
-
const subject = new Subject;
|
|
940
|
-
if (invalidKeys.length === 0)
|
|
941
|
-
target.molecules.set(stringKey, {
|
|
942
|
-
key,
|
|
943
|
-
stringKey,
|
|
944
|
-
dependsOn,
|
|
945
|
-
subject
|
|
946
|
-
});
|
|
947
|
-
const creationEvent = {
|
|
948
|
-
type: `molecule_creation`,
|
|
949
|
-
key,
|
|
950
|
-
provenance: origin,
|
|
951
|
-
timestamp: Date.now()
|
|
952
|
-
};
|
|
953
|
-
if (isChildStore(target) && target.transactionMeta.phase === `building`)
|
|
954
|
-
target.transactionMeta.update.subEvents.push(creationEvent);
|
|
955
|
-
else
|
|
956
|
-
target.on.moleculeCreation.next(creationEvent);
|
|
957
|
-
for (const claim of invalidKeys) {
|
|
958
|
-
const disposal = store.disposalTraces.buffer.find((item) => item?.key === claim);
|
|
959
|
-
store.logger.error(`\u274C`, `key`, key, `allocation failed:`, `Could not allocate to ${claim} in store "${store.config.name}".`, disposal ? `
|
|
960
|
-
${claim} was most recently disposed
|
|
961
|
-
${disposal.trace}` : `No previous disposal trace for ${claim} was found.`);
|
|
962
|
-
}
|
|
963
|
-
return key;
|
|
964
|
-
}
|
|
965
|
-
function deallocateFromStore(target, claim) {
|
|
966
|
-
const stringKey = stringifyJson(claim);
|
|
967
|
-
const molecule = target.molecules.get(stringKey);
|
|
968
|
-
if (!molecule) {
|
|
969
|
-
const disposal = target.disposalTraces.buffer.find((item) => item?.key === stringKey);
|
|
970
|
-
target.logger.error(`\u274C`, `key`, claim, `deallocation failed:`, `Could not find allocation for ${stringKey} in store "${target.config.name}".`, disposal ? `
|
|
971
|
-
This state was most recently deallocated
|
|
972
|
-
${disposal.trace}` : `No previous disposal trace for ${stringKey} was found.`);
|
|
973
|
-
return;
|
|
974
|
-
}
|
|
975
|
-
molecule.subject.next();
|
|
976
|
-
const joinKeys = target.keyRefsInJoins.getRelatedKeys(stringKey);
|
|
977
|
-
if (joinKeys)
|
|
978
|
-
for (const joinKey of joinKeys) {
|
|
979
|
-
const join$1 = target.joins.get(joinKey);
|
|
980
|
-
if (join$1)
|
|
981
|
-
join$1.relations.delete(claim);
|
|
982
|
-
}
|
|
983
|
-
else {
|
|
984
|
-
const compound = decomposeCompound(claim);
|
|
985
|
-
if (compound) {
|
|
986
|
-
const [, a, b] = compound;
|
|
987
|
-
const joinKey = target.keyRefsInJoins.getRelatedKey(simpleCompound(a, b));
|
|
988
|
-
if (joinKey) {
|
|
989
|
-
const join$1 = target.joins.get(joinKey);
|
|
990
|
-
if (join$1)
|
|
991
|
-
join$1.relations.delete(a, b);
|
|
992
|
-
}
|
|
993
|
-
}
|
|
994
|
-
}
|
|
995
|
-
target.keyRefsInJoins.delete(stringKey);
|
|
996
|
-
const provenance = [];
|
|
997
|
-
const values = [];
|
|
998
|
-
const relatedMolecules = target.moleculeGraph.getRelationEntries({ downstreamMoleculeKey: stringKey });
|
|
999
|
-
if (relatedMolecules)
|
|
1000
|
-
for (const [relatedStringKey, { source }] of relatedMolecules)
|
|
1001
|
-
if (source === stringKey)
|
|
1002
|
-
deallocateFromStore(target, parseJson(relatedStringKey));
|
|
1003
|
-
else
|
|
1004
|
-
provenance.push(source);
|
|
1005
|
-
const familyKeys = target.moleculeData.getRelatedKeys(molecule.stringKey);
|
|
1006
|
-
if (familyKeys)
|
|
1007
|
-
for (const familyKey of familyKeys) {
|
|
1008
|
-
const family = target.families.get(familyKey);
|
|
1009
|
-
const value = getFromStore(target, family, claim);
|
|
1010
|
-
values.push([family.key, value]);
|
|
1011
|
-
disposeFromStore(target, family, claim);
|
|
1012
|
-
}
|
|
1013
|
-
const disposalEvent = {
|
|
1014
|
-
type: `molecule_disposal`,
|
|
1015
|
-
key: molecule.key,
|
|
1016
|
-
values,
|
|
1017
|
-
provenance,
|
|
1018
|
-
timestamp: Date.now()
|
|
1019
|
-
};
|
|
1020
|
-
target.molecules.delete(stringKey);
|
|
1021
|
-
const isTransaction = isChildStore(target) && target.transactionMeta.phase === `building`;
|
|
1022
|
-
if (isTransaction)
|
|
1023
|
-
target.transactionMeta.update.subEvents.push(disposalEvent);
|
|
1024
|
-
target.moleculeGraph.delete(molecule.stringKey);
|
|
1025
|
-
target.keyRefsInJoins.delete(molecule.stringKey);
|
|
1026
|
-
target.moleculeData.delete(molecule.stringKey);
|
|
1027
|
-
if (!isTransaction)
|
|
1028
|
-
target.on.moleculeDisposal.next(disposalEvent);
|
|
1029
|
-
target.molecules.delete(molecule.stringKey);
|
|
1030
|
-
const trace = getTrace(/* @__PURE__ */ new Error);
|
|
1031
|
-
target.disposalTraces.add({
|
|
1032
|
-
key: stringKey,
|
|
1033
|
-
trace
|
|
1034
|
-
});
|
|
1035
|
-
}
|
|
1036
|
-
function claimWithinStore(store, newProvenance, claim, exclusive) {
|
|
1037
|
-
const stringKey = stringifyJson(claim);
|
|
1038
|
-
const target = newest(store);
|
|
1039
|
-
const molecule = target.molecules.get(stringKey);
|
|
1040
|
-
if (!molecule) {
|
|
1041
|
-
const disposal = store.disposalTraces.buffer.find((item) => item?.key === stringKey);
|
|
1042
|
-
store.logger.error(`\u274C`, `key`, stringKey, `claim failed:`, `Could not allocate to ${stringKey} in store "${store.config.name}".`, disposal ? `
|
|
1043
|
-
${stringKey} was most recently disposed
|
|
1044
|
-
${disposal.trace}` : `No previous disposal trace for ${stringKey} was found.`);
|
|
1045
|
-
return claim;
|
|
1046
|
-
}
|
|
1047
|
-
const newProvenanceKey = stringifyJson(newProvenance);
|
|
1048
|
-
const newProvenanceMolecule = target.molecules.get(newProvenanceKey);
|
|
1049
|
-
if (!newProvenanceMolecule) {
|
|
1050
|
-
const disposal = store.disposalTraces.buffer.find((item) => item?.key === newProvenanceKey);
|
|
1051
|
-
store.logger.error(`\u274C`, `key`, claim, `claim failed:`, `Could not allocate to ${newProvenanceKey} in store "${store.config.name}".`, disposal ? `
|
|
1052
|
-
${newProvenanceKey} was most recently disposed
|
|
1053
|
-
${disposal.trace}` : `No previous disposal trace for ${newProvenanceKey} was found.`);
|
|
1054
|
-
return claim;
|
|
1055
|
-
}
|
|
1056
|
-
const priorProvenance = store.moleculeGraph.getRelationEntries({ downstreamMoleculeKey: molecule.stringKey }).filter(([, { source }]) => source !== stringKey).map(([key]) => parseJson(key));
|
|
1057
|
-
if (exclusive)
|
|
1058
|
-
target.moleculeGraph.delete(stringKey);
|
|
1059
|
-
target.moleculeGraph.set({
|
|
1060
|
-
upstreamMoleculeKey: newProvenanceMolecule.stringKey,
|
|
1061
|
-
downstreamMoleculeKey: molecule.stringKey
|
|
1062
|
-
}, { source: newProvenanceMolecule.stringKey });
|
|
1063
|
-
const transferEvent = {
|
|
1064
|
-
type: `molecule_transfer`,
|
|
1065
|
-
key: molecule.key,
|
|
1066
|
-
exclusive: Boolean(exclusive),
|
|
1067
|
-
from: priorProvenance,
|
|
1068
|
-
to: [newProvenanceMolecule.key],
|
|
1069
|
-
timestamp: Date.now()
|
|
1070
|
-
};
|
|
1071
|
-
if (isChildStore(target) && target.transactionMeta.phase === `building`)
|
|
1072
|
-
target.transactionMeta.update.subEvents.push(transferEvent);
|
|
1073
|
-
return claim;
|
|
1074
|
-
}
|
|
1075
|
-
function ingestCreationEvent(store, event, applying) {
|
|
1076
|
-
switch (applying) {
|
|
1077
|
-
case `newValue`:
|
|
1078
|
-
createInStore(store, event);
|
|
1079
|
-
break;
|
|
1080
|
-
case `oldValue`:
|
|
1081
|
-
disposeFromStore(store, event.token);
|
|
1082
|
-
break;
|
|
1083
|
-
}
|
|
1084
|
-
}
|
|
1085
|
-
function ingestDisposalEvent(store, event, applying) {
|
|
1086
|
-
switch (applying) {
|
|
1087
|
-
case `newValue`:
|
|
1088
|
-
disposeFromStore(store, event.token);
|
|
1089
|
-
break;
|
|
1090
|
-
case `oldValue`:
|
|
1091
|
-
createInStore(store, event);
|
|
1092
|
-
if (event.subType === `atom`)
|
|
1093
|
-
store.valueMap.set(event.token.key, event.value);
|
|
1094
|
-
break;
|
|
1095
|
-
}
|
|
1096
|
-
}
|
|
1097
|
-
function createInStore(store, event) {
|
|
1098
|
-
const { token } = event;
|
|
1099
|
-
if (event.subType === `writable` && event.value)
|
|
1100
|
-
setIntoStore(store, token, event.value);
|
|
1101
|
-
else
|
|
1102
|
-
getFromStore(store, token);
|
|
1103
|
-
}
|
|
1104
|
-
function ingestMoleculeCreationEvent(store, event, applying) {
|
|
1105
|
-
switch (applying) {
|
|
1106
|
-
case `newValue`:
|
|
1107
|
-
allocateIntoStore(store, event.provenance, event.key);
|
|
1108
|
-
break;
|
|
1109
|
-
case `oldValue`:
|
|
1110
|
-
deallocateFromStore(store, event.key);
|
|
1111
|
-
break;
|
|
1112
|
-
}
|
|
1113
|
-
}
|
|
1114
|
-
function ingestMoleculeDisposalEvent(store, event, applying) {
|
|
1115
|
-
switch (applying) {
|
|
1116
|
-
case `newValue`:
|
|
1117
|
-
deallocateFromStore(store, event.key);
|
|
1118
|
-
break;
|
|
1119
|
-
case `oldValue`:
|
|
1120
|
-
allocateIntoStore(store, event.provenance.map(parseJson), event.key);
|
|
1121
|
-
for (const [familyKey, value] of event.values) {
|
|
1122
|
-
const family = store.families.get(familyKey);
|
|
1123
|
-
if (family) {
|
|
1124
|
-
getFromStore(store, family, event.key);
|
|
1125
|
-
const memberKey = `${familyKey}(${stringifyJson(event.key)})`;
|
|
1126
|
-
store.valueMap.set(memberKey, value);
|
|
1127
|
-
}
|
|
1128
|
-
}
|
|
1129
|
-
break;
|
|
1130
|
-
}
|
|
1131
|
-
}
|
|
1132
|
-
function ingestMoleculeTransferEvent(store, event, applying) {
|
|
1133
|
-
switch (applying) {
|
|
1134
|
-
case `newValue`:
|
|
1135
|
-
for (const newOwner of event.to)
|
|
1136
|
-
claimWithinStore(store, newOwner, event.key, event.exclusive ? `exclusive` : undefined);
|
|
1137
|
-
break;
|
|
1138
|
-
case `oldValue`:
|
|
1139
|
-
{
|
|
1140
|
-
let exclusivity = `exclusive`;
|
|
1141
|
-
for (const previousOwner of event.from) {
|
|
1142
|
-
claimWithinStore(store, previousOwner, event.key, exclusivity);
|
|
1143
|
-
exclusivity = undefined;
|
|
1144
|
-
}
|
|
1145
|
-
}
|
|
1146
|
-
break;
|
|
1147
|
-
}
|
|
1148
|
-
}
|
|
1149
|
-
function ingestTransactionOutcomeEvent(store, event, applying) {
|
|
1150
|
-
const subEvents = applying === `newValue` ? event.subEvents : [...event.subEvents].reverse();
|
|
1151
|
-
for (const subEvent of subEvents)
|
|
1152
|
-
switch (subEvent.type) {
|
|
1153
|
-
case `atom_update`:
|
|
1154
|
-
ingestAtomUpdateEvent(store, subEvent, applying);
|
|
1155
|
-
break;
|
|
1156
|
-
case `state_creation`:
|
|
1157
|
-
ingestCreationEvent(store, subEvent, applying);
|
|
1158
|
-
break;
|
|
1159
|
-
case `state_disposal`:
|
|
1160
|
-
ingestDisposalEvent(store, subEvent, applying);
|
|
1161
|
-
break;
|
|
1162
|
-
case `molecule_creation`:
|
|
1163
|
-
ingestMoleculeCreationEvent(store, subEvent, applying);
|
|
1164
|
-
break;
|
|
1165
|
-
case `molecule_disposal`:
|
|
1166
|
-
ingestMoleculeDisposalEvent(store, subEvent, applying);
|
|
1167
|
-
break;
|
|
1168
|
-
case `molecule_transfer`:
|
|
1169
|
-
ingestMoleculeTransferEvent(store, subEvent, applying);
|
|
1170
|
-
break;
|
|
1171
|
-
case `transaction_outcome`:
|
|
1172
|
-
ingestTransactionOutcomeEvent(store, subEvent, applying);
|
|
1173
|
-
break;
|
|
1174
|
-
}
|
|
1175
|
-
}
|
|
1176
872
|
function isRootStore(store) {
|
|
1177
873
|
return `epoch` in store.transactionMeta;
|
|
1178
874
|
}
|
|
1179
875
|
function isChildStore(store) {
|
|
1180
876
|
return `phase` in store.transactionMeta;
|
|
1181
877
|
}
|
|
1182
|
-
function getContinuityKey(store, transactionKey) {
|
|
1183
|
-
return store.transactionMeta.actionContinuities.getRelatedKey(transactionKey);
|
|
1184
|
-
}
|
|
1185
|
-
function getEpochNumberOfContinuity(store, continuityKey) {
|
|
1186
|
-
return store.transactionMeta.epoch.get(continuityKey);
|
|
1187
|
-
}
|
|
1188
|
-
function getEpochNumberOfAction(store, transactionKey) {
|
|
1189
|
-
const continuityKey = getContinuityKey(store, transactionKey);
|
|
1190
|
-
if (continuityKey === undefined)
|
|
1191
|
-
return;
|
|
1192
|
-
return getEpochNumberOfContinuity(store, continuityKey);
|
|
1193
|
-
}
|
|
1194
|
-
function setEpochNumberOfAction(store, transactionKey, newEpoch) {
|
|
1195
|
-
const continuityKey = getContinuityKey(store, transactionKey);
|
|
1196
|
-
if (continuityKey !== undefined)
|
|
1197
|
-
store.transactionMeta.epoch.set(continuityKey, newEpoch);
|
|
1198
|
-
}
|
|
1199
|
-
function applyTransaction(store, output) {
|
|
1200
|
-
const child = newest(store);
|
|
1201
|
-
const { parent } = child;
|
|
1202
|
-
child.transactionMeta.phase = `applying`;
|
|
1203
|
-
child.transactionMeta.update.output = output;
|
|
1204
|
-
parent.child = null;
|
|
1205
|
-
parent.on.transactionApplying.next(child.transactionMeta);
|
|
1206
|
-
const { subEvents: updates } = child.transactionMeta.update;
|
|
1207
|
-
store.logger.info(`\uD83D\uDEC4`, `transaction`, child.transactionMeta.update.token.key, `applying ${updates.length} subEvents:`, updates);
|
|
1208
|
-
ingestTransactionOutcomeEvent(parent, child.transactionMeta.update, `newValue`);
|
|
1209
|
-
if (isRootStore(parent)) {
|
|
1210
|
-
setEpochNumberOfAction(parent, child.transactionMeta.update.token.key, child.transactionMeta.update.epoch);
|
|
1211
|
-
withdraw(store, {
|
|
1212
|
-
key: child.transactionMeta.update.token.key,
|
|
1213
|
-
type: `transaction`
|
|
1214
|
-
})?.subject.next(child.transactionMeta.update);
|
|
1215
|
-
store.logger.info(`\uD83D\uDEEC`, `transaction`, child.transactionMeta.update.token.key, `applied`);
|
|
1216
|
-
} else if (isChildStore(parent))
|
|
1217
|
-
parent.transactionMeta.update.subEvents.push(child.transactionMeta.update);
|
|
1218
|
-
parent.on.transactionApplying.next(null);
|
|
1219
|
-
}
|
|
1220
|
-
function getEnvironmentData(store) {
|
|
1221
|
-
return { store };
|
|
1222
|
-
}
|
|
1223
|
-
var buildTransaction = (store, token, params, id) => {
|
|
1224
|
-
const parent = newest(store);
|
|
1225
|
-
const childBase = {
|
|
1226
|
-
parent,
|
|
1227
|
-
child: null,
|
|
1228
|
-
on: parent.on,
|
|
1229
|
-
loggers: parent.loggers,
|
|
1230
|
-
logger: parent.logger,
|
|
1231
|
-
config: parent.config,
|
|
1232
|
-
atoms: new MapOverlay(parent.atoms),
|
|
1233
|
-
atomsThatAreDefault: new Set(parent.atomsThatAreDefault),
|
|
1234
|
-
families: new MapOverlay(parent.families),
|
|
1235
|
-
joins: new MapOverlay(parent.joins),
|
|
1236
|
-
operation: { open: false },
|
|
1237
|
-
readonlySelectors: new MapOverlay(parent.readonlySelectors),
|
|
1238
|
-
timelines: new MapOverlay(parent.timelines),
|
|
1239
|
-
timelineTopics: parent.timelineTopics.overlay(),
|
|
1240
|
-
trackers: /* @__PURE__ */ new Map,
|
|
1241
|
-
transactions: new MapOverlay(parent.transactions),
|
|
1242
|
-
selectorAtoms: parent.selectorAtoms.overlay(),
|
|
1243
|
-
selectorGraph: parent.selectorGraph.overlay(),
|
|
1244
|
-
writableSelectors: new MapOverlay(parent.writableSelectors),
|
|
1245
|
-
valueMap: new MapOverlay(parent.valueMap),
|
|
1246
|
-
defaults: parent.defaults,
|
|
1247
|
-
disposalTraces: store.disposalTraces.copy(),
|
|
1248
|
-
molecules: new MapOverlay(parent.molecules),
|
|
1249
|
-
moleculeGraph: parent.moleculeGraph.overlay(),
|
|
1250
|
-
moleculeData: parent.moleculeData.overlay(),
|
|
1251
|
-
keyRefsInJoins: parent.keyRefsInJoins.overlay(),
|
|
1252
|
-
miscResources: new MapOverlay(parent.miscResources)
|
|
1253
|
-
};
|
|
1254
|
-
const epoch = getEpochNumberOfAction(store, token.key);
|
|
1255
|
-
const transactionMeta = {
|
|
1256
|
-
phase: `building`,
|
|
1257
|
-
update: {
|
|
1258
|
-
type: `transaction_outcome`,
|
|
1259
|
-
token,
|
|
1260
|
-
id,
|
|
1261
|
-
epoch: epoch === undefined ? NaN : epoch + 1,
|
|
1262
|
-
timestamp: Date.now(),
|
|
1263
|
-
subEvents: [],
|
|
1264
|
-
params,
|
|
1265
|
-
output: undefined
|
|
1266
|
-
},
|
|
1267
|
-
toolkit: {
|
|
1268
|
-
get: (...ps) => getFromStore(child, ...ps),
|
|
1269
|
-
set: (...ps) => {
|
|
1270
|
-
setIntoStore(child, ...ps);
|
|
1271
|
-
},
|
|
1272
|
-
reset: (...ps) => {
|
|
1273
|
-
resetInStore(child, ...ps);
|
|
1274
|
-
},
|
|
1275
|
-
run: (t, identifier = arbitrary()) => actUponStore(child, t, identifier),
|
|
1276
|
-
find: (...ps) => findInStore(store, ...ps),
|
|
1277
|
-
json: (t) => getJsonToken(child, t),
|
|
1278
|
-
dispose: (...ps) => {
|
|
1279
|
-
disposeFromStore(child, ...ps);
|
|
1280
|
-
},
|
|
1281
|
-
env: () => getEnvironmentData(child)
|
|
1282
|
-
}
|
|
1283
|
-
};
|
|
1284
|
-
const child = Object.assign(childBase, { transactionMeta });
|
|
1285
|
-
parent.child = child;
|
|
1286
|
-
store.logger.info(`\uD83D\uDEEB`, `transaction`, token.key, `building with params:`, params);
|
|
1287
|
-
return child;
|
|
1288
|
-
};
|
|
1289
|
-
function createTransaction(store, options) {
|
|
1290
|
-
const { key } = options;
|
|
1291
|
-
const transactionAlreadyExists = store.transactions.has(key);
|
|
1292
|
-
const newTransaction = {
|
|
1293
|
-
key,
|
|
1294
|
-
type: `transaction`,
|
|
1295
|
-
run: (params, id) => {
|
|
1296
|
-
const target = buildTransaction(store, deposit(newTransaction), params, id);
|
|
1297
|
-
try {
|
|
1298
|
-
const { toolkit } = target.transactionMeta;
|
|
1299
|
-
const output = options.do(toolkit, ...params);
|
|
1300
|
-
applyTransaction(target, output);
|
|
1301
|
-
return output;
|
|
1302
|
-
} catch (thrown) {
|
|
1303
|
-
abortTransaction(target);
|
|
1304
|
-
store.logger.warn(`\uD83D\uDCA5`, `transaction`, key, `caught:`, thrown);
|
|
1305
|
-
throw thrown;
|
|
1306
|
-
}
|
|
1307
|
-
},
|
|
1308
|
-
install: (s) => createTransaction(s, options),
|
|
1309
|
-
subject: new Subject
|
|
1310
|
-
};
|
|
1311
|
-
newest(store).transactions.set(key, newTransaction);
|
|
1312
|
-
const token = deposit(newTransaction);
|
|
1313
|
-
if (!transactionAlreadyExists)
|
|
1314
|
-
store.on.transactionCreation.next(token);
|
|
1315
|
-
return token;
|
|
1316
|
-
}
|
|
1317
878
|
var Store = class {
|
|
1318
879
|
parent = null;
|
|
1319
880
|
child = null;
|
|
@@ -1991,34 +1552,6 @@ function createSelectorFamily(store, options) {
|
|
|
1991
1552
|
return createWritablePureSelectorFamily(store, options);
|
|
1992
1553
|
return createReadonlyPureSelectorFamily(store, options);
|
|
1993
1554
|
}
|
|
1994
|
-
function disposeFromStore(store, ...params) {
|
|
1995
|
-
let token;
|
|
1996
|
-
if (params.length === 1)
|
|
1997
|
-
token = params[0];
|
|
1998
|
-
else {
|
|
1999
|
-
const family = params[0];
|
|
2000
|
-
const key = params[1];
|
|
2001
|
-
token = findInStore(store, family, key);
|
|
2002
|
-
}
|
|
2003
|
-
try {
|
|
2004
|
-
withdraw(store, token);
|
|
2005
|
-
} catch (_) {
|
|
2006
|
-
store.logger.error(`\u274C`, token.type, token.key, `could not be disposed because it was not found in the store "${store.config.name}".`);
|
|
2007
|
-
return;
|
|
2008
|
-
}
|
|
2009
|
-
switch (token.type) {
|
|
2010
|
-
case `atom`:
|
|
2011
|
-
case `mutable_atom`:
|
|
2012
|
-
disposeAtom(store, token);
|
|
2013
|
-
break;
|
|
2014
|
-
case `writable_pure_selector`:
|
|
2015
|
-
case `readonly_pure_selector`:
|
|
2016
|
-
case `writable_held_selector`:
|
|
2017
|
-
case `readonly_held_selector`:
|
|
2018
|
-
disposeSelector(store, token);
|
|
2019
|
-
break;
|
|
2020
|
-
}
|
|
2021
|
-
}
|
|
2022
1555
|
function openOperation(store, token) {
|
|
2023
1556
|
if (store.operation.open) {
|
|
2024
1557
|
const rejectionTime = performance.now();
|
|
@@ -2588,85 +2121,6 @@ function createStandaloneSelector(store, options) {
|
|
|
2588
2121
|
store.on.selectorCreation.next(state);
|
|
2589
2122
|
return state;
|
|
2590
2123
|
}
|
|
2591
|
-
function disposeSelector(store, selectorToken) {
|
|
2592
|
-
const target = newest(store);
|
|
2593
|
-
const { key, type, family: familyMeta } = selectorToken;
|
|
2594
|
-
if (!familyMeta)
|
|
2595
|
-
store.logger.error(`\u274C`, type, key, `Standalone selectors cannot be disposed.`);
|
|
2596
|
-
else {
|
|
2597
|
-
if (target.molecules.get(familyMeta.subKey))
|
|
2598
|
-
target.moleculeData.delete(familyMeta.subKey, familyMeta.key);
|
|
2599
|
-
let familyToken;
|
|
2600
|
-
switch (selectorToken.type) {
|
|
2601
|
-
case `writable_held_selector`:
|
|
2602
|
-
target.writableSelectors.delete(key);
|
|
2603
|
-
familyToken = {
|
|
2604
|
-
key: familyMeta.key,
|
|
2605
|
-
type: `writable_held_selector_family`
|
|
2606
|
-
};
|
|
2607
|
-
withdraw(store, familyToken).subject.next({
|
|
2608
|
-
type: `state_disposal`,
|
|
2609
|
-
subType: `selector`,
|
|
2610
|
-
token: selectorToken,
|
|
2611
|
-
timestamp: Date.now()
|
|
2612
|
-
});
|
|
2613
|
-
break;
|
|
2614
|
-
case `writable_pure_selector`:
|
|
2615
|
-
target.writableSelectors.delete(key);
|
|
2616
|
-
familyToken = {
|
|
2617
|
-
key: familyMeta.key,
|
|
2618
|
-
type: `writable_pure_selector_family`
|
|
2619
|
-
};
|
|
2620
|
-
withdraw(store, familyToken).subject.next({
|
|
2621
|
-
type: `state_disposal`,
|
|
2622
|
-
subType: `selector`,
|
|
2623
|
-
token: selectorToken,
|
|
2624
|
-
timestamp: Date.now()
|
|
2625
|
-
});
|
|
2626
|
-
break;
|
|
2627
|
-
case `readonly_held_selector`:
|
|
2628
|
-
target.readonlySelectors.delete(key);
|
|
2629
|
-
familyToken = {
|
|
2630
|
-
key: familyMeta.key,
|
|
2631
|
-
type: `readonly_held_selector_family`
|
|
2632
|
-
};
|
|
2633
|
-
withdraw(store, familyToken).subject.next({
|
|
2634
|
-
type: `state_disposal`,
|
|
2635
|
-
subType: `selector`,
|
|
2636
|
-
token: selectorToken,
|
|
2637
|
-
timestamp: Date.now()
|
|
2638
|
-
});
|
|
2639
|
-
break;
|
|
2640
|
-
case `readonly_pure_selector`:
|
|
2641
|
-
target.readonlySelectors.delete(key);
|
|
2642
|
-
familyToken = {
|
|
2643
|
-
key: familyMeta.key,
|
|
2644
|
-
type: `readonly_pure_selector_family`
|
|
2645
|
-
};
|
|
2646
|
-
withdraw(store, familyToken).subject.next({
|
|
2647
|
-
type: `state_disposal`,
|
|
2648
|
-
subType: `selector`,
|
|
2649
|
-
token: selectorToken,
|
|
2650
|
-
timestamp: Date.now()
|
|
2651
|
-
});
|
|
2652
|
-
break;
|
|
2653
|
-
}
|
|
2654
|
-
target.valueMap.delete(key);
|
|
2655
|
-
target.selectorAtoms.delete(key);
|
|
2656
|
-
target.selectorGraph.delete(key);
|
|
2657
|
-
target.moleculeData.delete(familyMeta.key, familyMeta.subKey);
|
|
2658
|
-
store.logger.info(`\uD83D\uDD25`, selectorToken.type, key, `deleted`);
|
|
2659
|
-
if (isChildStore(target) && target.transactionMeta.phase === `building`)
|
|
2660
|
-
target.transactionMeta.update.subEvents.push({
|
|
2661
|
-
type: `state_disposal`,
|
|
2662
|
-
subType: `selector`,
|
|
2663
|
-
token: selectorToken,
|
|
2664
|
-
timestamp: Date.now()
|
|
2665
|
-
});
|
|
2666
|
-
else
|
|
2667
|
-
store.on.selectorDisposal.next(selectorToken);
|
|
2668
|
-
}
|
|
2669
|
-
}
|
|
2670
2124
|
var recallState = (store, state) => {
|
|
2671
2125
|
const target = newest(store);
|
|
2672
2126
|
if (target.operation.open)
|
|
@@ -3141,46 +2595,6 @@ function hasRole(atom, role) {
|
|
|
3141
2595
|
return false;
|
|
3142
2596
|
return atom.internalRoles.includes(role);
|
|
3143
2597
|
}
|
|
3144
|
-
function disposeAtom(store, atomToken) {
|
|
3145
|
-
const target = newest(store);
|
|
3146
|
-
const { key, family } = atomToken;
|
|
3147
|
-
const atom = withdraw(target, atomToken);
|
|
3148
|
-
if (!family)
|
|
3149
|
-
store.logger.error(`\u274C`, `atom`, key, `Standalone atoms cannot be disposed.`);
|
|
3150
|
-
else {
|
|
3151
|
-
atom.cleanup?.();
|
|
3152
|
-
const lastValue = store.valueMap.get(atom.key);
|
|
3153
|
-
const subject = withdraw(store, getFamilyOfToken(store, atomToken)).subject;
|
|
3154
|
-
const disposalEvent = {
|
|
3155
|
-
type: `state_disposal`,
|
|
3156
|
-
subType: `atom`,
|
|
3157
|
-
token: atomToken,
|
|
3158
|
-
value: lastValue,
|
|
3159
|
-
timestamp: Date.now()
|
|
3160
|
-
};
|
|
3161
|
-
subject.next(disposalEvent);
|
|
3162
|
-
const isChild = isChildStore(target);
|
|
3163
|
-
target.atoms.delete(key);
|
|
3164
|
-
target.valueMap.delete(key);
|
|
3165
|
-
target.selectorAtoms.delete(key);
|
|
3166
|
-
target.atomsThatAreDefault.delete(key);
|
|
3167
|
-
target.moleculeData.delete(family.key, family.subKey);
|
|
3168
|
-
store.timelineTopics.delete(key);
|
|
3169
|
-
if (atomToken.type === `mutable_atom`) {
|
|
3170
|
-
disposeAtom(store, getUpdateToken(atomToken));
|
|
3171
|
-
store.trackers.delete(key);
|
|
3172
|
-
}
|
|
3173
|
-
store.logger.info(`\uD83D\uDD25`, `atom`, key, `deleted`);
|
|
3174
|
-
if (isChild && target.transactionMeta.phase === `building`) {
|
|
3175
|
-
const mostRecentUpdate = target.transactionMeta.update.subEvents.at(-1);
|
|
3176
|
-
const updateAlreadyCaptured = mostRecentUpdate?.type === `molecule_disposal` && mostRecentUpdate.values.some(([k]) => k === atom.family?.key);
|
|
3177
|
-
const isTracker = hasRole(atom, `tracker:signal`);
|
|
3178
|
-
if (!updateAlreadyCaptured && !isTracker)
|
|
3179
|
-
target.transactionMeta.update.subEvents.push(disposalEvent);
|
|
3180
|
-
} else
|
|
3181
|
-
store.on.atomDisposal.next(atomToken);
|
|
3182
|
-
}
|
|
3183
|
-
}
|
|
3184
2598
|
function capitalize(string) {
|
|
3185
2599
|
return string[0].toUpperCase() + string.slice(1);
|
|
3186
2600
|
}
|
|
@@ -3456,94 +2870,6 @@ function findRelationsInStore(token, key, store) {
|
|
|
3456
2870
|
}
|
|
3457
2871
|
return relations;
|
|
3458
2872
|
}
|
|
3459
|
-
function getInternalRelationsFromStore(token, store) {
|
|
3460
|
-
return getJoin(token, store).relatedKeysAtoms;
|
|
3461
|
-
}
|
|
3462
|
-
|
|
3463
|
-
// ../../packages/atom.io/dist/realtime/index.js
|
|
3464
|
-
var mutexAtoms = atomFamily({
|
|
3465
|
-
key: `mutex`,
|
|
3466
|
-
default: false
|
|
3467
|
-
});
|
|
3468
|
-
var InvariantMap = class extends Map {
|
|
3469
|
-
set(key, value) {
|
|
3470
|
-
if (this.has(key)) {
|
|
3471
|
-
console.warn(`Tried to set a key that already exists in an InvariantMap`, {
|
|
3472
|
-
key,
|
|
3473
|
-
value
|
|
3474
|
-
});
|
|
3475
|
-
return this;
|
|
3476
|
-
}
|
|
3477
|
-
return super.set(key, value);
|
|
3478
|
-
}
|
|
3479
|
-
};
|
|
3480
|
-
var SyncGroup = class SyncGroup2 {
|
|
3481
|
-
type = `continuity`;
|
|
3482
|
-
globals = [];
|
|
3483
|
-
actions = [];
|
|
3484
|
-
perspectives = [];
|
|
3485
|
-
key;
|
|
3486
|
-
constructor(key) {
|
|
3487
|
-
this.key = key;
|
|
3488
|
-
}
|
|
3489
|
-
static existing = new InvariantMap;
|
|
3490
|
-
static create(key, builder) {
|
|
3491
|
-
const { type, globals, actions, perspectives } = builder(new SyncGroup2(key));
|
|
3492
|
-
const token = {
|
|
3493
|
-
type,
|
|
3494
|
-
key,
|
|
3495
|
-
globals,
|
|
3496
|
-
actions,
|
|
3497
|
-
perspectives
|
|
3498
|
-
};
|
|
3499
|
-
SyncGroup2.existing.set(key, token);
|
|
3500
|
-
return token;
|
|
3501
|
-
}
|
|
3502
|
-
add(...args) {
|
|
3503
|
-
switch (args[0].type) {
|
|
3504
|
-
case `atom`:
|
|
3505
|
-
case `mutable_atom`:
|
|
3506
|
-
this.globals.push(...args);
|
|
3507
|
-
break;
|
|
3508
|
-
case `transaction`:
|
|
3509
|
-
this.actions.push(...args);
|
|
3510
|
-
break;
|
|
3511
|
-
case `atom_family`:
|
|
3512
|
-
case `mutable_atom_family`:
|
|
3513
|
-
{
|
|
3514
|
-
const [family, index] = args;
|
|
3515
|
-
this.perspectives.push({
|
|
3516
|
-
type: `realtime_perspective`,
|
|
3517
|
-
resourceAtoms: family,
|
|
3518
|
-
viewAtoms: index
|
|
3519
|
-
});
|
|
3520
|
-
}
|
|
3521
|
-
break;
|
|
3522
|
-
}
|
|
3523
|
-
return this;
|
|
3524
|
-
}
|
|
3525
|
-
};
|
|
3526
|
-
var usersInThisRoomIndex = mutableAtom({
|
|
3527
|
-
key: `usersInRoomIndex`,
|
|
3528
|
-
class: UList
|
|
3529
|
-
});
|
|
3530
|
-
var roomIndex = mutableAtom({
|
|
3531
|
-
key: `roomIndex`,
|
|
3532
|
-
class: UList
|
|
3533
|
-
});
|
|
3534
|
-
var usersInRooms = join({
|
|
3535
|
-
key: `usersInRooms`,
|
|
3536
|
-
between: [`room`, `user`],
|
|
3537
|
-
cardinality: `1:n`,
|
|
3538
|
-
isAType: (input) => typeof input === `string`,
|
|
3539
|
-
isBType: (input) => typeof input === `string`
|
|
3540
|
-
});
|
|
3541
|
-
var usersInMyRoomView = selectorFamily({
|
|
3542
|
-
key: `usersInMyRoomView`,
|
|
3543
|
-
get: (myUsername) => ({ find }) => {
|
|
3544
|
-
return [find(getInternalRelations(usersInRooms), myUsername)];
|
|
3545
|
-
}
|
|
3546
|
-
});
|
|
3547
2873
|
|
|
3548
2874
|
// ../../packages/atom.io/dist/realtime-server/index.js
|
|
3549
2875
|
var redactorAtoms = atomFamily({
|
|
@@ -3887,45 +3213,6 @@ var ParentSocket = class extends CustomSocket {
|
|
|
3887
3213
|
this.relayServices.push(attachServices);
|
|
3888
3214
|
}
|
|
3889
3215
|
};
|
|
3890
|
-
var ROOMS = /* @__PURE__ */ new Map;
|
|
3891
|
-
var joinRoomTX = transaction({
|
|
3892
|
-
key: `joinRoom`,
|
|
3893
|
-
do: (tools, roomId, userId, enteredAtEpoch) => {
|
|
3894
|
-
const meta = { enteredAtEpoch };
|
|
3895
|
-
editRelationsInStore(usersInRooms, (relations) => {
|
|
3896
|
-
relations.set({
|
|
3897
|
-
room: roomId,
|
|
3898
|
-
user: userId
|
|
3899
|
-
});
|
|
3900
|
-
}, tools.env().store);
|
|
3901
|
-
return meta;
|
|
3902
|
-
}
|
|
3903
|
-
});
|
|
3904
|
-
var leaveRoomTX = transaction({
|
|
3905
|
-
key: `leaveRoom`,
|
|
3906
|
-
do: ({ env }, roomId, userId) => {
|
|
3907
|
-
editRelationsInStore(usersInRooms, (relations) => {
|
|
3908
|
-
relations.delete({
|
|
3909
|
-
room: roomId,
|
|
3910
|
-
user: userId
|
|
3911
|
-
});
|
|
3912
|
-
}, env().store);
|
|
3913
|
-
}
|
|
3914
|
-
});
|
|
3915
|
-
var destroyRoomTX = transaction({
|
|
3916
|
-
key: `destroyRoom`,
|
|
3917
|
-
do: ({ set, env }, roomId) => {
|
|
3918
|
-
editRelationsInStore(usersInRooms, (relations) => {
|
|
3919
|
-
relations.delete({ room: roomId });
|
|
3920
|
-
}, env().store);
|
|
3921
|
-
set(roomIndex, (s) => (s.delete(roomId), s));
|
|
3922
|
-
const room = ROOMS.get(roomId);
|
|
3923
|
-
if (room) {
|
|
3924
|
-
room.emit(`exit`);
|
|
3925
|
-
ROOMS.delete(roomId);
|
|
3926
|
-
}
|
|
3927
|
-
}
|
|
3928
|
-
});
|
|
3929
3216
|
var socketAtoms = atomFamily({
|
|
3930
3217
|
key: `sockets`,
|
|
3931
3218
|
default: null
|