^${kWSP}*$`); ObjectSeal(kAllWSP); const BufferFrom = require('buffer').Buffer.from; // Returns {algorithm, value (in base64 string), options,}[] const parse = (str) => { let prevIndex = 0; let match; const entries = []; while ((match = RegExpPrototypeExec(kSRIPattern, str)) !== null) { if (match.index !== prevIndex) { throw new ERR_SRI_PARSE(str, str[prevIndex], prevIndex); } if (entries.length > 0 && match[1] === '') { throw new ERR_SRI_PARSE(str, str[prevIndex], prevIndex); } // Avoid setters being fired ObjectDefineProperty(entries, entries.length, { __proto__: null, enumerable: true, configurable: true, value: ObjectFreeze({ __proto__: null, algorithm: match[2], value: BufferFrom(match[3], 'base64'), options: match[4] === undefined ? null : match[4], }), }); prevIndex += match[0].length; } if (prevIndex !== str.length) { if (RegExpPrototypeExec(kAllWSP, StringPrototypeSlice(str, prevIndex)) === null) { throw new ERR_SRI_PARSE(str, str[prevIndex], prevIndex); } } return ObjectSetPrototypeOf(entries, ArrayPrototype); }; module.exports = { parse, };