@scriptables/manifest
Version:
Utilities to generate, parse, and update manifest headers in Scriptable scripts.
53 lines (52 loc) • 1.85 kB
JavaScript
import { matchAllBannerManifest } from "./matchAllBannerManifest.js";
import { parse } from "./parse.js";
import { SCRIPTABLE_BANNER_KEYS } from "./types.js";
function parseScriptableManifest(script, targetKeys = []) {
if (!script) {
return {
manifest: {},
rawHeader: "",
content: ""
};
}
const { header: parsedManifest, headerContent: rawHeader, content } = parse(script, (headerLines) => extractManifestFromHeader(headerLines, targetKeys), { maxHeaderLines: 20 });
return {
manifest: parsedManifest,
rawHeader,
content
};
}
function extractManifestFromHeader(headerLines, targetKeys) {
const manifest = {};
const keysToExtract = targetKeys.length ? targetKeys : [...SCRIPTABLE_BANNER_KEYS];
const manifestLine = headerLines.join(" ");
const matches = matchAllBannerManifest(manifestLine);
for (const match of matches) {
const key = match[1];
const value = match[2].trim();
const manifestKey = key;
if (keysToExtract.includes(manifestKey) && value !== "") {
setManifestValue(manifest, manifestKey, value);
}
}
return manifest;
}
function setManifestValue(manifest, key, value) {
switch (key) {
case "always-run-in-app":
manifest.alwaysRunInApp = value === "true";
break;
case "share-sheet-inputs":
manifest.shareSheetInputs = value.split(",").map((v) => v.trim());
break;
case "icon-color":
manifest.iconColor = value.trim();
break;
case "icon-glyph":
manifest.iconGlyph = value.trim();
break;
}
}
export { parseScriptableManifest };
//# sourceMappingURL=parseScriptableManifest.js.map
//# sourceMappingURL=parseScriptableManifest.js.map