UNPKG

@scriptables/manifest

Version:

Utilities to generate, parse, and update manifest headers in Scriptable scripts.

53 lines (52 loc) 1.85 kB
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