fundus 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/_app/immutable/assets/{3.C6xo25uI.css → 3.q3CUOEpz.css} +1 -1
- package/build/client/_app/immutable/assets/3.q3CUOEpz.css.br +0 -0
- package/build/client/_app/immutable/assets/3.q3CUOEpz.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{CrIZjnDr.js → BYFtzj-6.js} +1 -1
- package/build/client/_app/immutable/chunks/BYFtzj-6.js.br +0 -0
- package/build/client/_app/immutable/chunks/BYFtzj-6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bpdn9KsZ.js +1 -0
- package/build/client/_app/immutable/chunks/Bpdn9KsZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bpdn9KsZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{Br86nTYk.js → C84Cb3FT.js} +1 -1
- package/build/client/_app/immutable/chunks/C84Cb3FT.js.br +2 -0
- package/build/client/_app/immutable/chunks/C84Cb3FT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{lw3KP4og.js → ShJqQdc9.js} +1 -1
- package/build/client/_app/immutable/chunks/ShJqQdc9.js.br +0 -0
- package/build/client/_app/immutable/chunks/ShJqQdc9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DNjzOY31.js → qKhm3_BR.js} +1 -1
- package/build/client/_app/immutable/chunks/qKhm3_BR.js.br +0 -0
- package/build/client/_app/immutable/chunks/qKhm3_BR.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.D5wDPF1W.js → app.xp6XP32Y.js} +2 -2
- package/build/client/_app/immutable/entry/app.xp6XP32Y.js.br +0 -0
- package/build/client/_app/immutable/entry/app.xp6XP32Y.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.Du4Vvers.js +1 -0
- package/build/client/_app/immutable/entry/start.Du4Vvers.js.br +1 -0
- package/build/client/_app/immutable/entry/start.Du4Vvers.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.Du4H-PMh.js → 0.C1JztY6C.js} +1 -1
- package/build/client/_app/immutable/nodes/0.C1JztY6C.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.C1JztY6C.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.Cdec6pOD.js → 1.DBrMEpGF.js} +1 -1
- package/build/client/_app/immutable/nodes/1.DBrMEpGF.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.DBrMEpGF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.EttMTuPO.js → 2.DePWJalQ.js} +1 -1
- package/build/client/_app/immutable/nodes/2.DePWJalQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DePWJalQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CoDFK3_e.js +1 -0
- package/build/client/_app/immutable/nodes/3.CoDFK3_e.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CoDFK3_e.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.B2w3TMXh.js → 4.B-qjHb3h.js} +1 -1
- package/build/client/_app/immutable/nodes/4.B-qjHb3h.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.B-qjHb3h.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/handler.js +7 -7
- package/build/index.js +7 -7
- package/build/server/chunks/chunks/{context.js-e4GlFzy9.js → context.js-4TO_atTF.js} +92 -46
- package/build/server/chunks/chunks/context.js-4TO_atTF.js.map +1 -0
- package/build/server/chunks/chunks/dependencies.js-pUkjICr5.js +45 -0
- package/build/server/chunks/chunks/dependencies.js-pUkjICr5.js.map +1 -0
- package/build/server/chunks/chunks/{exports.js-DJIUHt8s.js → exports.js-D4wm01VC.js} +2 -2
- package/build/server/chunks/chunks/{exports.js-DJIUHt8s.js.map → exports.js-D4wm01VC.js.map} +1 -1
- package/build/server/chunks/chunks/{internal.js-Dt5KHjRW.js → internal.js-C1qRAVdt.js} +3 -3
- package/build/server/chunks/chunks/{internal.js-Dt5KHjRW.js.map → internal.js-C1qRAVdt.js.map} +1 -1
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
- package/build/server/chunks/chunks/{shared.js-x1Gq7Onx.js → shared.js-WozvTiX9.js} +2 -2
- package/build/server/chunks/chunks/{shared.js-x1Gq7Onx.js.map → shared.js-WozvTiX9.js.map} +1 -1
- package/build/server/chunks/chunks/{utils.js-C2ExAOTX.js → utils.js-UxJ7asYr.js} +3 -3
- package/build/server/chunks/chunks/{utils.js-C2ExAOTX.js.map → utils.js-UxJ7asYr.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-DsRPehtR.js → _server.ts.js-Aa7zYzUB.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-DsRPehtR.js.map → _server.ts.js-Aa7zYzUB.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-BWvGDvO7.js → _server.ts.js-CM73kt1H.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-BWvGDvO7.js.map → _server.ts.js-CM73kt1H.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-B9tNV200.js → _server.ts.js-CyiEsjc3.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-B9tNV200.js.map → _server.ts.js-CyiEsjc3.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-pSCuVSWc.js → _server.ts.js-Cpt_vVY0.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-pSCuVSWc.js.map → _server.ts.js-Cpt_vVY0.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-Do91N0Y1.js → _server.ts.js-BVdeCRy0.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-Do91N0Y1.js.map → _server.ts.js-BVdeCRy0.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CiAwadVe.js → _server.ts.js-QEa0nYZE.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CiAwadVe.js.map → _server.ts.js-QEa0nYZE.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-BM3m_ZAW.js → _server.ts.js-Dk0sFdoM.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-BM3m_ZAW.js.map → _server.ts.js-Dk0sFdoM.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-CO8RZm3e.js +69 -0
- package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-CO8RZm3e.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DfnwfGPe.js → _server.ts.js-8RzyUK6g.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DfnwfGPe.js.map → _server.ts.js-8RzyUK6g.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-CLimVe_g.js → _server.ts.js-YWliM590.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-CLimVe_g.js.map → _server.ts.js-YWliM590.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-D1U27fGU.js → _server.ts.js-CeXmOrwN.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-D1U27fGU.js.map → _server.ts.js-CeXmOrwN.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-CO2rTBqC.js → _server.ts.js-DQaLSdGl.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-CO2rTBqC.js.map → _server.ts.js-DQaLSdGl.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-D5avRgyS.js → _server.ts.js-BE_nYFP_.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-D5avRgyS.js.map → _server.ts.js-BE_nYFP_.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-BapPH5zE.js → _server.ts.js-BGxvZ4EV.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-BapPH5zE.js.map → _server.ts.js-BGxvZ4EV.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-zzPmtjqq.js → _server.ts.js-Cvwr9a0l.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-zzPmtjqq.js.map → _server.ts.js-Cvwr9a0l.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-4PAevg6t.js → _server.ts.js-DEMDXHsR.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-4PAevg6t.js.map → _server.ts.js-DEMDXHsR.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-D5Ugx1s2.js → _server.ts.js-DoeEIUoG.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-D5Ugx1s2.js.map → _server.ts.js-DoeEIUoG.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Kh5S2FF1.js → _server.ts.js-0hMtYoB1.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Kh5S2FF1.js.map → _server.ts.js-0hMtYoB1.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-CrIuCzTz.js → _server.ts.js-B4YWmlkC.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-CrIuCzTz.js.map → _server.ts.js-B4YWmlkC.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-BzYrNyZ9.js → _server.ts.js-dNLtLO2U.js} +3 -2
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-BzYrNyZ9.js.map → _server.ts.js-dNLtLO2U.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-Z2CJc6X2.js → _server.ts.js-BtCkf-hk.js} +3 -2
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-Z2CJc6X2.js.map → _server.ts.js-BtCkf-hk.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-55wphoyh.js → _server.ts.js-CozrPtRv.js} +3 -2
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-55wphoyh.js.map → _server.ts.js-CozrPtRv.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-YOyVpyLh.js → hooks.server.js-Cnsi5KsE.js} +3 -2
- package/build/server/chunks/entries/{hooks.server.js-YOyVpyLh.js.map → hooks.server.js-Cnsi5KsE.js.map} +1 -1
- package/build/server/chunks/{handler-Byx45TKn.js → handler-Cy1Egoop.js} +5 -5
- package/build/server/chunks/{handler-Byx45TKn.js.map → handler-Cy1Egoop.js.map} +1 -1
- package/build/server/chunks/{index.js-BydliQ_Y.js → index.js-BThzb8OA.js} +5 -5
- package/build/server/chunks/{index.js-BydliQ_Y.js.map → index.js-BThzb8OA.js.map} +1 -1
- package/build/server/chunks/{manifest.js-F9H6_1w3.js → manifest.js-oxAZ63GO.js} +35 -28
- package/build/server/chunks/manifest.js-oxAZ63GO.js.map +1 -0
- package/build/server/chunks/nodes/{0.js-BcvXZmrQ.js → 0.js-CWkqtXV6.js} +2 -2
- package/build/server/chunks/nodes/{0.js-BcvXZmrQ.js.map → 0.js-CWkqtXV6.js.map} +1 -1
- package/build/server/chunks/nodes/1.js-CwYk7wO6.js +7 -0
- package/build/server/chunks/nodes/{1.js-Ba8f-0ma.js.map → 1.js-CwYk7wO6.js.map} +1 -1
- package/build/server/chunks/nodes/{2.js-BI_SZTL5.js → 2.js-CH87hyHV.js} +2 -2
- package/build/server/chunks/nodes/{2.js-BI_SZTL5.js.map → 2.js-CH87hyHV.js.map} +1 -1
- package/build/server/chunks/nodes/3.js-CSO0quMy.js +7 -0
- package/build/server/chunks/nodes/{3.js-DokN-j9-.js.map → 3.js-CSO0quMy.js.map} +1 -1
- package/build/server/chunks/nodes/4.js-Dc4P-6cG.js +7 -0
- package/build/server/chunks/nodes/{4.js-M9Y_zPEf.js.map → 4.js-Dc4P-6cG.js.map} +1 -1
- package/dist/core/api-types.d.ts +5 -0
- package/dist/core/dependencies.d.ts +15 -0
- package/dist/core/dependencies.js +8 -0
- package/dist/core/dependency-validation.d.ts +2 -2
- package/dist/core/dependency-validation.js +3 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +1 -1
- package/dist/server/config-loader.d.ts +3 -3
- package/dist/server/config-loader.js +6 -4
- package/dist/server/context.d.ts +3 -0
- package/dist/server/context.js +2 -1
- package/dist/server/library-watcher.d.ts +8 -0
- package/dist/server/library-watcher.js +96 -0
- package/dist/server/operations.js +8 -1
- package/package.json +1 -1
- package/build/client/_app/immutable/assets/3.C6xo25uI.css.br +0 -0
- package/build/client/_app/immutable/assets/3.C6xo25uI.css.gz +0 -0
- package/build/client/_app/immutable/chunks/Br86nTYk.js.br +0 -0
- package/build/client/_app/immutable/chunks/Br86nTYk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CrIZjnDr.js.br +0 -0
- package/build/client/_app/immutable/chunks/CrIZjnDr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DNjzOY31.js.br +0 -0
- package/build/client/_app/immutable/chunks/DNjzOY31.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dtda93q6.js +0 -1
- package/build/client/_app/immutable/chunks/Dtda93q6.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dtda93q6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/lw3KP4og.js.br +0 -0
- package/build/client/_app/immutable/chunks/lw3KP4og.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.D5wDPF1W.js.br +0 -0
- package/build/client/_app/immutable/entry/app.D5wDPF1W.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.SSZ7q8lm.js +0 -1
- package/build/client/_app/immutable/entry/start.SSZ7q8lm.js.br +0 -1
- package/build/client/_app/immutable/entry/start.SSZ7q8lm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.Du4H-PMh.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Du4H-PMh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Cdec6pOD.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Cdec6pOD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.EttMTuPO.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.EttMTuPO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.3npz09f1.js +0 -1
- package/build/client/_app/immutable/nodes/3.3npz09f1.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.3npz09f1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.B2w3TMXh.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.B2w3TMXh.js.gz +0 -0
- package/build/server/chunks/chunks/context.js-e4GlFzy9.js.map +0 -1
- package/build/server/chunks/manifest.js-F9H6_1w3.js.map +0 -1
- package/build/server/chunks/nodes/1.js-Ba8f-0ma.js +0 -7
- package/build/server/chunks/nodes/3.js-DokN-j9-.js +0 -7
- package/build/server/chunks/nodes/4.js-M9Y_zPEf.js +0 -7
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { c as compareCodeUnits, h as folderOfRawPath, j as rawFileNameOfPath, g as canonicalizeParameters, n as normalizeFolderPath, H as typesForFileName, k as parentFolderPath, u as portableFolderPathKey } from './core.js-Bp-ReC60.js';
|
|
2
2
|
import { i as isRecord, s as serverPluginsByType, L as LibraryStore, d as descriptorsByType, m as manifestModuleFileName, l as locateGeneratedAssetDeclaration, a as serializeLibrary, b as serverPluginForType, S as SourceImportError, p as processAssets, g as generateManifestModules, r as readCurrentProxy, e as encodeRelativePathForUrl, c as invalidInput, f as parseLibrary } from './contract.js-B6KBK8D9.js';
|
|
3
3
|
import { c as collectAllReferences, a as assetIdError, b as computeLibraryMembership, d as allDeliveredAssetIds, i as isValidAssetId } from './manifest-membership.js-Dj3WwZgz.js';
|
|
4
|
+
import { v as validateDependencyList, f as formatRequiredBy } from './dependencies.js-pUkjICr5.js';
|
|
4
5
|
import { v as verifyStableRawFile, c as classifyRawDirectory } from './raw-reconciliation2.js-Bo1jJgvd.js';
|
|
5
6
|
import { createRequire } from 'node:module';
|
|
6
|
-
import { isAbsolute, resolve,
|
|
7
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
7
|
+
import { isAbsolute, resolve, basename, dirname, join, extname, relative, sep } from 'node:path';
|
|
8
|
+
import { existsSync, watch, readFileSync } from 'node:fs';
|
|
8
9
|
import { createJiti } from 'jiti';
|
|
9
10
|
import { readFile, realpath } from 'node:fs/promises';
|
|
10
11
|
import { execFile } from 'node:child_process';
|
|
@@ -33,51 +34,16 @@ function proposeAssetId(fileName) {
|
|
|
33
34
|
return withoutLeadingDigits.charAt(0).toLowerCase() + withoutLeadingDigits.slice(1);
|
|
34
35
|
}
|
|
35
36
|
//#endregion
|
|
36
|
-
//#region src/lib/core/dependencies.ts
|
|
37
|
-
var FUNDUS_ASSET_KINDS = [
|
|
38
|
-
"image",
|
|
39
|
-
"slice",
|
|
40
|
-
"video",
|
|
41
|
-
"chroma-key-video",
|
|
42
|
-
"audio"
|
|
43
|
-
];
|
|
44
|
-
function isFundusAssetKind(value) {
|
|
45
|
-
return typeof value === "string" && FUNDUS_ASSET_KINDS.includes(value);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Runtime validation of one loaded dependency list (one source): an array of
|
|
49
|
-
* `{ id: non-empty string, type: FundusAssetKind }` with no duplicate id within
|
|
50
|
-
* the list. Throws with the source name on any violation.
|
|
51
|
-
*/
|
|
52
|
-
function validateDependencyList(source, value) {
|
|
53
|
-
if (!Array.isArray(value)) throw new Error(`Dependency source "${source}" must default-export an array of { id, type } entries.`);
|
|
54
|
-
const seen = /* @__PURE__ */ new Set();
|
|
55
|
-
const result = [];
|
|
56
|
-
for (const entry of value) {
|
|
57
|
-
if (typeof entry !== "object" || entry === null) throw new Error(`Dependency source "${source}": every entry must be an { id, type } object.`);
|
|
58
|
-
const { id, type } = entry;
|
|
59
|
-
if (typeof id !== "string" || id.length === 0) throw new Error(`Dependency source "${source}": every entry needs a non-empty string "id".`);
|
|
60
|
-
if (!isFundusAssetKind(type)) throw new Error(`Dependency source "${source}": entry "${id}" has unknown type "${String(type)}".`);
|
|
61
|
-
if (seen.has(id)) throw new Error(`Dependency source "${source}": duplicate id "${id}".`);
|
|
62
|
-
seen.add(id);
|
|
63
|
-
result.push({
|
|
64
|
-
id,
|
|
65
|
-
type
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
return result;
|
|
69
|
-
}
|
|
70
|
-
//#endregion
|
|
71
37
|
//#region src/lib/core/dependency-validation.ts
|
|
72
38
|
function validateDependencies(dependencies, library) {
|
|
73
39
|
const findings = [];
|
|
74
40
|
for (const dependency of dependencies) {
|
|
75
41
|
if (!Object.hasOwn(library.assets, dependency.id)) {
|
|
76
|
-
findings.push({ message: `
|
|
42
|
+
findings.push({ message: `Missing ${dependency.type} "${dependency.id}" required by ${formatRequiredBy(dependency.sources)}.` });
|
|
77
43
|
continue;
|
|
78
44
|
}
|
|
79
45
|
const record = library.assets[dependency.id];
|
|
80
|
-
if (record.type !== dependency.type) findings.push({ message: `
|
|
46
|
+
if (record.type !== dependency.type) findings.push({ message: `Type mismatch for "${dependency.id}" required by ${formatRequiredBy(dependency.sources)}: expected ${dependency.type}, library has ${record.type}.` });
|
|
81
47
|
}
|
|
82
48
|
return findings;
|
|
83
49
|
}
|
|
@@ -212,16 +178,18 @@ async function resolveDependencies(projectRoot, specs, requireAnchor = join(reso
|
|
|
212
178
|
if (existing === void 0) {
|
|
213
179
|
aggregated.set(dependency.id, {
|
|
214
180
|
type: dependency.type,
|
|
215
|
-
|
|
181
|
+
sources: [spec]
|
|
216
182
|
});
|
|
217
183
|
continue;
|
|
218
184
|
}
|
|
219
|
-
if (existing.type !== dependency.type) throw new Error(`Dependency "${dependency.id}" is declared as "${existing.type}" by "${existing.
|
|
185
|
+
if (existing.type !== dependency.type) throw new Error(`Dependency "${dependency.id}" is declared as "${existing.type}" by "${existing.sources.join("\", \"")}" and as "${dependency.type}" by "${spec}".`);
|
|
186
|
+
if (!existing.sources.includes(spec)) existing.sources.push(spec);
|
|
220
187
|
}
|
|
221
188
|
}
|
|
222
|
-
return [...aggregated].map(([id, { type }]) => ({
|
|
189
|
+
return [...aggregated].map(([id, { type, sources }]) => ({
|
|
223
190
|
id,
|
|
224
|
-
type
|
|
191
|
+
type,
|
|
192
|
+
sources
|
|
225
193
|
}));
|
|
226
194
|
}
|
|
227
195
|
/** Load `fundus.config.ts` from the host project root. */
|
|
@@ -244,6 +212,80 @@ async function loadConfig(projectRoot) {
|
|
|
244
212
|
};
|
|
245
213
|
}
|
|
246
214
|
//#endregion
|
|
215
|
+
//#region src/lib/server/library-watcher.ts
|
|
216
|
+
/**
|
|
217
|
+
* Watches the library file and the raw directory for out-of-band changes — the
|
|
218
|
+
* CLI writing the library, or another process moving/renaming/deleting raw
|
|
219
|
+
* files — and notifies subscribers so the editor can reconcile without waiting
|
|
220
|
+
* for a window-focus refresh.
|
|
221
|
+
*
|
|
222
|
+
* Watching starts on the first subscriber and stops on the last, so a process
|
|
223
|
+
* that never subscribes (the CLI builds its own `FundusOperations`) never opens
|
|
224
|
+
* a file-system watch. A change the editor itself caused also fires here; the
|
|
225
|
+
* resulting reconcile is idempotent and coalesced, so a redundant refresh costs
|
|
226
|
+
* one no-op request — and that same property syncs edits made in one browser
|
|
227
|
+
* tab to every other open tab.
|
|
228
|
+
*/
|
|
229
|
+
/** How long to collect burst file-system events into a single notification. */
|
|
230
|
+
var DEBOUNCE_MS = 200;
|
|
231
|
+
var LibraryWatcher = class {
|
|
232
|
+
#specs;
|
|
233
|
+
#listeners = /* @__PURE__ */ new Set();
|
|
234
|
+
#watchers = [];
|
|
235
|
+
#debounce = null;
|
|
236
|
+
constructor(config) {
|
|
237
|
+
const libraryName = basename(config.library);
|
|
238
|
+
this.#specs = [{
|
|
239
|
+
dir: dirname(config.library),
|
|
240
|
+
recursive: false,
|
|
241
|
+
accept: (filename) => filename === null || filename === libraryName
|
|
242
|
+
}, {
|
|
243
|
+
dir: resolve(config.rawDir),
|
|
244
|
+
recursive: true,
|
|
245
|
+
accept: () => true
|
|
246
|
+
}];
|
|
247
|
+
}
|
|
248
|
+
/** Register a listener, starting the watch on the first and stopping on the last. */
|
|
249
|
+
subscribe(listener) {
|
|
250
|
+
this.#listeners.add(listener);
|
|
251
|
+
if (this.#listeners.size === 1) this.#start();
|
|
252
|
+
return () => {
|
|
253
|
+
if (!this.#listeners.delete(listener)) return;
|
|
254
|
+
if (this.#listeners.size === 0) this.#stop();
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
#start() {
|
|
258
|
+
for (const spec of this.#specs) try {
|
|
259
|
+
const watcher = watch(spec.dir, {
|
|
260
|
+
recursive: spec.recursive,
|
|
261
|
+
persistent: false
|
|
262
|
+
}, (_event, filename) => {
|
|
263
|
+
if (spec.accept(typeof filename === "string" ? filename : null)) this.#schedule();
|
|
264
|
+
});
|
|
265
|
+
watcher.on("error", () => {});
|
|
266
|
+
this.#watchers.push(watcher);
|
|
267
|
+
} catch {}
|
|
268
|
+
}
|
|
269
|
+
#stop() {
|
|
270
|
+
if (this.#debounce) {
|
|
271
|
+
clearTimeout(this.#debounce);
|
|
272
|
+
this.#debounce = null;
|
|
273
|
+
}
|
|
274
|
+
for (const watcher of this.#watchers) watcher.close();
|
|
275
|
+
this.#watchers = [];
|
|
276
|
+
}
|
|
277
|
+
#schedule() {
|
|
278
|
+
if (this.#debounce) clearTimeout(this.#debounce);
|
|
279
|
+
this.#debounce = setTimeout(() => {
|
|
280
|
+
this.#debounce = null;
|
|
281
|
+
for (const listener of [...this.#listeners]) try {
|
|
282
|
+
listener();
|
|
283
|
+
} catch {}
|
|
284
|
+
}, DEBOUNCE_MS);
|
|
285
|
+
this.#debounce.unref?.();
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
//#endregion
|
|
247
289
|
//#region src/lib/server/raw-safety.ts
|
|
248
290
|
function rawSafetyIssueKey(issue) {
|
|
249
291
|
return `${issue.kind}|${issue.assetId ?? ""}|${issue.path}`;
|
|
@@ -2194,6 +2236,8 @@ var FundusOperations = class {
|
|
|
2194
2236
|
});
|
|
2195
2237
|
incomingByAsset.set(reference.assetId, incoming);
|
|
2196
2238
|
}
|
|
2239
|
+
const requiredByAsset = /* @__PURE__ */ new Map();
|
|
2240
|
+
for (const dependency of this.#config.dependencies) requiredByAsset.set(dependency.id, [...dependency.sources]);
|
|
2197
2241
|
const assets = [];
|
|
2198
2242
|
for (const assetId of Object.keys(library.assets).sort(compareCodeUnits)) {
|
|
2199
2243
|
const record = library.assets[assetId];
|
|
@@ -2234,7 +2278,8 @@ var FundusOperations = class {
|
|
|
2234
2278
|
assetId: reference.assetId
|
|
2235
2279
|
})),
|
|
2236
2280
|
incoming: incomingByAsset.get(assetId) ?? []
|
|
2237
|
-
}
|
|
2281
|
+
},
|
|
2282
|
+
requiredBy: requiredByAsset.get(assetId) ?? []
|
|
2238
2283
|
});
|
|
2239
2284
|
}
|
|
2240
2285
|
const proxySizeByAssetId = new Map(assets.filter((asset) => asset.proxy).map((asset) => [asset.id, asset.proxy?.fileSize ?? 0]));
|
|
@@ -2430,9 +2475,10 @@ async function createFundusContext() {
|
|
|
2430
2475
|
const config = await loadConfig(projectRoot);
|
|
2431
2476
|
return {
|
|
2432
2477
|
config,
|
|
2433
|
-
operations: new FundusOperations(config)
|
|
2478
|
+
operations: new FundusOperations(config),
|
|
2479
|
+
watcher: new LibraryWatcher(config)
|
|
2434
2480
|
};
|
|
2435
2481
|
}
|
|
2436
2482
|
|
|
2437
2483
|
export { getFundusContext as g, initializeFundusContext as i };
|
|
2438
|
-
//# sourceMappingURL=context.js-
|
|
2484
|
+
//# sourceMappingURL=context.js-4TO_atTF.js.map
|