@riboseinc/anafero-cli 0.0.55 → 0.0.57
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/bootstrap.js +39 -29
- package/bootstrap.js.map +3 -3
- package/build-site.mjs +155 -140
- package/package.json +1 -1
package/build-site.mjs
CHANGED
|
@@ -313300,7 +313300,9 @@ var ResourceMetadataSchema = mutable3(Struct({
|
|
|
313300
313300
|
// TODO: rich ProseMirror labels?
|
|
313301
313301
|
labelInPlainText: String$2.pipe(nonEmptyString4()),
|
|
313302
313302
|
// TODO: proper schema for ISO language IDs
|
|
313303
|
-
primaryLanguageID: String$2.pipe(optional)
|
|
313303
|
+
primaryLanguageID: String$2.pipe(optional),
|
|
313304
|
+
/** License/copyright for the resource in question. */
|
|
313305
|
+
license: Any.pipe(optional)
|
|
313304
313306
|
}));
|
|
313305
313307
|
function gatherDescribedResourcesFromJsonifiedProseMirrorNode(jsonifiedNode, _accum) {
|
|
313306
313308
|
const accumulator = _accum ?? /* @__PURE__ */ new Set();
|
|
@@ -317391,12 +317393,7 @@ var lunrLanguageSupport = {
|
|
|
317391
317393
|
};
|
|
317392
317394
|
var encoder = new TextEncoder();
|
|
317393
317395
|
var decoder = new TextDecoder();
|
|
317394
|
-
function* generateResourceAssets(resourceURI, relations, parentChain, directDescendants, resourceProps, expandVersionedPath, getDOMStub, inject, workspaceTitle, primaryLanguageID,
|
|
317395
|
-
const generatedContent = generateContent(relations, resourceURI);
|
|
317396
|
-
if (!generatedContent) {
|
|
317397
|
-
console.warn("Resource has no content", resourceURI);
|
|
317398
|
-
return;
|
|
317399
|
-
}
|
|
317396
|
+
function* generateResourceAssets(resourceURI, relations, parentChain, directDescendants, resourceProps, expandVersionedPath, getDOMStub, inject, workspaceTitle, primaryLanguageID, generatedContent) {
|
|
317400
317397
|
const generateNavLink = function generateNavLink2(path3, uri, meta) {
|
|
317401
317398
|
return {
|
|
317402
317399
|
path: expandVersionedPath(path3),
|
|
@@ -317549,7 +317546,7 @@ ${inject.head ?? ""}`;
|
|
|
317549
317546
|
const rootMeta = reader.describeRoot();
|
|
317550
317547
|
const maybePrimaryLanguageID = rootMeta.primaryLanguageID ?? "en";
|
|
317551
317548
|
const maybeMainTitle = rootMeta.labelInPlainText ?? "Document";
|
|
317552
|
-
const allLanguages = /* @__PURE__ */ new Set();
|
|
317549
|
+
const allLanguages = /* @__PURE__ */ new Set(["en"]);
|
|
317553
317550
|
function getReverseResourceMap() {
|
|
317554
317551
|
return Object.fromEntries(Object.entries(resourceMap).map(([k, v]) => [v, k]));
|
|
317555
317552
|
}
|
|
@@ -317575,110 +317572,115 @@ ${inject.head ?? ""}`;
|
|
|
317575
317572
|
throw new Error("Malformed resource URL while processing resources: hash fragment");
|
|
317576
317573
|
}
|
|
317577
317574
|
const [pathProgress] = pathSubtask(`${resourceURI.replaceAll("|", ":")}`, { state: "resolving relations" });
|
|
317578
|
-
const relations = reader.resolve(resourceURI);
|
|
317579
|
-
resourceMap[path3] = resourceURI;
|
|
317580
|
-
resourceGraph.push([resourceURI, "isDefinedBy", `${path3}/resource.json`]);
|
|
317581
317575
|
const resourceMeta = meta;
|
|
317582
|
-
|
|
317583
|
-
pathProgress({ state: "
|
|
317584
|
-
|
|
317585
|
-
if (
|
|
317586
|
-
|
|
317587
|
-
const
|
|
317588
|
-
if (
|
|
317576
|
+
const relations = reader.resolve(resourceURI);
|
|
317577
|
+
pathProgress({ state: "generating resource page content" });
|
|
317578
|
+
const content = function generateContent(graph, metadata, uri, cache4) {
|
|
317579
|
+
if (!cache4[uri]) {
|
|
317580
|
+
let content2;
|
|
317581
|
+
const maybeAdapter = findContentAdapter(uri);
|
|
317582
|
+
if (maybeAdapter) {
|
|
317589
317583
|
try {
|
|
317590
|
-
|
|
317591
|
-
resourceGraph.push([
|
|
317592
|
-
o2,
|
|
317593
|
-
"isDownloadableAt",
|
|
317594
|
-
filename
|
|
317595
|
-
]);
|
|
317596
|
-
resourceMap[filename] = o2;
|
|
317597
|
-
resourceDescriptions[o2] = {
|
|
317598
|
-
labelInPlainText: filePath
|
|
317599
|
-
};
|
|
317584
|
+
content2 = maybeAdapter[1].generateContent(graph) ?? null;
|
|
317600
317585
|
} catch (e3) {
|
|
317601
|
-
console.error(
|
|
317586
|
+
console.error(
|
|
317587
|
+
"Failed to generate resource content",
|
|
317588
|
+
path3,
|
|
317589
|
+
uri,
|
|
317590
|
+
graph.slice(0, 40).join("\n")
|
|
317591
|
+
);
|
|
317592
|
+
throw e3;
|
|
317602
317593
|
}
|
|
317594
|
+
if (content2) {
|
|
317595
|
+
contentCache[uri] = {
|
|
317596
|
+
adapterID: maybeAdapter[0],
|
|
317597
|
+
content: { ...metadata, ...content2 }
|
|
317598
|
+
};
|
|
317599
|
+
if (metadata.primaryLanguageID) {
|
|
317600
|
+
allLanguages.add(metadata.primaryLanguageID);
|
|
317601
|
+
}
|
|
317602
|
+
const describedResourceIDs = gatherDescribedResourcesFromJsonifiedProseMirrorNode(content2.contentDoc);
|
|
317603
|
+
for (const inPageResourceID of describedResourceIDs) {
|
|
317604
|
+
if (reader.exists(inPageResourceID)) {
|
|
317605
|
+
const pathWithFragment = `${path3}#${encodeURIComponent(inPageResourceID)}`;
|
|
317606
|
+
resourceMap[pathWithFragment] = inPageResourceID;
|
|
317607
|
+
resourceGraph.push([inPageResourceID, "isDefinedBy", `${path3}/resource.json`]);
|
|
317608
|
+
resourceDescriptions[inPageResourceID] = reader.describe(inPageResourceID);
|
|
317609
|
+
} else {
|
|
317610
|
+
console.warn(
|
|
317611
|
+
"Subresource on page does not exist in the graph",
|
|
317612
|
+
path3,
|
|
317613
|
+
inPageResourceID
|
|
317614
|
+
);
|
|
317615
|
+
}
|
|
317616
|
+
}
|
|
317617
|
+
}
|
|
317618
|
+
} else {
|
|
317619
|
+
console.warn("No adapter found to render", uri);
|
|
317620
|
+
return null;
|
|
317603
317621
|
}
|
|
317622
|
+
} else {
|
|
317623
|
+
console.debug("contentCache hit", uri);
|
|
317604
317624
|
}
|
|
317605
|
-
|
|
317625
|
+
return cache4[uri];
|
|
317626
|
+
}(relations, meta, resourceURI, contentCache);
|
|
317606
317627
|
pathProgress({ state: "generating page content & assets" });
|
|
317607
|
-
|
|
317608
|
-
resourceURI
|
|
317609
|
-
|
|
317610
|
-
|
|
317611
|
-
|
|
317612
|
-
{
|
|
317613
|
-
|
|
317614
|
-
|
|
317615
|
-
|
|
317616
|
-
|
|
317617
|
-
reverseResource: (path4) => getReverseResourceMap()[path4],
|
|
317618
|
-
uri: resourceURI,
|
|
317619
|
-
// TODO: Consider slash-prepending the outcome of findURL,
|
|
317620
|
-
// if it’s reliably not slash-prepended
|
|
317621
|
-
locateResource: (uri) => expandVersionedPath(reader.findURL(uri))
|
|
317622
|
-
},
|
|
317623
|
-
expandVersionedPath,
|
|
317624
|
-
getDOMStub,
|
|
317625
|
-
{ head: extraHead, tail: inject.tail, htmlAttrs: inject.htmlAttrs },
|
|
317626
|
-
maybeMainTitle,
|
|
317627
|
-
resourceMeta.primaryLanguageID ?? maybePrimaryLanguageID,
|
|
317628
|
-
function generateContent(relations2, uri) {
|
|
317629
|
-
if (!contentCache[uri]) {
|
|
317630
|
-
let content;
|
|
317631
|
-
const maybeAdapter = findContentAdapter(uri);
|
|
317632
|
-
if (maybeAdapter) {
|
|
317628
|
+
if (content !== null) {
|
|
317629
|
+
resourceMap[path3] = resourceURI;
|
|
317630
|
+
resourceGraph.push([resourceURI, "isDefinedBy", `${path3}/resource.json`]);
|
|
317631
|
+
resourceDescriptions[resourceURI] = resourceMeta;
|
|
317632
|
+
pathProgress({ state: "processing resource assets" });
|
|
317633
|
+
for (const [, , o2] of relations) {
|
|
317634
|
+
if (o2.startsWith("file:")) {
|
|
317635
|
+
const filePath = o2.split("file:")[1];
|
|
317636
|
+
const filename = o2.replaceAll("/", "_").replaceAll(":", "_");
|
|
317637
|
+
if (!assetsToWrite[filename]) {
|
|
317633
317638
|
try {
|
|
317634
|
-
|
|
317635
|
-
|
|
317636
|
-
|
|
317639
|
+
assetsToWrite[filename] = await fetchBlobAtThisVersion(filePath);
|
|
317640
|
+
resourceGraph.push([
|
|
317641
|
+
o2,
|
|
317642
|
+
"isDownloadableAt",
|
|
317643
|
+
filename
|
|
317644
|
+
]);
|
|
317645
|
+
resourceMap[filename] = o2;
|
|
317646
|
+
resourceDescriptions[o2] = {
|
|
317647
|
+
labelInPlainText: filePath
|
|
317648
|
+
};
|
|
317637
317649
|
} catch (e3) {
|
|
317638
|
-
console.error(
|
|
317639
|
-
"Failed to generate resource content",
|
|
317640
|
-
path3,
|
|
317641
|
-
resourceMeta,
|
|
317642
|
-
uri,
|
|
317643
|
-
relations2.slice(0, 40).join("\n")
|
|
317644
|
-
);
|
|
317645
|
-
throw e3;
|
|
317650
|
+
console.error("Failed to fetch asset", filePath);
|
|
317646
317651
|
}
|
|
317647
|
-
const primaryLanguageID = resourceMeta.primaryLanguageID ?? maybePrimaryLanguageID;
|
|
317648
|
-
contentCache[uri] = {
|
|
317649
|
-
adapterID: maybeAdapter[0],
|
|
317650
|
-
content: content ? { primaryLanguageID, ...content } : null
|
|
317651
|
-
};
|
|
317652
|
-
if (content) {
|
|
317653
|
-
const describedResourceIDs = gatherDescribedResourcesFromJsonifiedProseMirrorNode(content.contentDoc);
|
|
317654
|
-
for (const inPageResourceID of describedResourceIDs) {
|
|
317655
|
-
if (reader.exists(inPageResourceID)) {
|
|
317656
|
-
const pathWithFragment = `${path3}#${encodeURIComponent(inPageResourceID)}`;
|
|
317657
|
-
resourceMap[pathWithFragment] = inPageResourceID;
|
|
317658
|
-
resourceGraph.push([inPageResourceID, "isDefinedBy", `${path3}/resource.json`]);
|
|
317659
|
-
resourceDescriptions[inPageResourceID] = reader.describe(inPageResourceID);
|
|
317660
|
-
} else {
|
|
317661
|
-
console.warn(
|
|
317662
|
-
"Subresource on page does not exist in the graph",
|
|
317663
|
-
path3,
|
|
317664
|
-
inPageResourceID
|
|
317665
|
-
);
|
|
317666
|
-
}
|
|
317667
|
-
}
|
|
317668
|
-
}
|
|
317669
|
-
} else {
|
|
317670
|
-
console.warn("No adapter found to render", uri);
|
|
317671
|
-
return null;
|
|
317672
317652
|
}
|
|
317673
317653
|
}
|
|
317674
|
-
return contentCache[uri];
|
|
317675
317654
|
}
|
|
317676
|
-
|
|
317677
|
-
|
|
317678
|
-
|
|
317679
|
-
|
|
317680
|
-
|
|
317681
|
-
|
|
317655
|
+
const resourceAssetGenerator = generateResourceAssets(
|
|
317656
|
+
resourceURI,
|
|
317657
|
+
relations,
|
|
317658
|
+
parentChain,
|
|
317659
|
+
directDescendants,
|
|
317660
|
+
{
|
|
317661
|
+
useDependency: getDependency,
|
|
317662
|
+
selectedLayout: layouts[0],
|
|
317663
|
+
getResourcePlainTitle: (uri) => resourceDescriptions[uri]?.labelInPlainText ?? uri,
|
|
317664
|
+
onIntegrityViolation: console.warn,
|
|
317665
|
+
reverseResource: (path4) => getReverseResourceMap()[path4],
|
|
317666
|
+
uri: resourceURI,
|
|
317667
|
+
// TODO: Consider slash-prepending the outcome of findURL,
|
|
317668
|
+
// if it’s reliably not slash-prepended
|
|
317669
|
+
locateResource: (uri) => expandVersionedPath(reader.findURL(uri))
|
|
317670
|
+
},
|
|
317671
|
+
expandVersionedPath,
|
|
317672
|
+
getDOMStub,
|
|
317673
|
+
{ head: extraHead, tail: inject.tail, htmlAttrs: inject.htmlAttrs },
|
|
317674
|
+
maybeMainTitle,
|
|
317675
|
+
resourceMeta.primaryLanguageID ?? maybePrimaryLanguageID,
|
|
317676
|
+
content
|
|
317677
|
+
);
|
|
317678
|
+
for (const blobChunk of resourceAssetGenerator) {
|
|
317679
|
+
yield Object.entries(blobChunk).map(([subpath, blob]) => {
|
|
317680
|
+
const assetBlobPath = `/${path3}${subpath}`;
|
|
317681
|
+
return { [assetBlobPath]: blob };
|
|
317682
|
+
}).reduce((prev, curr) => ({ ...prev, ...curr }));
|
|
317683
|
+
}
|
|
317682
317684
|
}
|
|
317683
317685
|
pathProgress(null);
|
|
317684
317686
|
}
|
|
@@ -317693,54 +317695,54 @@ ${inject.head ?? ""}`;
|
|
|
317693
317695
|
};
|
|
317694
317696
|
const [indexProgress] = reportProgress("build search index");
|
|
317695
317697
|
import_lunr.default.utils.warn = console.warn;
|
|
317698
|
+
const supportedLanguages = [...allLanguages].filter((lang) => lang === "en" || !!lunrLanguageSupport[lang]);
|
|
317699
|
+
console.debug(`Search index: primary language is \u201C${maybePrimaryLanguageID}\u201D, enabling ${supportedLanguages.join(", ")}`);
|
|
317700
|
+
const nonDefaultLanguages = supportedLanguages.filter((lang) => lang !== "en");
|
|
317701
|
+
if (supportedLanguages.length > 1) {
|
|
317702
|
+
for (const lang of nonDefaultLanguages) {
|
|
317703
|
+
lunrLanguageSupport[lang](import_lunr.default);
|
|
317704
|
+
}
|
|
317705
|
+
(0, import_lunr4.default)(import_lunr.default);
|
|
317706
|
+
}
|
|
317696
317707
|
const lunrIndex = (0, import_lunr.default)(function() {
|
|
317697
|
-
console.debug(`Search index: primary language is \u201C${maybePrimaryLanguageID}\u201D`);
|
|
317698
|
-
const supportedLanguages = [...allLanguages].filter((lang) => !!lunrLanguageSupport[lang]);
|
|
317699
|
-
const supportedNonDefaultLanguages = supportedLanguages.filter((lang) => lang !== "en");
|
|
317700
317708
|
if (supportedLanguages.length > 1) {
|
|
317701
|
-
|
|
317702
|
-
|
|
317703
|
-
|
|
317704
|
-
|
|
317705
|
-
|
|
317706
|
-
|
|
317707
|
-
|
|
317708
|
-
|
|
317709
|
-
|
|
317709
|
+
this.use(import_lunr.default.multiLanguage(...["en", ...nonDefaultLanguages]));
|
|
317710
|
+
console.debug(
|
|
317711
|
+
"Search index: enabling multi-language Lunr mode & mixed tokenizer",
|
|
317712
|
+
supportedLanguages.join(", ")
|
|
317713
|
+
);
|
|
317714
|
+
const lunrTokenizer = import_lunr.default.tokenizer;
|
|
317715
|
+
this.tokenizer = function(x2) {
|
|
317716
|
+
const baseLunrTokens = lunrTokenizer(x2);
|
|
317717
|
+
const tokens = [...baseLunrTokens];
|
|
317718
|
+
for (const lang of nonDefaultLanguages) {
|
|
317719
|
+
const tokenizer = import_lunr.default[lang].tokenizer;
|
|
317720
|
+
if (tokenizer) {
|
|
317721
|
+
const langTokens = tokenizer(x2);
|
|
317722
|
+
tokens.push(...langTokens.filter(
|
|
317723
|
+
(t3) => !baseLunrTokens.find((bt) => bt.toString() === t3.toString())
|
|
317724
|
+
));
|
|
317725
|
+
} else {
|
|
317726
|
+
}
|
|
317710
317727
|
}
|
|
317711
|
-
|
|
317712
|
-
|
|
317713
|
-
|
|
317714
|
-
|
|
317715
|
-
|
|
317716
|
-
|
|
317717
|
-
|
|
317718
|
-
|
|
317719
|
-
} else if (maybePrimaryLanguageID !== "en") {
|
|
317720
|
-
this.use(import_lunr.default[maybePrimaryLanguageID]);
|
|
317721
|
-
}
|
|
317728
|
+
return tokens;
|
|
317729
|
+
};
|
|
317730
|
+
const lunrStopWordFilter = import_lunr.default.stopWordFilter;
|
|
317731
|
+
this.stopWordFilter = function(token) {
|
|
317732
|
+
return lunrStopWordFilter(token) && !nonDefaultLanguages.map(
|
|
317733
|
+
(lang) => !!this[lang].stopWordFilter(token)
|
|
317734
|
+
).includes(false) ? token : void 0;
|
|
317735
|
+
};
|
|
317722
317736
|
}
|
|
317723
317737
|
this.ref("name");
|
|
317738
|
+
this.field("title", { boost: 2 });
|
|
317724
317739
|
this.field("body");
|
|
317725
317740
|
let done12 = 0;
|
|
317726
317741
|
const total = Object.keys(contentCache).length + Object.keys(resourceDescriptions).length;
|
|
317727
317742
|
console.debug("Index pipeline functions during", this.pipeline._stack.map((f3) => f3.label));
|
|
317728
317743
|
console.debug("Index search pipeline functions during", this.searchPipeline._stack.map((f3) => f3.label));
|
|
317729
|
-
|
|
317730
|
-
|
|
317731
|
-
indexProgress({ state: `adding entry for ${uri}`, total, done: done12 });
|
|
317732
|
-
const label = content?.content?.labelInPlainText?.normalize("NFKD").replace(/\p{Diacritic}/gu, "").trim();
|
|
317733
|
-
if (label) {
|
|
317734
|
-
const entry = {
|
|
317735
|
-
name: uri,
|
|
317736
|
-
body: label
|
|
317737
|
-
};
|
|
317738
|
-
this.add(entry, { boost: 5 });
|
|
317739
|
-
} else {
|
|
317740
|
-
console.warn("No label for", uri);
|
|
317741
|
-
}
|
|
317742
|
-
}
|
|
317743
|
-
for (const [uri] of Object.entries(resourceDescriptions)) {
|
|
317744
|
+
const searchableResources = { pages: [], resources: [] };
|
|
317745
|
+
for (const [uri, meta] of Object.entries(resourceDescriptions)) {
|
|
317744
317746
|
done12 += 1;
|
|
317745
317747
|
indexProgress({ state: "adding entries for subresources", total, done: done12 });
|
|
317746
317748
|
const rels = reader.resolve(uri);
|
|
@@ -317748,15 +317750,28 @@ ${inject.head ?? ""}`;
|
|
|
317748
317750
|
([s2, p3, o2]) => p3 === "hasPart" && (s2 === ROOT_SUBJECT || s2 === uri) && !o2.startsWith("data:") && (!isURIString(o2) || !reader.exists(o2))
|
|
317749
317751
|
);
|
|
317750
317752
|
const body = relationsExcludingReferences.map(([, , o2]) => o2).join("").trim().normalize("NFKD").replace(/\p{Diacritic}/gu, "").trim();
|
|
317751
|
-
|
|
317753
|
+
const title = meta.labelInPlainText.normalize("NFKD").replace(/\p{Diacritic}/gu, "").trim();
|
|
317754
|
+
if (body || title) {
|
|
317752
317755
|
const entry = {
|
|
317753
317756
|
name: uri,
|
|
317754
|
-
body
|
|
317757
|
+
body,
|
|
317758
|
+
title,
|
|
317759
|
+
lang: meta.primaryLanguageID ?? ""
|
|
317755
317760
|
};
|
|
317756
|
-
|
|
317761
|
+
if (contentCache[uri]) {
|
|
317762
|
+
searchableResources.pages.push(entry);
|
|
317763
|
+
} else {
|
|
317764
|
+
searchableResources.resources.push(entry);
|
|
317765
|
+
}
|
|
317757
317766
|
} else {
|
|
317758
317767
|
}
|
|
317759
317768
|
}
|
|
317769
|
+
for (const entry of searchableResources.pages) {
|
|
317770
|
+
this.add(entry, { boost: 2 });
|
|
317771
|
+
}
|
|
317772
|
+
for (const entry of searchableResources.resources) {
|
|
317773
|
+
this.add(entry);
|
|
317774
|
+
}
|
|
317760
317775
|
});
|
|
317761
317776
|
console.debug("Index pipeline functions after", lunrIndex.pipeline._stack.map((f3) => f3.label));
|
|
317762
317777
|
console.debug("Index search pipeline functions after", lunrIndex.searchPipeline?._stack?.map((f3) => f3.label));
|