@arcanewizards/timecode-toolbox 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/components/frontend/index.js +865 -272
- package/dist/components/frontend/index.mjs +855 -262
- package/dist/entrypoint.css +163 -53
- package/dist/entrypoint.js +1474 -493
- package/dist/entrypoint.js.map +4 -4
- package/dist/frontend.js +1474 -493
- package/dist/frontend.js.map +4 -4
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +308 -37
- package/dist/index.mjs +329 -49
- package/dist/start.d.mts +1 -2
- package/dist/start.d.ts +1 -2
- package/dist/start.js +311 -38
- package/dist/start.mjs +332 -50
- package/package.json +12 -6
- package/.turbo/turbo-build.log +0 -58
- package/.turbo/turbo-lint.log +0 -4
- package/CHANGELOG.md +0 -40
- package/eslint.config.mjs +0 -49
- package/src/app.tsx +0 -147
- package/src/components/backend/index.ts +0 -6
- package/src/components/backend/toolbox-root.ts +0 -119
- package/src/components/frontend/constants.ts +0 -81
- package/src/components/frontend/entrypoint.ts +0 -12
- package/src/components/frontend/frontend.css +0 -108
- package/src/components/frontend/index.tsx +0 -46
- package/src/components/frontend/toolbox/content.tsx +0 -45
- package/src/components/frontend/toolbox/context.tsx +0 -63
- package/src/components/frontend/toolbox/core/size-aware-div.tsx +0 -51
- package/src/components/frontend/toolbox/core/timecode-display.tsx +0 -592
- package/src/components/frontend/toolbox/generators.tsx +0 -318
- package/src/components/frontend/toolbox/inputs.tsx +0 -484
- package/src/components/frontend/toolbox/outputs.tsx +0 -581
- package/src/components/frontend/toolbox/preferences.ts +0 -25
- package/src/components/frontend/toolbox/root.tsx +0 -335
- package/src/components/frontend/toolbox/settings.tsx +0 -54
- package/src/components/frontend/toolbox/types.ts +0 -28
- package/src/components/frontend/toolbox/util.tsx +0 -61
- package/src/components/proto.ts +0 -420
- package/src/config.ts +0 -7
- package/src/generators/clock.tsx +0 -206
- package/src/generators/index.tsx +0 -15
- package/src/index.ts +0 -38
- package/src/inputs/artnet.tsx +0 -305
- package/src/inputs/index.tsx +0 -13
- package/src/inputs/tcnet.tsx +0 -272
- package/src/outputs/artnet.tsx +0 -170
- package/src/outputs/index.tsx +0 -11
- package/src/start.ts +0 -47
- package/src/tree.ts +0 -133
- package/src/types.ts +0 -12
- package/src/urls.ts +0 -49
- package/src/util.ts +0 -82
- package/tailwind.config.cjs +0 -7
- package/tsconfig.json +0 -10
- package/tsup.config.ts +0 -10
package/dist/start.mjs
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
6
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var
|
|
8
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
9
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
10
|
+
}) : x)(function(x) {
|
|
11
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
12
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
13
|
+
});
|
|
14
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
8
15
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
9
16
|
};
|
|
10
17
|
var __export = (target, all) => {
|
|
@@ -1809,6 +1816,7 @@ var runSigilApp = ({
|
|
|
1809
1816
|
logger: upstreamLogger,
|
|
1810
1817
|
title,
|
|
1811
1818
|
version: version2,
|
|
1819
|
+
edition,
|
|
1812
1820
|
appProps,
|
|
1813
1821
|
toolkitOptions,
|
|
1814
1822
|
createApp: createApp2,
|
|
@@ -1867,10 +1875,10 @@ var runSigilApp = ({
|
|
|
1867
1875
|
logger2.info(`${title} ready to start listening`);
|
|
1868
1876
|
}
|
|
1869
1877
|
});
|
|
1870
|
-
let
|
|
1878
|
+
let api2 = null;
|
|
1871
1879
|
const apiListeners = /* @__PURE__ */ new Set();
|
|
1872
1880
|
const setAppApi = (value) => {
|
|
1873
|
-
|
|
1881
|
+
api2 = value;
|
|
1874
1882
|
for (const listener of apiListeners) {
|
|
1875
1883
|
listener(value);
|
|
1876
1884
|
}
|
|
@@ -1903,6 +1911,7 @@ var runSigilApp = ({
|
|
|
1903
1911
|
createApp2({
|
|
1904
1912
|
title,
|
|
1905
1913
|
version: version2,
|
|
1914
|
+
edition,
|
|
1906
1915
|
toolkit,
|
|
1907
1916
|
logger: logger2,
|
|
1908
1917
|
logEventEmitter,
|
|
@@ -1922,8 +1931,8 @@ var runSigilApp = ({
|
|
|
1922
1931
|
if (event === "apiChange") {
|
|
1923
1932
|
const apiListener = listener;
|
|
1924
1933
|
apiListeners.add(apiListener);
|
|
1925
|
-
if (
|
|
1926
|
-
apiListener(
|
|
1934
|
+
if (api2) {
|
|
1935
|
+
apiListener(api2);
|
|
1927
1936
|
}
|
|
1928
1937
|
return;
|
|
1929
1938
|
}
|
|
@@ -2137,10 +2146,10 @@ var AppListenerManager = ({
|
|
|
2137
2146
|
|
|
2138
2147
|
// src/app.tsx
|
|
2139
2148
|
import {
|
|
2140
|
-
useCallback as
|
|
2141
|
-
useEffect as
|
|
2142
|
-
useMemo as
|
|
2143
|
-
useState as
|
|
2149
|
+
useCallback as useCallback7,
|
|
2150
|
+
useEffect as useEffect11,
|
|
2151
|
+
useMemo as useMemo6,
|
|
2152
|
+
useState as useState7
|
|
2144
2153
|
} from "react";
|
|
2145
2154
|
|
|
2146
2155
|
// src/components/backend/index.ts
|
|
@@ -6292,12 +6301,18 @@ var OUTPUT_CONFIG = zod_default.object({
|
|
|
6292
6301
|
var TOOLBOX_CONFIG = zod_default.object({
|
|
6293
6302
|
inputs: zod_default.record(zod_default.string(), INPUT_CONFIG),
|
|
6294
6303
|
generators: zod_default.record(zod_default.string(), GENERATOR_CONFIG),
|
|
6295
|
-
outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG)
|
|
6304
|
+
outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG),
|
|
6305
|
+
/**
|
|
6306
|
+
* Hash of the license the user has agreed to.
|
|
6307
|
+
*/
|
|
6308
|
+
agreedToLicense: zod_default.string().optional(),
|
|
6309
|
+
checkForUpdates: zod_default.boolean().optional().default(true)
|
|
6296
6310
|
});
|
|
6297
6311
|
var DEFAULT_CONFIG = {
|
|
6298
6312
|
inputs: {},
|
|
6299
6313
|
generators: {},
|
|
6300
|
-
outputs: {}
|
|
6314
|
+
outputs: {},
|
|
6315
|
+
checkForUpdates: true
|
|
6301
6316
|
};
|
|
6302
6317
|
var isPlaying = (state) => state.state === "playing" || state.state === "lagging";
|
|
6303
6318
|
var isStopped = (state) => state.state === "stopped";
|
|
@@ -6313,9 +6328,11 @@ var DEFAULT_PROPS2 = {
|
|
|
6313
6328
|
state: {
|
|
6314
6329
|
inputs: {},
|
|
6315
6330
|
outputs: {},
|
|
6316
|
-
generators: {}
|
|
6331
|
+
generators: {},
|
|
6332
|
+
updates: null
|
|
6317
6333
|
},
|
|
6318
|
-
handlers: { children: {} }
|
|
6334
|
+
handlers: { children: {} },
|
|
6335
|
+
license: ""
|
|
6319
6336
|
};
|
|
6320
6337
|
var ToolboxRoot = class extends Base {
|
|
6321
6338
|
/** @hidden */
|
|
@@ -6343,7 +6360,8 @@ var ToolboxRoot = class extends Base {
|
|
|
6343
6360
|
key: idMap.getId(this),
|
|
6344
6361
|
config: this.props.config,
|
|
6345
6362
|
state: this.props.state,
|
|
6346
|
-
handlers: this.props.handlers
|
|
6363
|
+
handlers: this.props.handlers,
|
|
6364
|
+
license: this.props.license
|
|
6347
6365
|
};
|
|
6348
6366
|
}
|
|
6349
6367
|
/** @hidden */
|
|
@@ -6372,9 +6390,56 @@ var ToolboxRoot = class extends Base {
|
|
|
6372
6390
|
};
|
|
6373
6391
|
};
|
|
6374
6392
|
|
|
6393
|
+
// src/components/backend/license-gate.ts
|
|
6394
|
+
import {
|
|
6395
|
+
Base as Base2,
|
|
6396
|
+
EventEmitter as EventEmitter4
|
|
6397
|
+
} from "@arcanejs/toolkit/components/base";
|
|
6398
|
+
var DEFAULT_PROPS3 = {
|
|
6399
|
+
license: "",
|
|
6400
|
+
hash: ""
|
|
6401
|
+
};
|
|
6402
|
+
var LicenseGate = class extends Base2 {
|
|
6403
|
+
/** @hidden */
|
|
6404
|
+
events = new EventEmitter4();
|
|
6405
|
+
constructor(props) {
|
|
6406
|
+
super(DEFAULT_PROPS3, props, {
|
|
6407
|
+
onPropsUpdated: (oldProps) => this.events.processPropChanges(
|
|
6408
|
+
{
|
|
6409
|
+
onAcceptLicense: "acceptLicense"
|
|
6410
|
+
},
|
|
6411
|
+
oldProps,
|
|
6412
|
+
this.props
|
|
6413
|
+
)
|
|
6414
|
+
});
|
|
6415
|
+
this.triggerInitialPropsUpdate();
|
|
6416
|
+
}
|
|
6417
|
+
addListener = this.events.addListener;
|
|
6418
|
+
removeListener = this.events.removeListener;
|
|
6419
|
+
/** @hidden */
|
|
6420
|
+
getProtoInfo(idMap) {
|
|
6421
|
+
return {
|
|
6422
|
+
namespace: "timecode-toolbox",
|
|
6423
|
+
component: "license-gate",
|
|
6424
|
+
key: idMap.getId(this),
|
|
6425
|
+
license: this.props.license,
|
|
6426
|
+
hash: this.props.hash
|
|
6427
|
+
};
|
|
6428
|
+
}
|
|
6429
|
+
/** @hidden */
|
|
6430
|
+
handleMessage = (message) => {
|
|
6431
|
+
if (isTimecodeToolboxComponentMessage(message, "license-gate")) {
|
|
6432
|
+
if (message.action === "accept-license") {
|
|
6433
|
+
this.events.emit("acceptLicense", message.hash);
|
|
6434
|
+
}
|
|
6435
|
+
}
|
|
6436
|
+
};
|
|
6437
|
+
};
|
|
6438
|
+
|
|
6375
6439
|
// src/components/backend/index.ts
|
|
6376
6440
|
var C = prepareComponents2("timecode-toolbox", {
|
|
6377
|
-
ToolboxRoot
|
|
6441
|
+
ToolboxRoot,
|
|
6442
|
+
LicenseGate
|
|
6378
6443
|
});
|
|
6379
6444
|
|
|
6380
6445
|
// src/config.ts
|
|
@@ -6458,7 +6523,7 @@ var TIMECODE_FPS = {
|
|
|
6458
6523
|
|
|
6459
6524
|
// ../../packages/artnet/dist/index.js
|
|
6460
6525
|
import { createSocket } from "dgram";
|
|
6461
|
-
import
|
|
6526
|
+
import EventEmitter5 from "events";
|
|
6462
6527
|
var ARTNET_HEADER = "Art-Net\0";
|
|
6463
6528
|
var ARTNET_VERSION = 14;
|
|
6464
6529
|
var OP_TIME_CODE = 38656;
|
|
@@ -6575,7 +6640,7 @@ var parseTimecodePacket = (packet, source) => {
|
|
|
6575
6640
|
};
|
|
6576
6641
|
};
|
|
6577
6642
|
var createArtnet = (config) => {
|
|
6578
|
-
const events = new
|
|
6643
|
+
const events = new EventEmitter5();
|
|
6579
6644
|
let sendSocket = null;
|
|
6580
6645
|
let receiveSocket = null;
|
|
6581
6646
|
let destroyed = false;
|
|
@@ -6976,7 +7041,7 @@ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
|
|
|
6976
7041
|
var __getOwnPropNames2 = Object.getOwnPropertyNames;
|
|
6977
7042
|
var __getProtoOf2 = Object.getPrototypeOf;
|
|
6978
7043
|
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
6979
|
-
var __commonJS2 = (cb, mod) => function
|
|
7044
|
+
var __commonJS2 = (cb, mod) => function __require2() {
|
|
6980
7045
|
return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
6981
7046
|
};
|
|
6982
7047
|
var __copyProps2 = (to, from, except, desc) => {
|
|
@@ -7515,7 +7580,7 @@ var calculateUniqueNodeId = (info) => {
|
|
|
7515
7580
|
|
|
7516
7581
|
// ../../packages/tcnet/dist/index.js
|
|
7517
7582
|
import { createSocket as createSocket2 } from "dgram";
|
|
7518
|
-
import
|
|
7583
|
+
import EventEmitter6 from "events";
|
|
7519
7584
|
import { promisify } from "util";
|
|
7520
7585
|
var require_lodash = __commonJS2({
|
|
7521
7586
|
"../../node_modules/.pnpm/lodash@4.17.23/node_modules/lodash/lodash.js"(exports, module) {
|
|
@@ -13034,7 +13099,7 @@ var bindSocket2 = (socket, port, address) => {
|
|
|
13034
13099
|
};
|
|
13035
13100
|
var createTCNetNode = (props) => {
|
|
13036
13101
|
const { logger: logger2 } = props;
|
|
13037
|
-
const events = new
|
|
13102
|
+
const events = new EventEmitter6();
|
|
13038
13103
|
let iface = null;
|
|
13039
13104
|
const sockets = {
|
|
13040
13105
|
broadcastSend: null,
|
|
@@ -13545,7 +13610,7 @@ var createTCNetNode = (props) => {
|
|
|
13545
13610
|
};
|
|
13546
13611
|
|
|
13547
13612
|
// ../../packages/tcnet/dist/monitor.js
|
|
13548
|
-
import
|
|
13613
|
+
import EventEmitter7 from "events";
|
|
13549
13614
|
var MAX_DELTA_MS = 10;
|
|
13550
13615
|
var layerDataIdToIndex = (dataLayerId) => {
|
|
13551
13616
|
return dataLayerId - 1;
|
|
@@ -13564,7 +13629,7 @@ var TCNET_LAYER_INDEXES = Array.from(
|
|
|
13564
13629
|
(_, i) => asLayerIndex(i)
|
|
13565
13630
|
);
|
|
13566
13631
|
var createTCNetTimecodeMonitor = (tcNetNode, logger2) => {
|
|
13567
|
-
const events = new
|
|
13632
|
+
const events = new EventEmitter7();
|
|
13568
13633
|
const on = events.on.bind(events);
|
|
13569
13634
|
const addListener = events.addListener.bind(events);
|
|
13570
13635
|
const removeListener = events.removeListener.bind(events);
|
|
@@ -14470,11 +14535,179 @@ var Generators = (props) => {
|
|
|
14470
14535
|
return /* @__PURE__ */ jsx8(Fragment3, { children: /* @__PURE__ */ jsx8(ClockGenerators, { ...props }) });
|
|
14471
14536
|
};
|
|
14472
14537
|
|
|
14538
|
+
// src/license.ts
|
|
14539
|
+
import { createHash } from "crypto";
|
|
14540
|
+
import { readFile } from "fs/promises";
|
|
14541
|
+
import { useEffect as useEffect9, useState as useState6 } from "react";
|
|
14542
|
+
var getLicense = async () => {
|
|
14543
|
+
const licenseText = await readFile(__require.resolve("../LICENSE"), "utf-8");
|
|
14544
|
+
const hash = createHash("sha256").update(licenseText).digest("hex");
|
|
14545
|
+
return { text: licenseText, hash };
|
|
14546
|
+
};
|
|
14547
|
+
var useLicense = () => {
|
|
14548
|
+
const [license, setLicense] = useState6(null);
|
|
14549
|
+
useEffect9(() => {
|
|
14550
|
+
getLicense().then(setLicense);
|
|
14551
|
+
}, []);
|
|
14552
|
+
return license;
|
|
14553
|
+
};
|
|
14554
|
+
|
|
14555
|
+
// src/updates.tsx
|
|
14556
|
+
import { useCallback as useCallback6, useEffect as useEffect10, useMemo as useMemo5 } from "react";
|
|
14557
|
+
|
|
14558
|
+
// ../../packages/apis/dist/index.js
|
|
14559
|
+
var APP_PLATFORM = zod_default.enum(["windows", "macos", "linux"]);
|
|
14560
|
+
var APP_ARCHITECTURE = zod_default.enum(["x64", "arm64"]);
|
|
14561
|
+
var APP_EDITION = zod_default.enum(["desktop", "cli"]);
|
|
14562
|
+
var CHECK_FOR_UPDATES_REQUEST = zod_default.object({
|
|
14563
|
+
app: zod_default.string(),
|
|
14564
|
+
edition: APP_EDITION,
|
|
14565
|
+
platform: APP_PLATFORM,
|
|
14566
|
+
architecture: APP_ARCHITECTURE,
|
|
14567
|
+
currentVersion: zod_default.string()
|
|
14568
|
+
});
|
|
14569
|
+
var CHECK_FOR_UPDATES_VERSION = zod_default.object({
|
|
14570
|
+
version: zod_default.string(),
|
|
14571
|
+
releaseNotes: zod_default.string()
|
|
14572
|
+
});
|
|
14573
|
+
var CHECK_FOR_UPDATES_RESPONSE = zod_default.object({
|
|
14574
|
+
downloadUrl: zod_default.string().optional(),
|
|
14575
|
+
latestVersion: zod_default.string(),
|
|
14576
|
+
newVersions: zod_default.array(CHECK_FOR_UPDATES_VERSION).optional()
|
|
14577
|
+
});
|
|
14578
|
+
var ApiError = class extends Error {
|
|
14579
|
+
constructor(message, response) {
|
|
14580
|
+
super(message);
|
|
14581
|
+
this.response = response;
|
|
14582
|
+
this.name = "ApiError";
|
|
14583
|
+
}
|
|
14584
|
+
};
|
|
14585
|
+
var api = (baseUrl) => {
|
|
14586
|
+
const checkForUpdates = async (request) => {
|
|
14587
|
+
const response = await fetch(new URL("/api/v1/updates", baseUrl), {
|
|
14588
|
+
method: "POST",
|
|
14589
|
+
headers: { "Content-Type": "application/json" },
|
|
14590
|
+
body: JSON.stringify(request)
|
|
14591
|
+
});
|
|
14592
|
+
if (!response.ok) {
|
|
14593
|
+
throw new ApiError(
|
|
14594
|
+
`Failed to check for updates: ${response.statusText} - ${await response.text()}`,
|
|
14595
|
+
response
|
|
14596
|
+
);
|
|
14597
|
+
}
|
|
14598
|
+
const responseData = await response.json();
|
|
14599
|
+
return CHECK_FOR_UPDATES_RESPONSE.parse(responseData);
|
|
14600
|
+
};
|
|
14601
|
+
return {
|
|
14602
|
+
checkForUpdates
|
|
14603
|
+
};
|
|
14604
|
+
};
|
|
14605
|
+
|
|
14606
|
+
// src/updates.tsx
|
|
14607
|
+
var getAppPlatform = () => {
|
|
14608
|
+
switch (process.platform) {
|
|
14609
|
+
case "win32":
|
|
14610
|
+
return "windows";
|
|
14611
|
+
case "darwin":
|
|
14612
|
+
return "macos";
|
|
14613
|
+
case "linux":
|
|
14614
|
+
return "linux";
|
|
14615
|
+
default:
|
|
14616
|
+
throw new Error(`Unsupported platform: ${process.platform}`);
|
|
14617
|
+
}
|
|
14618
|
+
};
|
|
14619
|
+
var getAppArchitecture = () => {
|
|
14620
|
+
switch (process.arch) {
|
|
14621
|
+
case "x64":
|
|
14622
|
+
return "x64";
|
|
14623
|
+
case "arm64":
|
|
14624
|
+
return "arm64";
|
|
14625
|
+
default:
|
|
14626
|
+
throw new Error(`Unsupported architecture: ${process.arch}`);
|
|
14627
|
+
}
|
|
14628
|
+
};
|
|
14629
|
+
var UpdateChecker = ({
|
|
14630
|
+
apiBaseUrl,
|
|
14631
|
+
version: version2,
|
|
14632
|
+
edition,
|
|
14633
|
+
setUpdateState
|
|
14634
|
+
}) => {
|
|
14635
|
+
const a = useMemo5(() => api(apiBaseUrl), [apiBaseUrl]);
|
|
14636
|
+
const logger2 = useLogger();
|
|
14637
|
+
const checkForUpdates = useCallback6(() => {
|
|
14638
|
+
const lastCheckedMillis = Date.now();
|
|
14639
|
+
setUpdateState({ type: "loading" });
|
|
14640
|
+
a.checkForUpdates({
|
|
14641
|
+
app: "timecode-toolbox",
|
|
14642
|
+
edition,
|
|
14643
|
+
platform: getAppPlatform(),
|
|
14644
|
+
architecture: getAppArchitecture(),
|
|
14645
|
+
currentVersion: version2
|
|
14646
|
+
}).then((response) => {
|
|
14647
|
+
if (!response.newVersions || response.newVersions.length === 0) {
|
|
14648
|
+
setUpdateState({ type: "up-to-date", lastCheckedMillis });
|
|
14649
|
+
logger2.info("No updates available");
|
|
14650
|
+
return;
|
|
14651
|
+
}
|
|
14652
|
+
setUpdateState({
|
|
14653
|
+
type: "updates-available",
|
|
14654
|
+
lastCheckedMillis,
|
|
14655
|
+
response
|
|
14656
|
+
});
|
|
14657
|
+
logger2.info(
|
|
14658
|
+
`Update available: ${response.latestVersion} - Download at ${response.downloadUrl}`
|
|
14659
|
+
);
|
|
14660
|
+
}).catch((error) => {
|
|
14661
|
+
const err = new Error("Failed to check for updates");
|
|
14662
|
+
err.cause = error instanceof Error ? error : new Error(String(error));
|
|
14663
|
+
setUpdateState({
|
|
14664
|
+
lastCheckedMillis,
|
|
14665
|
+
type: "error",
|
|
14666
|
+
error: String(err)
|
|
14667
|
+
});
|
|
14668
|
+
logger2.error(err);
|
|
14669
|
+
});
|
|
14670
|
+
}, [a, setUpdateState, edition, logger2, version2]);
|
|
14671
|
+
useEffect10(() => {
|
|
14672
|
+
checkForUpdates();
|
|
14673
|
+
const interval = setInterval(checkForUpdates, 1e3 * 60 * 60);
|
|
14674
|
+
return () => clearInterval(interval);
|
|
14675
|
+
}, [checkForUpdates]);
|
|
14676
|
+
useEffect10(() => {
|
|
14677
|
+
return () => {
|
|
14678
|
+
setUpdateState(null);
|
|
14679
|
+
};
|
|
14680
|
+
}, [setUpdateState]);
|
|
14681
|
+
return null;
|
|
14682
|
+
};
|
|
14683
|
+
|
|
14684
|
+
// src/env.ts
|
|
14685
|
+
var getEnv = (logger2) => {
|
|
14686
|
+
const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : {
|
|
14687
|
+
from: 4100,
|
|
14688
|
+
to: 4200
|
|
14689
|
+
};
|
|
14690
|
+
let API_BASE_URL;
|
|
14691
|
+
try {
|
|
14692
|
+
API_BASE_URL = process.env.API_BASE_URL ? new URL(process.env.API_BASE_URL) : new URL("https://arcanewizards.com");
|
|
14693
|
+
} catch (error) {
|
|
14694
|
+
const err = new Error(`Invalid API_BASE_URL: ${process.env.API_BASE_URL}`);
|
|
14695
|
+
err.cause = error instanceof Error ? error : new Error(String(error));
|
|
14696
|
+
logger2.error(err);
|
|
14697
|
+
throw err;
|
|
14698
|
+
}
|
|
14699
|
+
return {
|
|
14700
|
+
PORT,
|
|
14701
|
+
API_BASE_URL
|
|
14702
|
+
};
|
|
14703
|
+
};
|
|
14704
|
+
|
|
14473
14705
|
// src/app.tsx
|
|
14474
|
-
import { jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
14706
|
+
import { Fragment as Fragment4, jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
14475
14707
|
var App = ({
|
|
14476
14708
|
title,
|
|
14477
14709
|
version: version2,
|
|
14710
|
+
edition,
|
|
14478
14711
|
toolkit,
|
|
14479
14712
|
dataDirectory,
|
|
14480
14713
|
logger: logger2,
|
|
@@ -14482,8 +14715,9 @@ var App = ({
|
|
|
14482
14715
|
setWindowUrl,
|
|
14483
14716
|
shutdownContext
|
|
14484
14717
|
}) => {
|
|
14718
|
+
const env = useMemo6(() => getEnv(logger2), [logger2]);
|
|
14485
14719
|
const { data, error, updateData, resetData } = useDataFileContext(ToolboxConfigData);
|
|
14486
|
-
|
|
14720
|
+
useEffect11(() => {
|
|
14487
14721
|
if (error) {
|
|
14488
14722
|
logger2.warn("Resetting config to application default");
|
|
14489
14723
|
resetData();
|
|
@@ -14492,13 +14726,20 @@ var App = ({
|
|
|
14492
14726
|
const onUpdateConfig = (diff) => {
|
|
14493
14727
|
updateData((prev) => patchJson(prev, diff) ?? DEFAULT_CONFIG);
|
|
14494
14728
|
};
|
|
14495
|
-
const [state, setState] =
|
|
14729
|
+
const [state, setState] = useState7({
|
|
14496
14730
|
inputs: {},
|
|
14497
14731
|
outputs: {},
|
|
14498
|
-
generators: {}
|
|
14732
|
+
generators: {},
|
|
14733
|
+
updates: null
|
|
14499
14734
|
});
|
|
14500
|
-
const
|
|
14501
|
-
|
|
14735
|
+
const setUpdateState = useCallback7((updates) => {
|
|
14736
|
+
setState((prev) => ({
|
|
14737
|
+
...prev,
|
|
14738
|
+
updates
|
|
14739
|
+
}));
|
|
14740
|
+
}, []);
|
|
14741
|
+
const [handlers, setHandlers] = useState7({ children: {} });
|
|
14742
|
+
const availableHandlers = useMemo6(
|
|
14502
14743
|
() => mapTree(
|
|
14503
14744
|
handlers,
|
|
14504
14745
|
(node) => Object.fromEntries(
|
|
@@ -14507,7 +14748,7 @@ var App = ({
|
|
|
14507
14748
|
),
|
|
14508
14749
|
[handlers]
|
|
14509
14750
|
);
|
|
14510
|
-
const callHandler =
|
|
14751
|
+
const callHandler = useCallback7(
|
|
14511
14752
|
async (call) => {
|
|
14512
14753
|
const handlerFunc = getTreeValue(handlers, call.path)?.[call.handler];
|
|
14513
14754
|
if (handlerFunc) {
|
|
@@ -14519,6 +14760,54 @@ var App = ({
|
|
|
14519
14760
|
},
|
|
14520
14761
|
[handlers]
|
|
14521
14762
|
);
|
|
14763
|
+
const license = useLicense();
|
|
14764
|
+
const appListenerConfig = useMemo6(
|
|
14765
|
+
() => ({
|
|
14766
|
+
default: {
|
|
14767
|
+
port: env.PORT
|
|
14768
|
+
}
|
|
14769
|
+
}),
|
|
14770
|
+
[env.PORT]
|
|
14771
|
+
);
|
|
14772
|
+
if (!license) {
|
|
14773
|
+
return;
|
|
14774
|
+
}
|
|
14775
|
+
const children = data.agreedToLicense === license.hash ? /* @__PURE__ */ jsxs2(Fragment4, { children: [
|
|
14776
|
+
/* @__PURE__ */ jsx9(
|
|
14777
|
+
C.ToolboxRoot,
|
|
14778
|
+
{
|
|
14779
|
+
config: data,
|
|
14780
|
+
state,
|
|
14781
|
+
handlers: availableHandlers,
|
|
14782
|
+
onUpdateConfig,
|
|
14783
|
+
onCallHandler: callHandler,
|
|
14784
|
+
license: license.text
|
|
14785
|
+
}
|
|
14786
|
+
),
|
|
14787
|
+
/* @__PURE__ */ jsx9(InputConnections, { state, setState }),
|
|
14788
|
+
/* @__PURE__ */ jsx9(
|
|
14789
|
+
Generators,
|
|
14790
|
+
{
|
|
14791
|
+
state,
|
|
14792
|
+
setState,
|
|
14793
|
+
setHandlers
|
|
14794
|
+
}
|
|
14795
|
+
),
|
|
14796
|
+
/* @__PURE__ */ jsx9(OutputConnections, { state, setState })
|
|
14797
|
+
] }) : /* @__PURE__ */ jsx9(
|
|
14798
|
+
C.LicenseGate,
|
|
14799
|
+
{
|
|
14800
|
+
license: license.text,
|
|
14801
|
+
hash: license.hash,
|
|
14802
|
+
onAcceptLicense: (agreedToLicense) => {
|
|
14803
|
+
logger2.info(`License accepted: ${agreedToLicense}`);
|
|
14804
|
+
updateData((current) => ({
|
|
14805
|
+
...current,
|
|
14806
|
+
agreedToLicense
|
|
14807
|
+
}));
|
|
14808
|
+
}
|
|
14809
|
+
}
|
|
14810
|
+
);
|
|
14522
14811
|
return /* @__PURE__ */ jsxs2(
|
|
14523
14812
|
AppShell,
|
|
14524
14813
|
{
|
|
@@ -14529,32 +14818,22 @@ var App = ({
|
|
|
14529
14818
|
logEventEmitter,
|
|
14530
14819
|
shutdownContext,
|
|
14531
14820
|
children: [
|
|
14532
|
-
|
|
14533
|
-
|
|
14821
|
+
children,
|
|
14822
|
+
data.checkForUpdates && /* @__PURE__ */ jsx9(
|
|
14823
|
+
UpdateChecker,
|
|
14534
14824
|
{
|
|
14535
|
-
|
|
14536
|
-
|
|
14537
|
-
|
|
14538
|
-
|
|
14539
|
-
onCallHandler: callHandler
|
|
14825
|
+
version: version2,
|
|
14826
|
+
edition,
|
|
14827
|
+
apiBaseUrl: env.API_BASE_URL,
|
|
14828
|
+
setUpdateState
|
|
14540
14829
|
}
|
|
14541
14830
|
),
|
|
14542
|
-
/* @__PURE__ */ jsx9(InputConnections, { state, setState }),
|
|
14543
|
-
/* @__PURE__ */ jsx9(Generators, { state, setState, setHandlers }),
|
|
14544
|
-
/* @__PURE__ */ jsx9(OutputConnections, { state, setState }),
|
|
14545
14831
|
/* @__PURE__ */ jsx9(
|
|
14546
14832
|
AppListenerManager,
|
|
14547
14833
|
{
|
|
14548
14834
|
toolkit,
|
|
14549
14835
|
setWindowUrl,
|
|
14550
|
-
listenerConfig:
|
|
14551
|
-
default: {
|
|
14552
|
-
port: {
|
|
14553
|
-
from: 4100,
|
|
14554
|
-
to: 4200
|
|
14555
|
-
}
|
|
14556
|
-
}
|
|
14557
|
-
}
|
|
14836
|
+
listenerConfig: appListenerConfig
|
|
14558
14837
|
}
|
|
14559
14838
|
)
|
|
14560
14839
|
]
|
|
@@ -14572,18 +14851,20 @@ var createApp = (props) => {
|
|
|
14572
14851
|
};
|
|
14573
14852
|
|
|
14574
14853
|
// package.json
|
|
14575
|
-
var version = "0.1.
|
|
14854
|
+
var version = "0.1.1";
|
|
14576
14855
|
|
|
14577
14856
|
// src/index.ts
|
|
14578
14857
|
var runTimecodeToolboxServer = ({
|
|
14579
14858
|
logger: logger2,
|
|
14580
14859
|
appProps,
|
|
14581
14860
|
toolkitOptions,
|
|
14582
|
-
title
|
|
14861
|
+
title,
|
|
14862
|
+
edition
|
|
14583
14863
|
}) => runSigilApp({
|
|
14584
14864
|
logger: logger2,
|
|
14585
14865
|
title,
|
|
14586
14866
|
version,
|
|
14867
|
+
edition,
|
|
14587
14868
|
appProps,
|
|
14588
14869
|
toolkitOptions,
|
|
14589
14870
|
createApp,
|
|
@@ -14607,7 +14888,8 @@ var server = runTimecodeToolboxServer({
|
|
|
14607
14888
|
toolkitOptions: {
|
|
14608
14889
|
entrypointJsFile: path2.join(path2.dirname(__dirname), "dist/entrypoint.js")
|
|
14609
14890
|
},
|
|
14610
|
-
title: "Timecode Toolbox Server"
|
|
14891
|
+
title: "Timecode Toolbox Server",
|
|
14892
|
+
edition: "cli"
|
|
14611
14893
|
});
|
|
14612
14894
|
var shutdown = () => server.shutdown().catch((err) => {
|
|
14613
14895
|
logger.error({ err }, "Error during shutdown");
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arcanewizards/timecode-toolbox",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"private": false,
|
|
5
|
+
"license": "MIT",
|
|
5
6
|
"repository": {
|
|
6
7
|
"type": "git",
|
|
7
8
|
"url": "https://github.com/ArcaneWizards/open-source.git",
|
|
@@ -26,6 +27,10 @@
|
|
|
26
27
|
"./entrypoint.css": "./dist/entrypoint.css",
|
|
27
28
|
"./package.json": "./package.json"
|
|
28
29
|
},
|
|
30
|
+
"files": [
|
|
31
|
+
"LICENSE",
|
|
32
|
+
"dist"
|
|
33
|
+
],
|
|
29
34
|
"devDependencies": {
|
|
30
35
|
"@arcanejs/build-utils": "^0.1.2",
|
|
31
36
|
"@arcanejs/diff": "^0.5.2",
|
|
@@ -49,11 +54,12 @@
|
|
|
49
54
|
"music-metadata": "^11.0.0",
|
|
50
55
|
"osc-js": "^2.4.1",
|
|
51
56
|
"radix-ui": "^1.4.3",
|
|
52
|
-
"@arcanewizards/
|
|
57
|
+
"@arcanewizards/apis": "^0.0.1",
|
|
58
|
+
"@arcanewizards/artnet": "^0.1.3",
|
|
53
59
|
"@arcanewizards/eslint-config": "^0.0.0",
|
|
54
|
-
"@arcanewizards/net-utils": "^0.1.
|
|
55
|
-
"@arcanewizards/sigil": "^0.1.
|
|
56
|
-
"@arcanewizards/tcnet": "^0.1.
|
|
60
|
+
"@arcanewizards/net-utils": "^0.1.3",
|
|
61
|
+
"@arcanewizards/sigil": "^0.1.3",
|
|
62
|
+
"@arcanewizards/tcnet": "^0.1.3",
|
|
57
63
|
"@arcanewizards/typescript-config": "^0.0.0"
|
|
58
64
|
},
|
|
59
65
|
"dependencies": {
|
|
@@ -64,7 +70,7 @@
|
|
|
64
70
|
"react": "^19.2.0"
|
|
65
71
|
},
|
|
66
72
|
"scripts": {
|
|
67
|
-
"build": "pnpm check:types && rm -rf dist && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map",
|
|
73
|
+
"build": "pnpm check:types && rm -rf dist && cp ../../LICENSE ./LICENSE && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map",
|
|
68
74
|
"build:entrypoint": "arcane-build-frontend --entry src/components/frontend/entrypoint.ts --outfile dist/entrypoint.js --sourcemap",
|
|
69
75
|
"build:frontend": "arcane-build-frontend --entry src/components/frontend/index.tsx --outfile dist/frontend.js --sourcemap",
|
|
70
76
|
"build:styles": "tailwindcss -i ./src/components/frontend/frontend.css -o ./dist/entrypoint.css",
|
package/.turbo/turbo-build.log
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @arcanewizards/timecode-toolbox@0.1.0 build /home/runner/work/open-source/open-source/apps/timecode-toolbox
|
|
3
|
-
> pnpm check:types && rm -rf dist && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
> @arcanewizards/timecode-toolbox@0.1.0 check:types /home/runner/work/open-source/open-source/apps/timecode-toolbox
|
|
7
|
-
> tsc --noEmit
|
|
8
|
-
|
|
9
|
-
[34mCLI[39m Building entry: src/index.ts, src/start.ts, src/components/frontend/index.tsx
|
|
10
|
-
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
11
|
-
[34mCLI[39m tsup v8.5.1
|
|
12
|
-
[34mCLI[39m Using tsup config: /home/runner/work/open-source/open-source/apps/timecode-toolbox/tsup.config.ts
|
|
13
|
-
[34mCLI[39m Target: es2022
|
|
14
|
-
[34mCJS[39m Build start
|
|
15
|
-
[34mESM[39m Build start
|
|
16
|
-
[34mDTS[39m Build start
|
|
17
|
-
[32mESM[39m [1mdist/index.mjs [22m[32m498.69 KB[39m
|
|
18
|
-
[32mESM[39m [1mdist/start.mjs [22m[32m498.45 KB[39m
|
|
19
|
-
[32mESM[39m [1mdist/components/frontend/index.mjs [22m[32m602.17 KB[39m
|
|
20
|
-
[32mESM[39m ⚡️ Build success in 477ms
|
|
21
|
-
[32mCJS[39m [1mdist/index.js [22m[32m500.63 KB[39m
|
|
22
|
-
[32mCJS[39m [1mdist/components/frontend/index.js [22m[32m615.16 KB[39m
|
|
23
|
-
[32mCJS[39m [1mdist/start.js [22m[32m500.33 KB[39m
|
|
24
|
-
[32mCJS[39m ⚡️ Build success in 483ms
|
|
25
|
-
[32mDTS[39m ⚡️ Build success in 5507ms
|
|
26
|
-
[32mDTS[39m [1mdist/start.d.ts [22m[32m13.00 B[39m
|
|
27
|
-
[32mDTS[39m [1mdist/components/frontend/index.d.ts [22m[32m649.00 B[39m
|
|
28
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[32m2.18 KB[39m
|
|
29
|
-
[32mDTS[39m [1mdist/start.d.mts [22m[32m13.00 B[39m
|
|
30
|
-
[32mDTS[39m [1mdist/components/frontend/index.d.mts [22m[32m649.00 B[39m
|
|
31
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[32m2.18 KB[39m
|
|
32
|
-
|
|
33
|
-
> @arcanewizards/timecode-toolbox@0.1.0 build:entrypoint /home/runner/work/open-source/open-source/apps/timecode-toolbox
|
|
34
|
-
> arcane-build-frontend --entry src/components/frontend/entrypoint.ts --outfile dist/entrypoint.js --sourcemap
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
dist/entrypoint.js 1.7mb ⚠️
|
|
38
|
-
dist/entrypoint.js.map 2.8mb
|
|
39
|
-
|
|
40
|
-
⚡ Done in 1505ms
|
|
41
|
-
|
|
42
|
-
> @arcanewizards/timecode-toolbox@0.1.0 build:frontend /home/runner/work/open-source/open-source/apps/timecode-toolbox
|
|
43
|
-
> arcane-build-frontend --entry src/components/frontend/index.tsx --outfile dist/frontend.js --sourcemap
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
dist/frontend.js 1.7mb ⚠️
|
|
47
|
-
dist/frontend.js.map 2.8mb
|
|
48
|
-
|
|
49
|
-
⚡ Done in 1523ms
|
|
50
|
-
|
|
51
|
-
> @arcanewizards/timecode-toolbox@0.1.0 build:styles /home/runner/work/open-source/open-source/apps/timecode-toolbox
|
|
52
|
-
> tailwindcss -i ./src/components/frontend/frontend.css -o ./dist/entrypoint.css
|
|
53
|
-
|
|
54
|
-
[3m[1m[34m≈[39m[22m[23m tailwindcss [34mv4.2.2[39m
|
|
55
|
-
|
|
56
|
-
Done in [34m77ms[39m
|
|
57
|
-
Checking export maps...
|
|
58
|
-
[7m[32m PASS [39m[27m package.json
|
package/.turbo/turbo-lint.log
DELETED