@noya-app/noya-multiplayer-react 0.1.62 → 0.1.64
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 +11 -11
- package/CHANGELOG.md +20 -0
- package/dist/index.bundle.js +50 -17
- package/dist/index.d.mts +87 -24
- package/dist/index.d.ts +87 -24
- package/dist/index.js +2556 -708
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2523 -692
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/NoyaStateContext.tsx +248 -28
- package/src/__tests__/serialize.test.ts +126 -0
- package/src/ai.ts +2 -0
- package/src/index.ts +1 -0
- package/src/inspector/ColoredDot.tsx +17 -0
- package/src/inspector/ObjectRootLabel.tsx +48 -0
- package/src/inspector/StateInspector.tsx +266 -741
- package/src/inspector/StateInspectorArrow.tsx +28 -0
- package/src/inspector/StateInspectorButton.tsx +45 -0
- package/src/inspector/StateInspectorDisclosureSection.tsx +97 -0
- package/src/inspector/StateInspectorRow.tsx +57 -0
- package/src/inspector/StateInspectorTitleLabel.tsx +13 -0
- package/src/inspector/StateInspectorToggleButton.tsx +82 -0
- package/src/inspector/inspectorTheme.ts +21 -0
- package/src/inspector/sections/ActivityEventsSection.tsx +136 -0
- package/src/inspector/sections/EventsSection.tsx +89 -0
- package/src/inspector/sections/HistorySection.tsx +236 -0
- package/src/inspector/serialization.ts +202 -0
- package/src/inspector/utils.ts +60 -0
- package/src/inspector/zip/TinyZip.ts +464 -0
- package/src/inspector/zip/crc32.ts +16 -0
- package/src/inspector/zip/struct.ts +117 -0
- package/src/noyaApp.ts +3 -2
- package/src/useObservable.ts +2 -0
package/dist/index.js
CHANGED
|
@@ -45,10 +45,10 @@ var require_access = __commonJS({
|
|
|
45
45
|
const accessed = _getPath(node, indexPath, options);
|
|
46
46
|
return accessed[accessed.length - 1];
|
|
47
47
|
}
|
|
48
|
-
let
|
|
49
|
-
while (
|
|
50
|
-
let index =
|
|
51
|
-
const children = options.getChildren(node,
|
|
48
|
+
let path2 = indexPath.slice();
|
|
49
|
+
while (path2.length > 0) {
|
|
50
|
+
let index = path2.shift();
|
|
51
|
+
const children = options.getChildren(node, path2);
|
|
52
52
|
const child = children[index];
|
|
53
53
|
if (!child) {
|
|
54
54
|
return void 0;
|
|
@@ -61,12 +61,12 @@ var require_access = __commonJS({
|
|
|
61
61
|
return _getPath(node, indexPath, options).slice(0, -1);
|
|
62
62
|
}
|
|
63
63
|
function _getPath(node, indexPath, options) {
|
|
64
|
-
let
|
|
64
|
+
let path2 = indexPath.slice();
|
|
65
65
|
let result = [node];
|
|
66
|
-
while (
|
|
67
|
-
let index =
|
|
66
|
+
while (path2.length > 0) {
|
|
67
|
+
let index = path2.shift();
|
|
68
68
|
const context = options.includeTraversalContext ? makeTraversalContext(result) : void 0;
|
|
69
|
-
const children = options.getChildren(node,
|
|
69
|
+
const children = options.getChildren(node, path2, context);
|
|
70
70
|
const child = children[index];
|
|
71
71
|
if (!child) {
|
|
72
72
|
return result;
|
|
@@ -81,20 +81,20 @@ var require_access = __commonJS({
|
|
|
81
81
|
const accessed = accessPath(node, indexPath, options);
|
|
82
82
|
return accessed[accessed.length - 1];
|
|
83
83
|
}
|
|
84
|
-
let
|
|
85
|
-
while (
|
|
86
|
-
let index =
|
|
87
|
-
node = options.getChildren(node,
|
|
84
|
+
let path2 = indexPath.slice();
|
|
85
|
+
while (path2.length > 0) {
|
|
86
|
+
let index = path2.shift();
|
|
87
|
+
node = options.getChildren(node, path2)[index];
|
|
88
88
|
}
|
|
89
89
|
return node;
|
|
90
90
|
}
|
|
91
91
|
function accessPath(node, indexPath, options) {
|
|
92
|
-
let
|
|
92
|
+
let path2 = indexPath.slice();
|
|
93
93
|
let result = [node];
|
|
94
|
-
while (
|
|
95
|
-
let index =
|
|
94
|
+
while (path2.length > 0) {
|
|
95
|
+
let index = path2.shift();
|
|
96
96
|
const context = options.includeTraversalContext ? makeTraversalContext(result) : void 0;
|
|
97
|
-
node = options.getChildren(node,
|
|
97
|
+
node = options.getChildren(node, path2, context)[index];
|
|
98
98
|
result.push(node);
|
|
99
99
|
}
|
|
100
100
|
return result;
|
|
@@ -608,40 +608,40 @@ var require_transformPath = __commonJS({
|
|
|
608
608
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
609
609
|
exports2.transformPath = transformPath;
|
|
610
610
|
var sort_1 = require_sort();
|
|
611
|
-
function commonAncestor(
|
|
612
|
-
const length = Math.min(
|
|
611
|
+
function commonAncestor(path2, otherPath) {
|
|
612
|
+
const length = Math.min(path2.length, otherPath.length);
|
|
613
613
|
for (let i = 0; i < length; i++) {
|
|
614
|
-
if (
|
|
615
|
-
return
|
|
614
|
+
if (path2[i] !== otherPath[i]) {
|
|
615
|
+
return path2.slice(0, i);
|
|
616
616
|
}
|
|
617
617
|
}
|
|
618
|
-
return
|
|
618
|
+
return path2.slice(0, length);
|
|
619
619
|
}
|
|
620
|
-
function transformPath(
|
|
621
|
-
if (otherPath.length >
|
|
622
|
-
return
|
|
620
|
+
function transformPath(path2, operation, otherPath, count = 1) {
|
|
621
|
+
if (otherPath.length > path2.length || (0, sort_1.comparePathsByComponent)(otherPath, path2) > 0) {
|
|
622
|
+
return path2;
|
|
623
623
|
}
|
|
624
624
|
if (otherPath.length === 0 && operation === "remove") {
|
|
625
625
|
return void 0;
|
|
626
626
|
}
|
|
627
|
-
const common = commonAncestor(
|
|
628
|
-
const adjustmentIndex = common.length ===
|
|
629
|
-
const pathValue =
|
|
627
|
+
const common = commonAncestor(path2, otherPath);
|
|
628
|
+
const adjustmentIndex = common.length === path2.length || common.length === otherPath.length ? common.length - 1 : common.length;
|
|
629
|
+
const pathValue = path2[adjustmentIndex];
|
|
630
630
|
const otherPathValue = otherPath[adjustmentIndex];
|
|
631
631
|
if (operation === "insert" && otherPathValue <= pathValue) {
|
|
632
|
-
const newPath = [...
|
|
632
|
+
const newPath = [...path2];
|
|
633
633
|
newPath[adjustmentIndex] += count;
|
|
634
634
|
return newPath;
|
|
635
635
|
} else if (operation === "remove") {
|
|
636
636
|
if (otherPathValue === pathValue) {
|
|
637
637
|
return void 0;
|
|
638
638
|
} else if (otherPathValue < pathValue) {
|
|
639
|
-
const newPath = [...
|
|
639
|
+
const newPath = [...path2];
|
|
640
640
|
newPath[adjustmentIndex] -= count;
|
|
641
641
|
return newPath;
|
|
642
642
|
}
|
|
643
643
|
}
|
|
644
|
-
return
|
|
644
|
+
return path2;
|
|
645
645
|
}
|
|
646
646
|
}
|
|
647
647
|
});
|
|
@@ -807,15 +807,15 @@ var require_operation = __commonJS({
|
|
|
807
807
|
switch (operation.type) {
|
|
808
808
|
case "insert": {
|
|
809
809
|
const otherPath = parentPath.concat(operation.index);
|
|
810
|
-
return transformedPaths.map((
|
|
810
|
+
return transformedPaths.map((path2) => path2 ? (0, transformPath_1.transformPath)(path2, "insert", otherPath, operation.nodes.length) : void 0);
|
|
811
811
|
}
|
|
812
812
|
case "remove": {
|
|
813
813
|
const otherPaths = [...operation.indexes].reverse().map((index) => parentPath.concat(index));
|
|
814
|
-
return transformedPaths.map((
|
|
814
|
+
return transformedPaths.map((path2) => {
|
|
815
815
|
for (const otherPath of otherPaths) {
|
|
816
|
-
|
|
816
|
+
path2 = path2 ? (0, transformPath_1.transformPath)(path2, "remove", otherPath) : void 0;
|
|
817
817
|
}
|
|
818
|
-
return
|
|
818
|
+
return path2;
|
|
819
819
|
});
|
|
820
820
|
}
|
|
821
821
|
case "removeThenInsert": {
|
|
@@ -952,22 +952,22 @@ var require_splice = __commonJS({
|
|
|
952
952
|
return _spliceWithPathTracking(node, options);
|
|
953
953
|
}
|
|
954
954
|
function _spliceWithPathTracking(node, options) {
|
|
955
|
-
const { path, deleteCount = 0, nodes, track } = options;
|
|
956
|
-
if (
|
|
955
|
+
const { path: path2, deleteCount = 0, nodes, track } = options;
|
|
956
|
+
if (path2.length === 0) {
|
|
957
957
|
throw new Error(`Can't splice at the root`);
|
|
958
958
|
}
|
|
959
|
-
const pathsToRemove = getPathsToRemove(
|
|
960
|
-
const operations = (0, operation_1.getInsertionOperations)(
|
|
959
|
+
const pathsToRemove = getPathsToRemove(path2, deleteCount);
|
|
960
|
+
const operations = (0, operation_1.getInsertionOperations)(path2, nodes, (0, operation_1.getRemovalOperations)(pathsToRemove));
|
|
961
961
|
const transformedPaths = track ? (0, operation_1.transformPathsByOperations)(track, operations) : [];
|
|
962
962
|
return {
|
|
963
963
|
node: (0, operation_1.applyOperations)(node, operations, options),
|
|
964
964
|
paths: transformedPaths
|
|
965
965
|
};
|
|
966
966
|
}
|
|
967
|
-
function getPathsToRemove(
|
|
967
|
+
function getPathsToRemove(path2, deleteCount) {
|
|
968
968
|
let pathsToRemove = [];
|
|
969
|
-
let parentPath =
|
|
970
|
-
let index =
|
|
969
|
+
let parentPath = path2.slice(0, -1);
|
|
970
|
+
let index = path2[path2.length - 1];
|
|
971
971
|
for (let i = 0; i < deleteCount; i++) {
|
|
972
972
|
pathsToRemove.push(parentPath.concat(index + i));
|
|
973
973
|
}
|
|
@@ -981,7 +981,7 @@ var require_defineTree = __commonJS({
|
|
|
981
981
|
"../../node_modules/tree-visit/lib/defineTree.js"(exports2) {
|
|
982
982
|
"use strict";
|
|
983
983
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
984
|
-
exports2.defineTree =
|
|
984
|
+
exports2.defineTree = defineTree3;
|
|
985
985
|
var access_1 = require_access();
|
|
986
986
|
var diagram_1 = require_diagram();
|
|
987
987
|
var entries_1 = require_entries();
|
|
@@ -1030,7 +1030,7 @@ var require_defineTree = __commonJS({
|
|
|
1030
1030
|
this._getChildren = this.baseOptions.getChildren;
|
|
1031
1031
|
}
|
|
1032
1032
|
};
|
|
1033
|
-
function
|
|
1033
|
+
function defineTree3(getChildren) {
|
|
1034
1034
|
return new Tree(getChildren, {});
|
|
1035
1035
|
}
|
|
1036
1036
|
}
|
|
@@ -1107,6 +1107,391 @@ var require_lib = __commonJS({
|
|
|
1107
1107
|
}
|
|
1108
1108
|
});
|
|
1109
1109
|
|
|
1110
|
+
// ../../node_modules/imfs/lib/types.js
|
|
1111
|
+
var require_types = __commonJS({
|
|
1112
|
+
"../../node_modules/imfs/lib/types.js"(exports2) {
|
|
1113
|
+
"use strict";
|
|
1114
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1115
|
+
}
|
|
1116
|
+
});
|
|
1117
|
+
|
|
1118
|
+
// ../../node_modules/imfs/lib/node.js
|
|
1119
|
+
var require_node = __commonJS({
|
|
1120
|
+
"../../node_modules/imfs/lib/node.js"(exports2) {
|
|
1121
|
+
"use strict";
|
|
1122
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1123
|
+
exports2.Nodes = void 0;
|
|
1124
|
+
function createFile(data, metadata) {
|
|
1125
|
+
return { type: "file", data, metadata };
|
|
1126
|
+
}
|
|
1127
|
+
function createDirectory(children = {}, metadata) {
|
|
1128
|
+
return { type: "directory", children, metadata };
|
|
1129
|
+
}
|
|
1130
|
+
function isFile(node) {
|
|
1131
|
+
return node.type === "file";
|
|
1132
|
+
}
|
|
1133
|
+
function isDirectory(node) {
|
|
1134
|
+
return node.type === "directory";
|
|
1135
|
+
}
|
|
1136
|
+
function getMetadata(node) {
|
|
1137
|
+
return node.metadata;
|
|
1138
|
+
}
|
|
1139
|
+
function readDirectory(directory) {
|
|
1140
|
+
return Object.keys(directory.children);
|
|
1141
|
+
}
|
|
1142
|
+
function getChild(directory, name) {
|
|
1143
|
+
return directory.children[name];
|
|
1144
|
+
}
|
|
1145
|
+
function hasChild(directory, name) {
|
|
1146
|
+
return name in directory.children;
|
|
1147
|
+
}
|
|
1148
|
+
exports2.Nodes = {
|
|
1149
|
+
createDirectory,
|
|
1150
|
+
createFile,
|
|
1151
|
+
getChild,
|
|
1152
|
+
getMetadata,
|
|
1153
|
+
hasChild,
|
|
1154
|
+
isDirectory,
|
|
1155
|
+
isFile,
|
|
1156
|
+
readDirectory
|
|
1157
|
+
};
|
|
1158
|
+
}
|
|
1159
|
+
});
|
|
1160
|
+
|
|
1161
|
+
// ../../node_modules/imfs/lib/path.js
|
|
1162
|
+
var require_path = __commonJS({
|
|
1163
|
+
"../../node_modules/imfs/lib/path.js"(exports2) {
|
|
1164
|
+
"use strict";
|
|
1165
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1166
|
+
exports2.dirname = exports2.basename = exports2.extname = exports2.join = exports2.normalize = exports2.sep = void 0;
|
|
1167
|
+
exports2.sep = "/";
|
|
1168
|
+
function preserveLeadingAndTrailingSlash(original, updated) {
|
|
1169
|
+
if (original.startsWith("/")) {
|
|
1170
|
+
updated = "/" + updated;
|
|
1171
|
+
}
|
|
1172
|
+
if (updated[updated.length - 1] !== "/" && original.endsWith("/")) {
|
|
1173
|
+
updated = updated + "/";
|
|
1174
|
+
}
|
|
1175
|
+
return updated;
|
|
1176
|
+
}
|
|
1177
|
+
function normalize(filename) {
|
|
1178
|
+
const components = filename.split(exports2.sep).filter((component) => !!component);
|
|
1179
|
+
let i = 0;
|
|
1180
|
+
let length = components.length - 1;
|
|
1181
|
+
while (i < length) {
|
|
1182
|
+
if (components[i] === ".") {
|
|
1183
|
+
components.splice(i, 1);
|
|
1184
|
+
length--;
|
|
1185
|
+
} else if (components[i] === ".." && i !== 0) {
|
|
1186
|
+
components.splice(i - 1, 2);
|
|
1187
|
+
length -= 2;
|
|
1188
|
+
i -= 1;
|
|
1189
|
+
} else if (components[i] === "" && components[i + 1] === "") {
|
|
1190
|
+
components.splice(i, 1);
|
|
1191
|
+
length--;
|
|
1192
|
+
} else {
|
|
1193
|
+
i++;
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
return preserveLeadingAndTrailingSlash(filename, components.join(exports2.sep));
|
|
1197
|
+
}
|
|
1198
|
+
exports2.normalize = normalize;
|
|
1199
|
+
function join(...components) {
|
|
1200
|
+
let result = normalize(components.join(exports2.sep));
|
|
1201
|
+
if (result === "") {
|
|
1202
|
+
result = ".";
|
|
1203
|
+
}
|
|
1204
|
+
return result;
|
|
1205
|
+
}
|
|
1206
|
+
exports2.join = join;
|
|
1207
|
+
function extname(filename) {
|
|
1208
|
+
const index = filename.lastIndexOf(".");
|
|
1209
|
+
return index !== -1 ? filename.slice(index) : filename;
|
|
1210
|
+
}
|
|
1211
|
+
exports2.extname = extname;
|
|
1212
|
+
function basename(filename, extname2) {
|
|
1213
|
+
if (extname2 && filename.endsWith(extname2)) {
|
|
1214
|
+
filename = filename.slice(0, -extname2.length);
|
|
1215
|
+
}
|
|
1216
|
+
let sepIndex = filename.lastIndexOf(exports2.sep);
|
|
1217
|
+
if (sepIndex === filename.length - 1) {
|
|
1218
|
+
filename = filename.slice(0, -1);
|
|
1219
|
+
return filename.length > 1 ? basename(filename) : filename;
|
|
1220
|
+
}
|
|
1221
|
+
return filename.slice(sepIndex + 1);
|
|
1222
|
+
}
|
|
1223
|
+
exports2.basename = basename;
|
|
1224
|
+
function dirname(filename) {
|
|
1225
|
+
let base = basename(filename);
|
|
1226
|
+
let result = filename.slice(0, -(base.length + 1));
|
|
1227
|
+
if (result === "") {
|
|
1228
|
+
if (filename.startsWith(exports2.sep)) {
|
|
1229
|
+
result = exports2.sep;
|
|
1230
|
+
} else {
|
|
1231
|
+
result = ".";
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
return result;
|
|
1235
|
+
}
|
|
1236
|
+
exports2.dirname = dirname;
|
|
1237
|
+
}
|
|
1238
|
+
});
|
|
1239
|
+
|
|
1240
|
+
// ../../node_modules/imfs/lib/entries.js
|
|
1241
|
+
var require_entries2 = __commonJS({
|
|
1242
|
+
"../../node_modules/imfs/lib/entries.js"(exports2) {
|
|
1243
|
+
"use strict";
|
|
1244
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1245
|
+
exports2.Entries = void 0;
|
|
1246
|
+
var node_1 = require_node();
|
|
1247
|
+
var path_1 = require_path();
|
|
1248
|
+
function getEntries(entry) {
|
|
1249
|
+
const [pathname, node] = entry;
|
|
1250
|
+
return node_1.Nodes.isDirectory(node) ? Object.entries(node.children).map(([key, value]) => [
|
|
1251
|
+
(0, path_1.join)(pathname, key),
|
|
1252
|
+
value
|
|
1253
|
+
]) : [];
|
|
1254
|
+
}
|
|
1255
|
+
function createEntry(pathname, node) {
|
|
1256
|
+
return [pathname, node];
|
|
1257
|
+
}
|
|
1258
|
+
exports2.Entries = {
|
|
1259
|
+
createEntry,
|
|
1260
|
+
getEntries
|
|
1261
|
+
};
|
|
1262
|
+
}
|
|
1263
|
+
});
|
|
1264
|
+
|
|
1265
|
+
// ../../node_modules/imfs/lib/volume/paths.js
|
|
1266
|
+
var require_paths = __commonJS({
|
|
1267
|
+
"../../node_modules/imfs/lib/volume/paths.js"(exports2) {
|
|
1268
|
+
"use strict";
|
|
1269
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1270
|
+
exports2.getNewAndParentName = exports2.normalizePathLikeInternal = exports2.getPathComponents = void 0;
|
|
1271
|
+
var path_1 = require_path();
|
|
1272
|
+
function getPathComponents(filepath) {
|
|
1273
|
+
return getPathComponentsNormalized((0, path_1.normalize)(filepath));
|
|
1274
|
+
function getPathComponentsNormalized(filepath2) {
|
|
1275
|
+
if (filepath2.startsWith("..")) {
|
|
1276
|
+
throw new Error(`Invalid path ${filepath2}, can't go up past root.`);
|
|
1277
|
+
}
|
|
1278
|
+
if (filepath2.startsWith(".") || filepath2.startsWith("/")) {
|
|
1279
|
+
return getPathComponentsNormalized(filepath2.slice(1));
|
|
1280
|
+
}
|
|
1281
|
+
if (filepath2 === "")
|
|
1282
|
+
return [];
|
|
1283
|
+
return filepath2.split(path_1.sep).filter((component) => !!component);
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
exports2.getPathComponents = getPathComponents;
|
|
1287
|
+
function normalizePathLikeInternal(pathlike) {
|
|
1288
|
+
return typeof pathlike === "string" ? getPathComponents(pathlike) : pathlike;
|
|
1289
|
+
}
|
|
1290
|
+
exports2.normalizePathLikeInternal = normalizePathLikeInternal;
|
|
1291
|
+
function getNewAndParentName(pathlike) {
|
|
1292
|
+
const parentName = typeof pathlike === "string" ? (0, path_1.dirname)(pathlike) : pathlike.slice(0, -1);
|
|
1293
|
+
const newName = typeof pathlike === "string" ? (0, path_1.basename)(pathlike) : pathlike[pathlike.length - 1];
|
|
1294
|
+
return { parentName, newName };
|
|
1295
|
+
}
|
|
1296
|
+
exports2.getNewAndParentName = getNewAndParentName;
|
|
1297
|
+
}
|
|
1298
|
+
});
|
|
1299
|
+
|
|
1300
|
+
// ../../node_modules/imfs/lib/volume/read.js
|
|
1301
|
+
var require_read = __commonJS({
|
|
1302
|
+
"../../node_modules/imfs/lib/volume/read.js"(exports2) {
|
|
1303
|
+
"use strict";
|
|
1304
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1305
|
+
exports2.getMetadata = exports2.readDirectory = exports2.readFile = exports2.getNode = exports2.getNodeInternal = void 0;
|
|
1306
|
+
var node_1 = require_node();
|
|
1307
|
+
var path_1 = require_path();
|
|
1308
|
+
var paths_1 = require_paths();
|
|
1309
|
+
function getNodeInternal(root, pathlike, options) {
|
|
1310
|
+
const components = (0, paths_1.normalizePathLikeInternal)(pathlike);
|
|
1311
|
+
let i = 0;
|
|
1312
|
+
let current = root;
|
|
1313
|
+
while (i < components.length) {
|
|
1314
|
+
let component = components[i];
|
|
1315
|
+
if (current.type !== "directory") {
|
|
1316
|
+
throw new Error(`File ${(0, path_1.join)(...components.slice(0, i))} is not a directory`);
|
|
1317
|
+
}
|
|
1318
|
+
let node = node_1.Nodes.getChild(current, component);
|
|
1319
|
+
if (!node) {
|
|
1320
|
+
if (options.makeIntermediateDirectoryMetadata) {
|
|
1321
|
+
const child = node_1.Nodes.createDirectory({}, options.makeIntermediateDirectoryMetadata((0, path_1.join)(...components.slice(0, i + 1))));
|
|
1322
|
+
current.children[component] = child;
|
|
1323
|
+
node = child;
|
|
1324
|
+
} else if (options.makeIntermediateDirectories) {
|
|
1325
|
+
const child = node_1.Nodes.createDirectory();
|
|
1326
|
+
current.children[component] = child;
|
|
1327
|
+
node = child;
|
|
1328
|
+
} else {
|
|
1329
|
+
throw new Error(`File ${(0, path_1.join)(...components.slice(0, i + 1))} not found`);
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
current = node;
|
|
1333
|
+
i++;
|
|
1334
|
+
}
|
|
1335
|
+
return current;
|
|
1336
|
+
}
|
|
1337
|
+
exports2.getNodeInternal = getNodeInternal;
|
|
1338
|
+
function getNode(root, pathlike) {
|
|
1339
|
+
return getNodeInternal(root, pathlike, {});
|
|
1340
|
+
}
|
|
1341
|
+
exports2.getNode = getNode;
|
|
1342
|
+
function readFile(root, pathlike) {
|
|
1343
|
+
const components = (0, paths_1.normalizePathLikeInternal)(pathlike);
|
|
1344
|
+
const node = getNode(root, components);
|
|
1345
|
+
if (!node_1.Nodes.isFile(node)) {
|
|
1346
|
+
throw new Error(`Can't read, ${(0, path_1.join)(...components)} not a file`);
|
|
1347
|
+
}
|
|
1348
|
+
return node.data;
|
|
1349
|
+
}
|
|
1350
|
+
exports2.readFile = readFile;
|
|
1351
|
+
function readDirectory(root, pathlike) {
|
|
1352
|
+
const components = (0, paths_1.normalizePathLikeInternal)(pathlike);
|
|
1353
|
+
const node = getNode(root, components);
|
|
1354
|
+
if (!node_1.Nodes.isDirectory(node)) {
|
|
1355
|
+
throw new Error(`Can't read, ${(0, path_1.join)(...components)} not a directory`);
|
|
1356
|
+
}
|
|
1357
|
+
return node_1.Nodes.readDirectory(node);
|
|
1358
|
+
}
|
|
1359
|
+
exports2.readDirectory = readDirectory;
|
|
1360
|
+
function getMetadata(root, pathlike) {
|
|
1361
|
+
const components = (0, paths_1.normalizePathLikeInternal)(pathlike);
|
|
1362
|
+
const node = getNode(root, components);
|
|
1363
|
+
return node.metadata;
|
|
1364
|
+
}
|
|
1365
|
+
exports2.getMetadata = getMetadata;
|
|
1366
|
+
}
|
|
1367
|
+
});
|
|
1368
|
+
|
|
1369
|
+
// ../../node_modules/imfs/lib/volume/write.js
|
|
1370
|
+
var require_write = __commonJS({
|
|
1371
|
+
"../../node_modules/imfs/lib/volume/write.js"(exports2) {
|
|
1372
|
+
"use strict";
|
|
1373
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1374
|
+
exports2.create = exports2.setMetadata = exports2.removeFile = exports2.makeDirectory = exports2.writeFile = exports2.setNode = void 0;
|
|
1375
|
+
var node_1 = require_node();
|
|
1376
|
+
var paths_1 = require_paths();
|
|
1377
|
+
var read_1 = require_read();
|
|
1378
|
+
function setNode(root, pathlike, node, options) {
|
|
1379
|
+
const { parentName, newName } = (0, paths_1.getNewAndParentName)(pathlike);
|
|
1380
|
+
const parent = (0, read_1.getNodeInternal)(root, parentName, options !== null && options !== void 0 ? options : {});
|
|
1381
|
+
if (!node_1.Nodes.isDirectory(parent)) {
|
|
1382
|
+
throw new Error(`Can't create ${newName}, ${parentName} not a directory`);
|
|
1383
|
+
}
|
|
1384
|
+
parent.children[newName] = node;
|
|
1385
|
+
}
|
|
1386
|
+
exports2.setNode = setNode;
|
|
1387
|
+
function writeFile(root, pathlike, data, options) {
|
|
1388
|
+
var _a;
|
|
1389
|
+
setNode(root, pathlike, node_1.Nodes.createFile(data, (_a = options) === null || _a === void 0 ? void 0 : _a.metadata), options);
|
|
1390
|
+
}
|
|
1391
|
+
exports2.writeFile = writeFile;
|
|
1392
|
+
function makeDirectory(root, pathlike, options) {
|
|
1393
|
+
var _a;
|
|
1394
|
+
const { parentName, newName } = (0, paths_1.getNewAndParentName)(pathlike);
|
|
1395
|
+
const parent = (0, read_1.getNodeInternal)(root, parentName, options !== null && options !== void 0 ? options : {});
|
|
1396
|
+
if (!node_1.Nodes.isDirectory(parent)) {
|
|
1397
|
+
throw new Error(`Can't create ${newName}, ${parentName} not a directory`);
|
|
1398
|
+
}
|
|
1399
|
+
const existing = node_1.Nodes.getChild(parent, newName);
|
|
1400
|
+
if (existing && node_1.Nodes.isDirectory(parent.children[newName])) {
|
|
1401
|
+
return;
|
|
1402
|
+
}
|
|
1403
|
+
parent.children[newName] = node_1.Nodes.createDirectory({}, (_a = options) === null || _a === void 0 ? void 0 : _a.metadata);
|
|
1404
|
+
}
|
|
1405
|
+
exports2.makeDirectory = makeDirectory;
|
|
1406
|
+
function removeFile(root, pathlike) {
|
|
1407
|
+
const { parentName, newName } = (0, paths_1.getNewAndParentName)(pathlike);
|
|
1408
|
+
const parent = (0, read_1.getNode)(root, parentName);
|
|
1409
|
+
if (!node_1.Nodes.isDirectory(parent)) {
|
|
1410
|
+
throw new Error(`Can't remove file ${newName}, ${parentName} not a directory`);
|
|
1411
|
+
}
|
|
1412
|
+
delete parent.children[newName];
|
|
1413
|
+
}
|
|
1414
|
+
exports2.removeFile = removeFile;
|
|
1415
|
+
function setMetadata(root, pathlike, metadata) {
|
|
1416
|
+
const node = (0, read_1.getNode)(root, pathlike);
|
|
1417
|
+
node.metadata = metadata;
|
|
1418
|
+
}
|
|
1419
|
+
exports2.setMetadata = setMetadata;
|
|
1420
|
+
function create(options) {
|
|
1421
|
+
return node_1.Nodes.createDirectory({}, options && "metadata" in options ? options.metadata : void 0);
|
|
1422
|
+
}
|
|
1423
|
+
exports2.create = create;
|
|
1424
|
+
}
|
|
1425
|
+
});
|
|
1426
|
+
|
|
1427
|
+
// ../../node_modules/imfs/lib/volume.js
|
|
1428
|
+
var require_volume = __commonJS({
|
|
1429
|
+
"../../node_modules/imfs/lib/volume.js"(exports2) {
|
|
1430
|
+
"use strict";
|
|
1431
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1432
|
+
exports2.Volume = void 0;
|
|
1433
|
+
var paths_1 = require_paths();
|
|
1434
|
+
var read_1 = require_read();
|
|
1435
|
+
var write_1 = require_write();
|
|
1436
|
+
exports2.Volume = {
|
|
1437
|
+
// paths
|
|
1438
|
+
getPathComponents: paths_1.getPathComponents,
|
|
1439
|
+
// read
|
|
1440
|
+
getMetadata: read_1.getMetadata,
|
|
1441
|
+
getNode: read_1.getNode,
|
|
1442
|
+
readDirectory: read_1.readDirectory,
|
|
1443
|
+
readFile: read_1.readFile,
|
|
1444
|
+
// write
|
|
1445
|
+
create: write_1.create,
|
|
1446
|
+
makeDirectory: write_1.makeDirectory,
|
|
1447
|
+
removeFile: write_1.removeFile,
|
|
1448
|
+
setMetadata: write_1.setMetadata,
|
|
1449
|
+
setNode: write_1.setNode,
|
|
1450
|
+
writeFile: write_1.writeFile
|
|
1451
|
+
};
|
|
1452
|
+
}
|
|
1453
|
+
});
|
|
1454
|
+
|
|
1455
|
+
// ../../node_modules/imfs/lib/index.js
|
|
1456
|
+
var require_lib2 = __commonJS({
|
|
1457
|
+
"../../node_modules/imfs/lib/index.js"(exports2) {
|
|
1458
|
+
"use strict";
|
|
1459
|
+
var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
1460
|
+
if (k2 === void 0) k2 = k;
|
|
1461
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() {
|
|
1462
|
+
return m[k];
|
|
1463
|
+
} });
|
|
1464
|
+
} : function(o, m, k, k2) {
|
|
1465
|
+
if (k2 === void 0) k2 = k;
|
|
1466
|
+
o[k2] = m[k];
|
|
1467
|
+
});
|
|
1468
|
+
var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
|
|
1469
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
1470
|
+
} : function(o, v) {
|
|
1471
|
+
o["default"] = v;
|
|
1472
|
+
});
|
|
1473
|
+
var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
|
|
1474
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
|
|
1475
|
+
};
|
|
1476
|
+
var __importStar = exports2 && exports2.__importStar || function(mod) {
|
|
1477
|
+
if (mod && mod.__esModule) return mod;
|
|
1478
|
+
var result = {};
|
|
1479
|
+
if (mod != null) {
|
|
1480
|
+
for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
1481
|
+
}
|
|
1482
|
+
__setModuleDefault(result, mod);
|
|
1483
|
+
return result;
|
|
1484
|
+
};
|
|
1485
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1486
|
+
exports2.path = void 0;
|
|
1487
|
+
__exportStar(require_types(), exports2);
|
|
1488
|
+
__exportStar(require_node(), exports2);
|
|
1489
|
+
__exportStar(require_entries2(), exports2);
|
|
1490
|
+
__exportStar(require_volume(), exports2);
|
|
1491
|
+
exports2.path = __importStar(require_path());
|
|
1492
|
+
}
|
|
1493
|
+
});
|
|
1494
|
+
|
|
1110
1495
|
// src/index.ts
|
|
1111
1496
|
var src_exports = {};
|
|
1112
1497
|
__export(src_exports, {
|
|
@@ -1119,10 +1504,19 @@ __export(src_exports, {
|
|
|
1119
1504
|
WebSocketConnection: () => WebSocketConnection,
|
|
1120
1505
|
createDefaultAppData: () => createDefaultAppData,
|
|
1121
1506
|
createNoyaContext: () => createNoyaContext,
|
|
1507
|
+
decodeAll: () => decodeAll,
|
|
1508
|
+
encodeAll: () => encodeAll,
|
|
1122
1509
|
enforceSchema: () => enforceSchema,
|
|
1510
|
+
exportAll: () => exportAll,
|
|
1511
|
+
fetchAssetMap: () => fetchAssetMap,
|
|
1123
1512
|
getAppData: () => getAppData,
|
|
1513
|
+
importAll: () => importAll,
|
|
1124
1514
|
parseAppDataParameter: () => parseAppDataParameter,
|
|
1515
|
+
replaceDeep: () => replaceDeep,
|
|
1516
|
+
resourceToMediaItem: () => resourceToMediaItem,
|
|
1125
1517
|
useAIManager: () => useAIManager,
|
|
1518
|
+
useActivityEvents: () => useActivityEvents,
|
|
1519
|
+
useActivityEventsForManager: () => useActivityEventsForManager,
|
|
1126
1520
|
useAnyEphemeralUserData: () => useAnyEphemeralUserData,
|
|
1127
1521
|
useAnyNoyaManager: () => useAnyNoyaManager,
|
|
1128
1522
|
useAnyNoyaStateContext: () => useAnyNoyaStateContext,
|
|
@@ -1131,11 +1525,14 @@ __export(src_exports, {
|
|
|
1131
1525
|
useAssets: () => useAssets,
|
|
1132
1526
|
useCallableAITools: () => useCallableAITools,
|
|
1133
1527
|
useColorScheme: () => useColorScheme,
|
|
1528
|
+
useConnectedUser: () => useConnectedUser,
|
|
1529
|
+
useConnectedUsers: () => useConnectedUsers,
|
|
1134
1530
|
useConnectedUsersManager: () => useConnectedUsersManager,
|
|
1135
1531
|
useCurrentUserId: () => useCurrentUserId,
|
|
1136
1532
|
useIOManager: () => useIOManager,
|
|
1137
1533
|
useInputs: () => useInputs,
|
|
1138
1534
|
useIsInitialized: () => useIsInitialized,
|
|
1535
|
+
useIsProcessing: () => useIsProcessing,
|
|
1139
1536
|
useManagedHistory: () => useManagedHistory,
|
|
1140
1537
|
useManagedState: () => useManagedState,
|
|
1141
1538
|
useMultiplayerState: () => useMultiplayerState,
|
|
@@ -1145,6 +1542,8 @@ __export(src_exports, {
|
|
|
1145
1542
|
usePipelineManager: () => usePipelineManager,
|
|
1146
1543
|
usePublish: () => usePublish,
|
|
1147
1544
|
useRegisterAITool: () => useRegisterAITool,
|
|
1545
|
+
useResourceManager: () => useResourceManager,
|
|
1546
|
+
useResources: () => useResources,
|
|
1148
1547
|
useSecret: () => useSecret,
|
|
1149
1548
|
useSecretManager: () => useSecretManager,
|
|
1150
1549
|
useSecrets: () => useSecrets,
|
|
@@ -1156,12 +1555,7 @@ module.exports = __toCommonJS(src_exports);
|
|
|
1156
1555
|
__reExport(src_exports, require("@noya-app/state-manager"), module.exports);
|
|
1157
1556
|
|
|
1158
1557
|
// src/ai.ts
|
|
1159
|
-
var
|
|
1160
|
-
|
|
1161
|
-
// src/NoyaStateContext.tsx
|
|
1162
|
-
var import_observable = require("@noya-app/observable");
|
|
1163
|
-
var import_react_utils3 = require("@noya-app/react-utils");
|
|
1164
|
-
var import_react7 = __toESM(require("react"));
|
|
1558
|
+
var import_react19 = require("react");
|
|
1165
1559
|
|
|
1166
1560
|
// ../../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs
|
|
1167
1561
|
var TransformKind = Symbol.for("TypeBox.Transform");
|
|
@@ -1718,14 +2112,14 @@ function Number2(options = {}) {
|
|
|
1718
2112
|
}
|
|
1719
2113
|
|
|
1720
2114
|
// ../../node_modules/@sinclair/typebox/build/esm/type/string/string.mjs
|
|
1721
|
-
function
|
|
2115
|
+
function String2(options = {}) {
|
|
1722
2116
|
return { ...options, [Kind]: "String", type: "string" };
|
|
1723
2117
|
}
|
|
1724
2118
|
|
|
1725
2119
|
// ../../node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs
|
|
1726
2120
|
function* FromUnion(syntax) {
|
|
1727
2121
|
const trim = syntax.trim().replace(/"|'/g, "");
|
|
1728
|
-
return trim === "boolean" ? yield Boolean() : trim === "number" ? yield Number2() : trim === "bigint" ? yield BigInt2() : trim === "string" ? yield
|
|
2122
|
+
return trim === "boolean" ? yield Boolean() : trim === "number" ? yield Number2() : trim === "bigint" ? yield BigInt2() : trim === "string" ? yield String2() : yield (() => {
|
|
1729
2123
|
const literals = trim.split("|").map((literal) => Literal(literal.trim()));
|
|
1730
2124
|
return literals.length === 0 ? Never() : literals.length === 1 ? literals[0] : UnionEvaluated(literals);
|
|
1731
2125
|
})();
|
|
@@ -2814,7 +3208,7 @@ function FromPromise3(left, right) {
|
|
|
2814
3208
|
return IsStructuralRight(right) ? StructuralRight(left, right) : type_exports.IsObject(right) && IsObjectPromiseLike(right) ? ExtendsResult.True : !type_exports.IsPromise(right) ? ExtendsResult.False : IntoBooleanResult(Visit3(left.item, right.item));
|
|
2815
3209
|
}
|
|
2816
3210
|
function RecordKey(schema) {
|
|
2817
|
-
return PatternNumberExact in schema.patternProperties ? Number2() : PatternStringExact in schema.patternProperties ?
|
|
3211
|
+
return PatternNumberExact in schema.patternProperties ? Number2() : PatternStringExact in schema.patternProperties ? String2() : Throw("Unknown record key pattern");
|
|
2818
3212
|
}
|
|
2819
3213
|
function RecordValue(schema) {
|
|
2820
3214
|
return PatternNumberExact in schema.patternProperties ? schema.patternProperties[PatternNumberExact] : PatternStringExact in schema.patternProperties ? schema.patternProperties[PatternStringExact] : Throw("Unable to get record value schema");
|
|
@@ -2834,8 +3228,8 @@ function FromRecord(left, right) {
|
|
|
2834
3228
|
return IsStructuralRight(right) ? StructuralRight(left, right) : type_exports.IsObject(right) ? FromObjectRight(left, right) : !type_exports.IsRecord(right) ? ExtendsResult.False : Visit3(RecordValue(left), RecordValue(right));
|
|
2835
3229
|
}
|
|
2836
3230
|
function FromRegExp(left, right) {
|
|
2837
|
-
const L = type_exports.IsRegExp(left) ?
|
|
2838
|
-
const R = type_exports.IsRegExp(right) ?
|
|
3231
|
+
const L = type_exports.IsRegExp(left) ? String2() : left;
|
|
3232
|
+
const R = type_exports.IsRegExp(right) ? String2() : right;
|
|
2839
3233
|
return Visit3(L, R);
|
|
2840
3234
|
}
|
|
2841
3235
|
function FromStringRight(left, right) {
|
|
@@ -3471,30 +3865,30 @@ var TransformDecodeBuilder = class {
|
|
|
3471
3865
|
constructor(schema) {
|
|
3472
3866
|
this.schema = schema;
|
|
3473
3867
|
}
|
|
3474
|
-
Decode(
|
|
3475
|
-
return new TransformEncodeBuilder(this.schema,
|
|
3868
|
+
Decode(decode2) {
|
|
3869
|
+
return new TransformEncodeBuilder(this.schema, decode2);
|
|
3476
3870
|
}
|
|
3477
3871
|
};
|
|
3478
3872
|
var TransformEncodeBuilder = class {
|
|
3479
3873
|
schema;
|
|
3480
3874
|
decode;
|
|
3481
|
-
constructor(schema,
|
|
3875
|
+
constructor(schema, decode2) {
|
|
3482
3876
|
this.schema = schema;
|
|
3483
|
-
this.decode =
|
|
3877
|
+
this.decode = decode2;
|
|
3484
3878
|
}
|
|
3485
|
-
EncodeTransform(
|
|
3486
|
-
const Encode = (value) => schema[TransformKind].Encode(
|
|
3879
|
+
EncodeTransform(encode2, schema) {
|
|
3880
|
+
const Encode = (value) => schema[TransformKind].Encode(encode2(value));
|
|
3487
3881
|
const Decode = (value) => this.decode(schema[TransformKind].Decode(value));
|
|
3488
3882
|
const Codec = { Encode, Decode };
|
|
3489
3883
|
return { ...schema, [TransformKind]: Codec };
|
|
3490
3884
|
}
|
|
3491
|
-
EncodeSchema(
|
|
3492
|
-
const Codec = { Decode: this.decode, Encode:
|
|
3885
|
+
EncodeSchema(encode2, schema) {
|
|
3886
|
+
const Codec = { Decode: this.decode, Encode: encode2 };
|
|
3493
3887
|
return { ...schema, [TransformKind]: Codec };
|
|
3494
3888
|
}
|
|
3495
|
-
Encode(
|
|
3889
|
+
Encode(encode2) {
|
|
3496
3890
|
const schema = CloneType(this.schema);
|
|
3497
|
-
return IsTransform(schema) ? this.EncodeTransform(
|
|
3891
|
+
return IsTransform(schema) ? this.EncodeTransform(encode2, schema) : this.EncodeSchema(encode2, schema);
|
|
3498
3892
|
}
|
|
3499
3893
|
};
|
|
3500
3894
|
function Transform(schema) {
|
|
@@ -3560,7 +3954,7 @@ __export(type_exports3, {
|
|
|
3560
3954
|
Rest: () => Rest,
|
|
3561
3955
|
ReturnType: () => ReturnType,
|
|
3562
3956
|
Strict: () => Strict,
|
|
3563
|
-
String: () =>
|
|
3957
|
+
String: () => String2,
|
|
3564
3958
|
Symbol: () => Symbol2,
|
|
3565
3959
|
TemplateLiteral: () => TemplateLiteral,
|
|
3566
3960
|
Transform: () => Transform,
|
|
@@ -3587,6 +3981,134 @@ function Void(options = {}) {
|
|
|
3587
3981
|
// ../../node_modules/@sinclair/typebox/build/esm/type/type/index.mjs
|
|
3588
3982
|
var Type = type_exports3;
|
|
3589
3983
|
|
|
3984
|
+
// ../noya-schemas/src/nullable.ts
|
|
3985
|
+
var Nullable = (schema) => Type.Union([Type.Null(), schema]);
|
|
3986
|
+
|
|
3987
|
+
// ../noya-schemas/src/activityEventSchema.ts
|
|
3988
|
+
var userSelectSchema = Type.Object({
|
|
3989
|
+
id: Type.String(),
|
|
3990
|
+
name: Nullable(Type.String()),
|
|
3991
|
+
email: Nullable(Type.String()),
|
|
3992
|
+
image: Nullable(Type.String())
|
|
3993
|
+
});
|
|
3994
|
+
var workspaceSelectSchema = Type.Object({
|
|
3995
|
+
id: Type.String(),
|
|
3996
|
+
name: Type.String()
|
|
3997
|
+
});
|
|
3998
|
+
var fileSelectSchema = Type.Object({
|
|
3999
|
+
id: Type.String(),
|
|
4000
|
+
name: Nullable(Type.String())
|
|
4001
|
+
});
|
|
4002
|
+
var resourceSelectSchema = Type.Object({
|
|
4003
|
+
id: Type.String(),
|
|
4004
|
+
path: Type.String(),
|
|
4005
|
+
type: Type.Union([
|
|
4006
|
+
Type.Literal("asset"),
|
|
4007
|
+
Type.Literal("file"),
|
|
4008
|
+
Type.Literal("fileVersion"),
|
|
4009
|
+
Type.Literal("directory"),
|
|
4010
|
+
Type.Literal("resource")
|
|
4011
|
+
])
|
|
4012
|
+
});
|
|
4013
|
+
var siteSelectSchema = Type.Object({
|
|
4014
|
+
id: Type.String(),
|
|
4015
|
+
subdomain: Nullable(Type.String())
|
|
4016
|
+
});
|
|
4017
|
+
var activityEventSchema = Type.Object({
|
|
4018
|
+
id: Type.String(),
|
|
4019
|
+
createdAt: Type.String(),
|
|
4020
|
+
actorId: Nullable(Type.String()),
|
|
4021
|
+
actor: Type.Optional(userSelectSchema),
|
|
4022
|
+
type: Type.Union([
|
|
4023
|
+
Type.Literal("file"),
|
|
4024
|
+
Type.Literal("resource"),
|
|
4025
|
+
Type.Literal("site"),
|
|
4026
|
+
Type.Literal("snapshot"),
|
|
4027
|
+
Type.Literal("restore")
|
|
4028
|
+
]),
|
|
4029
|
+
workspaceId: Nullable(Type.String()),
|
|
4030
|
+
workspace: Type.Optional(workspaceSelectSchema),
|
|
4031
|
+
fileId: Nullable(Type.String()),
|
|
4032
|
+
file: Type.Optional(fileSelectSchema),
|
|
4033
|
+
fileVersionId: Nullable(Type.String()),
|
|
4034
|
+
resourceId: Nullable(Type.String()),
|
|
4035
|
+
resource: Type.Optional(resourceSelectSchema),
|
|
4036
|
+
siteId: Nullable(Type.String()),
|
|
4037
|
+
site: Type.Optional(siteSelectSchema),
|
|
4038
|
+
previousData: Nullable(Type.Any()),
|
|
4039
|
+
currentData: Nullable(Type.Any()),
|
|
4040
|
+
metadata: Nullable(Type.Any()),
|
|
4041
|
+
userAgent: Nullable(Type.String())
|
|
4042
|
+
});
|
|
4043
|
+
|
|
4044
|
+
// ../noya-schemas/src/asset.ts
|
|
4045
|
+
var assetSchema = Type.Object({
|
|
4046
|
+
id: Type.String(),
|
|
4047
|
+
url: Type.String(),
|
|
4048
|
+
createdAt: Type.String(),
|
|
4049
|
+
size: Type.Number(),
|
|
4050
|
+
contentType: Type.Optional(Type.String()),
|
|
4051
|
+
width: Type.Union([Type.Null(), Type.Number()]),
|
|
4052
|
+
height: Type.Union([Type.Null(), Type.Number()]),
|
|
4053
|
+
userId: Type.Union([Type.Null(), Type.String()])
|
|
4054
|
+
});
|
|
4055
|
+
|
|
4056
|
+
// ../noya-schemas/src/encode.ts
|
|
4057
|
+
var SchemaMap = /* @__PURE__ */ new Map([
|
|
4058
|
+
[Kind, "_kind"],
|
|
4059
|
+
[Hint, "_hint"]
|
|
4060
|
+
]);
|
|
4061
|
+
var InverseSchemaMap = new Map(
|
|
4062
|
+
Array.from(SchemaMap.entries()).map(([key, value]) => [value, key])
|
|
4063
|
+
);
|
|
4064
|
+
function encodeSchema(obj, symMap = SchemaMap) {
|
|
4065
|
+
function replaceSymbols(item) {
|
|
4066
|
+
if (Array.isArray(item)) {
|
|
4067
|
+
return item.map(replaceSymbols);
|
|
4068
|
+
} else if (typeof item === "object" && item !== null) {
|
|
4069
|
+
const newObj = {};
|
|
4070
|
+
for (const key in item) {
|
|
4071
|
+
if (Object.prototype.hasOwnProperty.call(item, key)) {
|
|
4072
|
+
const value = item[key];
|
|
4073
|
+
newObj[key] = replaceSymbols(value);
|
|
4074
|
+
}
|
|
4075
|
+
}
|
|
4076
|
+
for (const sym of Object.getOwnPropertySymbols(item)) {
|
|
4077
|
+
const stringKey = symMap.get(sym);
|
|
4078
|
+
if (stringKey) {
|
|
4079
|
+
newObj[stringKey] = replaceSymbols(item[sym]);
|
|
4080
|
+
}
|
|
4081
|
+
}
|
|
4082
|
+
return newObj;
|
|
4083
|
+
}
|
|
4084
|
+
return item;
|
|
4085
|
+
}
|
|
4086
|
+
return replaceSymbols(obj);
|
|
4087
|
+
}
|
|
4088
|
+
function decodeSchema(obj, strMap = InverseSchemaMap) {
|
|
4089
|
+
function replaceStringKeys(item) {
|
|
4090
|
+
if (Array.isArray(item)) {
|
|
4091
|
+
return item.map(replaceStringKeys);
|
|
4092
|
+
} else if (typeof item === "object" && item !== null) {
|
|
4093
|
+
const newObj = {};
|
|
4094
|
+
for (const key in item) {
|
|
4095
|
+
if (Object.prototype.hasOwnProperty.call(item, key)) {
|
|
4096
|
+
const value = item[key];
|
|
4097
|
+
const symbolKey = strMap.get(key);
|
|
4098
|
+
if (symbolKey) {
|
|
4099
|
+
newObj[symbolKey] = replaceStringKeys(value);
|
|
4100
|
+
} else {
|
|
4101
|
+
newObj[key] = replaceStringKeys(value);
|
|
4102
|
+
}
|
|
4103
|
+
}
|
|
4104
|
+
}
|
|
4105
|
+
return newObj;
|
|
4106
|
+
}
|
|
4107
|
+
return item;
|
|
4108
|
+
}
|
|
4109
|
+
return replaceStringKeys(obj);
|
|
4110
|
+
}
|
|
4111
|
+
|
|
3590
4112
|
// ../noya-schemas/src/filesSchema.ts
|
|
3591
4113
|
var encodingSchema = Type.Union([
|
|
3592
4114
|
Type.Literal("utf-8"),
|
|
@@ -3607,8 +4129,13 @@ var fileSchema = Type.Object({
|
|
|
3607
4129
|
content: Type.String(),
|
|
3608
4130
|
encoding: encodingSchema
|
|
3609
4131
|
});
|
|
4132
|
+
var noyaFileSchema = Type.Object({
|
|
4133
|
+
id: Type.String({ format: "uuid", default: "" }),
|
|
4134
|
+
kind: Type.Literal("noyaFile"),
|
|
4135
|
+
fileId: Type.String()
|
|
4136
|
+
});
|
|
3610
4137
|
var mediaItemSchema = Type.Union(
|
|
3611
|
-
[folderMediaItemSchema, assetMediaItemSchema, fileSchema],
|
|
4138
|
+
[folderMediaItemSchema, assetMediaItemSchema, fileSchema, noyaFileSchema],
|
|
3612
4139
|
{
|
|
3613
4140
|
discriminator: "kind"
|
|
3614
4141
|
}
|
|
@@ -3677,25 +4204,25 @@ var jsonSchema = Type.Recursive(
|
|
|
3677
4204
|
);
|
|
3678
4205
|
|
|
3679
4206
|
// ../noya-schemas/src/input.ts
|
|
3680
|
-
function
|
|
4207
|
+
function Nullable2(type) {
|
|
3681
4208
|
return Type.Union([type, Type.Null()], { default: null });
|
|
3682
4209
|
}
|
|
3683
4210
|
var inputSchemaBase = {
|
|
3684
4211
|
id: Type.String({ format: "uuid", default: "" }),
|
|
3685
4212
|
stableId: Type.String({ format: "uuid", default: "" }),
|
|
3686
4213
|
name: Type.String(),
|
|
3687
|
-
description:
|
|
4214
|
+
description: Nullable2(Type.String()),
|
|
3688
4215
|
required: Type.Boolean({ default: false })
|
|
3689
4216
|
};
|
|
3690
4217
|
var fileInputSchema = Type.Object({
|
|
3691
4218
|
...inputSchemaBase,
|
|
3692
4219
|
kind: Type.Literal("file"),
|
|
3693
|
-
toolId:
|
|
4220
|
+
toolId: Nullable2(Type.String())
|
|
3694
4221
|
});
|
|
3695
4222
|
var dataInputSchema = Type.Object({
|
|
3696
4223
|
...inputSchemaBase,
|
|
3697
4224
|
kind: Type.Literal("data"),
|
|
3698
|
-
schema:
|
|
4225
|
+
schema: Nullable2(jsonSchema)
|
|
3699
4226
|
});
|
|
3700
4227
|
var secretInputSchema = Type.Object({
|
|
3701
4228
|
...inputSchemaBase,
|
|
@@ -3705,7 +4232,7 @@ var secretInputSchema = Type.Object({
|
|
|
3705
4232
|
default: null
|
|
3706
4233
|
})
|
|
3707
4234
|
),
|
|
3708
|
-
authScope: Type.Optional(
|
|
4235
|
+
authScope: Type.Optional(Nullable2(Type.String()))
|
|
3709
4236
|
});
|
|
3710
4237
|
var inputSchema = Type.Union(
|
|
3711
4238
|
[fileInputSchema, dataInputSchema, secretInputSchema],
|
|
@@ -3902,17 +4429,17 @@ var ValueErrorType;
|
|
|
3902
4429
|
// ../../node_modules/@sinclair/typebox/build/esm/value/delta/delta.mjs
|
|
3903
4430
|
var Insert = Object2({
|
|
3904
4431
|
type: Literal("insert"),
|
|
3905
|
-
path:
|
|
4432
|
+
path: String2(),
|
|
3906
4433
|
value: Unknown()
|
|
3907
4434
|
});
|
|
3908
4435
|
var Update = Object2({
|
|
3909
4436
|
type: Literal("update"),
|
|
3910
|
-
path:
|
|
4437
|
+
path: String2(),
|
|
3911
4438
|
value: Unknown()
|
|
3912
4439
|
});
|
|
3913
4440
|
var Delete3 = Object2({
|
|
3914
4441
|
type: Literal("delete"),
|
|
3915
|
-
path:
|
|
4442
|
+
path: String2()
|
|
3916
4443
|
});
|
|
3917
4444
|
var Edit = Union([Insert, Update, Delete3]);
|
|
3918
4445
|
|
|
@@ -3939,6 +4466,142 @@ function findAllDefs(schema) {
|
|
|
3939
4466
|
});
|
|
3940
4467
|
}
|
|
3941
4468
|
|
|
4469
|
+
// ../noya-schemas/src/resourceSchema.ts
|
|
4470
|
+
var baseSchemaProperties = {
|
|
4471
|
+
id: Type.String(),
|
|
4472
|
+
stableId: Type.String(),
|
|
4473
|
+
path: Type.String(),
|
|
4474
|
+
createdAt: Type.String(),
|
|
4475
|
+
updatedAt: Type.String(),
|
|
4476
|
+
accessibleByFileId: Nullable(Type.String()),
|
|
4477
|
+
accessibleByFile: Type.Optional(
|
|
4478
|
+
Type.Object({
|
|
4479
|
+
id: Type.String(),
|
|
4480
|
+
name: Type.String(),
|
|
4481
|
+
toolId: Type.String()
|
|
4482
|
+
})
|
|
4483
|
+
),
|
|
4484
|
+
accessibleByFileVersionId: Nullable(Type.String()),
|
|
4485
|
+
url: Type.Optional(Type.String())
|
|
4486
|
+
};
|
|
4487
|
+
var uploadableAssetSchema = Type.Object({
|
|
4488
|
+
content: Type.String(),
|
|
4489
|
+
contentType: Type.String(),
|
|
4490
|
+
encoding: Type.Union([Type.Literal("utf-8"), Type.Literal("base64")])
|
|
4491
|
+
});
|
|
4492
|
+
var assetResourceSchema = Type.Object({
|
|
4493
|
+
...baseSchemaProperties,
|
|
4494
|
+
type: Type.Literal("asset"),
|
|
4495
|
+
assetId: Type.String()
|
|
4496
|
+
});
|
|
4497
|
+
var assetResourceCreateSchema = Type.Object({
|
|
4498
|
+
...baseSchemaProperties,
|
|
4499
|
+
type: Type.Literal("asset"),
|
|
4500
|
+
assetId: Type.Optional(Type.String()),
|
|
4501
|
+
asset: Type.Optional(uploadableAssetSchema)
|
|
4502
|
+
});
|
|
4503
|
+
var fileResourceSchema = Type.Object({
|
|
4504
|
+
...baseSchemaProperties,
|
|
4505
|
+
type: Type.Literal("file"),
|
|
4506
|
+
fileId: Type.String()
|
|
4507
|
+
});
|
|
4508
|
+
var directoryResourceSchema = Type.Object({
|
|
4509
|
+
...baseSchemaProperties,
|
|
4510
|
+
type: Type.Literal("directory")
|
|
4511
|
+
});
|
|
4512
|
+
var nestedResourceSchema = Type.Object({
|
|
4513
|
+
...baseSchemaProperties,
|
|
4514
|
+
type: Type.Literal("resource"),
|
|
4515
|
+
fileId: Type.String(),
|
|
4516
|
+
resourceId: Type.String()
|
|
4517
|
+
});
|
|
4518
|
+
var resourceSchema = Type.Union(
|
|
4519
|
+
[
|
|
4520
|
+
assetResourceSchema,
|
|
4521
|
+
fileResourceSchema,
|
|
4522
|
+
directoryResourceSchema,
|
|
4523
|
+
nestedResourceSchema
|
|
4524
|
+
],
|
|
4525
|
+
{
|
|
4526
|
+
discriminator: "type"
|
|
4527
|
+
}
|
|
4528
|
+
);
|
|
4529
|
+
var resourceCreateSchema = Type.Union(
|
|
4530
|
+
[
|
|
4531
|
+
assetResourceCreateSchema,
|
|
4532
|
+
fileResourceSchema,
|
|
4533
|
+
directoryResourceSchema,
|
|
4534
|
+
nestedResourceSchema
|
|
4535
|
+
],
|
|
4536
|
+
{
|
|
4537
|
+
discriminator: "type"
|
|
4538
|
+
}
|
|
4539
|
+
);
|
|
4540
|
+
var flatResourceSchema = Type.Object({
|
|
4541
|
+
...baseSchemaProperties,
|
|
4542
|
+
type: Type.Union([
|
|
4543
|
+
Type.Literal("asset"),
|
|
4544
|
+
Type.Literal("file"),
|
|
4545
|
+
Type.Literal("directory"),
|
|
4546
|
+
Type.Literal("resource")
|
|
4547
|
+
]),
|
|
4548
|
+
assetId: Nullable(Type.String()),
|
|
4549
|
+
fileId: Nullable(Type.String()),
|
|
4550
|
+
resourceId: Nullable(Type.String())
|
|
4551
|
+
});
|
|
4552
|
+
function diffResourceMaps(resourceMap, newResourceMap, idProperty) {
|
|
4553
|
+
const oldIdToPathMap = new Map(
|
|
4554
|
+
Object.entries(resourceMap).map(([path2, entity]) => [
|
|
4555
|
+
entity[idProperty],
|
|
4556
|
+
path2
|
|
4557
|
+
])
|
|
4558
|
+
);
|
|
4559
|
+
const newIdToPathMap = new Map(
|
|
4560
|
+
Object.entries(newResourceMap).map(([path2, entity]) => [
|
|
4561
|
+
entity[idProperty],
|
|
4562
|
+
path2
|
|
4563
|
+
])
|
|
4564
|
+
);
|
|
4565
|
+
const oldIds = new Set(
|
|
4566
|
+
Object.values(resourceMap).map((entity) => entity[idProperty])
|
|
4567
|
+
);
|
|
4568
|
+
const newIds = new Set(
|
|
4569
|
+
Object.values(newResourceMap).map((entity) => entity[idProperty])
|
|
4570
|
+
);
|
|
4571
|
+
const sameIds = oldIds.intersection(newIds);
|
|
4572
|
+
const addedResources = Object.values(newResourceMap).filter(
|
|
4573
|
+
(entity) => !oldIds.has(entity[idProperty])
|
|
4574
|
+
);
|
|
4575
|
+
const removedResources = Object.values(resourceMap).filter(
|
|
4576
|
+
(entity) => !newIds.has(entity[idProperty])
|
|
4577
|
+
);
|
|
4578
|
+
const modifiedResources = [...sameIds].flatMap((id) => {
|
|
4579
|
+
const oldResource = Object.values(resourceMap).find(
|
|
4580
|
+
(resource) => resource[idProperty] === id
|
|
4581
|
+
);
|
|
4582
|
+
const newResource = Object.values(newResourceMap).find(
|
|
4583
|
+
(resource) => resource[idProperty] === id
|
|
4584
|
+
);
|
|
4585
|
+
if (!oldResource || !newResource) return [];
|
|
4586
|
+
const oldPath = oldIdToPathMap.get(id);
|
|
4587
|
+
const newPath = newIdToPathMap.get(id);
|
|
4588
|
+
const oldAssetId = oldResource.type === "asset" ? oldResource.assetId : void 0;
|
|
4589
|
+
const newAssetId = newResource.type === "asset" ? newResource.assetId : void 0;
|
|
4590
|
+
const changedProperties = {
|
|
4591
|
+
...oldPath !== newPath ? { path: newPath } : {},
|
|
4592
|
+
...oldAssetId !== newAssetId ? { assetId: newAssetId } : {},
|
|
4593
|
+
...newResource.type === "asset" && newResource.asset !== void 0 ? { asset: newResource.asset } : {}
|
|
4594
|
+
};
|
|
4595
|
+
if (Object.keys(changedProperties).length === 0) return [];
|
|
4596
|
+
return [{ id, stableId: newResource.stableId, ...changedProperties }];
|
|
4597
|
+
});
|
|
4598
|
+
return { addedResources, removedResources, modifiedResources };
|
|
4599
|
+
}
|
|
4600
|
+
|
|
4601
|
+
// ../noya-schemas/src/resourceTree.ts
|
|
4602
|
+
var import_imfs = __toESM(require_lib2());
|
|
4603
|
+
var import_tree_visit2 = __toESM(require_lib());
|
|
4604
|
+
|
|
3942
4605
|
// ../noya-schemas/src/index.ts
|
|
3943
4606
|
function validateUUID(value) {
|
|
3944
4607
|
return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(
|
|
@@ -3948,13 +4611,18 @@ function validateUUID(value) {
|
|
|
3948
4611
|
format_exports.Set("color", () => true);
|
|
3949
4612
|
format_exports.Set("uuid", validateUUID);
|
|
3950
4613
|
|
|
4614
|
+
// src/NoyaStateContext.tsx
|
|
4615
|
+
var import_observable = require("@noya-app/observable");
|
|
4616
|
+
var import_react_utils3 = require("@noya-app/react-utils");
|
|
4617
|
+
var import_react18 = __toESM(require("react"));
|
|
4618
|
+
|
|
3951
4619
|
// src/noyaApp.ts
|
|
3952
|
-
var
|
|
3953
|
-
var
|
|
4620
|
+
var import_state_manager3 = require("@noya-app/state-manager");
|
|
4621
|
+
var import_react17 = require("react");
|
|
3954
4622
|
|
|
3955
4623
|
// src/hooks.ts
|
|
3956
|
-
var
|
|
3957
|
-
var
|
|
4624
|
+
var import_state_manager2 = require("@noya-app/state-manager");
|
|
4625
|
+
var import_react16 = require("react");
|
|
3958
4626
|
var import_client2 = require("react-dom/client");
|
|
3959
4627
|
|
|
3960
4628
|
// src/components/ErrorOverlay.tsx
|
|
@@ -4032,14 +4700,122 @@ var ErrorOverlay = React.memo(function ErrorOverlay2({
|
|
|
4032
4700
|
});
|
|
4033
4701
|
|
|
4034
4702
|
// src/inspector/useStateInspector.tsx
|
|
4035
|
-
var
|
|
4703
|
+
var import_react15 = __toESM(require("react"));
|
|
4036
4704
|
var import_client = require("react-dom/client");
|
|
4037
4705
|
var import_react_utils2 = require("@noya-app/react-utils");
|
|
4038
4706
|
|
|
4707
|
+
// ../noya-utils/src/base64.ts
|
|
4708
|
+
function decode(base64String) {
|
|
4709
|
+
const binaryString = atob(base64String);
|
|
4710
|
+
const length = binaryString.length;
|
|
4711
|
+
const bytes = new Uint8Array(length);
|
|
4712
|
+
for (let i = 0; i < length; i++) {
|
|
4713
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
4714
|
+
}
|
|
4715
|
+
return bytes;
|
|
4716
|
+
}
|
|
4717
|
+
function encode(buffer) {
|
|
4718
|
+
const bytes = new Uint8Array(buffer);
|
|
4719
|
+
let binary = "";
|
|
4720
|
+
const length = bytes.byteLength;
|
|
4721
|
+
for (let i = 0; i < length; i++) {
|
|
4722
|
+
binary += String.fromCharCode(bytes[i]);
|
|
4723
|
+
}
|
|
4724
|
+
return globalThis.btoa(binary);
|
|
4725
|
+
}
|
|
4726
|
+
var Base64 = {
|
|
4727
|
+
encode,
|
|
4728
|
+
decode
|
|
4729
|
+
};
|
|
4730
|
+
|
|
4731
|
+
// ../noya-utils/src/invert.ts
|
|
4732
|
+
function invert(record) {
|
|
4733
|
+
return Object.fromEntries(
|
|
4734
|
+
Object.entries(record).map(([type, extension]) => [extension, type])
|
|
4735
|
+
);
|
|
4736
|
+
}
|
|
4737
|
+
|
|
4738
|
+
// ../noya-utils/src/fileType.ts
|
|
4739
|
+
var FILE_TYPE_TO_EXTENSION = {
|
|
4740
|
+
"image/png": "png",
|
|
4741
|
+
"image/jpeg": "jpg",
|
|
4742
|
+
"image/webp": "webp",
|
|
4743
|
+
"image/svg+xml": "svg",
|
|
4744
|
+
"application/pdf": "pdf",
|
|
4745
|
+
"application/zip": "zip",
|
|
4746
|
+
"application/x-7z-compressed": "7z"
|
|
4747
|
+
};
|
|
4748
|
+
var FILE_EXTENSION_TO_TYPE = invert(FILE_TYPE_TO_EXTENSION);
|
|
4749
|
+
|
|
4750
|
+
// ../noya-utils/src/memoizeDeep.ts
|
|
4751
|
+
var TOKEN_OBJECT = Symbol("object");
|
|
4752
|
+
var TOKEN_ARRAY = Symbol("array");
|
|
4753
|
+
var TOKEN_KEY = Symbol("key");
|
|
4754
|
+
var TOKEN_END = Symbol("end");
|
|
4755
|
+
var TOKEN_PRIMITIVE = Symbol("primitive");
|
|
4756
|
+
var TOKEN_ARGSEP = Symbol("argsep");
|
|
4757
|
+
|
|
4758
|
+
// ../../node_modules/uuid/dist/esm-node/rng.js
|
|
4759
|
+
var import_crypto = __toESM(require("crypto"));
|
|
4760
|
+
var rnds8Pool = new Uint8Array(256);
|
|
4761
|
+
var poolPtr = rnds8Pool.length;
|
|
4762
|
+
function rng() {
|
|
4763
|
+
if (poolPtr > rnds8Pool.length - 16) {
|
|
4764
|
+
import_crypto.default.randomFillSync(rnds8Pool);
|
|
4765
|
+
poolPtr = 0;
|
|
4766
|
+
}
|
|
4767
|
+
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
4768
|
+
}
|
|
4769
|
+
|
|
4770
|
+
// ../../node_modules/uuid/dist/esm-node/regex.js
|
|
4771
|
+
var regex_default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
|
|
4772
|
+
|
|
4773
|
+
// ../../node_modules/uuid/dist/esm-node/validate.js
|
|
4774
|
+
function validate(uuid2) {
|
|
4775
|
+
return typeof uuid2 === "string" && regex_default.test(uuid2);
|
|
4776
|
+
}
|
|
4777
|
+
var validate_default = validate;
|
|
4778
|
+
|
|
4779
|
+
// ../../node_modules/uuid/dist/esm-node/stringify.js
|
|
4780
|
+
var byteToHex = [];
|
|
4781
|
+
for (let i = 0; i < 256; ++i) {
|
|
4782
|
+
byteToHex.push((i + 256).toString(16).substr(1));
|
|
4783
|
+
}
|
|
4784
|
+
function stringify(arr, offset = 0) {
|
|
4785
|
+
const uuid2 = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
4786
|
+
if (!validate_default(uuid2)) {
|
|
4787
|
+
throw TypeError("Stringified UUID is invalid");
|
|
4788
|
+
}
|
|
4789
|
+
return uuid2;
|
|
4790
|
+
}
|
|
4791
|
+
var stringify_default = stringify;
|
|
4792
|
+
|
|
4793
|
+
// ../../node_modules/uuid/dist/esm-node/v4.js
|
|
4794
|
+
function v4(options, buf, offset) {
|
|
4795
|
+
options = options || {};
|
|
4796
|
+
const rnds = options.random || (options.rng || rng)();
|
|
4797
|
+
rnds[6] = rnds[6] & 15 | 64;
|
|
4798
|
+
rnds[8] = rnds[8] & 63 | 128;
|
|
4799
|
+
if (buf) {
|
|
4800
|
+
offset = offset || 0;
|
|
4801
|
+
for (let i = 0; i < 16; ++i) {
|
|
4802
|
+
buf[offset + i] = rnds[i];
|
|
4803
|
+
}
|
|
4804
|
+
return buf;
|
|
4805
|
+
}
|
|
4806
|
+
return stringify_default(rnds);
|
|
4807
|
+
}
|
|
4808
|
+
var v4_default = v4;
|
|
4809
|
+
|
|
4810
|
+
// ../noya-utils/src/uuid.ts
|
|
4811
|
+
function uuid() {
|
|
4812
|
+
return v4_default();
|
|
4813
|
+
}
|
|
4814
|
+
|
|
4039
4815
|
// src/inspector/StateInspector.tsx
|
|
4040
4816
|
var import_react_utils = require("@noya-app/react-utils");
|
|
4041
|
-
var
|
|
4042
|
-
var
|
|
4817
|
+
var import_react14 = __toESM(require("react"));
|
|
4818
|
+
var import_react_inspector6 = require("react-inspector");
|
|
4043
4819
|
|
|
4044
4820
|
// src/useObservable.ts
|
|
4045
4821
|
var import_react = require("react");
|
|
@@ -4068,57 +4844,1214 @@ function useObservable(observable, pathOrSelector, options) {
|
|
|
4068
4844
|
return (0, import_react.useSyncExternalStore)(listen, get, get);
|
|
4069
4845
|
}
|
|
4070
4846
|
|
|
4071
|
-
// src/inspector/
|
|
4847
|
+
// src/inspector/ColoredDot.tsx
|
|
4072
4848
|
var import_react2 = __toESM(require("react"));
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
|
|
4081
|
-
|
|
4082
|
-
|
|
4849
|
+
function ColoredDot({ type }) {
|
|
4850
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
4851
|
+
"span",
|
|
4852
|
+
{
|
|
4853
|
+
style: {
|
|
4854
|
+
display: "inline-block",
|
|
4855
|
+
width: 6,
|
|
4856
|
+
height: 6,
|
|
4857
|
+
background: type === "success" ? "rgba(0,200,0,0.8)" : "rgba(200,0,0,0.8)",
|
|
4858
|
+
borderRadius: "50%",
|
|
4859
|
+
verticalAlign: "middle"
|
|
4083
4860
|
}
|
|
4084
4861
|
}
|
|
4085
|
-
|
|
4086
|
-
});
|
|
4087
|
-
const setLocalStorageState = (value) => {
|
|
4088
|
-
localStorage?.setItem(key, JSON.stringify(value));
|
|
4089
|
-
setState(value);
|
|
4090
|
-
};
|
|
4091
|
-
return [state, setLocalStorageState];
|
|
4862
|
+
);
|
|
4092
4863
|
}
|
|
4093
4864
|
|
|
4094
|
-
// src/inspector/
|
|
4095
|
-
var
|
|
4865
|
+
// src/inspector/inspectorTheme.ts
|
|
4866
|
+
var import_react_inspector = require("react-inspector");
|
|
4867
|
+
var lightInspectorTheme = {
|
|
4096
4868
|
...import_react_inspector.chromeLight,
|
|
4097
4869
|
BASE_BACKGROUND_COLOR: "transparent",
|
|
4098
4870
|
OBJECT_NAME_COLOR: "rgba(0,0,0,0.7)"
|
|
4099
4871
|
};
|
|
4100
|
-
var
|
|
4872
|
+
var darkInspectorTheme = {
|
|
4101
4873
|
...import_react_inspector.chromeDark,
|
|
4102
4874
|
BASE_BACKGROUND_COLOR: "transparent",
|
|
4103
4875
|
OBJECT_NAME_COLOR: "rgba(255,255,255,0.7)"
|
|
4104
4876
|
};
|
|
4105
|
-
var
|
|
4106
|
-
|
|
4107
|
-
flex: "1 1 0",
|
|
4108
|
-
overflowY: "auto",
|
|
4109
|
-
overflowX: "hidden",
|
|
4110
|
-
display: "flex",
|
|
4111
|
-
flexDirection: "column"
|
|
4112
|
-
}
|
|
4877
|
+
var getStateInspectorTheme = (colorScheme) => {
|
|
4878
|
+
return colorScheme === "light" ? lightInspectorTheme : darkInspectorTheme;
|
|
4113
4879
|
};
|
|
4114
|
-
|
|
4115
|
-
|
|
4116
|
-
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4880
|
+
var getStateInspectorBorderColor = (colorScheme) => {
|
|
4881
|
+
return colorScheme === "light" ? "rgb(223 223 223)" : "rgb(29 29 29)";
|
|
4882
|
+
};
|
|
4883
|
+
|
|
4884
|
+
// src/inspector/sections/ActivityEventsSection.tsx
|
|
4885
|
+
var import_react7 = __toESM(require("react"));
|
|
4886
|
+
var import_react_inspector2 = require("react-inspector");
|
|
4887
|
+
|
|
4888
|
+
// src/inspector/StateInspectorButton.tsx
|
|
4889
|
+
var import_react3 = __toESM(require("react"));
|
|
4890
|
+
function StateInspectorButton({
|
|
4891
|
+
children,
|
|
4892
|
+
onClick,
|
|
4893
|
+
style,
|
|
4894
|
+
theme,
|
|
4895
|
+
disabled
|
|
4896
|
+
}) {
|
|
4897
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
4898
|
+
"button",
|
|
4899
|
+
{
|
|
4900
|
+
type: "button",
|
|
4901
|
+
disabled,
|
|
4902
|
+
onClick: (event) => {
|
|
4903
|
+
event.stopPropagation();
|
|
4904
|
+
onClick();
|
|
4905
|
+
},
|
|
4906
|
+
style: {
|
|
4907
|
+
flex: "0",
|
|
4908
|
+
appearance: "none",
|
|
4909
|
+
background: "none",
|
|
4910
|
+
color: theme.BASE_COLOR,
|
|
4911
|
+
opacity: disabled ? 0.25 : 1,
|
|
4912
|
+
border: "none",
|
|
4913
|
+
fontSize: "12px",
|
|
4914
|
+
whiteSpace: "nowrap",
|
|
4915
|
+
display: "inline-flex",
|
|
4916
|
+
alignItems: "center",
|
|
4917
|
+
justifyContent: "center",
|
|
4918
|
+
padding: "0",
|
|
4919
|
+
cursor: "pointer",
|
|
4920
|
+
...style
|
|
4921
|
+
}
|
|
4922
|
+
},
|
|
4923
|
+
children
|
|
4924
|
+
);
|
|
4925
|
+
}
|
|
4926
|
+
|
|
4927
|
+
// src/inspector/StateInspectorDisclosureSection.tsx
|
|
4928
|
+
var import_react5 = __toESM(require("react"));
|
|
4929
|
+
|
|
4930
|
+
// src/inspector/StateInspectorArrow.tsx
|
|
4931
|
+
var import_react4 = __toESM(require("react"));
|
|
4932
|
+
function StateInspectorArrow({
|
|
4933
|
+
expanded,
|
|
4934
|
+
onClick,
|
|
4935
|
+
style
|
|
4936
|
+
}) {
|
|
4937
|
+
return /* @__PURE__ */ import_react4.default.createElement(
|
|
4938
|
+
"span",
|
|
4939
|
+
{
|
|
4940
|
+
role: "button",
|
|
4941
|
+
onClick,
|
|
4942
|
+
style: {
|
|
4943
|
+
display: "inline-block",
|
|
4944
|
+
textAlign: "center",
|
|
4945
|
+
transform: expanded ? "rotate(0deg)" : "rotate(-90deg)",
|
|
4946
|
+
fontFamily: "Menlo, monospace",
|
|
4947
|
+
...style
|
|
4948
|
+
}
|
|
4949
|
+
},
|
|
4950
|
+
"\u25BC"
|
|
4951
|
+
);
|
|
4952
|
+
}
|
|
4953
|
+
|
|
4954
|
+
// src/inspector/StateInspectorDisclosureSection.tsx
|
|
4955
|
+
function StateInspectorDisclosureSection({
|
|
4956
|
+
open,
|
|
4957
|
+
setOpen,
|
|
4958
|
+
title,
|
|
4959
|
+
right,
|
|
4960
|
+
children,
|
|
4961
|
+
colorScheme,
|
|
4962
|
+
isFirst,
|
|
4963
|
+
style
|
|
4964
|
+
}) {
|
|
4965
|
+
const theme = colorScheme === "light" ? lightInspectorTheme : darkInspectorTheme;
|
|
4966
|
+
const borderColor = colorScheme === "light" ? "rgba(0,0,0,0.1)" : "rgba(255,255,255,0.1)";
|
|
4967
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
4968
|
+
"div",
|
|
4969
|
+
{
|
|
4970
|
+
style: {
|
|
4971
|
+
flex: open ? "1 1 0" : "0",
|
|
4972
|
+
display: "flex",
|
|
4973
|
+
flexDirection: "column",
|
|
4974
|
+
...style
|
|
4975
|
+
}
|
|
4976
|
+
},
|
|
4977
|
+
/* @__PURE__ */ import_react5.default.createElement(
|
|
4978
|
+
"div",
|
|
4979
|
+
{
|
|
4980
|
+
onClick: () => setOpen?.(!open),
|
|
4981
|
+
style: {
|
|
4982
|
+
cursor: "default",
|
|
4983
|
+
fontSize: "12px",
|
|
4984
|
+
padding: "4px 10px",
|
|
4985
|
+
display: "flex",
|
|
4986
|
+
alignItems: "center",
|
|
4987
|
+
...!isFirst && { borderTop: `1px solid ${borderColor}` },
|
|
4988
|
+
...open && { borderBottom: `1px solid ${borderColor}` }
|
|
4989
|
+
}
|
|
4990
|
+
},
|
|
4991
|
+
setOpen && /* @__PURE__ */ import_react5.default.createElement(
|
|
4992
|
+
StateInspectorArrow,
|
|
4993
|
+
{
|
|
4994
|
+
expanded: open,
|
|
4995
|
+
style: {
|
|
4996
|
+
fontSize: theme.ARROW_FONT_SIZE,
|
|
4997
|
+
marginRight: theme.ARROW_MARGIN_RIGHT + 1,
|
|
4998
|
+
color: theme.ARROW_COLOR
|
|
4999
|
+
}
|
|
5000
|
+
}
|
|
5001
|
+
),
|
|
5002
|
+
/* @__PURE__ */ import_react5.default.createElement("span", { style: { flex: "1 1 0", userSelect: "none" } }, title),
|
|
5003
|
+
right
|
|
5004
|
+
),
|
|
5005
|
+
open && children
|
|
5006
|
+
);
|
|
5007
|
+
}
|
|
5008
|
+
var StateInspectorDisclosureRowInner = (0, import_react5.forwardRef)(
|
|
5009
|
+
function StateInspectorDisclosureRowInner2(props, forwardedRef) {
|
|
5010
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
5011
|
+
"div",
|
|
5012
|
+
{
|
|
5013
|
+
style: {
|
|
5014
|
+
flex: "1 1 0",
|
|
5015
|
+
overflowY: "auto",
|
|
5016
|
+
overflowX: "hidden",
|
|
5017
|
+
display: "flex",
|
|
5018
|
+
flexDirection: "column",
|
|
5019
|
+
...props.style
|
|
5020
|
+
},
|
|
5021
|
+
...props,
|
|
5022
|
+
ref: forwardedRef
|
|
5023
|
+
}
|
|
5024
|
+
);
|
|
5025
|
+
}
|
|
5026
|
+
);
|
|
5027
|
+
|
|
5028
|
+
// src/inspector/StateInspectorRow.tsx
|
|
5029
|
+
var import_react6 = __toESM(require("react"));
|
|
5030
|
+
function StateInspectorRow({
|
|
5031
|
+
children,
|
|
5032
|
+
colorScheme,
|
|
5033
|
+
selected,
|
|
5034
|
+
style,
|
|
5035
|
+
variant
|
|
5036
|
+
}) {
|
|
5037
|
+
const solidBorderColor = colorScheme === "light" ? "rgb(223 223 223)" : "rgb(29 29 29)";
|
|
5038
|
+
return /* @__PURE__ */ import_react6.default.createElement(
|
|
5039
|
+
"div",
|
|
5040
|
+
{
|
|
5041
|
+
style: {
|
|
5042
|
+
borderBottom: `1px solid ${solidBorderColor}`,
|
|
5043
|
+
fontSize: "12px",
|
|
5044
|
+
fontFamily: "Menlo, monospace",
|
|
5045
|
+
padding: "2px 12px 1px",
|
|
5046
|
+
display: "flex",
|
|
5047
|
+
alignItems: "center",
|
|
5048
|
+
background: variant === "up" ? "rgba(0,255,0,0.1)" : variant === "down" ? "transparent" : selected ? "rgb(59 130 246 / 15%)" : void 0,
|
|
5049
|
+
// background:
|
|
5050
|
+
// colorScheme === "light"
|
|
5051
|
+
// ? "rgba(0,0,0,0.05)"
|
|
5052
|
+
// : "rgba(255,255,255,0.05)",
|
|
5053
|
+
...style
|
|
5054
|
+
}
|
|
5055
|
+
},
|
|
5056
|
+
/* @__PURE__ */ import_react6.default.createElement(
|
|
5057
|
+
"span",
|
|
5058
|
+
{
|
|
5059
|
+
style: {
|
|
5060
|
+
fontFamily: "Menlo, monospace",
|
|
5061
|
+
fontSize: "11px",
|
|
5062
|
+
borderRadius: 4,
|
|
5063
|
+
display: "inline-block"
|
|
5064
|
+
}
|
|
5065
|
+
},
|
|
5066
|
+
children
|
|
5067
|
+
)
|
|
5068
|
+
);
|
|
5069
|
+
}
|
|
5070
|
+
|
|
5071
|
+
// src/inspector/sections/ActivityEventsSection.tsx
|
|
5072
|
+
function isResourceStreamFilter(streamFilter) {
|
|
5073
|
+
return typeof streamFilter === "object" && "resourceId" in streamFilter;
|
|
5074
|
+
}
|
|
5075
|
+
function isResourceActivityEvent(activityEvent) {
|
|
5076
|
+
return typeof activityEvent === "object" && activityEvent !== null && "type" in activityEvent && activityEvent.type === "resource" && "resourceId" in activityEvent && typeof activityEvent.resourceId === "string";
|
|
5077
|
+
}
|
|
5078
|
+
function ActivityEventsSection({
|
|
5079
|
+
showEvents,
|
|
5080
|
+
setShowEvents,
|
|
5081
|
+
colorScheme,
|
|
5082
|
+
activityEventsContainerRef,
|
|
5083
|
+
activityEventsManager
|
|
5084
|
+
}) {
|
|
5085
|
+
const [streamFilter, setStreamFilter] = (0, import_react7.useState)("all");
|
|
5086
|
+
const streamFilterType = isResourceStreamFilter(streamFilter) ? "resource" : "all";
|
|
5087
|
+
const theme = getStateInspectorTheme(colorScheme);
|
|
5088
|
+
const activityEvents = useActivityEventsForManager(
|
|
5089
|
+
showEvents ? streamFilter : void 0,
|
|
5090
|
+
activityEventsManager
|
|
5091
|
+
);
|
|
5092
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
5093
|
+
StateInspectorDisclosureSection,
|
|
5094
|
+
{
|
|
5095
|
+
open: showEvents,
|
|
5096
|
+
setOpen: setShowEvents,
|
|
5097
|
+
title: `Activity Events`,
|
|
5098
|
+
colorScheme
|
|
5099
|
+
},
|
|
5100
|
+
/* @__PURE__ */ import_react7.default.createElement(StateInspectorDisclosureRowInner, { ref: activityEventsContainerRef }, /* @__PURE__ */ import_react7.default.createElement("div", { style: { padding: "4px 12px", display: "flex", gap: "4px" } }, /* @__PURE__ */ import_react7.default.createElement(
|
|
5101
|
+
"select",
|
|
5102
|
+
{
|
|
5103
|
+
name: "streamFilterType",
|
|
5104
|
+
value: streamFilterType,
|
|
5105
|
+
style: { flex: "0 0 auto", height: "19px" },
|
|
5106
|
+
onChange: (e) => {
|
|
5107
|
+
const value = e.target.value;
|
|
5108
|
+
if (value === "all") {
|
|
5109
|
+
setStreamFilter("all");
|
|
5110
|
+
} else {
|
|
5111
|
+
setStreamFilter({ resourceId: "" });
|
|
5112
|
+
}
|
|
5113
|
+
}
|
|
5114
|
+
},
|
|
5115
|
+
/* @__PURE__ */ import_react7.default.createElement("option", { value: "all" }, "All"),
|
|
5116
|
+
/* @__PURE__ */ import_react7.default.createElement("option", { value: "resource" }, "Resource")
|
|
5117
|
+
), isResourceStreamFilter(streamFilter) && /* @__PURE__ */ import_react7.default.createElement(
|
|
5118
|
+
"input",
|
|
5119
|
+
{
|
|
5120
|
+
name: "resourceId",
|
|
5121
|
+
type: "text",
|
|
5122
|
+
placeholder: "Resource ID",
|
|
5123
|
+
value: streamFilter.resourceId,
|
|
5124
|
+
style: {
|
|
5125
|
+
flex: "1 1 auto",
|
|
5126
|
+
height: "19px",
|
|
5127
|
+
padding: "0px 4px",
|
|
5128
|
+
boxSizing: "border-box"
|
|
5129
|
+
},
|
|
5130
|
+
onChange: (e) => setStreamFilter({ ...streamFilter, resourceId: e.target.value })
|
|
5131
|
+
}
|
|
5132
|
+
)), activityEvents?.map((activityEvent, index) => /* @__PURE__ */ import_react7.default.createElement(
|
|
5133
|
+
StateInspectorRow,
|
|
5134
|
+
{
|
|
5135
|
+
key: index,
|
|
5136
|
+
colorScheme,
|
|
5137
|
+
style: {
|
|
5138
|
+
padding: "0px 12px 1px"
|
|
5139
|
+
}
|
|
5140
|
+
},
|
|
5141
|
+
/* @__PURE__ */ import_react7.default.createElement(import_react_inspector2.ObjectInspector, { data: activityEvent, theme }),
|
|
5142
|
+
streamFilterType === "all" && isResourceActivityEvent(activityEvent) && /* @__PURE__ */ import_react7.default.createElement(
|
|
5143
|
+
StateInspectorButton,
|
|
5144
|
+
{
|
|
5145
|
+
theme,
|
|
5146
|
+
onClick: () => {
|
|
5147
|
+
setStreamFilter({ resourceId: activityEvent.resourceId });
|
|
5148
|
+
}
|
|
5149
|
+
},
|
|
5150
|
+
"Watch this resource"
|
|
5151
|
+
)
|
|
5152
|
+
)), !activityEvents && /* @__PURE__ */ import_react7.default.createElement(
|
|
5153
|
+
"div",
|
|
5154
|
+
{
|
|
5155
|
+
style: {
|
|
5156
|
+
padding: "12px",
|
|
5157
|
+
fontSize: "12px",
|
|
5158
|
+
display: "flex",
|
|
5159
|
+
flexDirection: "column",
|
|
5160
|
+
gap: "4px"
|
|
5161
|
+
}
|
|
5162
|
+
},
|
|
5163
|
+
/* @__PURE__ */ import_react7.default.createElement("span", null, "No activity events")
|
|
5164
|
+
))
|
|
5165
|
+
);
|
|
5166
|
+
}
|
|
5167
|
+
|
|
5168
|
+
// src/inspector/sections/EventsSection.tsx
|
|
5169
|
+
var import_react9 = __toESM(require("react"));
|
|
5170
|
+
var import_react_inspector4 = require("react-inspector");
|
|
5171
|
+
|
|
5172
|
+
// src/inspector/ObjectRootLabel.tsx
|
|
5173
|
+
var import_react8 = __toESM(require("react"));
|
|
5174
|
+
var import_react_inspector3 = require("react-inspector");
|
|
5175
|
+
var ObjectRootLabel = ({ name, data, direction }) => {
|
|
5176
|
+
if (typeof name === "string") {
|
|
5177
|
+
return /* @__PURE__ */ import_react8.default.createElement("span", null, /* @__PURE__ */ import_react8.default.createElement(import_react_inspector3.ObjectName, { name }), /* @__PURE__ */ import_react8.default.createElement("span", null, ": "), /* @__PURE__ */ import_react8.default.createElement(import_react_inspector3.ObjectPreview, { data }));
|
|
5178
|
+
}
|
|
5179
|
+
if (direction === "up" || direction === "down") {
|
|
5180
|
+
const arrow = direction === "up" ? "\u2191" : "\u2193";
|
|
5181
|
+
return /* @__PURE__ */ import_react8.default.createElement("span", null, /* @__PURE__ */ import_react8.default.createElement(
|
|
5182
|
+
"span",
|
|
5183
|
+
{
|
|
5184
|
+
style: {
|
|
5185
|
+
background: direction === "up" ? "rgba(0,255,0,0.2)" : "rgba(255,0,0,0.2)",
|
|
5186
|
+
// color: "white",
|
|
5187
|
+
width: 12,
|
|
5188
|
+
height: 12,
|
|
5189
|
+
borderRadius: 2,
|
|
5190
|
+
display: "inline-flex",
|
|
5191
|
+
justifyContent: "center",
|
|
5192
|
+
alignItems: "center",
|
|
5193
|
+
marginRight: 4,
|
|
5194
|
+
lineHeight: "12px"
|
|
5195
|
+
}
|
|
5196
|
+
},
|
|
5197
|
+
arrow
|
|
5198
|
+
), /* @__PURE__ */ import_react8.default.createElement(import_react_inspector3.ObjectPreview, { data }));
|
|
5199
|
+
} else {
|
|
5200
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_inspector3.ObjectPreview, { data });
|
|
5201
|
+
}
|
|
5202
|
+
};
|
|
5203
|
+
|
|
5204
|
+
// src/inspector/sections/EventsSection.tsx
|
|
5205
|
+
function EventsSection({
|
|
5206
|
+
showEvents,
|
|
5207
|
+
setShowEvents,
|
|
5208
|
+
colorScheme,
|
|
5209
|
+
eventsContainerRef,
|
|
5210
|
+
connectionEvents
|
|
5211
|
+
}) {
|
|
5212
|
+
const theme = getStateInspectorTheme(colorScheme);
|
|
5213
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
5214
|
+
StateInspectorDisclosureSection,
|
|
5215
|
+
{
|
|
5216
|
+
open: showEvents,
|
|
5217
|
+
setOpen: setShowEvents,
|
|
5218
|
+
title: "Events",
|
|
5219
|
+
colorScheme
|
|
5220
|
+
},
|
|
5221
|
+
/* @__PURE__ */ import_react9.default.createElement(StateInspectorDisclosureRowInner, { ref: eventsContainerRef }, connectionEvents?.map(
|
|
5222
|
+
(event, index) => event.type === "stateChange" ? /* @__PURE__ */ import_react9.default.createElement(StateInspectorRow, { key: index, colorScheme }, "connection:", " ", /* @__PURE__ */ import_react9.default.createElement("span", { style: { fontStyle: "italic" } }, event.state.toLowerCase())) : /* @__PURE__ */ import_react9.default.createElement(
|
|
5223
|
+
StateInspectorRow,
|
|
5224
|
+
{
|
|
5225
|
+
key: index,
|
|
5226
|
+
colorScheme,
|
|
5227
|
+
variant: event.type === "send" ? "up" : "down",
|
|
5228
|
+
style: {
|
|
5229
|
+
padding: "0px 12px 1px"
|
|
5230
|
+
}
|
|
5231
|
+
},
|
|
5232
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
5233
|
+
import_react_inspector4.ObjectInspector,
|
|
5234
|
+
{
|
|
5235
|
+
data: event.type === "error" ? event.error : event.message,
|
|
5236
|
+
theme,
|
|
5237
|
+
nodeRenderer: ({ depth, name, data, isNonenumerable }) => {
|
|
5238
|
+
const direction = event.type === "send" ? "up" : "down";
|
|
5239
|
+
return depth === 0 ? /* @__PURE__ */ import_react9.default.createElement(ObjectRootLabel, { direction, data }) : /* @__PURE__ */ import_react9.default.createElement(
|
|
5240
|
+
import_react_inspector4.ObjectLabel,
|
|
5241
|
+
{
|
|
5242
|
+
direction,
|
|
5243
|
+
name,
|
|
5244
|
+
data,
|
|
5245
|
+
isNonenumerable
|
|
5246
|
+
}
|
|
5247
|
+
);
|
|
5248
|
+
}
|
|
5249
|
+
}
|
|
5250
|
+
)
|
|
5251
|
+
)
|
|
5252
|
+
), !connectionEvents && /* @__PURE__ */ import_react9.default.createElement(
|
|
5253
|
+
"div",
|
|
5254
|
+
{
|
|
5255
|
+
style: {
|
|
5256
|
+
padding: "12px",
|
|
5257
|
+
fontSize: "12px",
|
|
5258
|
+
display: "flex",
|
|
5259
|
+
flexDirection: "column",
|
|
5260
|
+
gap: "4px"
|
|
5261
|
+
}
|
|
5262
|
+
},
|
|
5263
|
+
/* @__PURE__ */ import_react9.default.createElement("span", null, "No recorded events")
|
|
5264
|
+
))
|
|
5265
|
+
);
|
|
5266
|
+
}
|
|
5267
|
+
|
|
5268
|
+
// src/inspector/sections/HistorySection.tsx
|
|
5269
|
+
var import_react10 = __toESM(require("react"));
|
|
5270
|
+
var import_react_inspector5 = require("react-inspector");
|
|
5271
|
+
|
|
5272
|
+
// src/inspector/utils.ts
|
|
5273
|
+
function pathToString(extendedPath) {
|
|
5274
|
+
return extendedPath.map(
|
|
5275
|
+
(key) => typeof key === "object" ? `:${ellipsis(key.id.toString(), 8, "middle")}` : key
|
|
5276
|
+
).map(
|
|
5277
|
+
(key, index) => index === 0 || typeof key === "string" && key.startsWith(":") ? key : `.${key}`
|
|
5278
|
+
).join("");
|
|
5279
|
+
}
|
|
5280
|
+
function ellipsis(str, maxLength, position = "end") {
|
|
5281
|
+
if (str.length <= maxLength) return str;
|
|
5282
|
+
switch (position) {
|
|
5283
|
+
case "start":
|
|
5284
|
+
return `\u2026${str.slice(str.length - maxLength)}`;
|
|
5285
|
+
case "middle": {
|
|
5286
|
+
const halfLength = Math.floor(maxLength / 2);
|
|
5287
|
+
return `${str.slice(0, halfLength)}\u2026${str.slice(str.length - halfLength)}`;
|
|
5288
|
+
}
|
|
5289
|
+
case "end":
|
|
5290
|
+
return `${str.slice(0, maxLength)}\u2026`;
|
|
5291
|
+
}
|
|
5292
|
+
}
|
|
5293
|
+
function uploadFile() {
|
|
5294
|
+
return new Promise((resolve, reject) => {
|
|
5295
|
+
const input = document.createElement("input");
|
|
5296
|
+
input.type = "file";
|
|
5297
|
+
input.onchange = () => {
|
|
5298
|
+
const file = input.files?.[0];
|
|
5299
|
+
if (file) {
|
|
5300
|
+
const reader = new FileReader();
|
|
5301
|
+
reader.onload = () => {
|
|
5302
|
+
const buffer = reader.result;
|
|
5303
|
+
const blob = new File([buffer], file.name, { type: file.type });
|
|
5304
|
+
resolve(blob);
|
|
5305
|
+
};
|
|
5306
|
+
reader.onerror = () => {
|
|
5307
|
+
reject(new Error("Failed to read file"));
|
|
5308
|
+
};
|
|
5309
|
+
reader.readAsArrayBuffer(file);
|
|
5310
|
+
}
|
|
5311
|
+
};
|
|
5312
|
+
input.click();
|
|
5313
|
+
});
|
|
5314
|
+
}
|
|
5315
|
+
|
|
5316
|
+
// src/inspector/sections/HistorySection.tsx
|
|
5317
|
+
var HISTORY_ELEMENT_PREFIX = "noya-multiplayer-history-";
|
|
5318
|
+
function HistorySection({
|
|
5319
|
+
showHistory,
|
|
5320
|
+
setShowHistory,
|
|
5321
|
+
colorScheme,
|
|
5322
|
+
historySnapshot,
|
|
5323
|
+
multiplayerStateManager
|
|
5324
|
+
}) {
|
|
5325
|
+
const ref = (0, import_react10.useRef)(null);
|
|
5326
|
+
const theme = getStateInspectorTheme(colorScheme);
|
|
5327
|
+
const solidBorderColor = getStateInspectorBorderColor(colorScheme);
|
|
5328
|
+
(0, import_react10.useEffect)(() => {
|
|
5329
|
+
if (ref.current) {
|
|
5330
|
+
ref.current.scrollTop = ref.current.scrollHeight;
|
|
5331
|
+
}
|
|
5332
|
+
}, [historySnapshot]);
|
|
5333
|
+
(0, import_react10.useEffect)(() => {
|
|
5334
|
+
if (!ref.current) return;
|
|
5335
|
+
const historyEntry = ref.current.querySelector(
|
|
5336
|
+
`#${HISTORY_ELEMENT_PREFIX}${historySnapshot.historyIndex}`
|
|
5337
|
+
);
|
|
5338
|
+
if (historyEntry) {
|
|
5339
|
+
historyEntry.scrollIntoView({
|
|
5340
|
+
block: "nearest",
|
|
5341
|
+
inline: "nearest"
|
|
5342
|
+
});
|
|
5343
|
+
}
|
|
5344
|
+
}, [historySnapshot.historyIndex]);
|
|
5345
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
5346
|
+
StateInspectorDisclosureSection,
|
|
5347
|
+
{
|
|
5348
|
+
open: showHistory,
|
|
5349
|
+
setOpen: setShowHistory,
|
|
5350
|
+
title: "History",
|
|
5351
|
+
colorScheme,
|
|
5352
|
+
right: /* @__PURE__ */ import_react10.default.createElement(
|
|
5353
|
+
"span",
|
|
5354
|
+
{
|
|
5355
|
+
style: {
|
|
5356
|
+
display: "flex",
|
|
5357
|
+
gap: "4px"
|
|
5358
|
+
}
|
|
5359
|
+
},
|
|
5360
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
5361
|
+
StateInspectorButton,
|
|
5362
|
+
{
|
|
5363
|
+
disabled: !historySnapshot.canUndo,
|
|
5364
|
+
theme,
|
|
5365
|
+
onClick: () => {
|
|
5366
|
+
multiplayerStateManager.undo();
|
|
5367
|
+
}
|
|
5368
|
+
},
|
|
5369
|
+
/* @__PURE__ */ import_react10.default.createElement("span", { style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react10.default.createElement(
|
|
5370
|
+
"svg",
|
|
5371
|
+
{
|
|
5372
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
5373
|
+
width: "1em",
|
|
5374
|
+
height: "1em",
|
|
5375
|
+
viewBox: "0 0 20 20"
|
|
5376
|
+
},
|
|
5377
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
5378
|
+
"path",
|
|
5379
|
+
{
|
|
5380
|
+
fill: "currentColor",
|
|
5381
|
+
d: "M12 5H7V2L1 6l6 4V7h5c2.2 0 4 1.8 4 4s-1.8 4-4 4H7v2h5c3.3 0 6-2.7 6-6s-2.7-6-6-6"
|
|
5382
|
+
}
|
|
5383
|
+
)
|
|
5384
|
+
))
|
|
5385
|
+
),
|
|
5386
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
5387
|
+
StateInspectorButton,
|
|
5388
|
+
{
|
|
5389
|
+
disabled: !historySnapshot.canRedo,
|
|
5390
|
+
theme,
|
|
5391
|
+
onClick: () => {
|
|
5392
|
+
multiplayerStateManager.redo();
|
|
5393
|
+
}
|
|
5394
|
+
},
|
|
5395
|
+
/* @__PURE__ */ import_react10.default.createElement("span", { style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react10.default.createElement(
|
|
5396
|
+
"svg",
|
|
5397
|
+
{
|
|
5398
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
5399
|
+
width: "1em",
|
|
5400
|
+
height: "1em",
|
|
5401
|
+
viewBox: "0 0 20 20"
|
|
5402
|
+
},
|
|
5403
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
5404
|
+
"path",
|
|
5405
|
+
{
|
|
5406
|
+
fill: "currentColor",
|
|
5407
|
+
d: "M8 5h5V2l6 4l-6 4V7H8c-2.2 0-4 1.8-4 4s1.8 4 4 4h5v2H8c-3.3 0-6-2.7-6-6s2.7-6 6-6"
|
|
5408
|
+
}
|
|
5409
|
+
)
|
|
5410
|
+
))
|
|
5411
|
+
)
|
|
5412
|
+
)
|
|
5413
|
+
},
|
|
5414
|
+
/* @__PURE__ */ import_react10.default.createElement(StateInspectorDisclosureRowInner, { ref }, /* @__PURE__ */ import_react10.default.createElement(
|
|
5415
|
+
"div",
|
|
5416
|
+
{
|
|
5417
|
+
id: `${HISTORY_ELEMENT_PREFIX}0`,
|
|
5418
|
+
style: {
|
|
5419
|
+
borderBottom: `1px solid ${solidBorderColor}`,
|
|
5420
|
+
fontSize: "12px",
|
|
5421
|
+
fontFamily: "Menlo, monospace",
|
|
5422
|
+
padding: "2px 12px 1px",
|
|
5423
|
+
display: "flex",
|
|
5424
|
+
alignItems: "center",
|
|
5425
|
+
background: historySnapshot.historyIndex === 0 ? "rgb(59 130 246 / 15%)" : void 0
|
|
5426
|
+
}
|
|
5427
|
+
},
|
|
5428
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
5429
|
+
"span",
|
|
5430
|
+
{
|
|
5431
|
+
style: {
|
|
5432
|
+
fontFamily: "Menlo, monospace",
|
|
5433
|
+
fontSize: "11px",
|
|
5434
|
+
borderRadius: 4,
|
|
5435
|
+
display: "inline-block"
|
|
5436
|
+
}
|
|
5437
|
+
},
|
|
5438
|
+
"Initial state"
|
|
5439
|
+
)
|
|
5440
|
+
), historySnapshot.history.map((entry, index) => {
|
|
5441
|
+
const metadata = entry.metadata;
|
|
5442
|
+
const { id, name, timestamp, ...rest } = metadata;
|
|
5443
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
5444
|
+
"div",
|
|
5445
|
+
{
|
|
5446
|
+
id: `${HISTORY_ELEMENT_PREFIX}${index + 1}`,
|
|
5447
|
+
key: index,
|
|
5448
|
+
style: {
|
|
5449
|
+
padding: "0px 12px 1px",
|
|
5450
|
+
borderBottom: `1px solid ${solidBorderColor}`,
|
|
5451
|
+
background: index + 1 === historySnapshot.historyIndex ? "rgb(59 130 246 / 15%)" : void 0
|
|
5452
|
+
}
|
|
5453
|
+
},
|
|
5454
|
+
typeof name === "string" && /* @__PURE__ */ import_react10.default.createElement(
|
|
5455
|
+
"pre",
|
|
5456
|
+
{
|
|
5457
|
+
style: {
|
|
5458
|
+
fontSize: "11px",
|
|
5459
|
+
display: "flex",
|
|
5460
|
+
flexWrap: "wrap",
|
|
5461
|
+
margin: 0
|
|
5462
|
+
}
|
|
5463
|
+
},
|
|
5464
|
+
entry.metadata.name,
|
|
5465
|
+
Object.keys(rest).length > 0 && /* @__PURE__ */ import_react10.default.createElement(import_react_inspector5.ObjectInspector, { data: rest, theme })
|
|
5466
|
+
),
|
|
5467
|
+
entry.redoPatches?.map((patch, j) => /* @__PURE__ */ import_react10.default.createElement(
|
|
5468
|
+
"pre",
|
|
5469
|
+
{
|
|
5470
|
+
key: j,
|
|
5471
|
+
style: {
|
|
5472
|
+
fontSize: "11px",
|
|
5473
|
+
display: "flex",
|
|
5474
|
+
flexWrap: "wrap",
|
|
5475
|
+
margin: 0
|
|
5476
|
+
}
|
|
5477
|
+
},
|
|
5478
|
+
patch.op === "add" && /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)), " = ", /* @__PURE__ */ import_react10.default.createElement(import_react_inspector5.ObjectInspector, { data: patch.value, theme })),
|
|
5479
|
+
patch.op === "replace" && /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)), " = ", /* @__PURE__ */ import_react10.default.createElement(import_react_inspector5.ObjectInspector, { data: patch.value, theme })),
|
|
5480
|
+
patch.op === "remove" && /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement("span", { style: { color: theme.OBJECT_VALUE_STRING_COLOR } }, "delete", " "), /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path))),
|
|
5481
|
+
patch.op === "move" && /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.from)), " -> ", /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)))
|
|
5482
|
+
))
|
|
5483
|
+
);
|
|
5484
|
+
}))
|
|
5485
|
+
);
|
|
5486
|
+
}
|
|
5487
|
+
|
|
5488
|
+
// src/inspector/serialization.ts
|
|
5489
|
+
var import_state_manager = require("@noya-app/state-manager");
|
|
5490
|
+
|
|
5491
|
+
// src/inspector/zip/crc32.ts
|
|
5492
|
+
var CRC_TABLE = (() => {
|
|
5493
|
+
const t = new Uint32Array(256);
|
|
5494
|
+
for (let i = 0; i < 256; i++) {
|
|
5495
|
+
let c = i;
|
|
5496
|
+
for (let k = 0; k < 8; k++) c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
|
|
5497
|
+
t[i] = c >>> 0;
|
|
5498
|
+
}
|
|
5499
|
+
return t;
|
|
5500
|
+
})();
|
|
5501
|
+
function crc32(u8) {
|
|
5502
|
+
let c = 4294967295;
|
|
5503
|
+
for (let i = 0; i < u8.length; i++)
|
|
5504
|
+
c = CRC_TABLE[(c ^ u8[i]) & 255] ^ c >>> 8;
|
|
5505
|
+
return (c ^ 4294967295) >>> 0;
|
|
5506
|
+
}
|
|
5507
|
+
|
|
5508
|
+
// src/inspector/zip/struct.ts
|
|
5509
|
+
var defineSchema = (s) => s;
|
|
5510
|
+
var defineSchemas = (m) => m;
|
|
5511
|
+
function sizeofFieldSpec(f, ctx) {
|
|
5512
|
+
if (f.type === "bytes")
|
|
5513
|
+
return typeof f.length === "function" ? f.length(ctx) : f.length;
|
|
5514
|
+
return f.type === "u8" ? 1 : f.type === "u16" ? 2 : 4;
|
|
5515
|
+
}
|
|
5516
|
+
function writeStruct(schema, values) {
|
|
5517
|
+
let total = 0;
|
|
5518
|
+
const ctx = { ...values };
|
|
5519
|
+
for (const f of schema) total += sizeofFieldSpec(f, ctx);
|
|
5520
|
+
const out = new Uint8Array(total);
|
|
5521
|
+
const view = new DataView(out.buffer);
|
|
5522
|
+
let o = 0;
|
|
5523
|
+
const vals = values;
|
|
5524
|
+
for (const f of schema) {
|
|
5525
|
+
if (f.type === "bytes") {
|
|
5526
|
+
const b = vals[f.name];
|
|
5527
|
+
out.set(b, o);
|
|
5528
|
+
o += b.length;
|
|
5529
|
+
continue;
|
|
5530
|
+
}
|
|
5531
|
+
const n = Number(vals[f.name]) >>> 0;
|
|
5532
|
+
if (f.type === "u8") {
|
|
5533
|
+
view.setUint8(o, n);
|
|
5534
|
+
o += 1;
|
|
5535
|
+
} else if (f.type === "u16") {
|
|
5536
|
+
view.setUint16(o, n, true);
|
|
5537
|
+
o += 2;
|
|
5538
|
+
} else {
|
|
5539
|
+
view.setUint32(o, n, true);
|
|
5540
|
+
o += 4;
|
|
5541
|
+
}
|
|
5542
|
+
}
|
|
5543
|
+
return out;
|
|
5544
|
+
}
|
|
5545
|
+
function readStruct(view, offset, schema) {
|
|
5546
|
+
const ctx = {};
|
|
5547
|
+
let o = offset;
|
|
5548
|
+
for (const f of schema) {
|
|
5549
|
+
if (f.type === "bytes") {
|
|
5550
|
+
const len = typeof f.length === "function" ? f.length(ctx) : f.length;
|
|
5551
|
+
const u8 = new Uint8Array(view.buffer, view.byteOffset + o, len);
|
|
5552
|
+
ctx[f.name] = new Uint8Array(u8);
|
|
5553
|
+
o += len;
|
|
5554
|
+
} else if (f.type === "u8") {
|
|
5555
|
+
ctx[f.name] = view.getUint8(o);
|
|
5556
|
+
o += 1;
|
|
5557
|
+
} else if (f.type === "u16") {
|
|
5558
|
+
ctx[f.name] = view.getUint16(o, true);
|
|
5559
|
+
o += 2;
|
|
5560
|
+
} else {
|
|
5561
|
+
ctx[f.name] = view.getUint32(o, true);
|
|
5562
|
+
o += 4;
|
|
5563
|
+
}
|
|
5564
|
+
}
|
|
5565
|
+
return { value: ctx, offset: o };
|
|
5566
|
+
}
|
|
5567
|
+
|
|
5568
|
+
// src/inspector/zip/TinyZip.ts
|
|
5569
|
+
var te = new TextEncoder();
|
|
5570
|
+
function utf8(s) {
|
|
5571
|
+
return te.encode(s);
|
|
5572
|
+
}
|
|
5573
|
+
function dosDateTime(d = /* @__PURE__ */ new Date()) {
|
|
5574
|
+
const time = d.getHours() << 11 | d.getMinutes() << 5 | Math.floor(d.getSeconds() / 2);
|
|
5575
|
+
const date = d.getFullYear() - 1980 << 9 | d.getMonth() + 1 << 5 | d.getDate();
|
|
5576
|
+
return { time, date };
|
|
5577
|
+
}
|
|
5578
|
+
var SIG = {
|
|
5579
|
+
LocalFile: 67324752,
|
|
5580
|
+
CentralFile: 33639248,
|
|
5581
|
+
EOCD: 101010256
|
|
5582
|
+
};
|
|
5583
|
+
var SCHEMA = defineSchemas({
|
|
5584
|
+
LocalFile: defineSchema([
|
|
5585
|
+
{ name: "signature", type: "u32" },
|
|
5586
|
+
{ name: "versionNeeded", type: "u16" },
|
|
5587
|
+
{ name: "flags", type: "u16" },
|
|
5588
|
+
{ name: "method", type: "u16" },
|
|
5589
|
+
{ name: "time", type: "u16" },
|
|
5590
|
+
{ name: "date", type: "u16" },
|
|
5591
|
+
{ name: "crc32", type: "u32" },
|
|
5592
|
+
{ name: "compSize", type: "u32" },
|
|
5593
|
+
{ name: "uncompSize", type: "u32" },
|
|
5594
|
+
{ name: "nameLen", type: "u16" },
|
|
5595
|
+
{ name: "extraLen", type: "u16" },
|
|
5596
|
+
{ name: "name", type: "bytes", length: (c) => c.nameLen },
|
|
5597
|
+
{ name: "extra", type: "bytes", length: (c) => c.extraLen }
|
|
5598
|
+
]),
|
|
5599
|
+
CentralFile: defineSchema([
|
|
5600
|
+
{ name: "signature", type: "u32" },
|
|
5601
|
+
{ name: "versionMadeBy", type: "u16" },
|
|
5602
|
+
{ name: "versionNeeded", type: "u16" },
|
|
5603
|
+
{ name: "flags", type: "u16" },
|
|
5604
|
+
{ name: "method", type: "u16" },
|
|
5605
|
+
{ name: "time", type: "u16" },
|
|
5606
|
+
{ name: "date", type: "u16" },
|
|
5607
|
+
{ name: "crc32", type: "u32" },
|
|
5608
|
+
{ name: "compSize", type: "u32" },
|
|
5609
|
+
{ name: "uncompSize", type: "u32" },
|
|
5610
|
+
{ name: "nameLen", type: "u16" },
|
|
5611
|
+
{ name: "extraLen", type: "u16" },
|
|
5612
|
+
{ name: "commentLen", type: "u16" },
|
|
5613
|
+
{ name: "diskStart", type: "u16" },
|
|
5614
|
+
{ name: "intAttrs", type: "u16" },
|
|
5615
|
+
{ name: "extAttrs", type: "u32" },
|
|
5616
|
+
{ name: "localHeaderOffset", type: "u32" },
|
|
5617
|
+
{ name: "name", type: "bytes", length: (c) => c.nameLen },
|
|
5618
|
+
{ name: "extra", type: "bytes", length: (c) => c.extraLen },
|
|
5619
|
+
{ name: "comment", type: "bytes", length: (c) => c.commentLen }
|
|
5620
|
+
]),
|
|
5621
|
+
EOCD: defineSchema([
|
|
5622
|
+
{ name: "signature", type: "u32" },
|
|
5623
|
+
{ name: "diskNum", type: "u16" },
|
|
5624
|
+
{ name: "cdStartDisk", type: "u16" },
|
|
5625
|
+
{ name: "cdRecordsOnDisk", type: "u16" },
|
|
5626
|
+
{ name: "cdRecordsTotal", type: "u16" },
|
|
5627
|
+
{ name: "cdSize", type: "u32" },
|
|
5628
|
+
{ name: "cdOffset", type: "u32" },
|
|
5629
|
+
{ name: "commentLen", type: "u16" },
|
|
5630
|
+
{ name: "comment", type: "bytes", length: (c) => c.commentLen }
|
|
5631
|
+
])
|
|
5632
|
+
});
|
|
5633
|
+
function ensureSig(v, expect, where) {
|
|
5634
|
+
if (v !== expect)
|
|
5635
|
+
throw new Error(`Invalid signature for ${where}: 0x${v.toString(16)}`);
|
|
5636
|
+
}
|
|
5637
|
+
var TinyZip = class _TinyZip {
|
|
5638
|
+
_chunks = [];
|
|
5639
|
+
_offset = 0;
|
|
5640
|
+
_files = [];
|
|
5641
|
+
_rootPrefix = "";
|
|
5642
|
+
// e.g. "my-archive/" or ""
|
|
5643
|
+
_rootDirAdded = false;
|
|
5644
|
+
constructor(opts = {}) {
|
|
5645
|
+
if (opts.root) {
|
|
5646
|
+
const r = opts.root.replace(/^\/+|\/+$/g, "");
|
|
5647
|
+
if (r) this._rootPrefix = r + "/";
|
|
5648
|
+
}
|
|
5649
|
+
}
|
|
5650
|
+
_push(...arrs) {
|
|
5651
|
+
for (const a of arrs) {
|
|
5652
|
+
this._chunks.push(a);
|
|
5653
|
+
this._offset += a.length;
|
|
5654
|
+
}
|
|
5655
|
+
}
|
|
5656
|
+
_withRoot(name) {
|
|
5657
|
+
return this._rootPrefix && !name.startsWith(this._rootPrefix) ? this._rootPrefix + name.replace(/^\/+/, "") : name;
|
|
5658
|
+
}
|
|
5659
|
+
_ensureRootDir(date = /* @__PURE__ */ new Date()) {
|
|
5660
|
+
if (!this._rootPrefix || this._rootDirAdded) return;
|
|
5661
|
+
this._rootDirAdded = true;
|
|
5662
|
+
const dirName = this._rootPrefix;
|
|
5663
|
+
const nameBytes = utf8(dirName);
|
|
5664
|
+
const { time, date: dosDate } = dosDateTime(date);
|
|
5665
|
+
const localHeader = writeStruct(SCHEMA.LocalFile, {
|
|
5666
|
+
signature: SIG.LocalFile,
|
|
5667
|
+
versionNeeded: 20,
|
|
5668
|
+
flags: 2048,
|
|
5669
|
+
method: 0,
|
|
5670
|
+
time,
|
|
5671
|
+
date: dosDate,
|
|
5672
|
+
crc32: 0,
|
|
5673
|
+
compSize: 0,
|
|
5674
|
+
uncompSize: 0,
|
|
5675
|
+
nameLen: nameBytes.length,
|
|
5676
|
+
extraLen: 0,
|
|
5677
|
+
name: nameBytes,
|
|
5678
|
+
extra: new Uint8Array(0)
|
|
5679
|
+
});
|
|
5680
|
+
const localHeaderOffset = this._offset;
|
|
5681
|
+
this._push(localHeader);
|
|
5682
|
+
this._files.push({
|
|
5683
|
+
nameBytes,
|
|
5684
|
+
crc: 0,
|
|
5685
|
+
compSize: 0,
|
|
5686
|
+
uncompSize: 0,
|
|
5687
|
+
method: 0,
|
|
5688
|
+
time,
|
|
5689
|
+
dosDate,
|
|
5690
|
+
localHeaderOffset,
|
|
5691
|
+
externalAttrs: 16
|
|
5692
|
+
});
|
|
5693
|
+
}
|
|
5694
|
+
/** Add a file to the zip. "name" uses forward slashes for paths (e.g., "dir/file.txt"). */
|
|
5695
|
+
addFile(name, data, opts = {}) {
|
|
5696
|
+
const { date = /* @__PURE__ */ new Date() } = opts;
|
|
5697
|
+
this._ensureRootDir(date);
|
|
5698
|
+
const u8 = toU8(data);
|
|
5699
|
+
const fullName = this._withRoot(name);
|
|
5700
|
+
const nameBytes = utf8(fullName);
|
|
5701
|
+
const { time, date: dosDate } = dosDateTime(date);
|
|
5702
|
+
const crc = crc32(u8);
|
|
5703
|
+
const compSize = u8.length >>> 0;
|
|
5704
|
+
const uncompSize = u8.length >>> 0;
|
|
5705
|
+
const localHeaderOffset = this._offset;
|
|
5706
|
+
const localHeader = writeStruct(SCHEMA.LocalFile, {
|
|
5707
|
+
signature: SIG.LocalFile,
|
|
5708
|
+
versionNeeded: 20,
|
|
5709
|
+
flags: 2048,
|
|
5710
|
+
method: 0,
|
|
5711
|
+
time,
|
|
5712
|
+
date: dosDate,
|
|
5713
|
+
crc32: crc,
|
|
5714
|
+
compSize,
|
|
5715
|
+
uncompSize,
|
|
5716
|
+
nameLen: nameBytes.length,
|
|
5717
|
+
extraLen: 0,
|
|
5718
|
+
name: nameBytes,
|
|
5719
|
+
extra: new Uint8Array(0)
|
|
5720
|
+
});
|
|
5721
|
+
this._push(localHeader, u8);
|
|
5722
|
+
this._files.push({
|
|
5723
|
+
nameBytes,
|
|
5724
|
+
crc,
|
|
5725
|
+
compSize,
|
|
5726
|
+
uncompSize,
|
|
5727
|
+
method: 0,
|
|
5728
|
+
time,
|
|
5729
|
+
dosDate,
|
|
5730
|
+
localHeaderOffset,
|
|
5731
|
+
externalAttrs: 0
|
|
5732
|
+
});
|
|
5733
|
+
}
|
|
5734
|
+
// Create an explicit directory entry (name should end with "/").
|
|
5735
|
+
addDirectory(name, opts = {}) {
|
|
5736
|
+
const { date = /* @__PURE__ */ new Date() } = opts;
|
|
5737
|
+
this._ensureRootDir(date);
|
|
5738
|
+
const dirNameRaw = name.endsWith("/") ? name : name + "/";
|
|
5739
|
+
const fullName = this._withRoot(dirNameRaw);
|
|
5740
|
+
const nameBytes = utf8(fullName);
|
|
5741
|
+
const { time, date: dosDate } = dosDateTime(date);
|
|
5742
|
+
const localHeader = writeStruct(SCHEMA.LocalFile, {
|
|
5743
|
+
signature: SIG.LocalFile,
|
|
5744
|
+
versionNeeded: 20,
|
|
5745
|
+
flags: 2048,
|
|
5746
|
+
method: 0,
|
|
5747
|
+
time,
|
|
5748
|
+
date: dosDate,
|
|
5749
|
+
crc32: 0,
|
|
5750
|
+
compSize: 0,
|
|
5751
|
+
uncompSize: 0,
|
|
5752
|
+
nameLen: nameBytes.length,
|
|
5753
|
+
extraLen: 0,
|
|
5754
|
+
name: nameBytes,
|
|
5755
|
+
extra: new Uint8Array(0)
|
|
5756
|
+
});
|
|
5757
|
+
const localHeaderOffset = this._offset;
|
|
5758
|
+
this._push(localHeader);
|
|
5759
|
+
this._files.push({
|
|
5760
|
+
nameBytes,
|
|
5761
|
+
crc: 0,
|
|
5762
|
+
compSize: 0,
|
|
5763
|
+
uncompSize: 0,
|
|
5764
|
+
method: 0,
|
|
5765
|
+
time,
|
|
5766
|
+
dosDate,
|
|
5767
|
+
localHeaderOffset,
|
|
5768
|
+
externalAttrs: 16
|
|
5769
|
+
});
|
|
5770
|
+
}
|
|
5771
|
+
finish() {
|
|
5772
|
+
const cdStart = this._offset;
|
|
5773
|
+
for (const f of this._files) {
|
|
5774
|
+
const central = writeStruct(SCHEMA.CentralFile, {
|
|
5775
|
+
signature: SIG.CentralFile,
|
|
5776
|
+
versionMadeBy: 20,
|
|
5777
|
+
versionNeeded: 20,
|
|
5778
|
+
flags: 2048,
|
|
5779
|
+
method: f.method,
|
|
5780
|
+
time: f.time,
|
|
5781
|
+
date: f.dosDate,
|
|
5782
|
+
crc32: f.crc,
|
|
5783
|
+
compSize: f.compSize,
|
|
5784
|
+
uncompSize: f.uncompSize,
|
|
5785
|
+
nameLen: f.nameBytes.length,
|
|
5786
|
+
extraLen: 0,
|
|
5787
|
+
commentLen: 0,
|
|
5788
|
+
diskStart: 0,
|
|
5789
|
+
intAttrs: 0,
|
|
5790
|
+
extAttrs: f.externalAttrs,
|
|
5791
|
+
localHeaderOffset: f.localHeaderOffset,
|
|
5792
|
+
name: f.nameBytes,
|
|
5793
|
+
extra: new Uint8Array(0),
|
|
5794
|
+
comment: new Uint8Array(0)
|
|
5795
|
+
});
|
|
5796
|
+
this._push(central);
|
|
5797
|
+
}
|
|
5798
|
+
const cdSize = this._offset - cdStart;
|
|
5799
|
+
const eocd = writeStruct(SCHEMA.EOCD, {
|
|
5800
|
+
signature: SIG.EOCD,
|
|
5801
|
+
diskNum: 0,
|
|
5802
|
+
cdStartDisk: 0,
|
|
5803
|
+
cdRecordsOnDisk: this._files.length,
|
|
5804
|
+
cdRecordsTotal: this._files.length,
|
|
5805
|
+
cdSize,
|
|
5806
|
+
cdOffset: cdStart,
|
|
5807
|
+
commentLen: 0,
|
|
5808
|
+
comment: new Uint8Array(0)
|
|
5809
|
+
});
|
|
5810
|
+
this._push(eocd);
|
|
5811
|
+
const merged = new Uint8Array(this._offset);
|
|
5812
|
+
let offset = 0;
|
|
5813
|
+
for (const chunk of this._chunks) {
|
|
5814
|
+
merged.set(chunk, offset);
|
|
5815
|
+
offset += chunk.length;
|
|
5816
|
+
}
|
|
5817
|
+
return merged;
|
|
5818
|
+
}
|
|
5819
|
+
static create(files, opts = {}) {
|
|
5820
|
+
const zip = new _TinyZip(opts);
|
|
5821
|
+
for (const [name, data] of Object.entries(files)) {
|
|
5822
|
+
if (name.endsWith("/")) zip.addDirectory(name);
|
|
5823
|
+
else zip.addFile(name, data);
|
|
5824
|
+
}
|
|
5825
|
+
return zip.finish();
|
|
5826
|
+
}
|
|
5827
|
+
static parse(input) {
|
|
5828
|
+
const u8 = toU8(input);
|
|
5829
|
+
const view = new DataView(u8.buffer, u8.byteOffset, u8.byteLength);
|
|
5830
|
+
const eocdOff = findEOCDOffset(u8);
|
|
5831
|
+
const { value: eocd } = readStruct(view, eocdOff, SCHEMA.EOCD);
|
|
5832
|
+
ensureSig(eocd.signature, SIG.EOCD, "EOCD");
|
|
5833
|
+
if (eocd.commentLen !== 0) throw new Error("Unsupported: EOCD comment");
|
|
5834
|
+
if (eocd.diskNum !== 0 || eocd.cdStartDisk !== 0)
|
|
5835
|
+
throw new Error("Unsupported: multi-disk");
|
|
5836
|
+
const entries = [];
|
|
5837
|
+
let cdPtr = eocd.cdOffset;
|
|
5838
|
+
for (let i = 0; i < eocd.cdRecordsTotal; i++) {
|
|
5839
|
+
const { value: cdf, offset: next } = readStruct(
|
|
5840
|
+
view,
|
|
5841
|
+
cdPtr,
|
|
5842
|
+
SCHEMA.CentralFile
|
|
5843
|
+
);
|
|
5844
|
+
ensureSig(cdf.signature, SIG.CentralFile, "Central Directory");
|
|
5845
|
+
const name = new TextDecoder().decode(cdf.name);
|
|
5846
|
+
const isDir = (cdf.extAttrs & 16) !== 0 || name.endsWith("/");
|
|
5847
|
+
if (cdf.extraLen !== 0 || cdf.commentLen !== 0)
|
|
5848
|
+
throw new Error("Unsupported: extra/comment in central dir");
|
|
5849
|
+
entries.push({
|
|
5850
|
+
name,
|
|
5851
|
+
isDirectory: isDir,
|
|
5852
|
+
crc32: cdf.crc32 >>> 0,
|
|
5853
|
+
size: cdf.uncompSize >>> 0,
|
|
5854
|
+
compSize: cdf.compSize >>> 0,
|
|
5855
|
+
time: cdf.time >>> 0,
|
|
5856
|
+
dosDate: cdf.date >>> 0,
|
|
5857
|
+
localHeaderOffset: cdf.localHeaderOffset >>> 0
|
|
5858
|
+
});
|
|
5859
|
+
cdPtr = next;
|
|
5860
|
+
}
|
|
5861
|
+
const results = [];
|
|
5862
|
+
for (const e of entries) {
|
|
5863
|
+
const { value: lfh, offset: afterHeader } = readStruct(
|
|
5864
|
+
view,
|
|
5865
|
+
e.localHeaderOffset,
|
|
5866
|
+
SCHEMA.LocalFile
|
|
5867
|
+
);
|
|
5868
|
+
ensureSig(lfh.signature, SIG.LocalFile, "Local File");
|
|
5869
|
+
if (lfh.flags !== 2048)
|
|
5870
|
+
throw new Error("Unsupported: flags (expect UTF-8 only)");
|
|
5871
|
+
if (lfh.method !== 0)
|
|
5872
|
+
throw new Error("Unsupported: compression (expect store only)");
|
|
5873
|
+
if (lfh.extraLen !== 0)
|
|
5874
|
+
throw new Error("Unsupported: extra fields in local header");
|
|
5875
|
+
const dataStart = afterHeader;
|
|
5876
|
+
const dataEnd = dataStart + lfh.compSize;
|
|
5877
|
+
const data = e.isDirectory ? new Uint8Array(0) : new Uint8Array(u8.subarray(dataStart, dataEnd));
|
|
5878
|
+
results.push({ ...e, data });
|
|
5879
|
+
}
|
|
5880
|
+
return results;
|
|
5881
|
+
}
|
|
5882
|
+
// Quick utility: return a map of file data (directories omitted)
|
|
5883
|
+
static extract(input) {
|
|
5884
|
+
const entries = this.parse(input);
|
|
5885
|
+
const out = {};
|
|
5886
|
+
for (const e of entries) if (!e.isDirectory) out[e.name] = e.data;
|
|
5887
|
+
return out;
|
|
5888
|
+
}
|
|
5889
|
+
};
|
|
5890
|
+
function toU8(input) {
|
|
5891
|
+
if (typeof input === "string") return utf8(input);
|
|
5892
|
+
if (input instanceof Uint8Array) return input;
|
|
5893
|
+
return new Uint8Array(input);
|
|
5894
|
+
}
|
|
5895
|
+
function findEOCDOffset(u8) {
|
|
5896
|
+
const view = new DataView(u8.buffer, u8.byteOffset, u8.byteLength);
|
|
5897
|
+
const minSize = 22;
|
|
5898
|
+
if (u8.length >= minSize) {
|
|
5899
|
+
const at = u8.length - minSize;
|
|
5900
|
+
if (view.getUint32(at, true) === SIG.EOCD) return at;
|
|
5901
|
+
}
|
|
5902
|
+
const start = Math.max(0, u8.length - 1024);
|
|
5903
|
+
for (let i = u8.length - 4; i >= start; i--) {
|
|
5904
|
+
if (view.getUint32(i, true) === SIG.EOCD) return i;
|
|
5905
|
+
}
|
|
5906
|
+
throw new Error("EOCD not found");
|
|
5907
|
+
}
|
|
5908
|
+
|
|
5909
|
+
// src/inspector/serialization.ts
|
|
5910
|
+
async function fetchAssetMap(assets) {
|
|
5911
|
+
const res = await Promise.all(
|
|
5912
|
+
assets.map(async (asset) => {
|
|
5913
|
+
const url = asset.url;
|
|
5914
|
+
const response = await fetch(url);
|
|
5915
|
+
const data = await response.arrayBuffer();
|
|
5916
|
+
return [asset.id, data];
|
|
5917
|
+
})
|
|
5918
|
+
);
|
|
5919
|
+
return Object.fromEntries(res);
|
|
5920
|
+
}
|
|
5921
|
+
async function exportAll(noyaManager) {
|
|
5922
|
+
const { multiplayerStateManager, assetManager } = noyaManager;
|
|
5923
|
+
const assetMap = await fetchAssetMap(assetManager.assets$.get());
|
|
5924
|
+
return encodeAll({
|
|
5925
|
+
state: multiplayerStateManager.optimisticState$.get(),
|
|
5926
|
+
schema: multiplayerStateManager.schema,
|
|
5927
|
+
assets: assetManager.assets$.get(),
|
|
5928
|
+
assetMap
|
|
5929
|
+
});
|
|
5930
|
+
}
|
|
5931
|
+
function encodeAll({
|
|
5932
|
+
state,
|
|
5933
|
+
schema,
|
|
5934
|
+
assets,
|
|
5935
|
+
assetMap
|
|
5936
|
+
}) {
|
|
5937
|
+
const zip = new TinyZip();
|
|
5938
|
+
zip.addFile("state.json", JSON.stringify(state, null, 2));
|
|
5939
|
+
if (schema) {
|
|
5940
|
+
const encodedSchema = encodeSchema(schema);
|
|
5941
|
+
zip.addFile("schema.json", JSON.stringify(encodedSchema, null, 2));
|
|
5942
|
+
}
|
|
5943
|
+
if (assets.length) {
|
|
5944
|
+
zip.addFile("assets.json", JSON.stringify(assets, null, 2));
|
|
5945
|
+
}
|
|
5946
|
+
for (const [id, data] of Object.entries(assetMap)) {
|
|
5947
|
+
zip.addFile(`assets/${id}`, data);
|
|
5948
|
+
}
|
|
5949
|
+
return zip.finish();
|
|
5950
|
+
}
|
|
5951
|
+
async function importAll(buffer, noyaManager, {
|
|
5952
|
+
shouldAllowSchemaChange
|
|
5953
|
+
} = {}) {
|
|
5954
|
+
let { state, schema, assets, assetMap } = await decodeAll(buffer);
|
|
5955
|
+
if (shouldAllowSchemaChange && noyaManager.options.schema && schema) {
|
|
5956
|
+
const oldSchemaHash = (0, import_state_manager.createHash)(noyaManager.options.schema);
|
|
5957
|
+
const newSchemaHash = (0, import_state_manager.createHash)(schema);
|
|
5958
|
+
if (oldSchemaHash !== newSchemaHash) {
|
|
5959
|
+
const shouldAllow = shouldAllowSchemaChange({
|
|
5960
|
+
oldSchema: noyaManager.options.schema,
|
|
5961
|
+
newSchema: schema
|
|
5962
|
+
});
|
|
5963
|
+
if (!shouldAllow) {
|
|
5964
|
+
throw new Error("Schema change not allowed");
|
|
5965
|
+
}
|
|
5966
|
+
}
|
|
5967
|
+
}
|
|
5968
|
+
if (assets.length) {
|
|
5969
|
+
await Promise.all(
|
|
5970
|
+
noyaManager.assetManager.assets$.get().map((asset) => noyaManager.assetManager.delete(asset.id))
|
|
5971
|
+
);
|
|
5972
|
+
const idPairs = await Promise.all(
|
|
5973
|
+
assets.map(async (asset) => {
|
|
5974
|
+
const newAsset = await noyaManager.assetManager.create({
|
|
5975
|
+
data: assetMap[asset.id],
|
|
5976
|
+
contentType: asset.contentType
|
|
5977
|
+
});
|
|
5978
|
+
return [asset.id, newAsset.id];
|
|
5979
|
+
})
|
|
5980
|
+
);
|
|
5981
|
+
const replacementMap = Object.fromEntries(idPairs);
|
|
5982
|
+
state = replaceDeep(state, replacementMap);
|
|
5983
|
+
}
|
|
5984
|
+
noyaManager.initialState = state;
|
|
5985
|
+
noyaManager.forceInit();
|
|
5986
|
+
}
|
|
5987
|
+
function decodeAll(buffer) {
|
|
5988
|
+
const zip = TinyZip.extract(buffer);
|
|
5989
|
+
const stateFile = zip["state.json"];
|
|
5990
|
+
const schemaFile = zip["schema.json"];
|
|
5991
|
+
const assetsFile = zip["assets.json"];
|
|
5992
|
+
if (!stateFile) {
|
|
5993
|
+
throw new Error("State file not found");
|
|
5994
|
+
}
|
|
5995
|
+
const state = JSON.parse(new TextDecoder().decode(stateFile));
|
|
5996
|
+
let schema;
|
|
5997
|
+
if (schemaFile) {
|
|
5998
|
+
const encodedSchema = JSON.parse(new TextDecoder().decode(schemaFile));
|
|
5999
|
+
schema = decodeSchema(encodedSchema);
|
|
6000
|
+
}
|
|
6001
|
+
let assets = [];
|
|
6002
|
+
let assetMap = {};
|
|
6003
|
+
if (assetsFile) {
|
|
6004
|
+
assets = JSON.parse(new TextDecoder().decode(assetsFile));
|
|
6005
|
+
for (const asset of assets) {
|
|
6006
|
+
const data = zip[`assets/${asset.id}`];
|
|
6007
|
+
if (!data) {
|
|
6008
|
+
throw new Error(`Asset ${asset.id} not found`);
|
|
6009
|
+
}
|
|
6010
|
+
assetMap[asset.id] = data;
|
|
6011
|
+
}
|
|
6012
|
+
}
|
|
6013
|
+
return { state, schema, assets, assetMap };
|
|
6014
|
+
}
|
|
6015
|
+
function replaceDeep(obj, replacementMap) {
|
|
6016
|
+
switch (typeof obj) {
|
|
6017
|
+
case "object":
|
|
6018
|
+
if (obj === null) {
|
|
6019
|
+
return obj;
|
|
6020
|
+
}
|
|
6021
|
+
if (Array.isArray(obj)) {
|
|
6022
|
+
return obj.map((item) => replaceDeep(item, replacementMap));
|
|
6023
|
+
}
|
|
6024
|
+
return Object.fromEntries(
|
|
6025
|
+
Object.entries(obj).map(([key, value]) => [
|
|
6026
|
+
key,
|
|
6027
|
+
replaceDeep(value, replacementMap)
|
|
6028
|
+
])
|
|
6029
|
+
);
|
|
6030
|
+
case "string":
|
|
6031
|
+
return replacementMap[obj] ?? obj;
|
|
6032
|
+
default:
|
|
6033
|
+
return obj;
|
|
6034
|
+
}
|
|
6035
|
+
}
|
|
6036
|
+
|
|
6037
|
+
// src/inspector/StateInspectorTitleLabel.tsx
|
|
6038
|
+
var import_react11 = __toESM(require("react"));
|
|
6039
|
+
function StateInspectorTitleLabel({
|
|
6040
|
+
children
|
|
6041
|
+
}) {
|
|
6042
|
+
return /* @__PURE__ */ import_react11.default.createElement("span", { style: { display: "flex", alignItems: "center", gap: "4px" } }, children);
|
|
6043
|
+
}
|
|
6044
|
+
|
|
6045
|
+
// src/inspector/StateInspectorToggleButton.tsx
|
|
6046
|
+
var import_react12 = __toESM(require("react"));
|
|
6047
|
+
function StateInspectorToggleButton({
|
|
6048
|
+
showInspector,
|
|
6049
|
+
setShowInspector,
|
|
6050
|
+
theme,
|
|
6051
|
+
anchor
|
|
6052
|
+
}) {
|
|
6053
|
+
const isRightAnchor = anchor === "right";
|
|
6054
|
+
const rightIcon = /* @__PURE__ */ import_react12.default.createElement(
|
|
4122
6055
|
"svg",
|
|
4123
6056
|
{
|
|
4124
6057
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -4128,7 +6061,7 @@ function ToggleButton({
|
|
|
4128
6061
|
stroke: "currentColor",
|
|
4129
6062
|
className: "size-6"
|
|
4130
6063
|
},
|
|
4131
|
-
/* @__PURE__ */
|
|
6064
|
+
/* @__PURE__ */ import_react12.default.createElement(
|
|
4132
6065
|
"path",
|
|
4133
6066
|
{
|
|
4134
6067
|
strokeLinecap: "round",
|
|
@@ -4137,7 +6070,7 @@ function ToggleButton({
|
|
|
4137
6070
|
}
|
|
4138
6071
|
)
|
|
4139
6072
|
);
|
|
4140
|
-
const leftIcon = /* @__PURE__ */
|
|
6073
|
+
const leftIcon = /* @__PURE__ */ import_react12.default.createElement(
|
|
4141
6074
|
"svg",
|
|
4142
6075
|
{
|
|
4143
6076
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -4147,7 +6080,7 @@ function ToggleButton({
|
|
|
4147
6080
|
stroke: "currentColor",
|
|
4148
6081
|
className: "size-6"
|
|
4149
6082
|
},
|
|
4150
|
-
/* @__PURE__ */
|
|
6083
|
+
/* @__PURE__ */ import_react12.default.createElement(
|
|
4151
6084
|
"path",
|
|
4152
6085
|
{
|
|
4153
6086
|
strokeLinecap: "round",
|
|
@@ -4156,7 +6089,7 @@ function ToggleButton({
|
|
|
4156
6089
|
}
|
|
4157
6090
|
)
|
|
4158
6091
|
);
|
|
4159
|
-
return /* @__PURE__ */
|
|
6092
|
+
return /* @__PURE__ */ import_react12.default.createElement(
|
|
4160
6093
|
"span",
|
|
4161
6094
|
{
|
|
4162
6095
|
role: "button",
|
|
@@ -4177,103 +6110,34 @@ function ToggleButton({
|
|
|
4177
6110
|
setShowInspector(!showInspector);
|
|
4178
6111
|
}
|
|
4179
6112
|
},
|
|
4180
|
-
showInspector ? "Hide Inspector" : /* @__PURE__ */
|
|
4181
|
-
);
|
|
4182
|
-
}
|
|
4183
|
-
function DisclosureSection({
|
|
4184
|
-
open,
|
|
4185
|
-
setOpen,
|
|
4186
|
-
title,
|
|
4187
|
-
right,
|
|
4188
|
-
children,
|
|
4189
|
-
colorScheme,
|
|
4190
|
-
isFirst,
|
|
4191
|
-
style
|
|
4192
|
-
}) {
|
|
4193
|
-
const theme = colorScheme === "light" ? lightTheme : darkTheme;
|
|
4194
|
-
const borderColor = colorScheme === "light" ? "rgba(0,0,0,0.1)" : "rgba(255,255,255,0.1)";
|
|
4195
|
-
return /* @__PURE__ */ import_react3.default.createElement(
|
|
4196
|
-
"div",
|
|
4197
|
-
{
|
|
4198
|
-
style: {
|
|
4199
|
-
flex: open ? "1 1 0" : "0",
|
|
4200
|
-
display: "flex",
|
|
4201
|
-
flexDirection: "column",
|
|
4202
|
-
...style
|
|
4203
|
-
}
|
|
4204
|
-
},
|
|
4205
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
4206
|
-
"div",
|
|
4207
|
-
{
|
|
4208
|
-
onClick: () => setOpen?.(!open),
|
|
4209
|
-
style: {
|
|
4210
|
-
cursor: "default",
|
|
4211
|
-
fontSize: "12px",
|
|
4212
|
-
padding: "4px 10px",
|
|
4213
|
-
display: "flex",
|
|
4214
|
-
alignItems: "center",
|
|
4215
|
-
...!isFirst && { borderTop: `1px solid ${borderColor}` },
|
|
4216
|
-
...open && { borderBottom: `1px solid ${borderColor}` }
|
|
4217
|
-
}
|
|
4218
|
-
},
|
|
4219
|
-
setOpen && /* @__PURE__ */ import_react3.default.createElement(
|
|
4220
|
-
Arrow,
|
|
4221
|
-
{
|
|
4222
|
-
expanded: open,
|
|
4223
|
-
style: {
|
|
4224
|
-
fontSize: theme.ARROW_FONT_SIZE,
|
|
4225
|
-
marginRight: theme.ARROW_MARGIN_RIGHT + 1,
|
|
4226
|
-
color: theme.ARROW_COLOR
|
|
4227
|
-
}
|
|
4228
|
-
}
|
|
4229
|
-
),
|
|
4230
|
-
/* @__PURE__ */ import_react3.default.createElement("span", { style: { flex: "1 1 0", userSelect: "none" } }, title),
|
|
4231
|
-
right
|
|
4232
|
-
),
|
|
4233
|
-
open && children
|
|
6113
|
+
showInspector ? "Hide Inspector" : /* @__PURE__ */ import_react12.default.createElement("span", { style: { width: "12px", height: "12px" } }, isRightAnchor ? rightIcon : leftIcon)
|
|
4234
6114
|
);
|
|
4235
6115
|
}
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
|
|
4240
|
-
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
|
|
4244
|
-
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
|
|
4248
|
-
|
|
4249
|
-
fontSize: "12px",
|
|
4250
|
-
fontFamily: "Menlo, monospace",
|
|
4251
|
-
padding: "2px 12px 1px",
|
|
4252
|
-
display: "flex",
|
|
4253
|
-
alignItems: "center",
|
|
4254
|
-
background: variant === "up" ? "rgba(0,255,0,0.1)" : variant === "down" ? "transparent" : selected ? "rgb(59 130 246 / 15%)" : void 0,
|
|
4255
|
-
// background:
|
|
4256
|
-
// colorScheme === "light"
|
|
4257
|
-
// ? "rgba(0,0,0,0.05)"
|
|
4258
|
-
// : "rgba(255,255,255,0.05)",
|
|
4259
|
-
...style
|
|
6116
|
+
|
|
6117
|
+
// src/inspector/useLocalStorageState.tsx
|
|
6118
|
+
var import_react13 = __toESM(require("react"));
|
|
6119
|
+
var localStorage = typeof window !== "undefined" ? window.localStorage : null;
|
|
6120
|
+
function useLocalStorageState(key, defaultValue) {
|
|
6121
|
+
const [state, setState] = import_react13.default.useState(() => {
|
|
6122
|
+
const value = localStorage?.getItem(key);
|
|
6123
|
+
let result = defaultValue;
|
|
6124
|
+
if (value) {
|
|
6125
|
+
try {
|
|
6126
|
+
result = JSON.parse(value);
|
|
6127
|
+
} catch (error) {
|
|
6128
|
+
console.error("Error parsing localStorage value", error);
|
|
4260
6129
|
}
|
|
4261
|
-
}
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
|
|
4269
|
-
display: "inline-block"
|
|
4270
|
-
}
|
|
4271
|
-
},
|
|
4272
|
-
children
|
|
4273
|
-
)
|
|
4274
|
-
);
|
|
6130
|
+
}
|
|
6131
|
+
return result;
|
|
6132
|
+
});
|
|
6133
|
+
const setLocalStorageState = (value) => {
|
|
6134
|
+
localStorage?.setItem(key, JSON.stringify(value));
|
|
6135
|
+
setState(value);
|
|
6136
|
+
};
|
|
6137
|
+
return [state, setLocalStorageState];
|
|
4275
6138
|
}
|
|
4276
|
-
|
|
6139
|
+
|
|
6140
|
+
// src/inspector/StateInspector.tsx
|
|
4277
6141
|
var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector2({
|
|
4278
6142
|
noyaManager,
|
|
4279
6143
|
colorScheme = "light",
|
|
@@ -4289,17 +6153,19 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4289
6153
|
ephemeralUserDataManager,
|
|
4290
6154
|
connectionEventManager,
|
|
4291
6155
|
taskManager,
|
|
4292
|
-
ioManager
|
|
6156
|
+
ioManager,
|
|
6157
|
+
resourceManager,
|
|
6158
|
+
activityEventsManager
|
|
4293
6159
|
} = noyaManager;
|
|
4294
|
-
const [didMount, setDidMount] =
|
|
6160
|
+
const [didMount, setDidMount] = import_react14.default.useState(false);
|
|
4295
6161
|
const tasks = useObservable(taskManager.tasks$);
|
|
4296
6162
|
const inputs = useObservable(ioManager.inputs$);
|
|
4297
6163
|
const outputTransforms = useObservable(ioManager.outputTransforms$);
|
|
4298
|
-
(0,
|
|
6164
|
+
(0, import_react14.useLayoutEffect)(() => {
|
|
4299
6165
|
setDidMount(true);
|
|
4300
6166
|
}, []);
|
|
4301
|
-
const eventsContainerRef =
|
|
4302
|
-
const
|
|
6167
|
+
const eventsContainerRef = import_react14.default.useRef(null);
|
|
6168
|
+
const activityEventsContainerRef = import_react14.default.useRef(null);
|
|
4303
6169
|
const [showInspector, setShowInspector] = useLocalStorageState(
|
|
4304
6170
|
"noya-multiplayer-react-show-inspector",
|
|
4305
6171
|
true
|
|
@@ -4332,6 +6198,10 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4332
6198
|
"noya-multiplayer-react-show-assets",
|
|
4333
6199
|
false
|
|
4334
6200
|
);
|
|
6201
|
+
const [showResources, setShowResources] = useLocalStorageState(
|
|
6202
|
+
"noya-multiplayer-react-show-resources",
|
|
6203
|
+
false
|
|
6204
|
+
);
|
|
4335
6205
|
const [showSecrets, setShowSecrets] = useLocalStorageState(
|
|
4336
6206
|
"noya-multiplayer-react-show-secrets",
|
|
4337
6207
|
false
|
|
@@ -4344,8 +6214,12 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4344
6214
|
"noya-multiplayer-react-show-output-transforms",
|
|
4345
6215
|
false
|
|
4346
6216
|
);
|
|
6217
|
+
const [showActivityEvents, setShowActivityEvents] = useLocalStorageState(
|
|
6218
|
+
"noya-multiplayer-react-show-activity-events",
|
|
6219
|
+
false
|
|
6220
|
+
);
|
|
4347
6221
|
const connectionEvents = useObservable(connectionEventManager.events$);
|
|
4348
|
-
(0,
|
|
6222
|
+
(0, import_react14.useEffect)(() => {
|
|
4349
6223
|
if (eventsContainerRef.current) {
|
|
4350
6224
|
eventsContainerRef.current.scrollTop = eventsContainerRef.current.scrollHeight;
|
|
4351
6225
|
}
|
|
@@ -4356,6 +6230,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4356
6230
|
const ephemeral = useObservable(ephemeralUserDataManager.data$);
|
|
4357
6231
|
const historySnapshot = useManagedHistory(multiplayerStateManager.sm);
|
|
4358
6232
|
const assets = useObservable(assetManager.assets$);
|
|
6233
|
+
const resources = useObservable(resourceManager.resources$);
|
|
6234
|
+
const resourcesInitialized = useObservable(resourceManager.isInitialized$);
|
|
4359
6235
|
const assetsInitialized = useObservable(assetManager.isInitialized$);
|
|
4360
6236
|
const secrets = useObservable(secretManager.secrets$);
|
|
4361
6237
|
const secretsInitialized = useObservable(secretManager.isInitialized$);
|
|
@@ -4366,25 +6242,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4366
6242
|
const outputTransformsInitialized = useObservable(
|
|
4367
6243
|
ioManager.outputTransformsInitialized$
|
|
4368
6244
|
);
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
historyContainerRef.current.scrollTop = historyContainerRef.current.scrollHeight;
|
|
4372
|
-
}
|
|
4373
|
-
}, [historySnapshot]);
|
|
4374
|
-
(0, import_react3.useEffect)(() => {
|
|
4375
|
-
if (!historyContainerRef.current) return;
|
|
4376
|
-
const historyEntry = historyContainerRef.current.querySelector(
|
|
4377
|
-
`#${HISTORY_ELEMENT_PREFIX}${historySnapshot.historyIndex}`
|
|
4378
|
-
);
|
|
4379
|
-
if (historyEntry) {
|
|
4380
|
-
historyEntry.scrollIntoView({
|
|
4381
|
-
block: "nearest",
|
|
4382
|
-
inline: "nearest"
|
|
4383
|
-
});
|
|
4384
|
-
}
|
|
4385
|
-
}, [historySnapshot.historyIndex]);
|
|
4386
|
-
const theme = colorScheme === "light" ? lightTheme : darkTheme;
|
|
4387
|
-
const solidBorderColor = colorScheme === "light" ? "rgb(223 223 223)" : "rgb(29 29 29)";
|
|
6245
|
+
const theme = getStateInspectorTheme(colorScheme);
|
|
6246
|
+
const solidBorderColor = getStateInspectorBorderColor(colorScheme);
|
|
4388
6247
|
const baseStyle = {
|
|
4389
6248
|
position: "fixed",
|
|
4390
6249
|
top: 12,
|
|
@@ -4404,9 +6263,24 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4404
6263
|
zIndex: 9999,
|
|
4405
6264
|
lineHeight: "13px"
|
|
4406
6265
|
};
|
|
6266
|
+
const handleExportAll = (0, import_react14.useCallback)(async () => {
|
|
6267
|
+
const buffer = await exportAll(noyaManager);
|
|
6268
|
+
(0, import_react_utils.downloadBlob)(new Blob([buffer]), "state.zip");
|
|
6269
|
+
}, [noyaManager]);
|
|
6270
|
+
const handleImportAll = (0, import_react14.useCallback)(async () => {
|
|
6271
|
+
const file = await uploadFile();
|
|
6272
|
+
const buffer = await file.arrayBuffer();
|
|
6273
|
+
importAll(buffer, noyaManager, {
|
|
6274
|
+
shouldAllowSchemaChange: () => {
|
|
6275
|
+
return confirm(
|
|
6276
|
+
`The imported state uses a different schema than the schema this app expects. Do you want to continue?`
|
|
6277
|
+
);
|
|
6278
|
+
}
|
|
6279
|
+
});
|
|
6280
|
+
}, [noyaManager]);
|
|
4407
6281
|
if (!didMount) return null;
|
|
4408
6282
|
if (!showInspector) {
|
|
4409
|
-
return /* @__PURE__ */
|
|
6283
|
+
return /* @__PURE__ */ import_react14.default.createElement(
|
|
4410
6284
|
"div",
|
|
4411
6285
|
{
|
|
4412
6286
|
...props,
|
|
@@ -4418,8 +6292,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4418
6292
|
},
|
|
4419
6293
|
onClick: () => setShowInspector(true)
|
|
4420
6294
|
},
|
|
4421
|
-
/* @__PURE__ */
|
|
4422
|
-
|
|
6295
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6296
|
+
StateInspectorToggleButton,
|
|
4423
6297
|
{
|
|
4424
6298
|
showInspector,
|
|
4425
6299
|
setShowInspector,
|
|
@@ -4429,7 +6303,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4429
6303
|
)
|
|
4430
6304
|
);
|
|
4431
6305
|
}
|
|
4432
|
-
return /* @__PURE__ */
|
|
6306
|
+
return /* @__PURE__ */ import_react14.default.createElement(
|
|
4433
6307
|
"div",
|
|
4434
6308
|
{
|
|
4435
6309
|
...props,
|
|
@@ -4438,8 +6312,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4438
6312
|
...props.style
|
|
4439
6313
|
}
|
|
4440
6314
|
},
|
|
4441
|
-
/* @__PURE__ */
|
|
4442
|
-
|
|
6315
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6316
|
+
StateInspectorDisclosureSection,
|
|
4443
6317
|
{
|
|
4444
6318
|
isFirst: true,
|
|
4445
6319
|
open: showUsers,
|
|
@@ -4450,8 +6324,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4450
6324
|
flex: "0 0 auto",
|
|
4451
6325
|
maxHeight: "200px"
|
|
4452
6326
|
},
|
|
4453
|
-
right: /* @__PURE__ */
|
|
4454
|
-
|
|
6327
|
+
right: /* @__PURE__ */ import_react14.default.createElement(
|
|
6328
|
+
StateInspectorToggleButton,
|
|
4455
6329
|
{
|
|
4456
6330
|
showInspector,
|
|
4457
6331
|
setShowInspector,
|
|
@@ -4460,14 +6334,14 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4460
6334
|
}
|
|
4461
6335
|
)
|
|
4462
6336
|
},
|
|
4463
|
-
/* @__PURE__ */
|
|
4464
|
-
|
|
6337
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, { style: { flex: "0 0 auto" } }, connectedUsers?.map((user) => /* @__PURE__ */ import_react14.default.createElement(
|
|
6338
|
+
StateInspectorRow,
|
|
4465
6339
|
{
|
|
4466
6340
|
key: user.id,
|
|
4467
6341
|
colorScheme,
|
|
4468
6342
|
variant: user.id === userId ? "up" : void 0
|
|
4469
6343
|
},
|
|
4470
|
-
user.image && /* @__PURE__ */
|
|
6344
|
+
user.image && /* @__PURE__ */ import_react14.default.createElement(
|
|
4471
6345
|
"img",
|
|
4472
6346
|
{
|
|
4473
6347
|
src: user.image,
|
|
@@ -4488,7 +6362,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4488
6362
|
" (",
|
|
4489
6363
|
ellipsis(user.id.toString(), 8, "middle"),
|
|
4490
6364
|
")"
|
|
4491
|
-
)), !connectedUsers && /* @__PURE__ */
|
|
6365
|
+
)), !connectedUsers && /* @__PURE__ */ import_react14.default.createElement(
|
|
4492
6366
|
"div",
|
|
4493
6367
|
{
|
|
4494
6368
|
style: {
|
|
@@ -4499,13 +6373,13 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4499
6373
|
gap: "4px"
|
|
4500
6374
|
}
|
|
4501
6375
|
},
|
|
4502
|
-
/* @__PURE__ */
|
|
6376
|
+
/* @__PURE__ */ import_react14.default.createElement("span", null, "No connected users")
|
|
4503
6377
|
))
|
|
4504
6378
|
),
|
|
4505
|
-
/* @__PURE__ */
|
|
4506
|
-
|
|
6379
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6380
|
+
StateInspectorDisclosureSection,
|
|
4507
6381
|
{
|
|
4508
|
-
title: /* @__PURE__ */
|
|
6382
|
+
title: /* @__PURE__ */ import_react14.default.createElement(StateInspectorTitleLabel, null, "Data", /* @__PURE__ */ import_react14.default.createElement(
|
|
4509
6383
|
ColoredDot,
|
|
4510
6384
|
{
|
|
4511
6385
|
type: multipeerStateInitialized ? "success" : "error"
|
|
@@ -4514,16 +6388,18 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4514
6388
|
colorScheme,
|
|
4515
6389
|
setOpen: setShowData,
|
|
4516
6390
|
open: showData,
|
|
4517
|
-
right: /* @__PURE__ */
|
|
6391
|
+
right: /* @__PURE__ */ import_react14.default.createElement(
|
|
4518
6392
|
"span",
|
|
4519
6393
|
{
|
|
4520
6394
|
style: {
|
|
4521
6395
|
display: "flex",
|
|
4522
|
-
gap: "
|
|
6396
|
+
gap: "12px"
|
|
4523
6397
|
}
|
|
4524
6398
|
},
|
|
4525
|
-
/* @__PURE__ */
|
|
4526
|
-
|
|
6399
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorButton, { theme, onClick: handleImportAll }, "Import"),
|
|
6400
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorButton, { theme, onClick: handleExportAll }, "Export"),
|
|
6401
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6402
|
+
StateInspectorButton,
|
|
4527
6403
|
{
|
|
4528
6404
|
theme,
|
|
4529
6405
|
onClick: () => {
|
|
@@ -4531,170 +6407,59 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4531
6407
|
}
|
|
4532
6408
|
},
|
|
4533
6409
|
"Reset"
|
|
4534
|
-
)
|
|
4535
|
-
)
|
|
4536
|
-
},
|
|
4537
|
-
/* @__PURE__ */
|
|
4538
|
-
|
|
4539
|
-
{
|
|
4540
|
-
name: multiplayerStateManager.schema ? "state" : void 0,
|
|
4541
|
-
data: state,
|
|
4542
|
-
theme
|
|
4543
|
-
}
|
|
4544
|
-
)), multiplayerStateManager.schema && /* @__PURE__ */
|
|
4545
|
-
|
|
4546
|
-
{
|
|
4547
|
-
name: "schema",
|
|
4548
|
-
data: multiplayerStateManager.schema,
|
|
4549
|
-
theme
|
|
4550
|
-
}
|
|
4551
|
-
)))
|
|
4552
|
-
),
|
|
4553
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
4554
|
-
DisclosureSection,
|
|
4555
|
-
{
|
|
4556
|
-
open: showHistory,
|
|
4557
|
-
setOpen: setShowHistory,
|
|
4558
|
-
title: "History",
|
|
4559
|
-
colorScheme,
|
|
4560
|
-
right: /* @__PURE__ */ import_react3.default.createElement(
|
|
4561
|
-
"span",
|
|
4562
|
-
{
|
|
4563
|
-
style: {
|
|
4564
|
-
display: "flex",
|
|
4565
|
-
gap: "4px"
|
|
4566
|
-
}
|
|
4567
|
-
},
|
|
4568
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
4569
|
-
SmallButton,
|
|
4570
|
-
{
|
|
4571
|
-
disabled: !historySnapshot.canUndo,
|
|
4572
|
-
theme,
|
|
4573
|
-
onClick: () => {
|
|
4574
|
-
multiplayerStateManager.undo();
|
|
4575
|
-
}
|
|
4576
|
-
},
|
|
4577
|
-
/* @__PURE__ */ import_react3.default.createElement("span", { style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
4578
|
-
"svg",
|
|
4579
|
-
{
|
|
4580
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
4581
|
-
width: "1em",
|
|
4582
|
-
height: "1em",
|
|
4583
|
-
viewBox: "0 0 20 20"
|
|
4584
|
-
},
|
|
4585
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
4586
|
-
"path",
|
|
4587
|
-
{
|
|
4588
|
-
fill: "currentColor",
|
|
4589
|
-
d: "M12 5H7V2L1 6l6 4V7h5c2.2 0 4 1.8 4 4s-1.8 4-4 4H7v2h5c3.3 0 6-2.7 6-6s-2.7-6-6-6"
|
|
4590
|
-
}
|
|
4591
|
-
)
|
|
4592
|
-
))
|
|
4593
|
-
),
|
|
4594
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
4595
|
-
SmallButton,
|
|
4596
|
-
{
|
|
4597
|
-
disabled: !historySnapshot.canRedo,
|
|
4598
|
-
theme,
|
|
4599
|
-
onClick: () => {
|
|
4600
|
-
multiplayerStateManager.redo();
|
|
4601
|
-
}
|
|
4602
|
-
},
|
|
4603
|
-
/* @__PURE__ */ import_react3.default.createElement("span", { style: { width: "12px", height: "12px" } }, /* @__PURE__ */ import_react3.default.createElement(
|
|
4604
|
-
"svg",
|
|
4605
|
-
{
|
|
4606
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
4607
|
-
width: "1em",
|
|
4608
|
-
height: "1em",
|
|
4609
|
-
viewBox: "0 0 20 20"
|
|
4610
|
-
},
|
|
4611
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
4612
|
-
"path",
|
|
4613
|
-
{
|
|
4614
|
-
fill: "currentColor",
|
|
4615
|
-
d: "M8 5h5V2l6 4l-6 4V7H8c-2.2 0-4 1.8-4 4s1.8 4 4 4h5v2H8c-3.3 0-6-2.7-6-6s2.7-6 6-6"
|
|
4616
|
-
}
|
|
4617
|
-
)
|
|
4618
|
-
))
|
|
4619
|
-
)
|
|
4620
|
-
)
|
|
4621
|
-
},
|
|
4622
|
-
/* @__PURE__ */ import_react3.default.createElement("div", { ref: historyContainerRef, style: styles.sectionInner }, /* @__PURE__ */ import_react3.default.createElement(
|
|
4623
|
-
"div",
|
|
4624
|
-
{
|
|
4625
|
-
id: `${HISTORY_ELEMENT_PREFIX}0`,
|
|
4626
|
-
style: {
|
|
4627
|
-
borderBottom: `1px solid ${solidBorderColor}`,
|
|
4628
|
-
fontSize: "12px",
|
|
4629
|
-
fontFamily: "Menlo, monospace",
|
|
4630
|
-
padding: "2px 12px 1px",
|
|
4631
|
-
display: "flex",
|
|
4632
|
-
alignItems: "center",
|
|
4633
|
-
background: historySnapshot.historyIndex === 0 ? "rgb(59 130 246 / 15%)" : void 0
|
|
4634
|
-
}
|
|
4635
|
-
},
|
|
4636
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
4637
|
-
"span",
|
|
4638
|
-
{
|
|
4639
|
-
style: {
|
|
4640
|
-
fontFamily: "Menlo, monospace",
|
|
4641
|
-
fontSize: "11px",
|
|
4642
|
-
borderRadius: 4,
|
|
4643
|
-
display: "inline-block"
|
|
4644
|
-
}
|
|
4645
|
-
},
|
|
4646
|
-
"Initial state"
|
|
4647
|
-
)
|
|
4648
|
-
), historySnapshot.history.map((entry, index) => /* @__PURE__ */ import_react3.default.createElement(
|
|
4649
|
-
"div",
|
|
4650
|
-
{
|
|
4651
|
-
id: `${HISTORY_ELEMENT_PREFIX}${index + 1}`,
|
|
4652
|
-
key: index,
|
|
4653
|
-
style: {
|
|
4654
|
-
padding: "0px 12px 1px",
|
|
4655
|
-
borderBottom: `1px solid ${solidBorderColor}`,
|
|
4656
|
-
background: index + 1 === historySnapshot.historyIndex ? "rgb(59 130 246 / 15%)" : void 0
|
|
4657
|
-
}
|
|
4658
|
-
},
|
|
4659
|
-
"name" in entry.metadata && typeof entry.metadata.name === "string" && /* @__PURE__ */ import_react3.default.createElement(
|
|
4660
|
-
"pre",
|
|
4661
|
-
{
|
|
4662
|
-
style: {
|
|
4663
|
-
fontSize: "11px",
|
|
4664
|
-
display: "flex",
|
|
4665
|
-
flexWrap: "wrap",
|
|
4666
|
-
margin: 0
|
|
4667
|
-
}
|
|
4668
|
-
},
|
|
4669
|
-
entry.metadata.name
|
|
4670
|
-
),
|
|
4671
|
-
entry.redoPatches?.map((patch, j) => /* @__PURE__ */ import_react3.default.createElement(
|
|
4672
|
-
"pre",
|
|
4673
|
-
{
|
|
4674
|
-
key: j,
|
|
4675
|
-
style: {
|
|
4676
|
-
fontSize: "11px",
|
|
4677
|
-
display: "flex",
|
|
4678
|
-
flexWrap: "wrap",
|
|
4679
|
-
margin: 0
|
|
4680
|
-
}
|
|
4681
|
-
},
|
|
4682
|
-
patch.op === "add" && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)), " = ", /* @__PURE__ */ import_react3.default.createElement(import_react_inspector.ObjectInspector, { data: patch.value, theme })),
|
|
4683
|
-
patch.op === "replace" && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)), " = ", /* @__PURE__ */ import_react3.default.createElement(import_react_inspector.ObjectInspector, { data: patch.value, theme })),
|
|
4684
|
-
patch.op === "remove" && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("span", { style: { color: theme.OBJECT_VALUE_STRING_COLOR } }, "delete", " "), /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path))),
|
|
4685
|
-
patch.op === "move" && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.from)), " -> ", /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontStyle: "italic" } }, pathToString(patch.path)))
|
|
4686
|
-
))
|
|
6410
|
+
)
|
|
6411
|
+
)
|
|
6412
|
+
},
|
|
6413
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, null, /* @__PURE__ */ import_react14.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react14.default.createElement(
|
|
6414
|
+
import_react_inspector6.ObjectInspector,
|
|
6415
|
+
{
|
|
6416
|
+
name: multiplayerStateManager.schema ? "state" : void 0,
|
|
6417
|
+
data: state,
|
|
6418
|
+
theme
|
|
6419
|
+
}
|
|
6420
|
+
)), multiplayerStateManager.schema && /* @__PURE__ */ import_react14.default.createElement(StateInspectorRow, { colorScheme }, /* @__PURE__ */ import_react14.default.createElement(
|
|
6421
|
+
import_react_inspector6.ObjectInspector,
|
|
6422
|
+
{
|
|
6423
|
+
name: "schema",
|
|
6424
|
+
data: multiplayerStateManager.schema,
|
|
6425
|
+
theme
|
|
6426
|
+
}
|
|
4687
6427
|
)))
|
|
4688
6428
|
),
|
|
4689
|
-
/* @__PURE__ */
|
|
4690
|
-
|
|
6429
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6430
|
+
HistorySection,
|
|
6431
|
+
{
|
|
6432
|
+
showHistory,
|
|
6433
|
+
setShowHistory,
|
|
6434
|
+
colorScheme,
|
|
6435
|
+
historySnapshot,
|
|
6436
|
+
multiplayerStateManager
|
|
6437
|
+
}
|
|
6438
|
+
),
|
|
6439
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6440
|
+
StateInspectorDisclosureSection,
|
|
4691
6441
|
{
|
|
4692
6442
|
open: showAssets,
|
|
4693
6443
|
setOpen: setShowAssets,
|
|
4694
|
-
title: /* @__PURE__ */
|
|
6444
|
+
title: /* @__PURE__ */ import_react14.default.createElement(StateInspectorTitleLabel, null, "Assets (", assets.length, ")", /* @__PURE__ */ import_react14.default.createElement(ColoredDot, { type: assetsInitialized ? "success" : "error" })),
|
|
4695
6445
|
colorScheme,
|
|
4696
|
-
right: /* @__PURE__ */
|
|
4697
|
-
|
|
6446
|
+
right: /* @__PURE__ */ import_react14.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react14.default.createElement(
|
|
6447
|
+
StateInspectorButton,
|
|
6448
|
+
{
|
|
6449
|
+
theme,
|
|
6450
|
+
onClick: async () => {
|
|
6451
|
+
const ok = confirm(
|
|
6452
|
+
"Are you sure you want to delete all assets?"
|
|
6453
|
+
);
|
|
6454
|
+
if (!ok) return;
|
|
6455
|
+
await Promise.all(
|
|
6456
|
+
assets.map((asset) => assetManager.delete(asset.id))
|
|
6457
|
+
);
|
|
6458
|
+
}
|
|
6459
|
+
},
|
|
6460
|
+
"Delete all"
|
|
6461
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
6462
|
+
StateInspectorButton,
|
|
4698
6463
|
{
|
|
4699
6464
|
theme,
|
|
4700
6465
|
onClick: () => {
|
|
@@ -4706,8 +6471,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4706
6471
|
}
|
|
4707
6472
|
},
|
|
4708
6473
|
"Reload"
|
|
4709
|
-
), /* @__PURE__ */
|
|
4710
|
-
|
|
6474
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
6475
|
+
StateInspectorButton,
|
|
4711
6476
|
{
|
|
4712
6477
|
theme,
|
|
4713
6478
|
onClick: () => {
|
|
@@ -4730,8 +6495,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4730
6495
|
"Upload"
|
|
4731
6496
|
))
|
|
4732
6497
|
},
|
|
4733
|
-
/* @__PURE__ */
|
|
4734
|
-
|
|
6498
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, null, assets.map((asset) => /* @__PURE__ */ import_react14.default.createElement(StateInspectorRow, { key: asset.id, colorScheme }, /* @__PURE__ */ import_react14.default.createElement(import_react_inspector6.ObjectInspector, { name: asset.id, data: asset, theme }), /* @__PURE__ */ import_react14.default.createElement(
|
|
6499
|
+
StateInspectorButton,
|
|
4735
6500
|
{
|
|
4736
6501
|
theme,
|
|
4737
6502
|
onClick: () => assetManager.delete(asset.id)
|
|
@@ -4739,15 +6504,99 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4739
6504
|
"Delete"
|
|
4740
6505
|
))))
|
|
4741
6506
|
),
|
|
4742
|
-
/* @__PURE__ */
|
|
4743
|
-
|
|
6507
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6508
|
+
StateInspectorDisclosureSection,
|
|
6509
|
+
{
|
|
6510
|
+
title: /* @__PURE__ */ import_react14.default.createElement(StateInspectorTitleLabel, null, "Resources (", resources.length, ")", /* @__PURE__ */ import_react14.default.createElement(ColoredDot, { type: resourcesInitialized ? "success" : "error" })),
|
|
6511
|
+
colorScheme,
|
|
6512
|
+
open: showResources,
|
|
6513
|
+
setOpen: setShowResources,
|
|
6514
|
+
right: /* @__PURE__ */ import_react14.default.createElement("span", { style: { display: "flex", gap: "10px" } }, /* @__PURE__ */ import_react14.default.createElement(
|
|
6515
|
+
StateInspectorButton,
|
|
6516
|
+
{
|
|
6517
|
+
theme,
|
|
6518
|
+
onClick: async () => {
|
|
6519
|
+
const ok = confirm(
|
|
6520
|
+
"Are you sure you want to delete all resources?"
|
|
6521
|
+
);
|
|
6522
|
+
if (!ok) return;
|
|
6523
|
+
await Promise.all(
|
|
6524
|
+
resources.map(
|
|
6525
|
+
(resource) => resourceManager.deleteResource({ id: resource.id })
|
|
6526
|
+
)
|
|
6527
|
+
);
|
|
6528
|
+
}
|
|
6529
|
+
},
|
|
6530
|
+
"Delete all"
|
|
6531
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
6532
|
+
StateInspectorButton,
|
|
6533
|
+
{
|
|
6534
|
+
theme,
|
|
6535
|
+
onClick: async () => {
|
|
6536
|
+
const path2 = prompt("Enter directory path") || uuid();
|
|
6537
|
+
await resourceManager.createResource({
|
|
6538
|
+
type: "directory",
|
|
6539
|
+
path: path2
|
|
6540
|
+
});
|
|
6541
|
+
}
|
|
6542
|
+
},
|
|
6543
|
+
"Create Directory"
|
|
6544
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
6545
|
+
StateInspectorButton,
|
|
6546
|
+
{
|
|
6547
|
+
theme,
|
|
6548
|
+
onClick: async () => {
|
|
6549
|
+
const file = await uploadFile();
|
|
6550
|
+
resourceManager.createResource({
|
|
6551
|
+
type: "asset",
|
|
6552
|
+
path: file.name || uuid(),
|
|
6553
|
+
asset: {
|
|
6554
|
+
content: Base64.encode(await file.arrayBuffer()),
|
|
6555
|
+
contentType: file.type,
|
|
6556
|
+
encoding: "base64"
|
|
6557
|
+
}
|
|
6558
|
+
});
|
|
6559
|
+
}
|
|
6560
|
+
},
|
|
6561
|
+
"Create Asset"
|
|
6562
|
+
))
|
|
6563
|
+
},
|
|
6564
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, null, resources?.map((resource) => /* @__PURE__ */ import_react14.default.createElement(StateInspectorRow, { key: resource.id, colorScheme }, /* @__PURE__ */ import_react14.default.createElement(
|
|
6565
|
+
import_react_inspector6.ObjectInspector,
|
|
6566
|
+
{
|
|
6567
|
+
name: resource.path,
|
|
6568
|
+
data: resource,
|
|
6569
|
+
theme
|
|
6570
|
+
}
|
|
6571
|
+
), /* @__PURE__ */ import_react14.default.createElement("div", { style: { display: "flex", gap: "4px" } }, /* @__PURE__ */ import_react14.default.createElement(
|
|
6572
|
+
StateInspectorButton,
|
|
6573
|
+
{
|
|
6574
|
+
theme,
|
|
6575
|
+
onClick: () => resourceManager.deleteResource({ id: resource.id })
|
|
6576
|
+
},
|
|
6577
|
+
"Delete"
|
|
6578
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
6579
|
+
StateInspectorButton,
|
|
6580
|
+
{
|
|
6581
|
+
theme,
|
|
6582
|
+
onClick: () => {
|
|
6583
|
+
const path2 = prompt("Enter new path", resource.path);
|
|
6584
|
+
if (!path2) return;
|
|
6585
|
+
resourceManager.updateResource({ id: resource.id, path: path2 });
|
|
6586
|
+
}
|
|
6587
|
+
},
|
|
6588
|
+
"Rename"
|
|
6589
|
+
)))))
|
|
6590
|
+
),
|
|
6591
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6592
|
+
StateInspectorDisclosureSection,
|
|
4744
6593
|
{
|
|
4745
|
-
title: /* @__PURE__ */
|
|
6594
|
+
title: /* @__PURE__ */ import_react14.default.createElement(StateInspectorTitleLabel, null, "Secrets", /* @__PURE__ */ import_react14.default.createElement(ColoredDot, { type: secretsInitialized ? "success" : "error" })),
|
|
4746
6595
|
colorScheme,
|
|
4747
6596
|
open: showSecrets,
|
|
4748
6597
|
setOpen: setShowSecrets,
|
|
4749
|
-
right: /* @__PURE__ */
|
|
4750
|
-
|
|
6598
|
+
right: /* @__PURE__ */ import_react14.default.createElement(
|
|
6599
|
+
StateInspectorButton,
|
|
4751
6600
|
{
|
|
4752
6601
|
theme,
|
|
4753
6602
|
onClick: () => {
|
|
@@ -4761,8 +6610,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4761
6610
|
"Create"
|
|
4762
6611
|
)
|
|
4763
6612
|
},
|
|
4764
|
-
/* @__PURE__ */
|
|
4765
|
-
|
|
6613
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, null, secrets.map((secret) => /* @__PURE__ */ import_react14.default.createElement(StateInspectorRow, { key: secret.id, colorScheme }, /* @__PURE__ */ import_react14.default.createElement(import_react_inspector6.ObjectInspector, { data: secret, theme }), /* @__PURE__ */ import_react14.default.createElement(
|
|
6614
|
+
StateInspectorButton,
|
|
4766
6615
|
{
|
|
4767
6616
|
theme,
|
|
4768
6617
|
onClick: () => secretManager.deleteSecret(secret.id)
|
|
@@ -4771,15 +6620,15 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4771
6620
|
))))
|
|
4772
6621
|
),
|
|
4773
6622
|
" ",
|
|
4774
|
-
/* @__PURE__ */
|
|
4775
|
-
|
|
6623
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6624
|
+
StateInspectorDisclosureSection,
|
|
4776
6625
|
{
|
|
4777
6626
|
open: showInputs,
|
|
4778
6627
|
setOpen: setShowInputs,
|
|
4779
|
-
title: /* @__PURE__ */
|
|
6628
|
+
title: /* @__PURE__ */ import_react14.default.createElement(StateInspectorTitleLabel, null, "Inputs", /* @__PURE__ */ import_react14.default.createElement(ColoredDot, { type: inputsInitialized ? "success" : "error" })),
|
|
4780
6629
|
colorScheme
|
|
4781
6630
|
},
|
|
4782
|
-
/* @__PURE__ */
|
|
6631
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, null, inputs?.map((input) => /* @__PURE__ */ import_react14.default.createElement(StateInspectorRow, { key: input.id, colorScheme }, /* @__PURE__ */ import_react14.default.createElement(import_react_inspector6.ObjectInspector, { data: input, theme }))), !inputs?.length && /* @__PURE__ */ import_react14.default.createElement(
|
|
4783
6632
|
"div",
|
|
4784
6633
|
{
|
|
4785
6634
|
style: {
|
|
@@ -4790,15 +6639,15 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4790
6639
|
gap: "4px"
|
|
4791
6640
|
}
|
|
4792
6641
|
},
|
|
4793
|
-
/* @__PURE__ */
|
|
6642
|
+
/* @__PURE__ */ import_react14.default.createElement("span", null, "No inputs")
|
|
4794
6643
|
))
|
|
4795
6644
|
),
|
|
4796
|
-
/* @__PURE__ */
|
|
4797
|
-
|
|
6645
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6646
|
+
StateInspectorDisclosureSection,
|
|
4798
6647
|
{
|
|
4799
6648
|
open: showOutputTransforms,
|
|
4800
6649
|
setOpen: setShowOutputTransforms,
|
|
4801
|
-
title: /* @__PURE__ */
|
|
6650
|
+
title: /* @__PURE__ */ import_react14.default.createElement(StateInspectorTitleLabel, null, "Output Transforms", /* @__PURE__ */ import_react14.default.createElement(
|
|
4802
6651
|
ColoredDot,
|
|
4803
6652
|
{
|
|
4804
6653
|
type: outputTransformsInitialized ? "success" : "error"
|
|
@@ -4806,7 +6655,7 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4806
6655
|
)),
|
|
4807
6656
|
colorScheme
|
|
4808
6657
|
},
|
|
4809
|
-
/* @__PURE__ */
|
|
6658
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, null, outputTransforms?.map((transform) => /* @__PURE__ */ import_react14.default.createElement(StateInspectorRow, { key: transform.id, colorScheme }, /* @__PURE__ */ import_react14.default.createElement(import_react_inspector6.ObjectInspector, { data: transform, theme }))), !outputTransforms?.length && /* @__PURE__ */ import_react14.default.createElement(
|
|
4810
6659
|
"div",
|
|
4811
6660
|
{
|
|
4812
6661
|
style: {
|
|
@@ -4817,19 +6666,19 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4817
6666
|
gap: "4px"
|
|
4818
6667
|
}
|
|
4819
6668
|
},
|
|
4820
|
-
/* @__PURE__ */
|
|
6669
|
+
/* @__PURE__ */ import_react14.default.createElement("span", null, "No output transforms")
|
|
4821
6670
|
))
|
|
4822
6671
|
),
|
|
4823
|
-
/* @__PURE__ */
|
|
4824
|
-
|
|
6672
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6673
|
+
StateInspectorDisclosureSection,
|
|
4825
6674
|
{
|
|
4826
6675
|
title: "Tasks",
|
|
4827
6676
|
colorScheme,
|
|
4828
6677
|
open: showTasks,
|
|
4829
6678
|
setOpen: setShowTasks
|
|
4830
6679
|
},
|
|
4831
|
-
/* @__PURE__ */
|
|
4832
|
-
|
|
6680
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, null, tasks?.map((task) => /* @__PURE__ */ import_react14.default.createElement(
|
|
6681
|
+
StateInspectorRow,
|
|
4833
6682
|
{
|
|
4834
6683
|
key: task.id,
|
|
4835
6684
|
colorScheme,
|
|
@@ -4837,8 +6686,8 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4837
6686
|
backgroundColor: task.status === "done" ? "rgba(0,255,0,0.2)" : task.status === "error" ? "rgba(255,0,0,0.2)" : void 0
|
|
4838
6687
|
}
|
|
4839
6688
|
},
|
|
4840
|
-
/* @__PURE__ */
|
|
4841
|
-
|
|
6689
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6690
|
+
import_react_inspector6.ObjectInspector,
|
|
4842
6691
|
{
|
|
4843
6692
|
name: task.name,
|
|
4844
6693
|
data: task.payload,
|
|
@@ -4847,16 +6696,16 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4847
6696
|
)
|
|
4848
6697
|
)))
|
|
4849
6698
|
),
|
|
4850
|
-
/* @__PURE__ */
|
|
4851
|
-
|
|
6699
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6700
|
+
StateInspectorDisclosureSection,
|
|
4852
6701
|
{
|
|
4853
6702
|
open: showEphemeral,
|
|
4854
6703
|
setOpen: setShowEphemeral,
|
|
4855
6704
|
title: "Ephemeral User Data",
|
|
4856
6705
|
colorScheme
|
|
4857
6706
|
},
|
|
4858
|
-
/* @__PURE__ */
|
|
4859
|
-
|
|
6707
|
+
/* @__PURE__ */ import_react14.default.createElement(StateInspectorDisclosureRowInner, null, Object.entries(ephemeral).map(([key, value]) => /* @__PURE__ */ import_react14.default.createElement(StateInspectorRow, { key, colorScheme }, /* @__PURE__ */ import_react14.default.createElement(
|
|
6708
|
+
import_react_inspector6.ObjectInspector,
|
|
4860
6709
|
{
|
|
4861
6710
|
name: key,
|
|
4862
6711
|
data: value,
|
|
@@ -4865,188 +6714,28 @@ var StateInspector = (0, import_react_utils.memoGeneric)(function StateInspector
|
|
|
4865
6714
|
}
|
|
4866
6715
|
))))
|
|
4867
6716
|
),
|
|
4868
|
-
/* @__PURE__ */
|
|
4869
|
-
|
|
4870
|
-
{
|
|
4871
|
-
open: showEvents,
|
|
4872
|
-
setOpen: setShowEvents,
|
|
4873
|
-
title: "Events",
|
|
4874
|
-
colorScheme
|
|
4875
|
-
},
|
|
4876
|
-
/* @__PURE__ */ import_react3.default.createElement("div", { ref: eventsContainerRef, style: styles.sectionInner }, connectionEvents?.map(
|
|
4877
|
-
(event, index) => event.type === "stateChange" ? /* @__PURE__ */ import_react3.default.createElement(InspectorRow, { key: index, colorScheme }, "connection:", " ", /* @__PURE__ */ import_react3.default.createElement("span", { style: { fontStyle: "italic" } }, event.state.toLowerCase())) : /* @__PURE__ */ import_react3.default.createElement(
|
|
4878
|
-
InspectorRow,
|
|
4879
|
-
{
|
|
4880
|
-
key: index,
|
|
4881
|
-
colorScheme,
|
|
4882
|
-
variant: event.type === "send" ? "up" : "down",
|
|
4883
|
-
style: {
|
|
4884
|
-
padding: "0px 12px 1px"
|
|
4885
|
-
}
|
|
4886
|
-
},
|
|
4887
|
-
/* @__PURE__ */ import_react3.default.createElement(
|
|
4888
|
-
import_react_inspector.ObjectInspector,
|
|
4889
|
-
{
|
|
4890
|
-
data: event.type === "error" ? event.error : event.message,
|
|
4891
|
-
theme,
|
|
4892
|
-
nodeRenderer: ({
|
|
4893
|
-
depth,
|
|
4894
|
-
name,
|
|
4895
|
-
data,
|
|
4896
|
-
isNonenumerable
|
|
4897
|
-
}) => {
|
|
4898
|
-
const direction = event.type === "send" ? "up" : "down";
|
|
4899
|
-
return depth === 0 ? /* @__PURE__ */ import_react3.default.createElement(ObjectRootLabel, { direction, data }) : /* @__PURE__ */ import_react3.default.createElement(
|
|
4900
|
-
import_react_inspector.ObjectLabel,
|
|
4901
|
-
{
|
|
4902
|
-
direction,
|
|
4903
|
-
name,
|
|
4904
|
-
data,
|
|
4905
|
-
isNonenumerable
|
|
4906
|
-
}
|
|
4907
|
-
);
|
|
4908
|
-
}
|
|
4909
|
-
}
|
|
4910
|
-
)
|
|
4911
|
-
)
|
|
4912
|
-
), !connectionEvents && /* @__PURE__ */ import_react3.default.createElement(
|
|
4913
|
-
"div",
|
|
4914
|
-
{
|
|
4915
|
-
style: {
|
|
4916
|
-
padding: "12px",
|
|
4917
|
-
fontSize: "12px",
|
|
4918
|
-
display: "flex",
|
|
4919
|
-
flexDirection: "column",
|
|
4920
|
-
gap: "4px"
|
|
4921
|
-
}
|
|
4922
|
-
},
|
|
4923
|
-
/* @__PURE__ */ import_react3.default.createElement("span", null, "No recorded events")
|
|
4924
|
-
))
|
|
4925
|
-
)
|
|
4926
|
-
);
|
|
4927
|
-
});
|
|
4928
|
-
var ObjectRootLabel = ({ name, data, direction }) => {
|
|
4929
|
-
if (typeof name === "string") {
|
|
4930
|
-
return /* @__PURE__ */ import_react3.default.createElement("span", null, /* @__PURE__ */ import_react3.default.createElement(import_react_inspector.ObjectName, { name }), /* @__PURE__ */ import_react3.default.createElement("span", null, ": "), /* @__PURE__ */ import_react3.default.createElement(import_react_inspector.ObjectPreview, { data }));
|
|
4931
|
-
}
|
|
4932
|
-
if (direction === "up" || direction === "down") {
|
|
4933
|
-
const arrow = direction === "up" ? "\u2191" : "\u2193";
|
|
4934
|
-
return /* @__PURE__ */ import_react3.default.createElement("span", null, /* @__PURE__ */ import_react3.default.createElement(
|
|
4935
|
-
"span",
|
|
6717
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6718
|
+
ActivityEventsSection,
|
|
4936
6719
|
{
|
|
4937
|
-
|
|
4938
|
-
|
|
4939
|
-
|
|
4940
|
-
|
|
4941
|
-
|
|
4942
|
-
borderRadius: 2,
|
|
4943
|
-
display: "inline-flex",
|
|
4944
|
-
justifyContent: "center",
|
|
4945
|
-
alignItems: "center",
|
|
4946
|
-
marginRight: 4,
|
|
4947
|
-
lineHeight: "12px"
|
|
4948
|
-
}
|
|
4949
|
-
},
|
|
4950
|
-
arrow
|
|
4951
|
-
), /* @__PURE__ */ import_react3.default.createElement(import_react_inspector.ObjectPreview, { data }));
|
|
4952
|
-
} else {
|
|
4953
|
-
return /* @__PURE__ */ import_react3.default.createElement(import_react_inspector.ObjectPreview, { data });
|
|
4954
|
-
}
|
|
4955
|
-
};
|
|
4956
|
-
function Arrow({
|
|
4957
|
-
expanded,
|
|
4958
|
-
onClick,
|
|
4959
|
-
style
|
|
4960
|
-
}) {
|
|
4961
|
-
return /* @__PURE__ */ import_react3.default.createElement(
|
|
4962
|
-
"span",
|
|
4963
|
-
{
|
|
4964
|
-
role: "button",
|
|
4965
|
-
onClick,
|
|
4966
|
-
style: {
|
|
4967
|
-
display: "inline-block",
|
|
4968
|
-
textAlign: "center",
|
|
4969
|
-
transform: expanded ? "rotate(0deg)" : "rotate(-90deg)",
|
|
4970
|
-
fontFamily: "Menlo, monospace",
|
|
4971
|
-
...style
|
|
4972
|
-
}
|
|
4973
|
-
},
|
|
4974
|
-
"\u25BC"
|
|
4975
|
-
);
|
|
4976
|
-
}
|
|
4977
|
-
function pathToString(extendedPath) {
|
|
4978
|
-
return extendedPath.map(
|
|
4979
|
-
(key) => typeof key === "object" ? `:${ellipsis(key.id.toString(), 8, "middle")}` : key
|
|
4980
|
-
).map(
|
|
4981
|
-
(key, index) => index === 0 || typeof key === "string" && key.startsWith(":") ? key : `.${key}`
|
|
4982
|
-
).join("");
|
|
4983
|
-
}
|
|
4984
|
-
function ellipsis(str, maxLength, position = "end") {
|
|
4985
|
-
if (str.length <= maxLength) return str;
|
|
4986
|
-
switch (position) {
|
|
4987
|
-
case "start":
|
|
4988
|
-
return `\u2026${str.slice(str.length - maxLength)}`;
|
|
4989
|
-
case "middle":
|
|
4990
|
-
const halfLength = Math.floor(maxLength / 2);
|
|
4991
|
-
return `${str.slice(0, halfLength)}\u2026${str.slice(str.length - halfLength)}`;
|
|
4992
|
-
case "end":
|
|
4993
|
-
return `${str.slice(0, maxLength)}\u2026`;
|
|
4994
|
-
}
|
|
4995
|
-
}
|
|
4996
|
-
function SmallButton({
|
|
4997
|
-
children,
|
|
4998
|
-
onClick,
|
|
4999
|
-
style,
|
|
5000
|
-
theme,
|
|
5001
|
-
disabled
|
|
5002
|
-
}) {
|
|
5003
|
-
return /* @__PURE__ */ import_react3.default.createElement(
|
|
5004
|
-
"button",
|
|
5005
|
-
{
|
|
5006
|
-
type: "button",
|
|
5007
|
-
disabled,
|
|
5008
|
-
onClick: (event) => {
|
|
5009
|
-
event.stopPropagation();
|
|
5010
|
-
onClick();
|
|
5011
|
-
},
|
|
5012
|
-
style: {
|
|
5013
|
-
flex: "0",
|
|
5014
|
-
appearance: "none",
|
|
5015
|
-
background: "none",
|
|
5016
|
-
color: theme.BASE_COLOR,
|
|
5017
|
-
opacity: disabled ? 0.25 : 1,
|
|
5018
|
-
border: "none",
|
|
5019
|
-
fontSize: "12px",
|
|
5020
|
-
whiteSpace: "nowrap",
|
|
5021
|
-
display: "inline-flex",
|
|
5022
|
-
alignItems: "center",
|
|
5023
|
-
justifyContent: "center",
|
|
5024
|
-
padding: "0",
|
|
5025
|
-
cursor: "pointer",
|
|
5026
|
-
...style
|
|
6720
|
+
colorScheme,
|
|
6721
|
+
activityEventsContainerRef,
|
|
6722
|
+
showEvents: showActivityEvents,
|
|
6723
|
+
setShowEvents: setShowActivityEvents,
|
|
6724
|
+
activityEventsManager
|
|
5027
6725
|
}
|
|
5028
|
-
|
|
5029
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
display: "inline-block",
|
|
5038
|
-
width: 6,
|
|
5039
|
-
height: 6,
|
|
5040
|
-
background: type === "success" ? "rgba(0,200,0,0.8)" : "rgba(200,0,0,0.8)",
|
|
5041
|
-
borderRadius: "50%",
|
|
5042
|
-
verticalAlign: "middle"
|
|
6726
|
+
),
|
|
6727
|
+
/* @__PURE__ */ import_react14.default.createElement(
|
|
6728
|
+
EventsSection,
|
|
6729
|
+
{
|
|
6730
|
+
connectionEvents,
|
|
6731
|
+
colorScheme,
|
|
6732
|
+
eventsContainerRef,
|
|
6733
|
+
showEvents,
|
|
6734
|
+
setShowEvents
|
|
5043
6735
|
}
|
|
5044
|
-
|
|
6736
|
+
)
|
|
5045
6737
|
);
|
|
5046
|
-
}
|
|
5047
|
-
function TitleLabel({ children }) {
|
|
5048
|
-
return /* @__PURE__ */ import_react3.default.createElement("span", { style: { display: "flex", alignItems: "center", gap: "4px" } }, children);
|
|
5049
|
-
}
|
|
6738
|
+
});
|
|
5050
6739
|
|
|
5051
6740
|
// src/inspector/useStateInspector.tsx
|
|
5052
6741
|
function createShadowRootElement() {
|
|
@@ -5063,7 +6752,7 @@ function useStateInspector({
|
|
|
5063
6752
|
colorScheme,
|
|
5064
6753
|
anchor
|
|
5065
6754
|
}) {
|
|
5066
|
-
const [root, setRoot] =
|
|
6755
|
+
const [root, setRoot] = import_react15.default.useState(null);
|
|
5067
6756
|
(0, import_react_utils2.useIsomorphicLayoutEffect)(() => {
|
|
5068
6757
|
if (disabled) return;
|
|
5069
6758
|
const { host, container } = createShadowRootElement();
|
|
@@ -5077,7 +6766,7 @@ function useStateInspector({
|
|
|
5077
6766
|
(0, import_react_utils2.useIsomorphicLayoutEffect)(() => {
|
|
5078
6767
|
if (!root) return;
|
|
5079
6768
|
root.render(
|
|
5080
|
-
/* @__PURE__ */
|
|
6769
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
5081
6770
|
StateInspector,
|
|
5082
6771
|
{
|
|
5083
6772
|
colorScheme,
|
|
@@ -5090,23 +6779,23 @@ function useStateInspector({
|
|
|
5090
6779
|
}
|
|
5091
6780
|
|
|
5092
6781
|
// src/hooks.ts
|
|
5093
|
-
function useSyncStateManager(stateManager,
|
|
5094
|
-
const getSnapshot = (0,
|
|
5095
|
-
() => typeof
|
|
5096
|
-
[stateManager,
|
|
6782
|
+
function useSyncStateManager(stateManager, path2) {
|
|
6783
|
+
const getSnapshot = (0, import_react16.useCallback)(
|
|
6784
|
+
() => typeof path2 === "string" ? stateManager.getState(path2) : stateManager.getState(),
|
|
6785
|
+
[stateManager, path2]
|
|
5097
6786
|
);
|
|
5098
|
-
return (0,
|
|
6787
|
+
return (0, import_react16.useSyncExternalStore)(
|
|
5099
6788
|
stateManager.addListener,
|
|
5100
6789
|
getSnapshot,
|
|
5101
6790
|
getSnapshot
|
|
5102
6791
|
);
|
|
5103
6792
|
}
|
|
5104
6793
|
function useManagedState(createInitialState, options) {
|
|
5105
|
-
const [stateManager] = (0,
|
|
5106
|
-
() => new
|
|
6794
|
+
const [stateManager] = (0, import_react16.useState)(
|
|
6795
|
+
() => new import_state_manager2.StateManager(createInitialState(), options)
|
|
5107
6796
|
);
|
|
5108
6797
|
const state = useSyncStateManager(stateManager);
|
|
5109
|
-
const setState = (0,
|
|
6798
|
+
const setState = (0, import_react16.useCallback)(
|
|
5110
6799
|
(...args) => {
|
|
5111
6800
|
const [metadata, action] = args.length === 1 ? [void 0, args[0]] : args;
|
|
5112
6801
|
if (metadata === void 0) {
|
|
@@ -5142,7 +6831,7 @@ function useManagedState(createInitialState, options) {
|
|
|
5142
6831
|
return [state, setState, stateManager];
|
|
5143
6832
|
}
|
|
5144
6833
|
function useManagedHistory(stateManager) {
|
|
5145
|
-
return (0,
|
|
6834
|
+
return (0, import_react16.useSyncExternalStore)(
|
|
5146
6835
|
stateManager.historyEmittor.addListener,
|
|
5147
6836
|
stateManager.getHistorySnapshot,
|
|
5148
6837
|
stateManager.getHistorySnapshot
|
|
@@ -5150,18 +6839,18 @@ function useManagedHistory(stateManager) {
|
|
|
5150
6839
|
}
|
|
5151
6840
|
function useMultiplayerState(initialState, options) {
|
|
5152
6841
|
const {
|
|
5153
|
-
sync = (0,
|
|
6842
|
+
sync = (0, import_state_manager2.stubSync)(),
|
|
5154
6843
|
inspector,
|
|
5155
6844
|
...rest
|
|
5156
6845
|
} = options ?? {};
|
|
5157
|
-
const [noyaManager] = (0,
|
|
5158
|
-
() => new
|
|
6846
|
+
const [noyaManager] = (0, import_react16.useState)(
|
|
6847
|
+
() => new import_state_manager2.NoyaManager(initialState, rest)
|
|
5159
6848
|
);
|
|
5160
6849
|
const state = useObservable(
|
|
5161
6850
|
noyaManager.multiplayerStateManager.optimisticState$
|
|
5162
6851
|
);
|
|
5163
6852
|
const assets = useObservable(noyaManager.assetManager.assets$);
|
|
5164
|
-
const extras = (0,
|
|
6853
|
+
const extras = (0, import_react16.useMemo)(() => {
|
|
5165
6854
|
return {
|
|
5166
6855
|
noyaManager,
|
|
5167
6856
|
taskManager: noyaManager.taskManager,
|
|
@@ -5180,8 +6869,8 @@ function useMultiplayerState(initialState, options) {
|
|
|
5180
6869
|
assets
|
|
5181
6870
|
};
|
|
5182
6871
|
}, [noyaManager, assets]);
|
|
5183
|
-
const syncRef = (0,
|
|
5184
|
-
(0,
|
|
6872
|
+
const syncRef = (0, import_react16.useRef)(sync);
|
|
6873
|
+
(0, import_react16.useEffect)(() => {
|
|
5185
6874
|
if (syncRef.current) {
|
|
5186
6875
|
return syncRef.current({ noyaManager });
|
|
5187
6876
|
}
|
|
@@ -5196,13 +6885,13 @@ function useMultiplayerState(initialState, options) {
|
|
|
5196
6885
|
}
|
|
5197
6886
|
function useErrorOverlay(noyaManager) {
|
|
5198
6887
|
const unrecoverableError = useObservable(noyaManager.unrecoverableError);
|
|
5199
|
-
(0,
|
|
6888
|
+
(0, import_react16.useEffect)(() => {
|
|
5200
6889
|
if (!unrecoverableError) return;
|
|
5201
6890
|
const el = document.createElement("div");
|
|
5202
6891
|
el.id = "noya-multiplayer-react-error-overlay";
|
|
5203
6892
|
document.body.appendChild(el);
|
|
5204
6893
|
const root = (0, import_client2.createRoot)(el);
|
|
5205
|
-
root.render((0,
|
|
6894
|
+
root.render((0, import_react16.createElement)(ErrorOverlay, { error: unrecoverableError }));
|
|
5206
6895
|
return () => {
|
|
5207
6896
|
root.unmount();
|
|
5208
6897
|
el.remove();
|
|
@@ -5220,7 +6909,7 @@ function createDefaultAppData(initialState) {
|
|
|
5220
6909
|
};
|
|
5221
6910
|
}
|
|
5222
6911
|
function enforceSchema(initialState, schema) {
|
|
5223
|
-
return schema ? (0,
|
|
6912
|
+
return schema ? (0, import_state_manager3.createOrCastValue)({
|
|
5224
6913
|
schema,
|
|
5225
6914
|
value: initialState,
|
|
5226
6915
|
defs: findAllDefs(schema)
|
|
@@ -5243,14 +6932,14 @@ function parseAppDataParameter(options) {
|
|
|
5243
6932
|
function getAppData(initialState, schema, options) {
|
|
5244
6933
|
const resolvedInitialState = initialState instanceof Function ? initialState() : initialState;
|
|
5245
6934
|
let appData = parseAppDataParameter(options) ?? createDefaultAppData(resolvedInitialState);
|
|
5246
|
-
if (options?.overrideExistingState) {
|
|
6935
|
+
if (options?.overrideExistingState || appData.initialState === null) {
|
|
5247
6936
|
appData.initialState = resolvedInitialState;
|
|
5248
6937
|
}
|
|
5249
6938
|
appData.initialState = enforceSchema(appData.initialState, schema);
|
|
5250
6939
|
return appData;
|
|
5251
6940
|
}
|
|
5252
6941
|
function useNoyaState(...args) {
|
|
5253
|
-
const [initialState, options] = typeof args[0] === "object" && args[0] !== null && "schema" in args[0] &&
|
|
6942
|
+
const [initialState, options] = typeof args[0] === "object" && args[0] !== null && "schema" in args[0] && import_state_manager3.TypeGuard.IsSchema(args[0].schema) ? [null, args[0]] : [args[0], args[1]];
|
|
5254
6943
|
const [
|
|
5255
6944
|
{
|
|
5256
6945
|
multiplayerUrl,
|
|
@@ -5259,16 +6948,16 @@ function useNoyaState(...args) {
|
|
|
5259
6948
|
theme,
|
|
5260
6949
|
viewType
|
|
5261
6950
|
}
|
|
5262
|
-
] = (0,
|
|
6951
|
+
] = (0, import_react17.useState)(() => {
|
|
5263
6952
|
return getAppData(initialState, options?.schema, {
|
|
5264
6953
|
overrideExistingState: options?.overrideExistingState
|
|
5265
6954
|
});
|
|
5266
6955
|
});
|
|
5267
|
-
const sync = (0,
|
|
5268
|
-
return (0,
|
|
6956
|
+
const sync = (0, import_react17.useMemo)(() => {
|
|
6957
|
+
return (0, import_state_manager3.isEmbeddedApp)() ? (0, import_state_manager3.parentFrameSync)({ debug: options?.debug }) : multiplayerUrl ? (0, import_state_manager3.webSocketSync)({
|
|
5269
6958
|
url: multiplayerUrl,
|
|
5270
6959
|
debug: options?.debug
|
|
5271
|
-
}) : options?.offlineStorageKey ? (0,
|
|
6960
|
+
}) : options?.offlineStorageKey ? (0, import_state_manager3.localStorageSync)({ key: options.offlineStorageKey }) : (0, import_state_manager3.stubSync)();
|
|
5272
6961
|
}, [multiplayerUrl, options?.offlineStorageKey, options?.debug]);
|
|
5273
6962
|
const result = useMultiplayerState(noyaAppInitialState, {
|
|
5274
6963
|
...options,
|
|
@@ -5276,16 +6965,16 @@ function useNoyaState(...args) {
|
|
|
5276
6965
|
sync: options?.sync ?? sync
|
|
5277
6966
|
});
|
|
5278
6967
|
const [, , extras] = result;
|
|
5279
|
-
const mergedExtras = (0,
|
|
6968
|
+
const mergedExtras = (0, import_react17.useMemo)(() => {
|
|
5280
6969
|
return { ...extras, theme, viewType };
|
|
5281
6970
|
}, [extras, theme, viewType]);
|
|
5282
6971
|
return [result[0], result[1], mergedExtras];
|
|
5283
6972
|
}
|
|
5284
6973
|
|
|
5285
6974
|
// src/NoyaStateContext.tsx
|
|
5286
|
-
var AnyNoyaStateContext = (0,
|
|
6975
|
+
var AnyNoyaStateContext = (0, import_react18.createContext)(void 0);
|
|
5287
6976
|
function useAnyNoyaStateContext() {
|
|
5288
|
-
const value = (0,
|
|
6977
|
+
const value = (0, import_react18.useContext)(AnyNoyaStateContext);
|
|
5289
6978
|
if (!value) {
|
|
5290
6979
|
throw new Error(
|
|
5291
6980
|
"useNoyaStateContext must be used within a NoyaStateProvider"
|
|
@@ -5311,7 +7000,7 @@ function useAssets() {
|
|
|
5311
7000
|
}
|
|
5312
7001
|
function useAsset(id) {
|
|
5313
7002
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
5314
|
-
const observable = (0,
|
|
7003
|
+
const observable = (0, import_react18.useMemo)(
|
|
5315
7004
|
() => noyaManager.assetManager.assets$.map(
|
|
5316
7005
|
(assets) => assets.find((a) => a.id === id)
|
|
5317
7006
|
),
|
|
@@ -5322,7 +7011,7 @@ function useAsset(id) {
|
|
|
5322
7011
|
function useAssetManager() {
|
|
5323
7012
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
5324
7013
|
const isInitialized = useObservable(noyaManager.assetManager.isInitialized$);
|
|
5325
|
-
return (0,
|
|
7014
|
+
return (0, import_react18.useMemo)(
|
|
5326
7015
|
() => ({
|
|
5327
7016
|
create: noyaManager.assetManager.create,
|
|
5328
7017
|
delete: noyaManager.assetManager.delete,
|
|
@@ -5347,7 +7036,7 @@ function useSecret(name) {
|
|
|
5347
7036
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
5348
7037
|
return useObservable(
|
|
5349
7038
|
noyaManager.secretManager.secrets$,
|
|
5350
|
-
(0,
|
|
7039
|
+
(0, import_react18.useCallback)((secrets) => secrets.find((s) => s.name === name), [name])
|
|
5351
7040
|
);
|
|
5352
7041
|
}
|
|
5353
7042
|
function useInputs() {
|
|
@@ -5365,7 +7054,7 @@ function useIOManager() {
|
|
|
5365
7054
|
function usePublish(callback) {
|
|
5366
7055
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
5367
7056
|
const stableCallback = (0, import_react_utils3.useStableCallback)(callback);
|
|
5368
|
-
(0,
|
|
7057
|
+
(0, import_react18.useEffect)(() => {
|
|
5369
7058
|
noyaManager.publishingManager.setPublishingEnabled(true);
|
|
5370
7059
|
noyaManager.publishingManager.getFilesToPublish = stableCallback;
|
|
5371
7060
|
return () => {
|
|
@@ -5376,7 +7065,7 @@ function usePublish(callback) {
|
|
|
5376
7065
|
}
|
|
5377
7066
|
function useIsInitialized() {
|
|
5378
7067
|
const { noyaManager, viewType } = useAnyNoyaStateContext();
|
|
5379
|
-
const isInitializedObservable = (0,
|
|
7068
|
+
const isInitializedObservable = (0, import_react18.useMemo)(
|
|
5380
7069
|
() => import_observable.Observable.combine(
|
|
5381
7070
|
[
|
|
5382
7071
|
...viewType === "preview" ? [] : [noyaManager.multiplayerStateManager.isInitialized$],
|
|
@@ -5393,18 +7082,156 @@ function usePipelineManager() {
|
|
|
5393
7082
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
5394
7083
|
return noyaManager.pipelineManager;
|
|
5395
7084
|
}
|
|
5396
|
-
var ConnectedUsersContext = (0,
|
|
7085
|
+
var ConnectedUsersContext = (0, import_react18.createContext)(void 0);
|
|
5397
7086
|
function useConnectedUsersManager() {
|
|
5398
|
-
return (0,
|
|
7087
|
+
return (0, import_react18.useContext)(ConnectedUsersContext);
|
|
7088
|
+
}
|
|
7089
|
+
function useConnectedUsers() {
|
|
7090
|
+
const connectedUsersManager = useConnectedUsersManager();
|
|
7091
|
+
return useObservable(connectedUsersManager?.connectedUsers$);
|
|
7092
|
+
}
|
|
7093
|
+
function useConnectedUser(userId) {
|
|
7094
|
+
const connectedUsersManager = useConnectedUsersManager();
|
|
7095
|
+
return useObservable(
|
|
7096
|
+
connectedUsersManager?.connectedUsers$,
|
|
7097
|
+
(0, import_react18.useCallback)(
|
|
7098
|
+
(users) => {
|
|
7099
|
+
return users.find((user) => {
|
|
7100
|
+
const prefix = user.id.slice(0, 8);
|
|
7101
|
+
return userId?.includes(prefix);
|
|
7102
|
+
});
|
|
7103
|
+
},
|
|
7104
|
+
[userId]
|
|
7105
|
+
)
|
|
7106
|
+
);
|
|
5399
7107
|
}
|
|
5400
|
-
var AnyEphemeralUserDataManagerContext = (0,
|
|
7108
|
+
var AnyEphemeralUserDataManagerContext = (0, import_react18.createContext)(void 0);
|
|
5401
7109
|
function useAnyEphemeralUserData() {
|
|
5402
|
-
return (0,
|
|
7110
|
+
return (0, import_react18.useContext)(AnyEphemeralUserDataManagerContext);
|
|
5403
7111
|
}
|
|
5404
7112
|
function useCurrentUserId() {
|
|
5405
7113
|
const connectedUsersManager = useConnectedUsersManager();
|
|
5406
7114
|
return useObservable(connectedUsersManager?.currentUserId$);
|
|
5407
7115
|
}
|
|
7116
|
+
function useIsProcessing() {
|
|
7117
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
7118
|
+
return useObservable(noyaManager.isProcessing$);
|
|
7119
|
+
}
|
|
7120
|
+
function useResourceManager() {
|
|
7121
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
7122
|
+
return noyaManager.resourceManager;
|
|
7123
|
+
}
|
|
7124
|
+
function resourceToMediaItem(resource) {
|
|
7125
|
+
switch (resource.type) {
|
|
7126
|
+
case "asset":
|
|
7127
|
+
return { kind: "asset", id: resource.id, assetId: resource.assetId };
|
|
7128
|
+
case "file":
|
|
7129
|
+
return { kind: "noyaFile", id: resource.id, fileId: resource.fileId };
|
|
7130
|
+
default:
|
|
7131
|
+
return { kind: "folder", id: resource.id };
|
|
7132
|
+
}
|
|
7133
|
+
}
|
|
7134
|
+
function useResources({
|
|
7135
|
+
shouldDeleteAssets = true
|
|
7136
|
+
} = {}) {
|
|
7137
|
+
const resourceManager = useResourceManager();
|
|
7138
|
+
const assetManager = useAssetManager();
|
|
7139
|
+
const resourceMap = useObservable(
|
|
7140
|
+
resourceManager.optimisticResources$,
|
|
7141
|
+
(0, import_react18.useCallback)((resources) => {
|
|
7142
|
+
return Object.fromEntries(
|
|
7143
|
+
resources.map((resource) => [resource.path, resource])
|
|
7144
|
+
);
|
|
7145
|
+
}, [])
|
|
7146
|
+
);
|
|
7147
|
+
const setResourceMap = (0, import_react18.useCallback)(
|
|
7148
|
+
async (action) => {
|
|
7149
|
+
const newResourceMap = action instanceof Function ? action(resourceMap) : action;
|
|
7150
|
+
const { addedResources, removedResources, modifiedResources } = diffResourceMaps(resourceMap, newResourceMap, "id");
|
|
7151
|
+
if (addedResources.length > 0) {
|
|
7152
|
+
const payload = addedResources.map((resource) => {
|
|
7153
|
+
switch (resource.type) {
|
|
7154
|
+
case "directory":
|
|
7155
|
+
return {
|
|
7156
|
+
path: resource.path,
|
|
7157
|
+
type: "directory"
|
|
7158
|
+
};
|
|
7159
|
+
case "asset":
|
|
7160
|
+
return {
|
|
7161
|
+
path: resource.path,
|
|
7162
|
+
type: "asset",
|
|
7163
|
+
assetId: resource.assetId,
|
|
7164
|
+
asset: resource.asset
|
|
7165
|
+
};
|
|
7166
|
+
case "file":
|
|
7167
|
+
return {
|
|
7168
|
+
path: resource.path,
|
|
7169
|
+
type: "file",
|
|
7170
|
+
fileId: resource.fileId
|
|
7171
|
+
};
|
|
7172
|
+
case "resource":
|
|
7173
|
+
return {
|
|
7174
|
+
path: resource.path,
|
|
7175
|
+
type: "resource",
|
|
7176
|
+
fileId: resource.fileId,
|
|
7177
|
+
resourceId: resource.resourceId
|
|
7178
|
+
};
|
|
7179
|
+
default:
|
|
7180
|
+
throw new Error(
|
|
7181
|
+
`Unknown resource type: ${resource.type}`
|
|
7182
|
+
);
|
|
7183
|
+
}
|
|
7184
|
+
});
|
|
7185
|
+
await resourceManager.createResource(payload);
|
|
7186
|
+
}
|
|
7187
|
+
for (const resource of removedResources) {
|
|
7188
|
+
await resourceManager.deleteResource({ id: resource.id });
|
|
7189
|
+
if (shouldDeleteAssets && resource.type === "asset") {
|
|
7190
|
+
try {
|
|
7191
|
+
await assetManager.delete(resource.assetId);
|
|
7192
|
+
} catch (error) {
|
|
7193
|
+
console.error("Failed to delete asset:", error);
|
|
7194
|
+
}
|
|
7195
|
+
}
|
|
7196
|
+
}
|
|
7197
|
+
await Promise.all(
|
|
7198
|
+
modifiedResources.map(
|
|
7199
|
+
({ id, path: path2, assetId, asset }) => resourceManager.updateResource({
|
|
7200
|
+
id,
|
|
7201
|
+
path: path2,
|
|
7202
|
+
assetId,
|
|
7203
|
+
asset
|
|
7204
|
+
})
|
|
7205
|
+
)
|
|
7206
|
+
);
|
|
7207
|
+
},
|
|
7208
|
+
[resourceMap, resourceManager, shouldDeleteAssets, assetManager]
|
|
7209
|
+
);
|
|
7210
|
+
return [resourceMap, setResourceMap];
|
|
7211
|
+
}
|
|
7212
|
+
var emptyArray = [];
|
|
7213
|
+
function useActivityEvents(streamFilter) {
|
|
7214
|
+
const { noyaManager } = useAnyNoyaStateContext();
|
|
7215
|
+
return useActivityEventsForManager(
|
|
7216
|
+
streamFilter,
|
|
7217
|
+
noyaManager.activityEventsManager
|
|
7218
|
+
);
|
|
7219
|
+
}
|
|
7220
|
+
function useActivityEventsForManager(streamFilter, activityEventsManager) {
|
|
7221
|
+
const [streamId, setStreamId] = (0, import_react18.useState)(void 0);
|
|
7222
|
+
const stableStreamFilter = (0, import_react_utils3.useJsonMemo)(streamFilter);
|
|
7223
|
+
(0, import_react18.useEffect)(() => {
|
|
7224
|
+
if (!stableStreamFilter) return;
|
|
7225
|
+
const streamId2 = activityEventsManager.subscribe(stableStreamFilter);
|
|
7226
|
+
setStreamId(streamId2);
|
|
7227
|
+
return () => {
|
|
7228
|
+
setStreamId(void 0);
|
|
7229
|
+
activityEventsManager.unsubscribe(streamId2);
|
|
7230
|
+
};
|
|
7231
|
+
}, [activityEventsManager, stableStreamFilter]);
|
|
7232
|
+
const observable = streamId ? activityEventsManager.getStream(streamId) : void 0;
|
|
7233
|
+
return useObservable(observable) ?? emptyArray;
|
|
7234
|
+
}
|
|
5408
7235
|
var FallbackUntilInitialized = ({
|
|
5409
7236
|
children,
|
|
5410
7237
|
fallback
|
|
@@ -5421,6 +7248,24 @@ function createNoyaContext({
|
|
|
5421
7248
|
}) {
|
|
5422
7249
|
const NoyaStateContext = AnyNoyaStateContext;
|
|
5423
7250
|
const EphemeralUserDataManagerContext = AnyEphemeralUserDataManagerContext;
|
|
7251
|
+
function NoyaContextProvider({
|
|
7252
|
+
children,
|
|
7253
|
+
contextValue
|
|
7254
|
+
}) {
|
|
7255
|
+
return /* @__PURE__ */ import_react18.default.createElement(AnyNoyaStateContext.Provider, { value: contextValue }, /* @__PURE__ */ import_react18.default.createElement(
|
|
7256
|
+
ConnectedUsersContext.Provider,
|
|
7257
|
+
{
|
|
7258
|
+
value: contextValue.noyaManager.connectedUsersManager
|
|
7259
|
+
},
|
|
7260
|
+
/* @__PURE__ */ import_react18.default.createElement(
|
|
7261
|
+
EphemeralUserDataManagerContext.Provider,
|
|
7262
|
+
{
|
|
7263
|
+
value: contextValue.noyaManager.ephemeralUserDataManager
|
|
7264
|
+
},
|
|
7265
|
+
children
|
|
7266
|
+
)
|
|
7267
|
+
));
|
|
7268
|
+
}
|
|
5424
7269
|
function NoyaStateProvider({
|
|
5425
7270
|
children,
|
|
5426
7271
|
initialState,
|
|
@@ -5437,7 +7282,7 @@ function createNoyaContext({
|
|
|
5437
7282
|
...options
|
|
5438
7283
|
}
|
|
5439
7284
|
);
|
|
5440
|
-
const contextValue = (0,
|
|
7285
|
+
const contextValue = (0, import_react18.useMemo)(
|
|
5441
7286
|
() => ({
|
|
5442
7287
|
noyaManager,
|
|
5443
7288
|
theme,
|
|
@@ -5445,53 +7290,41 @@ function createNoyaContext({
|
|
|
5445
7290
|
}),
|
|
5446
7291
|
[noyaManager, theme, viewType]
|
|
5447
7292
|
);
|
|
5448
|
-
return /* @__PURE__ */
|
|
5449
|
-
ConnectedUsersContext.Provider,
|
|
5450
|
-
{
|
|
5451
|
-
value: noyaManager.connectedUsersManager
|
|
5452
|
-
},
|
|
5453
|
-
/* @__PURE__ */ import_react7.default.createElement(
|
|
5454
|
-
EphemeralUserDataManagerContext.Provider,
|
|
5455
|
-
{
|
|
5456
|
-
value: noyaManager.ephemeralUserDataManager
|
|
5457
|
-
},
|
|
5458
|
-
options.fallback !== void 0 ? /* @__PURE__ */ import_react7.default.createElement(FallbackUntilInitialized, { fallback: options.fallback }, children) : children
|
|
5459
|
-
)
|
|
5460
|
-
));
|
|
7293
|
+
return /* @__PURE__ */ import_react18.default.createElement(NoyaContextProvider, { contextValue }, options.fallback !== void 0 ? /* @__PURE__ */ import_react18.default.createElement(FallbackUntilInitialized, { fallback: options.fallback }, children) : children);
|
|
5461
7294
|
}
|
|
5462
|
-
function useValue(
|
|
7295
|
+
function useValue(path2, options) {
|
|
5463
7296
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
5464
|
-
let actualPath = typeof
|
|
5465
|
-
const mappedObservable = (0,
|
|
5466
|
-
if (typeof
|
|
5467
|
-
return noyaManager.multiplayerStateManager.optimisticState$.map(
|
|
7297
|
+
let actualPath = typeof path2 === "function" || !path2 ? "" : path2;
|
|
7298
|
+
const mappedObservable = (0, import_react18.useMemo)(() => {
|
|
7299
|
+
if (typeof path2 === "function") {
|
|
7300
|
+
return noyaManager.multiplayerStateManager.optimisticState$.map(path2, {
|
|
5468
7301
|
isEqual: options?.isEqual
|
|
5469
7302
|
});
|
|
5470
7303
|
}
|
|
5471
7304
|
return noyaManager.multiplayerStateManager.optimisticState$;
|
|
5472
|
-
}, [noyaManager,
|
|
7305
|
+
}, [noyaManager, path2, options?.isEqual]);
|
|
5473
7306
|
const value = useObservable(mappedObservable, actualPath);
|
|
5474
7307
|
return value;
|
|
5475
7308
|
}
|
|
5476
|
-
function useSetValue(
|
|
7309
|
+
function useSetValue(path2) {
|
|
5477
7310
|
const { noyaManager } = useAnyNoyaStateContext();
|
|
5478
|
-
const setValue = (0,
|
|
7311
|
+
const setValue = (0, import_react18.useCallback)(
|
|
5479
7312
|
(...args) => {
|
|
5480
7313
|
const [metadata, value] = args.length === 2 ? args : [{}, args[0]];
|
|
5481
7314
|
noyaManager.multiplayerStateManager.setStateAtPath(
|
|
5482
7315
|
metadata,
|
|
5483
|
-
|
|
7316
|
+
path2 ?? "",
|
|
5484
7317
|
value
|
|
5485
7318
|
);
|
|
5486
7319
|
},
|
|
5487
|
-
[noyaManager,
|
|
7320
|
+
[noyaManager, path2]
|
|
5488
7321
|
);
|
|
5489
7322
|
return setValue;
|
|
5490
7323
|
}
|
|
5491
7324
|
function useValueState(...args) {
|
|
5492
|
-
const [selector, options,
|
|
5493
|
-
const value = useValue(selector ??
|
|
5494
|
-
const setValue = useSetValue(
|
|
7325
|
+
const [selector, options, path2] = args.length >= 1 && typeof args[0] === "function" ? [args[0], args[1], void 0] : [void 0, void 0, args[0]];
|
|
7326
|
+
const value = useValue(selector ?? path2 ?? "", options);
|
|
7327
|
+
const setValue = useSetValue(path2 ?? "");
|
|
5495
7328
|
return [value, setValue];
|
|
5496
7329
|
}
|
|
5497
7330
|
function useStateManager() {
|
|
@@ -5499,7 +7332,7 @@ function createNoyaContext({
|
|
|
5499
7332
|
return noyaManager.multiplayerStateManager;
|
|
5500
7333
|
}
|
|
5501
7334
|
function useEphemeralUserDataManager() {
|
|
5502
|
-
const ephemeralUserData = (0,
|
|
7335
|
+
const ephemeralUserData = (0, import_react18.useContext)(EphemeralUserDataManagerContext);
|
|
5503
7336
|
if (!ephemeralUserData) {
|
|
5504
7337
|
throw new Error(
|
|
5505
7338
|
"useEphemeralUserData must be used within a NoyaStateProvider"
|
|
@@ -5516,7 +7349,7 @@ function createNoyaContext({
|
|
|
5516
7349
|
}
|
|
5517
7350
|
function useSetLeftMenuItems(leftMenuItems) {
|
|
5518
7351
|
const { menuManager } = useNoyaManager();
|
|
5519
|
-
(0,
|
|
7352
|
+
(0, import_react18.useEffect)(() => {
|
|
5520
7353
|
if (leftMenuItems) {
|
|
5521
7354
|
menuManager.setLeftMenuItems(leftMenuItems);
|
|
5522
7355
|
}
|
|
@@ -5528,7 +7361,7 @@ function createNoyaContext({
|
|
|
5528
7361
|
}
|
|
5529
7362
|
function useSetRightMenuItems(rightMenuItems) {
|
|
5530
7363
|
const { menuManager } = useNoyaManager();
|
|
5531
|
-
(0,
|
|
7364
|
+
(0, import_react18.useEffect)(() => {
|
|
5532
7365
|
if (rightMenuItems) {
|
|
5533
7366
|
menuManager.setRightMenuItems(rightMenuItems);
|
|
5534
7367
|
}
|
|
@@ -5536,25 +7369,26 @@ function createNoyaContext({
|
|
|
5536
7369
|
}
|
|
5537
7370
|
function useHandleMenuItem(callback) {
|
|
5538
7371
|
const { menuManager } = useNoyaManager();
|
|
5539
|
-
(0,
|
|
7372
|
+
(0, import_react18.useEffect)(() => {
|
|
5540
7373
|
return menuManager.addListener(callback);
|
|
5541
7374
|
}, [menuManager, callback]);
|
|
5542
7375
|
}
|
|
5543
7376
|
function useOnSelectMenuItemCallback() {
|
|
5544
7377
|
const { menuManager } = useNoyaManager();
|
|
5545
|
-
return (0,
|
|
7378
|
+
return (0, import_react18.useCallback)((type) => menuManager.emit(type), [menuManager]);
|
|
5546
7379
|
}
|
|
5547
7380
|
function useMenu(options) {
|
|
5548
7381
|
const { leftMenuItems, rightMenuItems, onSelectMenuItem } = options;
|
|
5549
7382
|
useSetLeftMenuItems(leftMenuItems);
|
|
5550
7383
|
useSetRightMenuItems(rightMenuItems);
|
|
5551
|
-
const noop = (0,
|
|
7384
|
+
const noop = (0, import_react18.useCallback)(() => {
|
|
5552
7385
|
}, []);
|
|
5553
7386
|
useHandleMenuItem(onSelectMenuItem ?? noop);
|
|
5554
7387
|
}
|
|
5555
7388
|
return {
|
|
5556
7389
|
Context: NoyaStateContext,
|
|
5557
7390
|
Provider: NoyaStateProvider,
|
|
7391
|
+
NoyaContextProvider,
|
|
5558
7392
|
useValue,
|
|
5559
7393
|
useSetValue,
|
|
5560
7394
|
useValueState,
|
|
@@ -5574,7 +7408,7 @@ function createNoyaContext({
|
|
|
5574
7408
|
// src/ai.ts
|
|
5575
7409
|
function useRegisterAITool(tool) {
|
|
5576
7410
|
const aiManager = useAIManager();
|
|
5577
|
-
(0,
|
|
7411
|
+
(0, import_react19.useEffect)(() => {
|
|
5578
7412
|
return aiManager.registerTool(tool);
|
|
5579
7413
|
}, [aiManager, tool]);
|
|
5580
7414
|
}
|
|
@@ -5586,7 +7420,7 @@ function useCallableAITools() {
|
|
|
5586
7420
|
// src/components/UserPointersOverlay.tsx
|
|
5587
7421
|
var import_observable2 = require("@noya-app/observable");
|
|
5588
7422
|
var import_react_utils4 = require("@noya-app/react-utils");
|
|
5589
|
-
var
|
|
7423
|
+
var import_react20 = __toESM(require("react"));
|
|
5590
7424
|
function shouldShow(hideAfter, updatedAt) {
|
|
5591
7425
|
return !!updatedAt && Date.now() - updatedAt < hideAfter;
|
|
5592
7426
|
}
|
|
@@ -5596,7 +7430,7 @@ var UserPointerInternal = (0, import_react_utils4.memoGeneric)(function UserPoin
|
|
|
5596
7430
|
hideAfter = 5e3,
|
|
5597
7431
|
renderUserPointer
|
|
5598
7432
|
}) {
|
|
5599
|
-
const observable = (0,
|
|
7433
|
+
const observable = (0, import_react20.useMemo)(() => {
|
|
5600
7434
|
const metadata$ = ephemeralUserDataManager.metadata$.observePath([user.id]).throttle(50);
|
|
5601
7435
|
const data$ = ephemeralUserDataManager.data$.observePath([user.id]).throttle(50);
|
|
5602
7436
|
return import_observable2.Observable.combine([metadata$, data$], ([metadata2, data2]) => {
|
|
@@ -5604,10 +7438,10 @@ var UserPointerInternal = (0, import_react_utils4.memoGeneric)(function UserPoin
|
|
|
5604
7438
|
});
|
|
5605
7439
|
}, [ephemeralUserDataManager, user.id]);
|
|
5606
7440
|
const { metadata, data } = useObservable(observable);
|
|
5607
|
-
const [, setForceUpdate] = (0,
|
|
7441
|
+
const [, setForceUpdate] = (0, import_react20.useState)(0);
|
|
5608
7442
|
const updatedAt = metadata?.updatedAt ?? 0;
|
|
5609
7443
|
const show = shouldShow(hideAfter, updatedAt);
|
|
5610
|
-
(0,
|
|
7444
|
+
(0, import_react20.useEffect)(() => {
|
|
5611
7445
|
if (!show) return;
|
|
5612
7446
|
const timeoutId = setTimeout(() => {
|
|
5613
7447
|
setForceUpdate((prev) => prev + 1);
|
|
@@ -5629,9 +7463,9 @@ var UserPointersOverlay = (0, import_react_utils4.memoGeneric)(function UserPoin
|
|
|
5629
7463
|
}) {
|
|
5630
7464
|
const currentUserId = useObservable(ephemeralUserDataManager.currentUserId$);
|
|
5631
7465
|
const connectedUsers = useObservable(connectedUsersManager.connectedUsers$);
|
|
5632
|
-
return /* @__PURE__ */
|
|
7466
|
+
return /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, connectedUsers.map((user) => {
|
|
5633
7467
|
if (user.id === currentUserId) return null;
|
|
5634
|
-
return /* @__PURE__ */
|
|
7468
|
+
return /* @__PURE__ */ import_react20.default.createElement(
|
|
5635
7469
|
UserPointerInternal,
|
|
5636
7470
|
{
|
|
5637
7471
|
key: user.id,
|
|
@@ -5644,17 +7478,17 @@ var UserPointersOverlay = (0, import_react_utils4.memoGeneric)(function UserPoin
|
|
|
5644
7478
|
});
|
|
5645
7479
|
|
|
5646
7480
|
// src/WebSocketConnection.ts
|
|
5647
|
-
var
|
|
7481
|
+
var import_state_manager4 = require("@noya-app/state-manager");
|
|
5648
7482
|
var WebSocketConnection = class {
|
|
5649
7483
|
constructor(url, options = {}) {
|
|
5650
7484
|
this.url = url;
|
|
5651
7485
|
this.options = options;
|
|
5652
|
-
this.ws = new
|
|
7486
|
+
this.ws = new import_state_manager4.ReconnectingWebSocket({
|
|
5653
7487
|
debug: options.debug,
|
|
5654
7488
|
onopen: this.handleOpen,
|
|
5655
7489
|
onmessage: this.handleMessage,
|
|
5656
7490
|
onclose: this.handleClose,
|
|
5657
|
-
activityDetector: new
|
|
7491
|
+
activityDetector: new import_state_manager4.UserActivityDetector()
|
|
5658
7492
|
});
|
|
5659
7493
|
}
|
|
5660
7494
|
ws;
|
|
@@ -5731,10 +7565,19 @@ var WebSocketConnection = class {
|
|
|
5731
7565
|
WebSocketConnection,
|
|
5732
7566
|
createDefaultAppData,
|
|
5733
7567
|
createNoyaContext,
|
|
7568
|
+
decodeAll,
|
|
7569
|
+
encodeAll,
|
|
5734
7570
|
enforceSchema,
|
|
7571
|
+
exportAll,
|
|
7572
|
+
fetchAssetMap,
|
|
5735
7573
|
getAppData,
|
|
7574
|
+
importAll,
|
|
5736
7575
|
parseAppDataParameter,
|
|
7576
|
+
replaceDeep,
|
|
7577
|
+
resourceToMediaItem,
|
|
5737
7578
|
useAIManager,
|
|
7579
|
+
useActivityEvents,
|
|
7580
|
+
useActivityEventsForManager,
|
|
5738
7581
|
useAnyEphemeralUserData,
|
|
5739
7582
|
useAnyNoyaManager,
|
|
5740
7583
|
useAnyNoyaStateContext,
|
|
@@ -5743,11 +7586,14 @@ var WebSocketConnection = class {
|
|
|
5743
7586
|
useAssets,
|
|
5744
7587
|
useCallableAITools,
|
|
5745
7588
|
useColorScheme,
|
|
7589
|
+
useConnectedUser,
|
|
7590
|
+
useConnectedUsers,
|
|
5746
7591
|
useConnectedUsersManager,
|
|
5747
7592
|
useCurrentUserId,
|
|
5748
7593
|
useIOManager,
|
|
5749
7594
|
useInputs,
|
|
5750
7595
|
useIsInitialized,
|
|
7596
|
+
useIsProcessing,
|
|
5751
7597
|
useManagedHistory,
|
|
5752
7598
|
useManagedState,
|
|
5753
7599
|
useMultiplayerState,
|
|
@@ -5757,6 +7603,8 @@ var WebSocketConnection = class {
|
|
|
5757
7603
|
usePipelineManager,
|
|
5758
7604
|
usePublish,
|
|
5759
7605
|
useRegisterAITool,
|
|
7606
|
+
useResourceManager,
|
|
7607
|
+
useResources,
|
|
5760
7608
|
useSecret,
|
|
5761
7609
|
useSecretManager,
|
|
5762
7610
|
useSecrets,
|