@scriptables/manifest
Version:
Utilities to generate, parse, and update manifest headers in Scriptable scripts.
60 lines (57 loc) • 1.75 kB
JavaScript
;
var matchAllBannerManifest = require('./matchAllBannerManifest');
var parse = require('./parse');
var types = require('./types');
function parseScriptableManifest(script, targetKeys = []) {
if (!script) {
return {
manifest: {},
rawHeader: "",
content: ""
};
}
const {
header: parsedManifest,
headerContent: rawHeader,
content
} = parse.parse(script, (headerLines) => extractManifestFromHeader(headerLines, targetKeys), { maxHeaderLines: 20 });
return {
manifest: parsedManifest,
rawHeader,
content
};
}
function extractManifestFromHeader(headerLines, targetKeys) {
const manifest = {};
const keysToExtract = targetKeys.length ? targetKeys : [...types.SCRIPTABLE_BANNER_KEYS];
const manifestLine = headerLines.join(" ");
const matches = matchAllBannerManifest.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;
}
}
exports.parseScriptableManifest = parseScriptableManifest;
//# sourceMappingURL=parseScriptableManifest.js.map
//# sourceMappingURL=parseScriptableManifest.js.map