@forward-widget/danmu-universe 0.6.0 → 0.7.0
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/dist/danmu-universe.js +1 -1
- package/package.json +1 -1
package/dist/danmu-universe.js
CHANGED
|
@@ -13,4 +13,4 @@ let METADATA_SYMBOL;var compat_ZodFirstPartyTypeKind,__webpack_modules__={188:fu
|
|
|
13
13
|
} else {
|
|
14
14
|
newResult[${i}] = ${n}.value;
|
|
15
15
|
}
|
|
16
|
-
`)}t.write("payload.value = newResult;"),t.write("return payload;");let s=t.compile();return(t,n)=>s(e,t,n)},a=util_isObject,s=!globalConfig.jitless,u=util_allowsEval,l=s&&u.value,c=t.catchall;e._zod.parse=(u,d)=>{r??(r=i.value);let f=u.value;if(!a(f))return u.issues.push({expected:"object",code:"invalid_type",input:f,inst:e}),u;let h=[];if(s&&l&&d?.async===!1&&!0!==d.jitless)n||(n=o(t.shape)),u=n(u,d);else{u.value={};let e=r.shape;for(let t of r.keys){let n=e[t]._zod.run({value:f[t],issues:[]},d);n instanceof Promise?h.push(n.then(e=>handlePropertyResult(e,u,t,f))):handlePropertyResult(n,u,t,f)}}if(!c)return h.length?Promise.all(h).then(()=>u):u;let p=[],m=r.keySet,g=c._zod,v=g.def.type;for(let e of Object.keys(f)){if(m.has(e))continue;if("never"===v){p.push(e);continue}let t=g.run({value:f[e],issues:[]},d);t instanceof Promise?h.push(t.then(t=>handlePropertyResult(t,u,e,f))):handlePropertyResult(t,u,e,f)}return(p.length&&u.issues.push({code:"unrecognized_keys",keys:p,input:f,inst:e}),h.length)?Promise.all(h).then(()=>u):u}});function handleUnionResults(e,t,n,r){for(let n of e)if(0===n.issues.length)return t.value=n.value,t;let i=e.filter(e=>!aborted(e));return 1===i.length?(t.value=i[0].value,i[0]):(t.issues.push({code:"invalid_union",input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>finalizeIssue(e,r,core_config())))}),t)}const $ZodUnion=$constructor("$ZodUnion",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"optin",()=>t.options.some(e=>"optional"===e._zod.optin)?"optional":void 0),defineLazy(e._zod,"optout",()=>t.options.some(e=>"optional"===e._zod.optout)?"optional":void 0),defineLazy(e._zod,"values",()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),defineLazy(e._zod,"pattern",()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>cleanRegex(e.source)).join("|")})$`)}});let n=1===t.options.length,r=t.options[0]._zod.run;e._zod.parse=(i,o)=>{if(n)return r(i,o);let a=!1,s=[];for(let e of t.options){let t=e._zod.run({value:i.value,issues:[]},o);if(t instanceof Promise)s.push(t),a=!0;else{if(0===t.issues.length)return t;s.push(t)}}return a?Promise.all(s).then(t=>handleUnionResults(t,i,e,o)):handleUnionResults(s,i,e,o)}}),$ZodDiscriminatedUnion=$constructor("$ZodDiscriminatedUnion",(e,t)=>{$ZodUnion.init(e,t);let n=e._zod.parse;defineLazy(e._zod,"propValues",()=>{let e={};for(let n of t.options){let r=n._zod.propValues;if(!r||0===Object.keys(r).length)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(n)}"`);for(let[t,n]of Object.entries(r))for(let r of(e[t]||(e[t]=new Set),n))e[t].add(r)}return e});let r=util_cached(()=>{let e=t.options,n=new Map;for(let r of e){let e=r._zod.propValues?.[t.discriminator];if(!e||0===e.size)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`);for(let t of e){if(n.has(t))throw Error(`Duplicate discriminator value "${String(t)}"`);n.set(t,r)}}return n});e._zod.parse=(i,o)=>{let a=i.value;if(!util_isObject(a))return i.issues.push({code:"invalid_type",expected:"object",input:a,inst:e}),i;let s=r.value.get(a?.[t.discriminator]);return s?s._zod.run(i,o):t.unionFallback?n(i,o):(i.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",discriminator:t.discriminator,input:a,path:[t.discriminator],inst:e}),i)}}),$ZodIntersection=$constructor("$ZodIntersection",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),o=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||o instanceof Promise?Promise.all([i,o]).then(([t,n])=>handleIntersectionResults(e,t,n)):handleIntersectionResults(e,i,o)}});function mergeValues(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(isPlainObject(e)&&isPlainObject(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>-1!==n.indexOf(e)),i={...e,...t};for(let n of r){let r=mergeValues(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r<e.length;r++){let i=mergeValues(e[r],t[r]);if(!i.valid)return{valid:!1,mergeErrorPath:[r,...i.mergeErrorPath]};n.push(i.data)}return{valid:!0,data:n}}return{valid:!1,mergeErrorPath:[]}}function handleIntersectionResults(e,t,n){if(t.issues.length&&e.issues.push(...t.issues),n.issues.length&&e.issues.push(...n.issues),aborted(e))return e;let r=mergeValues(t.value,n.value);if(!r.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(r.mergeErrorPath)}`);return e.value=r.data,e}(e,t)=>{$ZodType.init(e,t);let n=t.items,r=n.length-[...n].reverse().findIndex(e=>"optional"!==e._zod.optin);e._zod.parse=(i,o)=>{let a=i.value;if(!Array.isArray(a))return i.issues.push({input:a,inst:e,expected:"tuple",code:"invalid_type"}),i;i.value=[];let s=[];if(!t.rest){let t=a.length>n.length,o=a.length<r-1;if(t||o)return i.issues.push({...t?{code:"too_big",maximum:n.length}:{code:"too_small",minimum:n.length},input:a,inst:e,origin:"array"}),i}let u=-1;for(let e of n){if(++u>=a.length&&u>=r)continue;let t=e._zod.run({value:a[u],issues:[]},o);t instanceof Promise?s.push(t.then(e=>handleTupleResult(e,i,u))):handleTupleResult(t,i,u)}if(t.rest)for(let e of a.slice(n.length)){u++;let n=t.rest._zod.run({value:e,issues:[]},o);n instanceof Promise?s.push(n.then(e=>handleTupleResult(e,i,u))):handleTupleResult(n,i,u)}return s.length?Promise.all(s).then(()=>i):i}};function handleTupleResult(e,t,n){e.issues.length&&t.issues.push(...prefixIssues(n,e.issues)),t.value[n]=e.value}const $ZodRecord=$constructor("$ZodRecord",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!isPlainObject(i))return n.issues.push({expected:"record",code:"invalid_type",input:i,inst:e}),n;let o=[];if(t.keyType._zod.values){let a,s=t.keyType._zod.values;for(let e of(n.value={},s))if("string"==typeof e||"number"==typeof e||"symbol"==typeof e){let a=t.valueType._zod.run({value:i[e],issues:[]},r);a instanceof Promise?o.push(a.then(t=>{t.issues.length&&n.issues.push(...prefixIssues(e,t.issues)),n.value[e]=t.value})):(a.issues.length&&n.issues.push(...prefixIssues(e,a.issues)),n.value[e]=a.value)}for(let e in i)s.has(e)||(a=a??[]).push(e);a&&a.length>0&&n.issues.push({code:"unrecognized_keys",input:i,inst:e,keys:a})}else for(let a of(n.value={},Reflect.ownKeys(i))){if("__proto__"===a)continue;let s=t.keyType._zod.run({value:a,issues:[]},r);if(s instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(s.issues.length){n.issues.push({code:"invalid_key",origin:"record",issues:s.issues.map(e=>finalizeIssue(e,r,core_config())),input:a,path:[a],inst:e}),n.value[s.value]=s.value;continue}let u=t.valueType._zod.run({value:i[a],issues:[]},r);u instanceof Promise?o.push(u.then(e=>{e.issues.length&&n.issues.push(...prefixIssues(a,e.issues)),n.value[s.value]=e.value})):(u.issues.length&&n.issues.push(...prefixIssues(a,u.issues)),n.value[s.value]=u.value)}return o.length?Promise.all(o).then(()=>n):n}}),$ZodMap=$constructor("$ZodMap",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!(i instanceof Map))return n.issues.push({expected:"map",code:"invalid_type",input:i,inst:e}),n;let o=[];for(let[a,s]of(n.value=new Map,i)){let u=t.keyType._zod.run({value:a,issues:[]},r),l=t.valueType._zod.run({value:s,issues:[]},r);u instanceof Promise||l instanceof Promise?o.push(Promise.all([u,l]).then(([t,o])=>{handleMapResult(t,o,n,a,i,e,r)})):handleMapResult(u,l,n,a,i,e,r)}return o.length?Promise.all(o).then(()=>n):n}});function handleMapResult(e,t,n,r,i,o,a){e.issues.length&&(propertyKeyTypes.has(typeof r)?n.issues.push(...prefixIssues(r,e.issues)):n.issues.push({code:"invalid_key",origin:"map",input:i,inst:o,issues:e.issues.map(e=>finalizeIssue(e,a,core_config()))})),t.issues.length&&(propertyKeyTypes.has(typeof r)?n.issues.push(...prefixIssues(r,t.issues)):n.issues.push({origin:"map",code:"invalid_element",input:i,inst:o,key:r,issues:t.issues.map(e=>finalizeIssue(e,a,core_config()))})),n.value.set(e.value,t.value)}(e,t)=>{$ZodType.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!(i instanceof Set))return n.issues.push({input:i,inst:e,expected:"set",code:"invalid_type"}),n;let o=[];for(let e of(n.value=new Set,i)){let i=t.valueType._zod.run({value:e,issues:[]},r);i instanceof Promise?o.push(i.then(e=>handleSetResult(e,n))):handleSetResult(i,n)}return o.length?Promise.all(o).then(()=>n):n}};function handleSetResult(e,t){e.issues.length&&t.issues.push(...e.issues),t.value.add(e.value)}const $ZodEnum=$constructor("$ZodEnum",(e,t)=>{$ZodType.init(e,t);let n=getEnumValues(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>propertyKeyTypes.has(typeof e)).map(e=>"string"==typeof e?escapeRegex(e):e.toString()).join("|")})$`),e._zod.parse=(t,i)=>{let o=t.value;return r.has(o)||t.issues.push({code:"invalid_value",values:n,input:o,inst:e}),t}}),$ZodLiteral=$constructor("$ZodLiteral",(e,t)=>{if($ZodType.init(e,t),0===t.values.length)throw Error("Cannot create literal schema with no valid values");e._zod.values=new Set(t.values),e._zod.pattern=RegExp(`^(${t.values.map(e=>"string"==typeof e?escapeRegex(e):e?escapeRegex(e.toString()):String(e)).join("|")})$`),e._zod.parse=(n,r)=>{let i=n.value;return e._zod.values.has(i)||n.issues.push({code:"invalid_value",values:t.values,input:i,inst:e}),n}}),$ZodFile=$constructor("$ZodFile",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(t,n)=>{let r=t.value;return r instanceof File||t.issues.push({expected:"file",code:"invalid_type",input:r,inst:e}),t}}),$ZodTransform=$constructor("$ZodTransform",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(e,n)=>{let r=t.transform(e.value,e);if(n.async)return(r instanceof Promise?r:Promise.resolve(r)).then(t=>(e.value=t,e));if(r instanceof Promise)throw new $ZodAsyncError;return e.value=r,e}});function handleOptionalResult(e,t){return e.issues.length&&void 0===t?{issues:[],value:void 0}:e}const $ZodOptional=$constructor("$ZodOptional",(e,t)=>{$ZodType.init(e,t),e._zod.optin="optional",e._zod.optout="optional",defineLazy(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),defineLazy(e._zod,"pattern",()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${cleanRegex(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if("optional"===t.innerType._zod.optin){let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(t=>handleOptionalResult(t,e.value)):handleOptionalResult(r,e.value)}return void 0===e.value?e:t.innerType._zod.run(e,n)}}),$ZodNullable=$constructor("$ZodNullable",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"optin",()=>t.innerType._zod.optin),defineLazy(e._zod,"optout",()=>t.innerType._zod.optout),defineLazy(e._zod,"pattern",()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${cleanRegex(e.source)}|null)$`):void 0}),defineLazy(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>null===e.value?e:t.innerType._zod.run(e,n)}),$ZodDefault=$constructor("$ZodDefault",(e,t)=>{$ZodType.init(e,t),e._zod.optin="optional",defineLazy(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(void 0===e.value)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>handleDefaultResult(e,t)):handleDefaultResult(r,t)}});function handleDefaultResult(e,t){return void 0===e.value&&(e.value=t.defaultValue),e}const $ZodPrefault=$constructor("$ZodPrefault",(e,t)=>{$ZodType.init(e,t),e._zod.optin="optional",defineLazy(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(void 0===e.value&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),$ZodNonOptional=$constructor("$ZodNonOptional",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"values",()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>void 0!==e)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>handleNonOptionalResult(t,e)):handleNonOptionalResult(i,e)}});function handleNonOptionalResult(e,t){return e.issues.length||void 0!==e.value||e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:t}),e}const $ZodSuccess=$constructor("$ZodSuccess",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(e,n)=>{let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(t=>(e.value=0===t.issues.length,e)):(e.value=0===r.issues.length,e)}}),$ZodCatch=$constructor("$ZodCatch",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"optin",()=>t.innerType._zod.optin),defineLazy(e._zod,"optout",()=>t.innerType._zod.optout),defineLazy(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>finalizeIssue(e,n,core_config()))},input:e.value}),e.issues=[]),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>finalizeIssue(e,n,core_config()))},input:e.value}),e.issues=[]),e)}}),$ZodNaN=$constructor("$ZodNaN",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(t,n)=>("number"==typeof t.value&&Number.isNaN(t.value)||t.issues.push({input:t.value,inst:e,expected:"nan",code:"invalid_type"}),t)}),$ZodPipe=$constructor("$ZodPipe",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"values",()=>t.in._zod.values),defineLazy(e._zod,"optin",()=>t.in._zod.optin),defineLazy(e._zod,"optout",()=>t.out._zod.optout),defineLazy(e._zod,"propValues",()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>handlePipeResult(e,t,n)):handlePipeResult(r,t,n)}});function handlePipeResult(e,t,n){return e.issues.length?e:t.out._zod.run({value:e.value,issues:e.issues},n)}const $ZodReadonly=$constructor("$ZodReadonly",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"propValues",()=>t.innerType._zod.propValues),defineLazy(e._zod,"values",()=>t.innerType._zod.values),defineLazy(e._zod,"optin",()=>t.innerType._zod.optin),defineLazy(e._zod,"optout",()=>t.innerType._zod.optout),e._zod.parse=(e,n)=>{let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(handleReadonlyResult):handleReadonlyResult(r)}});function handleReadonlyResult(e){return e.value=Object.freeze(e.value),e}const $ZodTemplateLiteral=$constructor("$ZodTemplateLiteral",(e,t)=>{$ZodType.init(e,t);let n=[];for(let e of t.parts)if("object"==typeof e&&null!==e){if(!e._zod.pattern)throw Error(`Invalid template literal part, no pattern found: ${[...e._zod.traits].shift()}`);let t=e._zod.pattern instanceof RegExp?e._zod.pattern.source:e._zod.pattern;if(!t)throw Error(`Invalid template literal part: ${e._zod.traits}`);let r=+!!t.startsWith("^"),i=t.endsWith("$")?t.length-1:t.length;n.push(t.slice(r,i))}else if(null===e||primitiveTypes.has(typeof e))n.push(escapeRegex(`${e}`));else throw Error(`Invalid template literal part: ${e}`);e._zod.pattern=RegExp(`^${n.join("")}$`),e._zod.parse=(n,r)=>("string"!=typeof n.value?n.issues.push({input:n.value,inst:e,expected:"template_literal",code:"invalid_type"}):(e._zod.pattern.lastIndex=0,e._zod.pattern.test(n.value)||n.issues.push({input:n.value,inst:e,code:"invalid_format",format:t.format??"template_literal",pattern:e._zod.pattern.source})),n)}),$ZodPromise=$constructor("$ZodPromise",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(e,n)=>Promise.resolve(e.value).then(e=>t.innerType._zod.run({value:e,issues:[]},n))}),$ZodLazy=$constructor("$ZodLazy",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"innerType",()=>t.getter()),defineLazy(e._zod,"pattern",()=>e._zod.innerType._zod.pattern),defineLazy(e._zod,"propValues",()=>e._zod.innerType._zod.propValues),defineLazy(e._zod,"optin",()=>e._zod.innerType._zod.optin??void 0),defineLazy(e._zod,"optout",()=>e._zod.innerType._zod.optout??void 0),e._zod.parse=(t,n)=>e._zod.innerType._zod.run(t,n)}),$ZodCustom=$constructor("$ZodCustom",(e,t)=>{$ZodCheck.init(e,t),$ZodType.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>handleRefineResult(t,n,r,e));handleRefineResult(i,n,r,e)}});function handleRefineResult(e,t,n,r){if(!e){let e={code:"custom",input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(util_issue(e))}}const en_parsedType=e=>{let t=typeof e;switch(t){case"number":return Number.isNaN(e)?"NaN":"number";case"object":if(Array.isArray(e))return"array";if(null===e)return"null";if(Object.getPrototypeOf(e)!==Object.prototype&&e.constructor)return e.constructor.name}return t},en_error=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"}};function t(t){return e[t]??null}let n={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"};return e=>{switch(e.code){case"invalid_type":return`Invalid input: expected ${e.expected}, received ${en_parsedType(e.input)}`;case"invalid_value":if(1===e.values.length)return`Invalid input: expected ${stringifyPrimitive(e.values[0])}`;return`Invalid option: expected one of ${joinValues(e.values,"|")}`;case"too_big":{let n=e.inclusive?"<=":"<",r=t(e.origin);if(r)return`Too big: expected ${e.origin??"value"} to have ${n}${e.maximum.toString()} ${r.unit??"elements"}`;return`Too big: expected ${e.origin??"value"} to be ${n}${e.maximum.toString()}`}case"too_small":{let n=e.inclusive?">=":">",r=t(e.origin);if(r)return`Too small: expected ${e.origin} to have ${n}${e.minimum.toString()} ${r.unit}`;return`Too small: expected ${e.origin} to be ${n}${e.minimum.toString()}`}case"invalid_format":{let t=e;if("starts_with"===t.format)return`Invalid string: must start with "${t.prefix}"`;if("ends_with"===t.format)return`Invalid string: must end with "${t.suffix}"`;if("includes"===t.format)return`Invalid string: must include "${t.includes}"`;if("regex"===t.format)return`Invalid string: must match pattern ${t.pattern}`;return`Invalid ${n[t.format]??e.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${e.divisor}`;case"unrecognized_keys":return`Unrecognized key${e.keys.length>1?"s":""}: ${joinValues(e.keys,", ")}`;case"invalid_key":return`Invalid key in ${e.origin}`;case"invalid_union":default:return"Invalid input";case"invalid_element":return`Invalid value in ${e.origin}`}}};function en(){return{localeError:en_error()}}const zh_CN_error=()=>{let e={string:{unit:"字符",verb:"包含"},file:{unit:"字节",verb:"包含"},array:{unit:"项",verb:"包含"},set:{unit:"项",verb:"包含"}};function t(t){return e[t]??null}let n=e=>{let t=typeof e;switch(t){case"number":return Number.isNaN(e)?"非数字(NaN)":"数字";case"object":if(Array.isArray(e))return"数组";if(null===e)return"空值(null)";if(Object.getPrototypeOf(e)!==Object.prototype&&e.constructor)return e.constructor.name}return t},r={regex:"输入",email:"电子邮件",url:"URL",emoji:"表情符号",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO日期时间",date:"ISO日期",time:"ISO时间",duration:"ISO时长",ipv4:"IPv4地址",ipv6:"IPv6地址",cidrv4:"IPv4网段",cidrv6:"IPv6网段",base64:"base64编码字符串",base64url:"base64url编码字符串",json_string:"JSON字符串",e164:"E.164号码",jwt:"JWT",template_literal:"输入"};return e=>{switch(e.code){case"invalid_type":return`无效输入:期望 ${e.expected},实际接收 ${n(e.input)}`;case"invalid_value":if(1===e.values.length)return`无效输入:期望 ${stringifyPrimitive(e.values[0])}`;return`无效选项:期望以下之一 ${joinValues(e.values,"|")}`;case"too_big":{let n=e.inclusive?"<=":"<",r=t(e.origin);if(r)return`数值过大:期望 ${e.origin??"值"} ${n}${e.maximum.toString()} ${r.unit??"个元素"}`;return`数值过大:期望 ${e.origin??"值"} ${n}${e.maximum.toString()}`}case"too_small":{let n=e.inclusive?">=":">",r=t(e.origin);if(r)return`数值过小:期望 ${e.origin} ${n}${e.minimum.toString()} ${r.unit}`;return`数值过小:期望 ${e.origin} ${n}${e.minimum.toString()}`}case"invalid_format":{let t=e;if("starts_with"===t.format)return`无效字符串:必须以 "${t.prefix}" 开头`;if("ends_with"===t.format)return`无效字符串:必须以 "${t.suffix}" 结尾`;if("includes"===t.format)return`无效字符串:必须包含 "${t.includes}"`;if("regex"===t.format)return`无效字符串:必须满足正则表达式 ${t.pattern}`;return`无效${r[t.format]??e.format}`}case"not_multiple_of":return`无效数字:必须是 ${e.divisor} 的倍数`;case"unrecognized_keys":return`出现未知的键(key): ${joinValues(e.keys,", ")}`;case"invalid_key":return`${e.origin} 中的键(key)无效`;case"invalid_union":return"无效输入";case"invalid_element":return`${e.origin} 中包含无效值(value)`;default:return`无效输入`}}};function zh_CN(){return{localeError:zh_CN_error()}}Symbol("ZodOutput"),Symbol("ZodInput");class $ZodRegistry{constructor(){this._map=new Map,this._idmap=new Map}add(e,...t){let n=t[0];if(this._map.set(e,n),n&&"object"==typeof n&&"id"in n){if(this._idmap.has(n.id))throw Error(`ID ${n.id} already exists in the registry`);this._idmap.set(n.id,e)}return this}clear(){return this._map=new Map,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&"object"==typeof t&&"id"in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}}function registry(){return new $ZodRegistry}const globalRegistry=registry();function _string(e,t){return new e({type:"string",...normalizeParams(t)})}function _coercedString(e,t){return new e({type:"string",coerce:!0,...normalizeParams(t)})}function _email(e,t){return new e({type:"string",format:"email",check:"string_format",abort:!1,...normalizeParams(t)})}function _guid(e,t){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...normalizeParams(t)})}function _uuid(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,...normalizeParams(t)})}function _uuidv4(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...normalizeParams(t)})}function _uuidv6(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...normalizeParams(t)})}function _uuidv7(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...normalizeParams(t)})}function _url(e,t){return new e({type:"string",format:"url",check:"string_format",abort:!1,...normalizeParams(t)})}function api_emoji(e,t){return new e({type:"string",format:"emoji",check:"string_format",abort:!1,...normalizeParams(t)})}function _nanoid(e,t){return new e({type:"string",format:"nanoid",check:"string_format",abort:!1,...normalizeParams(t)})}function _cuid(e,t){return new e({type:"string",format:"cuid",check:"string_format",abort:!1,...normalizeParams(t)})}function _cuid2(e,t){return new e({type:"string",format:"cuid2",check:"string_format",abort:!1,...normalizeParams(t)})}function _ulid(e,t){return new e({type:"string",format:"ulid",check:"string_format",abort:!1,...normalizeParams(t)})}function _xid(e,t){return new e({type:"string",format:"xid",check:"string_format",abort:!1,...normalizeParams(t)})}function _ksuid(e,t){return new e({type:"string",format:"ksuid",check:"string_format",abort:!1,...normalizeParams(t)})}function _ipv4(e,t){return new e({type:"string",format:"ipv4",check:"string_format",abort:!1,...normalizeParams(t)})}function _ipv6(e,t){return new e({type:"string",format:"ipv6",check:"string_format",abort:!1,...normalizeParams(t)})}function _cidrv4(e,t){return new e({type:"string",format:"cidrv4",check:"string_format",abort:!1,...normalizeParams(t)})}function _cidrv6(e,t){return new e({type:"string",format:"cidrv6",check:"string_format",abort:!1,...normalizeParams(t)})}function _base64(e,t){return new e({type:"string",format:"base64",check:"string_format",abort:!1,...normalizeParams(t)})}function _base64url(e,t){return new e({type:"string",format:"base64url",check:"string_format",abort:!1,...normalizeParams(t)})}function _e164(e,t){return new e({type:"string",format:"e164",check:"string_format",abort:!1,...normalizeParams(t)})}function _jwt(e,t){return new e({type:"string",format:"jwt",check:"string_format",abort:!1,...normalizeParams(t)})}function _isoDateTime(e,t){return new e({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...normalizeParams(t)})}function _isoDate(e,t){return new e({type:"string",format:"date",check:"string_format",...normalizeParams(t)})}function _isoTime(e,t){return new e({type:"string",format:"time",check:"string_format",precision:null,...normalizeParams(t)})}function _isoDuration(e,t){return new e({type:"string",format:"duration",check:"string_format",...normalizeParams(t)})}function _number(e,t){return new e({type:"number",checks:[],...normalizeParams(t)})}function _coercedNumber(e,t){return new e({type:"number",coerce:!0,checks:[],...normalizeParams(t)})}function _int(e,t){return new e({type:"number",check:"number_format",abort:!1,format:"safeint",...normalizeParams(t)})}function _boolean(e,t){return new e({type:"boolean",...normalizeParams(t)})}function _any(e){return new e({type:"any"})}function _unknown(e){return new e({type:"unknown"})}function _never(e,t){return new e({type:"never",...normalizeParams(t)})}function _lt(e,t){return new $ZodCheckLessThan({check:"less_than",...normalizeParams(t),value:e,inclusive:!1})}function _lte(e,t){return new $ZodCheckLessThan({check:"less_than",...normalizeParams(t),value:e,inclusive:!0})}function _gt(e,t){return new $ZodCheckGreaterThan({check:"greater_than",...normalizeParams(t),value:e,inclusive:!1})}function _gte(e,t){return new $ZodCheckGreaterThan({check:"greater_than",...normalizeParams(t),value:e,inclusive:!0})}function _multipleOf(e,t){return new $ZodCheckMultipleOf({check:"multiple_of",...normalizeParams(t),value:e})}function _maxLength(e,t){return new $ZodCheckMaxLength({check:"max_length",...normalizeParams(t),maximum:e})}function _minLength(e,t){return new $ZodCheckMinLength({check:"min_length",...normalizeParams(t),minimum:e})}function _length(e,t){return new $ZodCheckLengthEquals({check:"length_equals",...normalizeParams(t),length:e})}function _regex(e,t){return new $ZodCheckRegex({check:"string_format",format:"regex",...normalizeParams(t),pattern:e})}function _lowercase(e){return new $ZodCheckLowerCase({check:"string_format",format:"lowercase",...normalizeParams(e)})}function _uppercase(e){return new $ZodCheckUpperCase({check:"string_format",format:"uppercase",...normalizeParams(e)})}function _includes(e,t){return new $ZodCheckIncludes({check:"string_format",format:"includes",...normalizeParams(t),includes:e})}function _startsWith(e,t){return new $ZodCheckStartsWith({check:"string_format",format:"starts_with",...normalizeParams(t),prefix:e})}function _endsWith(e,t){return new $ZodCheckEndsWith({check:"string_format",format:"ends_with",...normalizeParams(t),suffix:e})}function _overwrite(e){return new $ZodCheckOverwrite({check:"overwrite",tx:e})}function _normalize(e){return _overwrite(t=>t.normalize(e))}function _trim(){return _overwrite(e=>e.trim())}function _toLowerCase(){return _overwrite(e=>e.toLowerCase())}function _toUpperCase(){return _overwrite(e=>e.toUpperCase())}function _array(e,t,n){return new e({type:"array",element:t,...normalizeParams(n)})}function _refine(e,t,n){return new e({type:"custom",check:"custom",fn:t,...normalizeParams(n)})}function _superRefine(e){let t=_check(n=>(n.addIssue=e=>{if("string"==typeof e)n.issues.push(util_issue(e,n.value,t._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??(r.code="custom"),r.input??(r.input=n.value),r.inst??(r.inst=t),r.continue??(r.continue=!t._zod.def.abort),n.issues.push(util_issue(r))}},e(n.value,n)));return t}function _check(e,t){let n=new $ZodCheck({check:"custom",...normalizeParams(t)});return n._zod.check=e,n}function _stringbool(e,t){let n=normalizeParams(t),r=n.truthy??["true","1","yes","on","y","enabled"],i=n.falsy??["false","0","no","off","n","disabled"];"sensitive"!==n.case&&(r=r.map(e=>"string"==typeof e?e.toLowerCase():e),i=i.map(e=>"string"==typeof e?e.toLowerCase():e));let o=new Set(r),a=new Set(i),s=e.Pipe??$ZodPipe,u=e.Boolean??$ZodBoolean,l=e.String??$ZodString,c=new(e.Transform??$ZodTransform)({type:"transform",transform:(e,t)=>{let r=e;return"sensitive"!==n.case&&(r=r.toLowerCase()),!!o.has(r)||!a.has(r)&&(t.issues.push({code:"invalid_value",expected:"stringbool",values:[...o,...a],input:t.value,inst:c,continue:!1}),{})},error:n.error}),d=new s({type:"pipe",in:new l({type:"string",error:n.error}),out:c,error:n.error});return new s({type:"pipe",in:d,out:new u({type:"boolean",error:n.error}),error:n.error})}const ZodISODateTime=$constructor("ZodISODateTime",(e,t)=>{$ZodISODateTime.init(e,t),ZodStringFormat.init(e,t)});function iso_datetime(e){return _isoDateTime(ZodISODateTime,e)}const ZodISODate=$constructor("ZodISODate",(e,t)=>{$ZodISODate.init(e,t),ZodStringFormat.init(e,t)});function iso_date(e){return _isoDate(ZodISODate,e)}const ZodISOTime=$constructor("ZodISOTime",(e,t)=>{$ZodISOTime.init(e,t),ZodStringFormat.init(e,t)});function iso_time(e){return _isoTime(ZodISOTime,e)}const ZodISODuration=$constructor("ZodISODuration",(e,t)=>{$ZodISODuration.init(e,t),ZodStringFormat.init(e,t)});function iso_duration(e){return _isoDuration(ZodISODuration,e)}const classic_errors_initializer=(e,t)=>{$ZodError.init(e,t),e.name="ZodError",Object.defineProperties(e,{format:{value:t=>formatError(e,t)},flatten:{value:t=>flattenError(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,jsonStringifyReplacer,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,jsonStringifyReplacer,2)}},isEmpty:{get:()=>0===e.issues.length}})};$constructor("ZodError",classic_errors_initializer);const ZodRealError=$constructor("ZodError",classic_errors_initializer,{Parent:Error}),parse_parse=_parse(ZodRealError),parse_parseAsync=_parseAsync(ZodRealError),parse_safeParse=_safeParse(ZodRealError),parse_safeParseAsync=_safeParseAsync(ZodRealError),ZodType=$constructor("ZodType",(e,t)=>($ZodType.init(e,t),e.def=t,Object.defineProperty(e,"_def",{value:t}),e.check=(...n)=>e.clone({...t,checks:[...t.checks??[],...n.map(e=>"function"==typeof e?{_zod:{check:e,def:{check:"custom"},onattach:[]}}:e)]}),e.clone=(t,n)=>clone(e,t,n),e.brand=()=>e,e.register=(t,n)=>(t.add(e,n),e),e.parse=(t,n)=>parse_parse(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>parse_safeParse(e,t,n),e.parseAsync=async(t,n)=>parse_parseAsync(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>parse_safeParseAsync(e,t,n),e.spa=e.safeParseAsync,e.refine=(t,n)=>e.check(refine(t,n)),e.superRefine=t=>e.check(superRefine(t)),e.overwrite=t=>e.check(_overwrite(t)),e.optional=()=>optional(e),e.nullable=()=>nullable(e),e.nullish=()=>optional(nullable(e)),e.nonoptional=t=>nonoptional(e,t),e.array=()=>schemas_array(e),e.or=t=>union([e,t]),e.and=t=>intersection(e,t),e.transform=t=>pipe(e,transform(t)),e.default=t=>schemas_default(e,t),e.prefault=t=>prefault(e,t),e.catch=t=>schemas_catch(e,t),e.pipe=t=>pipe(e,t),e.readonly=()=>readonly(e),e.describe=t=>{let n=e.clone();return globalRegistry.add(n,{description:t}),n},Object.defineProperty(e,"description",{get:()=>globalRegistry.get(e)?.description,configurable:!0}),e.meta=(...t)=>{if(0===t.length)return globalRegistry.get(e);let n=e.clone();return globalRegistry.add(n,t[0]),n},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e)),_ZodString=$constructor("_ZodString",(e,t)=>{$ZodString.init(e,t),ZodType.init(e,t);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,e.regex=(...t)=>e.check(_regex(...t)),e.includes=(...t)=>e.check(_includes(...t)),e.startsWith=(...t)=>e.check(_startsWith(...t)),e.endsWith=(...t)=>e.check(_endsWith(...t)),e.min=(...t)=>e.check(_minLength(...t)),e.max=(...t)=>e.check(_maxLength(...t)),e.length=(...t)=>e.check(_length(...t)),e.nonempty=(...t)=>e.check(_minLength(1,...t)),e.lowercase=t=>e.check(_lowercase(t)),e.uppercase=t=>e.check(_uppercase(t)),e.trim=()=>e.check(_trim()),e.normalize=(...t)=>e.check(_normalize(...t)),e.toLowerCase=()=>e.check(_toLowerCase()),e.toUpperCase=()=>e.check(_toUpperCase())}),ZodString=$constructor("ZodString",(e,t)=>{$ZodString.init(e,t),_ZodString.init(e,t),e.email=t=>e.check(_email(ZodEmail,t)),e.url=t=>e.check(_url(ZodURL,t)),e.jwt=t=>e.check(_jwt(ZodJWT,t)),e.emoji=t=>e.check(api_emoji(ZodEmoji,t)),e.guid=t=>e.check(_guid(ZodGUID,t)),e.uuid=t=>e.check(_uuid(ZodUUID,t)),e.uuidv4=t=>e.check(_uuidv4(ZodUUID,t)),e.uuidv6=t=>e.check(_uuidv6(ZodUUID,t)),e.uuidv7=t=>e.check(_uuidv7(ZodUUID,t)),e.nanoid=t=>e.check(_nanoid(ZodNanoID,t)),e.guid=t=>e.check(_guid(ZodGUID,t)),e.cuid=t=>e.check(_cuid(ZodCUID,t)),e.cuid2=t=>e.check(_cuid2(ZodCUID2,t)),e.ulid=t=>e.check(_ulid(ZodULID,t)),e.base64=t=>e.check(_base64(ZodBase64,t)),e.base64url=t=>e.check(_base64url(ZodBase64URL,t)),e.xid=t=>e.check(_xid(ZodXID,t)),e.ksuid=t=>e.check(_ksuid(ZodKSUID,t)),e.ipv4=t=>e.check(_ipv4(ZodIPv4,t)),e.ipv6=t=>e.check(_ipv6(ZodIPv6,t)),e.cidrv4=t=>e.check(_cidrv4(ZodCIDRv4,t)),e.cidrv6=t=>e.check(_cidrv6(ZodCIDRv6,t)),e.e164=t=>e.check(_e164(ZodE164,t)),e.datetime=t=>e.check(iso_datetime(t)),e.date=t=>e.check(iso_date(t)),e.time=t=>e.check(iso_time(t)),e.duration=t=>e.check(iso_duration(t))});function schemas_string(e){return _string(ZodString,e)}const ZodStringFormat=$constructor("ZodStringFormat",(e,t)=>{$ZodStringFormat.init(e,t),_ZodString.init(e,t)}),ZodEmail=$constructor("ZodEmail",(e,t)=>{$ZodEmail.init(e,t),ZodStringFormat.init(e,t)}),ZodGUID=$constructor("ZodGUID",(e,t)=>{$ZodGUID.init(e,t),ZodStringFormat.init(e,t)}),ZodUUID=$constructor("ZodUUID",(e,t)=>{$ZodUUID.init(e,t),ZodStringFormat.init(e,t)}),ZodURL=$constructor("ZodURL",(e,t)=>{$ZodURL.init(e,t),ZodStringFormat.init(e,t)}),ZodEmoji=$constructor("ZodEmoji",(e,t)=>{$ZodEmoji.init(e,t),ZodStringFormat.init(e,t)}),ZodNanoID=$constructor("ZodNanoID",(e,t)=>{$ZodNanoID.init(e,t),ZodStringFormat.init(e,t)}),ZodCUID=$constructor("ZodCUID",(e,t)=>{$ZodCUID.init(e,t),ZodStringFormat.init(e,t)}),ZodCUID2=$constructor("ZodCUID2",(e,t)=>{$ZodCUID2.init(e,t),ZodStringFormat.init(e,t)}),ZodULID=$constructor("ZodULID",(e,t)=>{$ZodULID.init(e,t),ZodStringFormat.init(e,t)}),ZodXID=$constructor("ZodXID",(e,t)=>{$ZodXID.init(e,t),ZodStringFormat.init(e,t)}),ZodKSUID=$constructor("ZodKSUID",(e,t)=>{$ZodKSUID.init(e,t),ZodStringFormat.init(e,t)}),ZodIPv4=$constructor("ZodIPv4",(e,t)=>{$ZodIPv4.init(e,t),ZodStringFormat.init(e,t)}),ZodIPv6=$constructor("ZodIPv6",(e,t)=>{$ZodIPv6.init(e,t),ZodStringFormat.init(e,t)}),ZodCIDRv4=$constructor("ZodCIDRv4",(e,t)=>{$ZodCIDRv4.init(e,t),ZodStringFormat.init(e,t)}),ZodCIDRv6=$constructor("ZodCIDRv6",(e,t)=>{$ZodCIDRv6.init(e,t),ZodStringFormat.init(e,t)}),ZodBase64=$constructor("ZodBase64",(e,t)=>{$ZodBase64.init(e,t),ZodStringFormat.init(e,t)}),ZodBase64URL=$constructor("ZodBase64URL",(e,t)=>{$ZodBase64URL.init(e,t),ZodStringFormat.init(e,t)}),ZodE164=$constructor("ZodE164",(e,t)=>{$ZodE164.init(e,t),ZodStringFormat.init(e,t)}),ZodJWT=$constructor("ZodJWT",(e,t)=>{$ZodJWT.init(e,t),ZodStringFormat.init(e,t)}),ZodNumber=$constructor("ZodNumber",(e,t)=>{$ZodNumber.init(e,t),ZodType.init(e,t),e.gt=(t,n)=>e.check(_gt(t,n)),e.gte=(t,n)=>e.check(_gte(t,n)),e.min=(t,n)=>e.check(_gte(t,n)),e.lt=(t,n)=>e.check(_lt(t,n)),e.lte=(t,n)=>e.check(_lte(t,n)),e.max=(t,n)=>e.check(_lte(t,n)),e.int=t=>e.check(schemas_int(t)),e.safe=t=>e.check(schemas_int(t)),e.positive=t=>e.check(_gt(0,t)),e.nonnegative=t=>e.check(_gte(0,t)),e.negative=t=>e.check(_lt(0,t)),e.nonpositive=t=>e.check(_lte(0,t)),e.multipleOf=(t,n)=>e.check(_multipleOf(t,n)),e.step=(t,n)=>e.check(_multipleOf(t,n)),e.finite=()=>e;let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??"").includes("int")||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function schemas_number(e){return _number(ZodNumber,e)}const ZodNumberFormat=$constructor("ZodNumberFormat",(e,t)=>{$ZodNumberFormat.init(e,t),ZodNumber.init(e,t)});function schemas_int(e){return _int(ZodNumberFormat,e)}const ZodBoolean=$constructor("ZodBoolean",(e,t)=>{$ZodBoolean.init(e,t),ZodType.init(e,t)});function schemas_boolean(e){return _boolean(ZodBoolean,e)}const ZodBigInt=$constructor("ZodBigInt",(e,t)=>{$ZodBigInt.init(e,t),ZodType.init(e,t),e.gte=(t,n)=>e.check(_gte(t,n)),e.min=(t,n)=>e.check(_gte(t,n)),e.gt=(t,n)=>e.check(_gt(t,n)),e.gte=(t,n)=>e.check(_gte(t,n)),e.min=(t,n)=>e.check(_gte(t,n)),e.lt=(t,n)=>e.check(_lt(t,n)),e.lte=(t,n)=>e.check(_lte(t,n)),e.max=(t,n)=>e.check(_lte(t,n)),e.positive=t=>e.check(_gt(BigInt(0),t)),e.negative=t=>e.check(_lt(BigInt(0),t)),e.nonpositive=t=>e.check(_lte(BigInt(0),t)),e.nonnegative=t=>e.check(_gte(BigInt(0),t)),e.multipleOf=(t,n)=>e.check(_multipleOf(t,n));let n=e._zod.bag;e.minValue=n.minimum??null,e.maxValue=n.maximum??null,e.format=n.format??null}),ZodAny=$constructor("ZodAny",(e,t)=>{$ZodAny.init(e,t),ZodType.init(e,t)});function any(){return _any(ZodAny)}const ZodUnknown=$constructor("ZodUnknown",(e,t)=>{$ZodUnknown.init(e,t),ZodType.init(e,t)});function unknown(){return _unknown(ZodUnknown)}const ZodNever=$constructor("ZodNever",(e,t)=>{$ZodNever.init(e,t),ZodType.init(e,t)});function never(e){return _never(ZodNever,e)}const ZodArray=$constructor("ZodArray",(e,t)=>{$ZodArray.init(e,t),ZodType.init(e,t),e.element=t.element,e.min=(t,n)=>e.check(_minLength(t,n)),e.nonempty=t=>e.check(_minLength(1,t)),e.max=(t,n)=>e.check(_maxLength(t,n)),e.length=(t,n)=>e.check(_length(t,n)),e.unwrap=()=>e.element});function schemas_array(e,t){return _array(ZodArray,e,t)}const ZodObject=$constructor("ZodObject",(e,t)=>{$ZodObject.init(e,t),ZodType.init(e,t),defineLazy(e,"shape",()=>t.shape),e.keyof=()=>schemas_enum(Object.keys(e._zod.def.shape)),e.catchall=t=>e.clone({...e._zod.def,catchall:t}),e.passthrough=()=>e.clone({...e._zod.def,catchall:unknown()}),e.loose=()=>e.clone({...e._zod.def,catchall:unknown()}),e.strict=()=>e.clone({...e._zod.def,catchall:never()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=t=>extend(e,t),e.merge=t=>merge(e,t),e.pick=t=>pick(e,t),e.omit=t=>omit(e,t),e.partial=(...t)=>partial(ZodOptional,e,t[0]),e.required=(...t)=>required(ZodNonOptional,e,t[0])});function schemas_object(e,t){return new ZodObject({type:"object",get shape(){return assignProp(this,"shape",e?objectClone(e):{}),this.shape},...normalizeParams(t)})}function looseObject(e,t){return new ZodObject({type:"object",get shape(){return assignProp(this,"shape",objectClone(e)),this.shape},catchall:unknown(),...normalizeParams(t)})}const ZodUnion=$constructor("ZodUnion",(e,t)=>{$ZodUnion.init(e,t),ZodType.init(e,t),e.options=t.options});function union(e,t){return new ZodUnion({type:"union",options:e,...normalizeParams(t)})}const ZodIntersection=$constructor("ZodIntersection",(e,t)=>{$ZodIntersection.init(e,t),ZodType.init(e,t)});function intersection(e,t){return new ZodIntersection({type:"intersection",left:e,right:t})}const ZodRecord=$constructor("ZodRecord",(e,t)=>{$ZodRecord.init(e,t),ZodType.init(e,t),e.keyType=t.keyType,e.valueType=t.valueType});function record(e,t,n){return new ZodRecord({type:"record",keyType:e,valueType:t,...normalizeParams(n)})}const ZodEnum=$constructor("ZodEnum",(e,t)=>{$ZodEnum.init(e,t),ZodType.init(e,t),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new ZodEnum({...t,checks:[],...normalizeParams(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new ZodEnum({...t,checks:[],...normalizeParams(r),entries:i})}});function schemas_enum(e,t){return new ZodEnum({type:"enum",entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...normalizeParams(t)})}const ZodLiteral=$constructor("ZodLiteral",(e,t)=>{$ZodLiteral.init(e,t),ZodType.init(e,t),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function literal(e,t){return new ZodLiteral({type:"literal",values:Array.isArray(e)?e:[e],...normalizeParams(t)})}const ZodTransform=$constructor("ZodTransform",(e,t)=>{$ZodTransform.init(e,t),ZodType.init(e,t),e._zod.parse=(n,r)=>{n.addIssue=r=>{if("string"==typeof r)n.issues.push(util_issue(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??(t.code="custom"),t.input??(t.input=n.value),t.inst??(t.inst=e),n.issues.push(util_issue(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function transform(e){return new ZodTransform({type:"transform",transform:e})}const ZodOptional=$constructor("ZodOptional",(e,t)=>{$ZodOptional.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function optional(e){return new ZodOptional({type:"optional",innerType:e})}const ZodNullable=$constructor("ZodNullable",(e,t)=>{$ZodNullable.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function nullable(e){return new ZodNullable({type:"nullable",innerType:e})}const ZodDefault=$constructor("ZodDefault",(e,t)=>{$ZodDefault.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function schemas_default(e,t){return new ZodDefault({type:"default",innerType:e,get defaultValue(){return"function"==typeof t?t():shallowClone(t)}})}const ZodPrefault=$constructor("ZodPrefault",(e,t)=>{$ZodPrefault.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function prefault(e,t){return new ZodPrefault({type:"prefault",innerType:e,get defaultValue(){return"function"==typeof t?t():shallowClone(t)}})}const ZodNonOptional=$constructor("ZodNonOptional",(e,t)=>{$ZodNonOptional.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function nonoptional(e,t){return new ZodNonOptional({type:"nonoptional",innerType:e,...normalizeParams(t)})}const ZodCatch=$constructor("ZodCatch",(e,t)=>{$ZodCatch.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function schemas_catch(e,t){return new ZodCatch({type:"catch",innerType:e,catchValue:"function"==typeof t?t:()=>t})}const ZodPipe=$constructor("ZodPipe",(e,t)=>{$ZodPipe.init(e,t),ZodType.init(e,t),e.in=t.in,e.out=t.out});function pipe(e,t){return new ZodPipe({type:"pipe",in:e,out:t})}const ZodReadonly=$constructor("ZodReadonly",(e,t)=>{$ZodReadonly.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function readonly(e){return new ZodReadonly({type:"readonly",innerType:e})}const ZodCustom=$constructor("ZodCustom",(e,t)=>{$ZodCustom.init(e,t),ZodType.init(e,t)});function refine(e,t={}){return _refine(ZodCustom,e,t)}function superRefine(e){return _superRefine(e)}const stringbool=(...e)=>_stringbool({Pipe:ZodPipe,Boolean:ZodBoolean,String:ZodString,Transform:ZodTransform},...e);function preprocess(e,t){return pipe(transform(e),t)}function coerce_string(e){return _coercedString(ZodString,e)}function coerce_number(e){return _coercedNumber(ZodNumber,e)}compat_ZodFirstPartyTypeKind||(compat_ZodFirstPartyTypeKind={}),core_config(en()),core_config(zh_CN());var constants_MediaType=function(e){return e.Movie="movie",e.TV="tv",e}({});const DEFAULT_COLOR_HEX="ffffff",DEFAULT_COLOR_INT=parseInt(DEFAULT_COLOR_HEX,16),PROVIDER_NAMES={tencent:"腾讯视频",iqiyi:"爱奇艺",youku:"优酷视频",bilibili:"哔哩哔哩",renren:"人人视频",mgtv:"芒果 TV"},searchDanmuParamsSchema=schemas_object({tmdbId:coerce_string().optional(),type:schemas_enum(["movie","tv"]).transform(e=>e).catch("movie"),title:coerce_string().optional(),seriesName:coerce_string().optional(),season:coerce_number().optional(),airDate:coerce_string().optional(),episode:coerce_number().optional(),fuzzyMatch:schemas_enum(["always","never","auto"]).catch("auto").optional().default("auto")}),EMPTY_ANIME_CONFIG={ID:"__empty__",TITLE:"\uD83D\uDE2D 未匹配到资源"};var enc_base64=__webpack_require__(716),enc_base64_default=__webpack_require__.n(enc_base64);function safeJsonParse(e){try{if(!e)return null;return JSON.parse(e)}catch(e){return null}}function safeJsonParseWithZod(e,t){let n=safeJsonParse(e);if(!n)return null;let{success:r,data:i,error:o}=t.safeParse(n);return r?i:(console.warn(`Failed to parse JSON with Zod: ${e}`,o),null)}function base64ToUint8Array(e){let t=enc_base64_default().parse(e),n=new Uint8Array(t.sigBytes);for(let e=0;e<t.sigBytes;e++){let r=e>>>2,i=e%4;n[e]=t.words[r]>>>24-8*i&255}return n}function generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function _define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const TTL_7_DAYS=6048e5,TTL_1_DAY=864e5,TTL_2_HOURS=72e5,TTL_5_MINUTES=3e5,StorageValue=schemas_object({value:schemas_string(),expiresAt:schemas_number()});class Storage{async get(e){let t=await Widget.storage.get(e);if(!t)return null;let n=safeJsonParseWithZod(t,StorageValue);return n?(null==n?void 0:n.expiresAt)<Date.now()?(console.warn(`Storage value for key: ${e} has expired`),this.remove(e),null):n.value:(console.warn(`Failed to parse storage value for key: ${e}`),this.remove(e),null)}set(e,t,n){var r;let i=null!=(r=null==n?void 0:n.ttl)?r:this.defaultTTL,o=Date.now()+i,a=StorageValue.parse({value:t,expiresAt:o});return Widget.storage.set(e,JSON.stringify(a))}remove(e){return Widget.storage.remove(e)}clear(){return Widget.storage.clear()}async getJson(e){let t=await this.get(e);return t?safeJsonParse(t):null}setJson(e,t,n){return this.set(e,JSON.stringify(t),n)}async cleanup(){try{let e="__storage_last_cleanup__";this.get(e)||(await Widget.storage.keys()).forEach(e=>{this.get(e)}),this.set(e,"1",{ttl:TTL_1_DAY})}catch(e){console.error("Failed to cleanup storage",e)}}constructor(){_define_property(this,"defaultTTL",TTL_5_MINUTES)}}const storage=new Storage,getExternalIdsByTmdbId=async(e,t)=>{let n=null,r=`tmdb:${e}:${t}:external_ids`,i=await storage.getJson(r);return i?n=i:(n=await Widget.tmdb.get(`/${e}/${t}/external_ids`),storage.setJson(r,n,{ttl:TTL_7_DAYS})),n};function omit_omit(e,t){let n={...e};for(let e=0;e<t.length;e++){let r=t[e];delete n[r]}return n}function isUnsafeProperty(e){return"__proto__"===e}function isPlainObject_isPlainObject(e){if(!e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&"[object Object]"===Object.prototype.toString.call(e)}function merge_merge(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r++){let i=n[r];if(isUnsafeProperty(i))continue;let o=t[i],a=e[i];Array.isArray(o)?Array.isArray(a)?e[i]=merge_merge(a,o):e[i]=merge_merge([],o):isPlainObject_isPlainObject(o)?isPlainObject_isPlainObject(a)?e[i]=merge_merge(a,o):e[i]=merge_merge({},o):(void 0===a||void 0!==o)&&(e[i]=o)}return e}var url_parse=__webpack_require__(337),url_parse_default=__webpack_require__.n(url_parse);function fetch_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class HttpStatusError extends Error{constructor(e,t,n,r){super(`HTTP ${e} - Expected: [${t.join(", ")}] - ${n.method} ${n.url}`),fetch_define_property(this,"statusCode",void 0),fetch_define_property(this,"expectedStatus",void 0),fetch_define_property(this,"context",void 0),fetch_define_property(this,"response",void 0),this.statusCode=e,this.expectedStatus=t,this.context=n,this.response=r,this.name="HttpStatusError",console.error(`\u{1F6AB} HTTP Request Failed: ${n.method} ${n.url}`,"Status",e),n.body&&console.error("Request Body:",JSON.stringify(n.body)),n.options&&console.error("Request Options:",omit_omit(n.options,["schema","successStatus"])),console.error("Response:",{headers:r.headers,data:r.data})}}class HttpSchemaError extends Error{constructor(e,t,n){super(`Failed to parse response with schema: ${prettifyError(n)}`),fetch_define_property(this,"context",void 0),fetch_define_property(this,"response",void 0),fetch_define_property(this,"error",void 0),this.context=e,this.response=t,this.error=n,this.name="HttpSchemaError",console.error(`\u{1F6AB} HTTP Request Failed Failed to parse response with schema: ${prettifyError(n)}: ${e.method} ${e.url}`),e.options&&console.error("Request Options:",omit_omit(e.options,["schema","successStatus"])),console.error("Response:",{headers:t.headers,data:t.data})}}class Fetch{setCookie(e){this.cookie=merge_merge(this.cookie,e)}getCookie(e){return this.cookie[e]}setHeaders(e){this.headers=merge_merge(this.headers,e)}async get(e,t){var n,r;null!=t||(t={}),null!=(r=(n=t).headers)||(n.headers={}),t.headers=this.buildHeaders(t.headers);let i=await this.executeRequest("GET",e,t),o={url:e,method:"GET",options:t};return this.handleResponse(i,o,t)}async post(e,t,n){var r,i;null!=n||(n={}),null!=(i=(r=n).headers)||(r.headers={}),n.headers=this.buildHeaders(n.headers);let o=await this.executeRequest("POST",e,t,n),a={url:e,method:"POST",body:t,options:n};return this.handleResponse(o,a,n)}buildHeaders(e){let t=Object.entries(this.cookie).map(e=>{let[t,n]=e;return`${t}=${n}`}).join("; ");return{...this.headers,...t&&{Cookie:t},...e}}createTimeoutPromise(e){return new Promise((t,n)=>{setTimeout(()=>{n(Error(`Request timeout after ${e}ms`))},e)})}async executeRequest(e,t,n,r){var i;let o="GET"===e,a=null!=(i=o?n:r)?i:{},s=this.getCacheConfig(a);if(null==s?void 0:s.cacheKey){let e=await storage.getJson(s.cacheKey);if(e)return console.debug("♻️ fetch cache hit",s.cacheKey),{data:e,statusCode:200,headers:{},fromCache:!0}}let u=o?void 0:n,{timeout:l,schema:c,params:d,...f}=a,h=t;d&&(h=`${t}?${url_parse.qs.stringify(d)}`),console.debug("⬆️ fetch",h,null!=u?u:"",f);let p=o?Widget.http.get(h,f):Widget.http.post(h,u,f);return l&&l>0?Promise.race([p,this.createTimeoutPromise(l)]):p}getCacheConfig(e){return"string"==typeof(null==e?void 0:e.cache)?{cacheKey:e.cache,ttl:void 0}:null==e?void 0:e.cache}constructor(e={},t={}){fetch_define_property(this,"cookie",void 0),fetch_define_property(this,"headers",void 0),fetch_define_property(this,"handleResponse",void 0),this.cookie=e,this.headers=t,this.handleResponse=(e,t,n)=>{var r;if(e.fromCache)return e;if((null==n||null==(r=n.successStatus)?void 0:r.length)&&!n.successStatus.includes(e.statusCode))throw new HttpStatusError(e.statusCode,n.successStatus,t,e);if(null==n?void 0:n.schema){let r=n.schema.safeParse(e.data);if(!r.success)throw new HttpSchemaError(t,e,r.error);e.data=r.data}let i=e.headers["set-cookie"]||e.headers["Set-Cookie"];if(i){let e=i.split(",").reduce((e,t)=>{if(!t)return e;let[n]=t.split(";"),[r,...i]=n.split("=");return r&&i.length>0&&(e[r.trim()]=i.join("=").trim()),e},{});this.setCookie(e)}let o=this.getCacheConfig(n);return(null==o?void 0:o.cacheKey)&&storage.setJson(o.cacheKey,e.data,{ttl:o.ttl}),e}}}const fetch=new Fetch,BASE_URL="https://api.imdbapi.dev",imdb_fetch=new Fetch,episodesRequestSchema=schemas_object({season:coerce_number().optional().default(1),pageSize:coerce_number().optional().default(20),pageToken:schemas_string().optional()}),getImdbEpisodes=async(e,t)=>{let{season:n,pageSize:r,pageToken:i}=episodesRequestSchema.parse(null!=t?t:{});return(await imdb_fetch.get(`${BASE_URL}/titles/${e}/episodes`,{params:{season:n,pageSize:r,pageToken:i},cache:{cacheKey:["imdb","episodes",e,n,r,i].filter(Boolean).join(":")},successStatus:[200],schema:schemas_object({episodes:schemas_array(schemas_object({id:schemas_string(),title:schemas_string().optional(),episodeNumber:schemas_number().optional()})),totalCount:schemas_number(),nextPageToken:schemas_string().optional()})})).data},getImdbSeasons=async e=>(await imdb_fetch.get(`${BASE_URL}/titles/${e}/seasons`,{cache:{cacheKey:["imdb:seasons",e].join(":")},schema:schemas_object({seasons:schemas_array(schemas_object({season:schemas_string(),episodeCount:schemas_number().optional()}))})})).data,DOUBAN_API_KEY="0ac44ae016490db2204ce0a042db2916",doubanImdbResponseSchema=schemas_object({id:schemas_string(),title:schemas_string().optional()}),getDoubanInfoByImdbId=async(e,t)=>{var n,r,i,o,a,s;let u=e;if(t&&"1"!==t.toString()){let n=await getImdbSeasons(e);if(!n||parseInt(t.toString())>n.seasons.length)return null;let r=await getImdbEpisodes(e,{season:t});u=null!=(a=null==r||null==(o=r.episodes.find(e=>1===e.episodeNumber))?void 0:o.id)?a:""}u||(u=e),console.log("Get douban info by imdb id",u);let l=await fetch.post(`https://api.douban.com/v2/movie/imdb/${u}`,{apikey:DOUBAN_API_KEY},{headers:{"Content-Type":"application/json"},schema:doubanImdbResponseSchema,cache:{cacheKey:`douban:imdb:${u}`,ttl:TTL_7_DAYS}});if(200!==l.statusCode)throw Error(`Failed to get Douban info: ${l.statusCode}, ${JSON.stringify(l.data)}`);let c=null==(i=l.data)||null==(r=i.id)||null==(n=r.split("/"))?void 0:n.pop();if(!c)throw Error(`Failed to extract Douban ID from response: ${null==(s=l.data)?void 0:s.id}`);return/\d+/.test(c)?{doubanId:c,originResponse:l.data}:null};function compact(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];r&&t.push(r)}return t}const doubanSubjectItemSchema=schemas_object({type_name:schemas_string(),target_type:schemas_string(),target_id:schemas_string(),target:schemas_object({title:schemas_string(),has_linewatch:schemas_boolean().refine(e=>e)})}),doubanSearchResponseSchema=schemas_object({subjects:schemas_object({items:schemas_array(unknown().transform(e=>{var t;return null!=(t=doubanSubjectItemSchema.safeParse(e).data)?t:null})).transform(e=>compact(e))})}),searchDoubanInfoByName=async e=>{var t,n;return e&&null!=(n=null==(t=(await fetch.get("https://m.douban.com/rexxar/api/v2/search",{params:{q:e,start:0,count:20,type:"movie"},headers:{Referer:"https://m.douban.com/movie/","Content-Type":"application/json"},schema:doubanSearchResponseSchema,cache:{cacheKey:["douban","search",e].filter(Boolean).join(":")}})).data)?void 0:t.subjects.items)?n:[]},getDoubanIds=async e=>{let t=new Set,{tmdbId:n,type:r,seriesName:i,season:o,fuzzyMatch:a}=searchDanmuParamsSchema.parse(e);try{let e=await getDoubanInfoByTmdbId(r,n,o);(null==e?void 0:e.doubanId)&&t.add(e.doubanId)}catch(e){console.error("Error getting douban info by tmdb id",e)}if("always"===a||"auto"===a&&!t.size)try{let e=i;for(let n of(o&&parseInt(o.toString())>1&&(e+=o.toString()),await searchDoubanInfoByName(e)))t.add(n.target_id)}catch(e){console.error("Error searching douban info by name",e)}return Array.from(t)},getDoubanInfoByTmdbId=async(e,t,n)=>{if(!t)return null;let r=await getExternalIdsByTmdbId(e,t);return(console.log("Get external ids by tmdb id",r),r.imdb_id)?getDoubanInfoByImdbId(r.imdb_id,n):null},doubanInfoResponseSchema=schemas_object({is_tv:schemas_boolean().optional(),vendors:schemas_array(schemas_object({id:schemas_string(),is_ad:schemas_boolean().optional(),uri:schemas_string()}))}),getVideoPlatformInfoByDoubanId=async e=>{var t,n,r;let i=await fetch.get(`https://m.douban.com/rexxar/api/v2/movie/${e}?for_mobile=1`,{headers:{Referer:`https://m.douban.com/movie/subject/${e}/?dt_dapp=1`,"Content-Type":"application/json"},schema:doubanInfoResponseSchema,cache:{cacheKey:`douban:${e}:info`,ttl:TTL_7_DAYS}});if(200!==i.statusCode)throw Error(`Failed to get video platform info: ${i.statusCode}, ${JSON.stringify(i.data)}`);let o={mediaType:(null==(t=i.data)?void 0:t.is_tv)?constants_MediaType.TV:constants_MediaType.Movie,providers:{}};for(let e of null!=(r=null==(n=i.data)?void 0:n.vendors)?r:[]){if(e.is_ad)continue;let t=url_parse_default()(e.uri,!0);switch(e.id){case"qq":{let{cid:e,vid:n}=t.query;e&&(o.providers.tencent={cid:e,vid:n});break}case"iqiyi":{let{tvid:e}=t.query;e&&(o.providers.iqiyi={entityId:e});break}case"youku":{let{showid:e,vid:n}=t.query;(e||n)&&(o.providers.youku={showId:e,vid:n});break}case"bilibili":{let e=t.pathname.split("/").pop();e&&/\d+/.test(e)&&(o.providers.bilibili={seasonId:e})}}}return o};function keyBy(e,t){let n={};for(let r=0;r<e.length;r++){let i=e[r];n[t(i)]=i}return n}function compareValues(e,t,n){return e<t?"asc"===n?-1:1:e>t?"asc"===n?1:-1:0}function orderBy(e,t,n){return e.slice().sort((e,r)=>{let i=n.length;for(let o=0;o<t.length;o++){let a=i>o?n[o]:n[i-1],s=t[o],u="function"==typeof s,l=compareValues(u?s(e):e[s],u?s(r):r[s],a);if(0!==l)return l}return 0})}function sortBy(e,t){return orderBy(e,t,["asc"])}function uniqWith(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r];n.every(e=>!t(e,i))&&n.push(i)}return n}function getSymbols(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function getTag(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const regexpTag="[object RegExp]",stringTag="[object String]",numberTag="[object Number]",booleanTag="[object Boolean]",argumentsTag="[object Arguments]",symbolTag="[object Symbol]",dateTag="[object Date]",mapTag="[object Map]",setTag="[object Set]",arrayTag="[object Array]",functionTag="[object Function]",arrayBufferTag="[object ArrayBuffer]",objectTag="[object Object]",errorTag="[object Error]",dataViewTag="[object DataView]",uint8ArrayTag="[object Uint8Array]",uint8ClampedArrayTag="[object Uint8ClampedArray]",uint16ArrayTag="[object Uint16Array]",uint32ArrayTag="[object Uint32Array]",bigUint64ArrayTag="[object BigUint64Array]",int8ArrayTag="[object Int8Array]",int16ArrayTag="[object Int16Array]",int32ArrayTag="[object Int32Array]",bigInt64ArrayTag="[object BigInt64Array]",float32ArrayTag="[object Float32Array]",float64ArrayTag="[object Float64Array]";function eq(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function isEqualWith(e,t,n){return isEqualWithImpl(e,t,void 0,void 0,void 0,void 0,n)}function isEqualWithImpl(e,t,n,r,i,o,a){let s=a(e,t,n,r,i,o);if(void 0!==s)return s;if(typeof e==typeof t)switch(typeof e){case"bigint":case"string":case"boolean":case"symbol":case"undefined":case"function":return e===t;case"number":return e===t||Object.is(e,t)}return areObjectsEqual(e,t,o,a)}function areObjectsEqual(e,t,n,r){if(Object.is(e,t))return!0;let i=getTag(e),o=getTag(t);if(i===argumentsTag&&(i=objectTag),o===argumentsTag&&(o=objectTag),i!==o)return!1;switch(i){case stringTag:return e.toString()===t.toString();case numberTag:return eq(e.valueOf(),t.valueOf());case booleanTag:case dateTag:case symbolTag:return Object.is(e.valueOf(),t.valueOf());case regexpTag:return e.source===t.source&&e.flags===t.flags;case functionTag:return e===t}let a=(n=n??new Map).get(e),s=n.get(t);if(null!=a&&null!=s)return a===t;n.set(e,t),n.set(t,e);try{switch(i){case mapTag:if(e.size!==t.size)return!1;for(let[i,o]of e.entries())if(!t.has(i)||!isEqualWithImpl(o,t.get(i),i,e,t,n,r))return!1;return!0;case setTag:{if(e.size!==t.size)return!1;let i=Array.from(e.values()),o=Array.from(t.values());for(let a=0;a<i.length;a++){let s=i[a],u=o.findIndex(i=>isEqualWithImpl(s,i,void 0,e,t,n,r));if(-1===u)return!1;o.splice(u,1)}return!0}case arrayTag:case uint8ArrayTag:case uint8ClampedArrayTag:case uint16ArrayTag:case uint32ArrayTag:case bigUint64ArrayTag:case int8ArrayTag:case int16ArrayTag:case int32ArrayTag:case bigInt64ArrayTag:case float32ArrayTag:case float64ArrayTag:if("undefined"!=typeof Buffer&&Buffer.isBuffer(e)!==Buffer.isBuffer(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!isEqualWithImpl(e[i],t[i],i,e,t,n,r))return!1;return!0;case arrayBufferTag:if(e.byteLength!==t.byteLength)return!1;return areObjectsEqual(new Uint8Array(e),new Uint8Array(t),n,r);case dataViewTag:if(e.byteLength!==t.byteLength||e.byteOffset!==t.byteOffset)return!1;return areObjectsEqual(new Uint8Array(e),new Uint8Array(t),n,r);case errorTag:return e.name===t.name&&e.message===t.message;case objectTag:{if(!(areObjectsEqual(e.constructor,t.constructor,n,r)||isPlainObject_isPlainObject(e)&&isPlainObject_isPlainObject(t)))return!1;let i=[...Object.keys(e),...getSymbols(e)],o=[...Object.keys(t),...getSymbols(t)];if(i.length!==o.length)return!1;for(let o=0;o<i.length;o++){let a=i[o],s=e[a];if(!Object.hasOwn(t,a))return!1;let u=t[a];if(!isEqualWithImpl(s,u,a,e,t,n,r))return!1}return!0}default:return!1}}finally{n.delete(e),n.delete(t)}}function noop(){}function isEqual(e,t){return isEqualWith(e,t,noop)}function isDeepKey(e){switch(typeof e){case"number":case"symbol":return!1;case"string":return e.includes(".")||e.includes("[")||e.includes("]")}}function toKey(e){return"string"==typeof e||"symbol"==typeof e?e:Object.is(e?.valueOf?.(),-0)?"-0":String(e)}function toPath(e){let t=[],n=e.length;if(0===n)return t;let r=0,i="",o="",a=!1;for(46===e.charCodeAt(0)&&(t.push(""),r++);r<n;){let s=e[r];o?"\\"===s&&r+1<n?i+=e[++r]:s===o?o="":i+=s:a?'"'===s||"'"===s?o=s:"]"===s?(a=!1,t.push(i),i=""):i+=s:"["===s?(a=!0,i&&(t.push(i),i="")):"."===s?i&&(t.push(i),i=""):i+=s,r++}return i&&t.push(i),t}function get(e,t,n){if(null==e)return n;switch(typeof t){case"string":{if(isUnsafeProperty(t))return n;let r=e[t];if(void 0===r)if(isDeepKey(t))return get(e,toPath(t),n);else return n;return r}case"number":case"symbol":{"number"==typeof t&&(t=toKey(t));let r=e[t];if(void 0===r)return n;return r}default:{if(Array.isArray(t))return getWithPath(e,t,n);if(isUnsafeProperty(t=Object.is(t?.valueOf(),-0)?"-0":String(t)))return n;let r=e[t];if(void 0===r)return n;return r}}}function getWithPath(e,t,n){if(0===t.length)return n;let r=e;for(let e=0;e<t.length;e++){if(null==r||isUnsafeProperty(t[e]))return n;r=r[t[e]]}return void 0===r?n:r}const GLOBAL_EPISODE_BLACKLIST="^(.*?)((.+?版)|(特(别|典))|((导|演)员|嘉宾|角色)访谈|福利|先导|彩蛋|花絮|预告|特辑|专访|访谈|幕后|周边|资讯|看点|速看|回顾|盘点|合集|PV|MV|CM|OST|ED|OP|BD|特典|SP|NCOP|NCED|MENU|Web-DL|rip|x264|x265|aac|flac)(.*?)$",getEpisodeBlacklistPattern=e=>{let t=[GLOBAL_EPISODE_BLACKLIST];(null==e?void 0:e.trim())&&t.push(e);let n=t.join("|");try{return RegExp(n,"i")}catch(e){return console.error("编译分集黑名单正则表达式失败:",n,"错误:",e),RegExp(GLOBAL_EPISODE_BLACKLIST,"i")}};function base_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var base_CommentMode=function(e){return e[e.SCROLL=1]="SCROLL",e[e.BOTTOM=4]="BOTTOM",e[e.TOP=5]="TOP",e}({});const providerCommentItemSchema=schemas_object({id:coerce_string().optional(),timestamp:coerce_number(),mode:schemas_enum(base_CommentMode).catch(1).optional().default(1),color:schemas_number().catch(DEFAULT_COLOR_INT).optional().default(DEFAULT_COLOR_INT),content:schemas_string()});class BaseScraper{get providerConfig(){return this._providerConfig}set providerConfig(e){let t=get(e,this.providerName);t&&(this.logger.debug("设置 Provider 配置",t),this._providerConfig=e)}parseIdString(e){var t,n;let r=safeJsonParse(decodeURIComponent(e)),i=null==(t=this.idSchema)?void 0:t.safeParse(r);return i?i.success?null!=(n=i.data)?n:null:(this.logger.error("parseIdString",e,prettifyError(i.error)),null):(this.logger.error("parseIdString",e,"idSchema is not defined"),null)}generateIdString(e){return encodeURIComponent(JSON.stringify(e))}sleep(e){return new Promise(t=>setTimeout(t,e))}getEpisodeIndexFromTitle(e){if(!e)return null;let t=/(?:第)?(\d+)(?:集|话)?$/.exec(e.trim());if(t)try{return parseInt(t[1],10)}catch(t){this.logger.error("从标题中提取集数失败:",e,"错误:",t)}return null}get episodeBlacklistPattern(){return getEpisodeBlacklistPattern(this.PROVIDER_SPECIFIC_BLACKLIST)}constructor(){var e=this;base_define_property(this,"_providerConfig",{}),base_define_property(this,"idSchema",void 0),base_define_property(this,"fetch",new Fetch),base_define_property(this,"PROVIDER_SPECIFIC_BLACKLIST",""),base_define_property(this,"logger",{log:function(t){for(var n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];console[t](`[${e.providerName}]`,...r)},debug:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];e.logger.log("debug",...n)},info:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];e.logger.log("info",...n)},warn:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];e.logger.log("warn",...n)},error:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];e.logger.log("error",...n)}})}}var dm_proto=__webpack_require__(252);const bilibiliIdSchema=schemas_object({seasonId:schemas_string(),aid:schemas_string().optional(),cid:schemas_string().optional()}),pgcEpisodeSchema=schemas_object({aid:schemas_int(),cid:schemas_int(),badge:schemas_string(),duration:schemas_number(),title:schemas_string(),show_title:schemas_string(),long_title:schemas_string()}),pgcEpisodeResultSchema=schemas_object({code:literal(0),result:schemas_object({episodes:schemas_array(unknown().transform(e=>pgcEpisodeSchema.safeParse(e).data)).transform(e=>compact(e))})});function bilibili_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class BilibiliScraper extends BaseScraper{async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=[],i=await this.getPgcEpisodes(n.seasonId),o=1;for(let e of null!=i?i:[]){if("预告"===e.badge){this.logger.warn("预告,跳过,title:",e.title);continue}if(this.episodeBlacklistPattern.test(e.title)){this.logger.warn("黑名单,跳过,title:",e.title);continue}r.push({provider:this.providerName,episodeId:this.generateIdString({seasonId:n.seasonId,aid:e.aid.toString(),cid:e.cid.toString()}),episodeTitle:e.show_title||e.title,episodeNumber:o}),o+=1}return t?r.filter(e=>e.episodeNumber===t):r}async getSegments(e){var t;let{aid:n,cid:r,seasonId:i}=null!=(t=this.parseIdString(e))?t:{};if(!n||!r||!i)return[];let o=await this.getPgcEpisodes(i),a=null==o?void 0:o.find(e=>e.aid===parseInt(n)&&e.cid===parseInt(r));return a?Array.from({length:Math.floor(a.duration/1e3/360)+1},(e,t)=>({provider:this.providerName,startTime:360*t,segmentId:(t+1).toString()})):[]}async getComments(e,t){var n;let{aid:r,cid:i,seasonId:o}=null!=(n=this.parseIdString(e))?n:{};if(!r||!i||!o)return this.logger.warn("aid:",r,"cid:",i,"seasonId:",o,"不存在"),null;let a=await this.getPgcEpisodes(o);if(!(null==a?void 0:a.find(e=>e.aid===parseInt(r)&&e.cid===parseInt(i))))return this.logger.warn("未找到分集,aid:",r,"cid:",i,"seasonId:",o),null;let s=await this.fetchCommentsForCid(r,i,t);return s?s.map(e=>{var t,n;if(!e.progress)return null;let r=(null==(t=e.content)?void 0:t.toString().replace(/\0/g,""))||"";return r&&null!=(n=providerCommentItemSchema.safeParse({id:e.id.toString(),timestamp:e.progress/1e3,mode:e.mode,color:e.color,content:r}).data)?n:null}):(this.logger.warn("未找到弹幕,aid:",r,"cid:",i,"segmentId:",t),null)}async getPgcEpisodes(e){var t;return null==(t=(await this.fetch.get("https://api.bilibili.com/pgc/view/web/ep/list",{params:{season_id:e},schema:pgcEpisodeResultSchema,cache:{cacheKey:`bilibili:episodes:${e}`}})).data)?void 0:t.result.episodes}async fetchCommentsForCid(e,t,n){try{let r=await this.fetch.get("https://api.bilibili.com/x/v2/dm/web/seg.so",{params:{type:"1",oid:t,pid:e,segment_index:n},base64Data:!0});if(404===r.statusCode||304===r.statusCode)return null;return this.DmSegMobileReply.decode(base64ToUint8Array(r.data)).elems}catch(r){this.logger.error("获取分段",n,"失败,aid:",e,"cid:",t,"错误:",r)}return null}constructor(){super(),bilibili_define_property(this,"providerName","bilibili"),bilibili_define_property(this,"idSchema",bilibiliIdSchema),bilibili_define_property(this,"DmSegMobileReply",dm_proto.biliproto.community.service.dm.v1.DmSegMobileReply),this.fetch.setHeaders({Referer:"https://www.bilibili.com/"})}}var md5=__webpack_require__(478),md5_default=__webpack_require__.n(md5);const OptionsBuilder_defaultOptions={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(e,t,n){return e},captureMetaData:!1},buildOptions=function(e){return Object.assign({},OptionsBuilder_defaultOptions,e)},nameStartChar=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",nameChar=nameStartChar+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040",nameRegexp="["+nameStartChar+"]["+nameChar+"]*",regexName=RegExp("^"+nameRegexp+"$");function getAllMatches(e,t){let n=[],r=t.exec(e);for(;r;){let i=[];i.startIndex=t.lastIndex-r[0].length;let o=r.length;for(let e=0;e<o;e++)i.push(r[e]);n.push(i),r=t.exec(e)}return n}const isName=function(e){return null!=regexName.exec(e)};function isExist(e){return void 0!==e}METADATA_SYMBOL="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class XmlNode{constructor(e){this.tagname=e,this.child=[],this[":@"]={}}add(e,t){"__proto__"===e&&(e="#__proto__"),this.child.push({[e]:t})}addChild(e,t){"__proto__"===e.tagname&&(e.tagname="#__proto__"),e[":@"]&&Object.keys(e[":@"]).length>0?this.child.push({[e.tagname]:e.child,":@":e[":@"]}):this.child.push({[e.tagname]:e.child}),void 0!==t&&(this.child[this.child.length-1][METADATA_SYMBOL]={startIndex:t})}static getMetaDataSymbol(){return METADATA_SYMBOL}}function readDocType(e,t){let n={};if("O"===e[t+3]&&"C"===e[t+4]&&"T"===e[t+5]&&"Y"===e[t+6]&&"P"===e[t+7]&&"E"===e[t+8]){t+=9;let r=1,i=!1,o=!1,a="";for(;t<e.length;t++)if("<"!==e[t]||o)if(">"===e[t]){if(o?"-"===e[t-1]&&"-"===e[t-2]&&(o=!1,r--):r--,0===r)break}else"["===e[t]?i=!0:a+=e[t];else{if(i&&hasSeq(e,"!ENTITY",t)){let r,i;t+=7,[r,i,t]=readEntityExp(e,t+1),-1===i.indexOf("&")&&(n[r]={regx:RegExp(`&${r};`,"g"),val:i})}else if(i&&hasSeq(e,"!ELEMENT",t)){let{index:n}=readElementExp(e,(t+=8)+1);t=n}else if(i&&hasSeq(e,"!ATTLIST",t))t+=8;else if(i&&hasSeq(e,"!NOTATION",t)){let{index:n}=readNotationExp(e,(t+=9)+1);t=n}else if(hasSeq(e,"!--",t))o=!0;else throw Error("Invalid DOCTYPE");r++,a=""}if(0!==r)throw Error("Unclosed DOCTYPE")}else throw Error("Invalid Tag instead of DOCTYPE");return{entities:n,i:t}}const skipWhitespace=(e,t)=>{for(;t<e.length&&/\s/.test(e[t]);)t++;return t};function readEntityExp(e,t){t=skipWhitespace(e,t);let n="";for(;t<e.length&&!/\s/.test(e[t])&&'"'!==e[t]&&"'"!==e[t];)n+=e[t],t++;if(validateEntityName(n),t=skipWhitespace(e,t),"SYSTEM"===e.substring(t,t+6).toUpperCase())throw Error("External entities are not supported");if("%"===e[t])throw Error("Parameter entities are not supported");let r="";return[t,r]=readIdentifierVal(e,t,"entity"),[n,r,--t]}function readNotationExp(e,t){t=skipWhitespace(e,t);let n="";for(;t<e.length&&!/\s/.test(e[t]);)n+=e[t],t++;validateEntityName(n),t=skipWhitespace(e,t);let r=e.substring(t,t+6).toUpperCase();if("SYSTEM"!==r&&"PUBLIC"!==r)throw Error(`Expected SYSTEM or PUBLIC, found "${r}"`);t+=r.length,t=skipWhitespace(e,t);let i=null,o=null;if("PUBLIC"===r)[t,i]=readIdentifierVal(e,t,"publicIdentifier"),t=skipWhitespace(e,t),('"'===e[t]||"'"===e[t])&&([t,o]=readIdentifierVal(e,t,"systemIdentifier"));else if("SYSTEM"===r&&([t,o]=readIdentifierVal(e,t,"systemIdentifier"),!o))throw Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:n,publicIdentifier:i,systemIdentifier:o,index:--t}}function readIdentifierVal(e,t,n){let r="",i=e[t];if('"'!==i&&"'"!==i)throw Error(`Expected quoted string, found "${i}"`);for(t++;t<e.length&&e[t]!==i;)r+=e[t],t++;if(e[t]!==i)throw Error(`Unterminated ${n} value`);return[++t,r]}function readElementExp(e,t){t=skipWhitespace(e,t);let n="";for(;t<e.length&&!/\s/.test(e[t]);)n+=e[t],t++;if(!validateEntityName(n))throw Error(`Invalid element name: "${n}"`);t=skipWhitespace(e,t);let r="";if("E"===e[t]&&hasSeq(e,"MPTY",t))t+=4;else if("A"===e[t]&&hasSeq(e,"NY",t))t+=2;else if("("===e[t]){for(t++;t<e.length&&")"!==e[t];)r+=e[t],t++;if(")"!==e[t])throw Error("Unterminated content model")}else throw Error(`Invalid Element Expression, found "${e[t]}"`);return{elementName:n,contentModel:r.trim(),index:t}}function hasSeq(e,t,n){for(let r=0;r<t.length;r++)if(t[r]!==e[n+r+1])return!1;return!0}function validateEntityName(e){if(isName(e))return e;throw Error(`Invalid entity name ${e}`)}const hexRegex=/^[-+]?0x[a-fA-F0-9]+$/,numRegex=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,consider={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};function toNumber(e,t={}){if(t=Object.assign({},consider,t),!e||"string"!=typeof e)return e;let n=e.trim();if(void 0!==t.skipLike&&t.skipLike.test(n))return e;{if("0"===e)return 0;if(t.hex&&hexRegex.test(n))return parse_int(n,16);if(-1!==n.search(/.+[eE].+/))return resolveEnotation(e,n,t);let r=numRegex.exec(n);if(!r)return e;{let i=r[1]||"",o=r[2],a=trimZeros(r[3]),s=i?"."===e[o.length+1]:"."===e[o.length];if(!t.leadingZeros&&(o.length>1||1===o.length&&!s))return e;{let r=Number(n),s=String(r);if(0===r)return r;if(-1!==s.search(/[eE]/))if(t.eNotation)return r;else return e;if(-1!==n.indexOf("."))if("0"===s)return r;else if(s===a)return r;else if(s===`${i}${a}`)return r;else return e;let u=o?a:n;return o?u===s||i+u===s?r:e:u===s||u===i+s?r:e}}}}const eNotationRegx=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function resolveEnotation(e,t,n){if(!n.eNotation)return e;let r=t.match(eNotationRegx);if(!r)return e;{let i=r[1]||"",o=-1===r[3].indexOf("e")?"E":"e",a=r[2],s=i?e[a.length+1]===o:e[a.length]===o;return a.length>1&&s?e:1===a.length&&(r[3].startsWith(`.${o}`)||r[3][0]===o)?Number(t):n.leadingZeros&&!s?Number(t=(r[1]||"")+r[3]):e}}function trimZeros(e){return e&&-1!==e.indexOf(".")&&("."===(e=e.replace(/0+$/,""))?e="0":"."===e[0]?e="0"+e:"."===e[e.length-1]&&(e=e.substring(0,e.length-1))),e}function parse_int(e,t){if(parseInt)return parseInt(e,t);if(Number.parseInt)return Number.parseInt(e,t);if(window&&window.parseInt)return window.parseInt(e,t);throw Error("parseInt, Number.parseInt, window.parseInt are not supported")}function getIgnoreAttributesFn(e){return"function"==typeof e?e:Array.isArray(e)?t=>{for(let n of e)if("string"==typeof n&&t===n||n instanceof RegExp&&n.test(t))return!0}:()=>!1}class OrderedObjParser{constructor(e){this.options=e,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"\xa2"},pound:{regex:/&(pound|#163);/g,val:"\xa3"},yen:{regex:/&(yen|#165);/g,val:"\xa5"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"\xa9"},reg:{regex:/&(reg|#174);/g,val:"\xae"},inr:{regex:/&(inr|#8377);/g,val:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:(e,t)=>String.fromCodePoint(Number.parseInt(t,10))},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(e,t)=>String.fromCodePoint(Number.parseInt(t,16))}},this.addExternalEntities=addExternalEntities,this.parseXml=parseXml,this.parseTextData=parseTextData,this.resolveNameSpace=resolveNameSpace,this.buildAttributesMap=buildAttributesMap,this.isItStopNode=isItStopNode,this.replaceEntitiesValue=replaceEntitiesValue,this.readStopNodeData=readStopNodeData,this.saveTextToParentTag=saveTextToParentTag,this.addChild=addChild,this.ignoreAttributesFn=getIgnoreAttributesFn(this.options.ignoreAttributes)}}function addExternalEntities(e){let t=Object.keys(e);for(let n=0;n<t.length;n++){let r=t[n];this.lastEntities[r]={regex:RegExp("&"+r+";","g"),val:e[r]}}}function parseTextData(e,t,n,r,i,o,a){if(void 0!==e&&(this.options.trimValues&&!r&&(e=e.trim()),e.length>0)){a||(e=this.replaceEntitiesValue(e));let r=this.options.tagValueProcessor(t,e,n,i,o);return null==r?e:typeof r!=typeof e||r!==e?r:this.options.trimValues||e.trim()===e?parseValue(e,this.options.parseTagValue,this.options.numberParseOptions):e}}function resolveNameSpace(e){if(this.options.removeNSPrefix){let t=e.split(":"),n="/"===e.charAt(0)?"/":"";if("xmlns"===t[0])return"";2===t.length&&(e=n+t[1])}return e}const attrsRegx=RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function buildAttributesMap(e,t,n){if(!0!==this.options.ignoreAttributes&&"string"==typeof e){let n=getAllMatches(e,attrsRegx),r=n.length,i={};for(let e=0;e<r;e++){let r=this.resolveNameSpace(n[e][1]);if(this.ignoreAttributesFn(r,t))continue;let o=n[e][4],a=this.options.attributeNamePrefix+r;if(r.length)if(this.options.transformAttributeName&&(a=this.options.transformAttributeName(a)),"__proto__"===a&&(a="#__proto__"),void 0!==o){this.options.trimValues&&(o=o.trim()),o=this.replaceEntitiesValue(o);let e=this.options.attributeValueProcessor(r,o,t);null==e?i[a]=o:typeof e!=typeof o||e!==o?i[a]=e:i[a]=parseValue(o,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(i[a]=!0)}if(Object.keys(i).length){if(this.options.attributesGroupName){let e={};return e[this.options.attributesGroupName]=i,e}return i}}}const parseXml=function(e){e=e.replace(/\r\n?/g,"\n");let t=new XmlNode("!xml"),n=t,r="",i="";for(let o=0;o<e.length;o++)if("<"===e[o])if("/"===e[o+1]){let t=findClosingIndex(e,">",o,"Closing Tag is not closed."),a=e.substring(o+2,t).trim();if(this.options.removeNSPrefix){let e=a.indexOf(":");-1!==e&&(a=a.substr(e+1))}this.options.transformTagName&&(a=this.options.transformTagName(a)),n&&(r=this.saveTextToParentTag(r,n,i));let s=i.substring(i.lastIndexOf(".")+1);if(a&&-1!==this.options.unpairedTags.indexOf(a))throw Error(`Unpaired tag can not be used as closing tag: </${a}>`);let u=0;s&&-1!==this.options.unpairedTags.indexOf(s)?(u=i.lastIndexOf(".",i.lastIndexOf(".")-1),this.tagsNodeStack.pop()):u=i.lastIndexOf("."),i=i.substring(0,u),n=this.tagsNodeStack.pop(),r="",o=t}else if("?"===e[o+1]){let t=readTagExp(e,o,!1,"?>");if(!t)throw Error("Pi Tag is not closed.");if(r=this.saveTextToParentTag(r,n,i),this.options.ignoreDeclaration&&"?xml"===t.tagName||this.options.ignorePiTags);else{let e=new XmlNode(t.tagName);e.add(this.options.textNodeName,""),t.tagName!==t.tagExp&&t.attrExpPresent&&(e[":@"]=this.buildAttributesMap(t.tagExp,i,t.tagName)),this.addChild(n,e,i,o)}o=t.closeIndex+1}else if("!--"===e.substr(o+1,3)){let t=findClosingIndex(e,"--\x3e",o+4,"Comment is not closed.");if(this.options.commentPropName){let a=e.substring(o+4,t-2);r=this.saveTextToParentTag(r,n,i),n.add(this.options.commentPropName,[{[this.options.textNodeName]:a}])}o=t}else if("!D"===e.substr(o+1,2)){let t=readDocType(e,o);this.docTypeEntities=t.entities,o=t.i}else if("!["===e.substr(o+1,2)){let t=findClosingIndex(e,"]]>",o,"CDATA is not closed.")-2,a=e.substring(o+9,t);r=this.saveTextToParentTag(r,n,i);let s=this.parseTextData(a,n.tagname,i,!0,!1,!0,!0);void 0==s&&(s=""),this.options.cdataPropName?n.add(this.options.cdataPropName,[{[this.options.textNodeName]:a}]):n.add(this.options.textNodeName,s),o=t+2}else{let a=readTagExp(e,o,this.options.removeNSPrefix),s=a.tagName,u=a.rawTagName,l=a.tagExp,c=a.attrExpPresent,d=a.closeIndex;this.options.transformTagName&&(s=this.options.transformTagName(s)),n&&r&&"!xml"!==n.tagname&&(r=this.saveTextToParentTag(r,n,i,!1));let f=n;f&&-1!==this.options.unpairedTags.indexOf(f.tagname)&&(n=this.tagsNodeStack.pop(),i=i.substring(0,i.lastIndexOf("."))),s!==t.tagname&&(i+=i?"."+s:s);let h=o;if(this.isItStopNode(this.options.stopNodes,i,s)){let t="";if(l.length>0&&l.lastIndexOf("/")===l.length-1)"/"===s[s.length-1]?(s=s.substr(0,s.length-1),i=i.substr(0,i.length-1),l=s):l=l.substr(0,l.length-1),o=a.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(s))o=a.closeIndex;else{let n=this.readStopNodeData(e,u,d+1);if(!n)throw Error(`Unexpected end of ${u}`);o=n.i,t=n.tagContent}let r=new XmlNode(s);s!==l&&c&&(r[":@"]=this.buildAttributesMap(l,i,s)),t&&(t=this.parseTextData(t,s,i,!0,c,!0,!0)),i=i.substr(0,i.lastIndexOf(".")),r.add(this.options.textNodeName,t),this.addChild(n,r,i,h)}else{if(l.length>0&&l.lastIndexOf("/")===l.length-1){"/"===s[s.length-1]?(s=s.substr(0,s.length-1),i=i.substr(0,i.length-1),l=s):l=l.substr(0,l.length-1),this.options.transformTagName&&(s=this.options.transformTagName(s));let e=new XmlNode(s);s!==l&&c&&(e[":@"]=this.buildAttributesMap(l,i,s)),this.addChild(n,e,i,h),i=i.substr(0,i.lastIndexOf("."))}else{let e=new XmlNode(s);this.tagsNodeStack.push(n),s!==l&&c&&(e[":@"]=this.buildAttributesMap(l,i,s)),this.addChild(n,e,i,h),n=e}r="",o=d}}else r+=e[o];return t.child};function addChild(e,t,n,r){this.options.captureMetaData||(r=void 0);let i=this.options.updateTag(t.tagname,n,t[":@"]);!1===i||("string"==typeof i&&(t.tagname=i),e.addChild(t,r))}const replaceEntitiesValue=function(e){if(this.options.processEntities){for(let t in this.docTypeEntities){let n=this.docTypeEntities[t];e=e.replace(n.regx,n.val)}for(let t in this.lastEntities){let n=this.lastEntities[t];e=e.replace(n.regex,n.val)}if(this.options.htmlEntities)for(let t in this.htmlEntities){let n=this.htmlEntities[t];e=e.replace(n.regex,n.val)}e=e.replace(this.ampEntity.regex,this.ampEntity.val)}return e};function saveTextToParentTag(e,t,n,r){return e&&(void 0===r&&(r=0===t.child.length),void 0!==(e=this.parseTextData(e,t.tagname,n,!1,!!t[":@"]&&0!==Object.keys(t[":@"]).length,r))&&""!==e&&t.add(this.options.textNodeName,e),e=""),e}function isItStopNode(e,t,n){let r="*."+n;for(let n in e){let i=e[n];if(r===i||t===i)return!0}return!1}function tagExpWithClosingIndex(e,t,n=">"){let r,i="";for(let o=t;o<e.length;o++){let t=e[o];if(r)t===r&&(r="");else if('"'===t||"'"===t)r=t;else if(t===n[0]){if(!n[1])return{data:i,index:o};else if(e[o+1]===n[1])return{data:i,index:o}}else" "===t&&(t=" ");i+=t}}function findClosingIndex(e,t,n,r){let i=e.indexOf(t,n);if(-1!==i)return i+t.length-1;throw Error(r)}function readTagExp(e,t,n,r=">"){let i=tagExpWithClosingIndex(e,t+1,r);if(!i)return;let o=i.data,a=i.index,s=o.search(/\s/),u=o,l=!0;-1!==s&&(u=o.substring(0,s),o=o.substring(s+1).trimStart());let c=u;if(n){let e=u.indexOf(":");-1!==e&&(l=(u=u.substr(e+1))!==i.data.substr(e+1))}return{tagName:u,tagExp:o,closeIndex:a,attrExpPresent:l,rawTagName:c}}function readStopNodeData(e,t,n){let r=n,i=1;for(;n<e.length;n++)if("<"===e[n])if("/"===e[n+1]){let o=findClosingIndex(e,">",n,`${t} is not closed`);if(e.substring(n+2,o).trim()===t&&0==--i)return{tagContent:e.substring(r,n),i:o};n=o}else if("?"===e[n+1])n=findClosingIndex(e,"?>",n+1,"StopNode is not closed.");else if("!--"===e.substr(n+1,3))n=findClosingIndex(e,"--\x3e",n+3,"StopNode is not closed.");else if("!["===e.substr(n+1,2))n=findClosingIndex(e,"]]>",n,"StopNode is not closed.")-2;else{let r=readTagExp(e,n,">");r&&((r&&r.tagName)===t&&"/"!==r.tagExp[r.tagExp.length-1]&&i++,n=r.closeIndex)}}function parseValue(e,t,n){if(t&&"string"==typeof e){let t=e.trim();return"true"===t||"false"!==t&&toNumber(e,n)}return isExist(e)?e:""}const node2json_METADATA_SYMBOL=XmlNode.getMetaDataSymbol();function prettify(e,t){return compress(e,t)}function compress(e,t,n){let r,i={};for(let o=0;o<e.length;o++){let a=e[o],s=propName(a),u="";if(u=void 0===n?s:n+"."+s,s===t.textNodeName)void 0===r?r=a[s]:r+=""+a[s];else if(void 0===s)continue;else if(a[s]){let e=compress(a[s],t,u),n=isLeafTag(e,t);void 0!==a[node2json_METADATA_SYMBOL]&&(e[node2json_METADATA_SYMBOL]=a[node2json_METADATA_SYMBOL]),a[":@"]?assignAttributes(e,a[":@"],u,t):1!==Object.keys(e).length||void 0===e[t.textNodeName]||t.alwaysCreateTextNode?0===Object.keys(e).length&&(t.alwaysCreateTextNode?e[t.textNodeName]="":e=""):e=e[t.textNodeName],void 0!==i[s]&&i.hasOwnProperty(s)?(Array.isArray(i[s])||(i[s]=[i[s]]),i[s].push(e)):t.isArray(s,u,n)?i[s]=[e]:i[s]=e}}return"string"==typeof r?r.length>0&&(i[t.textNodeName]=r):void 0!==r&&(i[t.textNodeName]=r),i}function propName(e){let t=Object.keys(e);for(let e=0;e<t.length;e++){let n=t[e];if(":@"!==n)return n}}function assignAttributes(e,t,n,r){if(t){let i=Object.keys(t),o=i.length;for(let a=0;a<o;a++){let o=i[a];r.isArray(o,n+"."+o,!0,!0)?e[o]=[t[o]]:e[o]=t[o]}}}function isLeafTag(e,t){let{textNodeName:n}=t,r=Object.keys(e).length;return 0===r||1===r&&(!!e[n]||"boolean"==typeof e[n]||0===e[n])}const validator_defaultOptions={allowBooleanAttributes:!1,unpairedTags:[]};function validate(e,t){t=Object.assign({},validator_defaultOptions,t);let n=[],r=!1,i=!1;"\uFEFF"===e[0]&&(e=e.substr(1));for(let o=0;o<e.length;o++)if("<"===e[o]&&"?"===e[o+1]){if(o+=2,(o=readPI(e,o)).err)return o}else if("<"===e[o]){let a=o;if("!"===e[++o]){o=readCommentAndCDATA(e,o);continue}{let s=!1;"/"===e[o]&&(s=!0,o++);let u="";for(;o<e.length&&">"!==e[o]&&" "!==e[o]&&" "!==e[o]&&"\n"!==e[o]&&"\r"!==e[o];o++)u+=e[o];if("/"===(u=u.trim())[u.length-1]&&(u=u.substring(0,u.length-1),o--),!validateTagName(u)){let t;return getErrorObject("InvalidTag",t=0===u.trim().length?"Invalid space after '<'.":"Tag '"+u+"' is an invalid name.",getLineNumberForPosition(e,o))}let l=readAttributeStr(e,o);if(!1===l)return getErrorObject("InvalidAttr","Attributes for '"+u+"' have open quote.",getLineNumberForPosition(e,o));let c=l.value;if(o=l.index,"/"===c[c.length-1]){let n=o-c.length,i=validateAttributeString(c=c.substring(0,c.length-1),t);if(!0!==i)return getErrorObject(i.err.code,i.err.msg,getLineNumberForPosition(e,n+i.err.line));r=!0}else if(s)if(!l.tagClosed)return getErrorObject("InvalidTag","Closing tag '"+u+"' doesn't have proper closing.",getLineNumberForPosition(e,o));else{if(c.trim().length>0)return getErrorObject("InvalidTag","Closing tag '"+u+"' can't have attributes or invalid starting.",getLineNumberForPosition(e,a));if(0===n.length)return getErrorObject("InvalidTag","Closing tag '"+u+"' has not been opened.",getLineNumberForPosition(e,a));let t=n.pop();if(u!==t.tagName){let n=getLineNumberForPosition(e,t.tagStartPos);return getErrorObject("InvalidTag","Expected closing tag '"+t.tagName+"' (opened in line "+n.line+", col "+n.col+") instead of closing tag '"+u+"'.",getLineNumberForPosition(e,a))}0==n.length&&(i=!0)}else{let s=validateAttributeString(c,t);if(!0!==s)return getErrorObject(s.err.code,s.err.msg,getLineNumberForPosition(e,o-c.length+s.err.line));if(!0===i)return getErrorObject("InvalidXml","Multiple possible root nodes found.",getLineNumberForPosition(e,o));-1!==t.unpairedTags.indexOf(u)||n.push({tagName:u,tagStartPos:a}),r=!0}for(o++;o<e.length;o++)if("<"===e[o])if("!"===e[o+1]){o=readCommentAndCDATA(e,++o);continue}else if("?"===e[o+1]){if((o=readPI(e,++o)).err)return o}else break;else if("&"===e[o]){let t=validateAmpersand(e,o);if(-1==t)return getErrorObject("InvalidChar","char '&' is not expected.",getLineNumberForPosition(e,o));o=t}else if(!0===i&&!isWhiteSpace(e[o]))return getErrorObject("InvalidXml","Extra text at the end",getLineNumberForPosition(e,o));"<"===e[o]&&o--}}else{if(isWhiteSpace(e[o]))continue;return getErrorObject("InvalidChar","char '"+e[o]+"' is not expected.",getLineNumberForPosition(e,o))}return r?1==n.length?getErrorObject("InvalidTag","Unclosed tag '"+n[0].tagName+"'.",getLineNumberForPosition(e,n[0].tagStartPos)):!(n.length>0)||getErrorObject("InvalidXml","Invalid '"+JSON.stringify(n.map(e=>e.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):getErrorObject("InvalidXml","Start tag expected.",1)}function isWhiteSpace(e){return" "===e||" "===e||"\n"===e||"\r"===e}function readPI(e,t){let n=t;for(;t<e.length;t++)if("?"==e[t]||" "==e[t]){let r=e.substr(n,t-n);if(t>5&&"xml"===r)return getErrorObject("InvalidXml","XML declaration allowed only at the start of the document.",getLineNumberForPosition(e,t));if("?"!=e[t]||">"!=e[t+1])continue;t++;break}return t}function readCommentAndCDATA(e,t){if(e.length>t+5&&"-"===e[t+1]&&"-"===e[t+2]){for(t+=3;t<e.length;t++)if("-"===e[t]&&"-"===e[t+1]&&">"===e[t+2]){t+=2;break}}else if(e.length>t+8&&"D"===e[t+1]&&"O"===e[t+2]&&"C"===e[t+3]&&"T"===e[t+4]&&"Y"===e[t+5]&&"P"===e[t+6]&&"E"===e[t+7]){let n=1;for(t+=8;t<e.length;t++)if("<"===e[t])n++;else if(">"===e[t]&&0==--n)break}else if(e.length>t+9&&"["===e[t+1]&&"C"===e[t+2]&&"D"===e[t+3]&&"A"===e[t+4]&&"T"===e[t+5]&&"A"===e[t+6]&&"["===e[t+7]){for(t+=8;t<e.length;t++)if("]"===e[t]&&"]"===e[t+1]&&">"===e[t+2]){t+=2;break}}return t}const doubleQuote='"',singleQuote="'";function readAttributeStr(e,t){let n="",r="",i=!1;for(;t<e.length;t++){if(e[t]===doubleQuote||e[t]===singleQuote)""===r?r=e[t]:r!==e[t]||(r="");else if(">"===e[t]&&""===r){i=!0;break}n+=e[t]}return""===r&&{value:n,index:t,tagClosed:i}}const validAttrStrRegxp=RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function validateAttributeString(e,t){let n=getAllMatches(e,validAttrStrRegxp),r={};for(let e=0;e<n.length;e++){if(0===n[e][1].length)return getErrorObject("InvalidAttr","Attribute '"+n[e][2]+"' has no space in starting.",getPositionFromMatch(n[e]));if(void 0!==n[e][3]&&void 0===n[e][4])return getErrorObject("InvalidAttr","Attribute '"+n[e][2]+"' is without value.",getPositionFromMatch(n[e]));if(void 0===n[e][3]&&!t.allowBooleanAttributes)return getErrorObject("InvalidAttr","boolean attribute '"+n[e][2]+"' is not allowed.",getPositionFromMatch(n[e]));let i=n[e][2];if(!validateAttrName(i))return getErrorObject("InvalidAttr","Attribute '"+i+"' is an invalid name.",getPositionFromMatch(n[e]));if(r.hasOwnProperty(i))return getErrorObject("InvalidAttr","Attribute '"+i+"' is repeated.",getPositionFromMatch(n[e]));r[i]=1}return!0}function validateNumberAmpersand(e,t){let n=/\d/;for("x"===e[t]&&(t++,n=/[\da-fA-F]/);t<e.length;t++){if(";"===e[t])return t;if(!e[t].match(n))break}return -1}function validateAmpersand(e,t){if(";"===e[++t])return -1;if("#"===e[t])return validateNumberAmpersand(e,++t);let n=0;for(;t<e.length;t++,n++)if(!e[t].match(/\w/)||!(n<20)){if(";"===e[t])break;return -1}return t}function getErrorObject(e,t,n){return{err:{code:e,msg:t,line:n.line||n,col:n.col}}}function validateAttrName(e){return isName(e)}function validateTagName(e){return isName(e)}function getLineNumberForPosition(e,t){let n=e.substring(0,t).split(/\r?\n/);return{line:n.length,col:n[n.length-1].length+1}}function getPositionFromMatch(e){return e.startIndex+e[1].length}class XMLParser{constructor(e){this.externalEntities={},this.options=buildOptions(e)}parse(e,t){if("string"==typeof e);else if(e.toString)e=e.toString();else throw Error("XML data is accepted in String or Bytes[] form.");if(t){!0===t&&(t={});let n=validate(e,t);if(!0!==n)throw Error(`${n.err.msg}:${n.err.line}:${n.err.col}`)}let n=new OrderedObjParser(this.options);n.addExternalEntities(this.externalEntities);let r=n.parseXml(e);return this.options.preserveOrder||void 0===r?r:prettify(r,this.options)}addEntity(e,t){if(-1!==t.indexOf("&"))throw Error("Entity value can't have '&'");if(-1!==e.indexOf("&")||-1!==e.indexOf(";"))throw Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'");if("&"===t)throw Error("An entity with value '&' is not permitted");this.externalEntities[e]=t}static getMetaDataSymbol(){return XmlNode.getMetaDataSymbol()}}const iqiyiIdSchema=schemas_object({entityId:schemas_string()}),iqiyiEpisodeTabDataVideoSchema=schemas_object({page_url:schemas_string(),short_display_name:schemas_string().optional(),title:schemas_string(),mark_type_show:schemas_int().optional()}).transform(e=>({...e,get videoId(){var t;let n=e.page_url.match(/v_(\S+)\.html/);return null!=(t=null==n?void 0:n[1])?t:""}})),safeParseVideo=e=>{let t=iqiyiEpisodeTabDataVideoSchema.safeParse(e);return t.success?t.data:(console.warn("爱奇艺: 解析分集数据时发生错误:",prettifyError(t.error),e),null)},iqiyiTvTabSchema=schemas_object({bk_id:literal("selector_bk"),bk_type:literal("album_episodes"),data:schemas_object({data:schemas_array(unknown().transform(e=>schemas_object({videos:schemas_object({feature_paged:record(any(),schemas_array(unknown().transform(e=>safeParseVideo(e)))).optional().transform(e=>compact(Object.values(null!=e?e:{}).flat()))}).optional()}).transform(e=>{var t;return null==(t=e.videos)?void 0:t.feature_paged}).safeParse(e).data)).transform(e=>compact(e.flat()))})}),iqiyiMovieTabSchema=schemas_object({bk_id:literal("film_feature_bk"),bk_type:literal("video_list"),data:schemas_object({data:schemas_object({videos:schemas_array(unknown().transform(e=>safeParseVideo(e)))}).transform(e=>compact(e.videos))})}),iqiyiEpisodeTabSchema=union([iqiyiTvTabSchema,iqiyiMovieTabSchema]).transform(e=>e.data.data),iqiyiV3ApiResponseSchema=schemas_object({status_code:schemas_number(),data:schemas_object({base_data:schemas_object({video_list:schemas_array(schemas_object({tv_id:schemas_string(),name:schemas_string(),order:schemas_number(),play_url:schemas_string()})).optional()}),template:schemas_object({tabs:schemas_array(schemas_object({tab_id:schemas_string(),tab_title:schemas_string(),blocks:schemas_array(schemas_object({bk_id:schemas_string(),bk_type:schemas_string(),data:unknown().optional()}))}))})}).optional()}),iqiyiVideoBaseInfoResponseSchema=schemas_object({code:literal("A00000"),data:schemas_object({tvId:schemas_int(),albumId:schemas_int(),durationSec:schemas_int()})}),iqiyiCommentsEntrySchema=schemas_object({int:schemas_number(),list:schemas_object({bulletInfo:schemas_array(unknown().transform(e=>schemas_object({contentId:schemas_string(),content:schemas_string(),showTime:schemas_number(),color:schemas_string().optional().default(DEFAULT_COLOR_HEX).transform(e=>parseInt(e,16))}).transform(e=>providerCommentItemSchema.safeParse({id:e.contentId.toString(),timestamp:e.showTime,color:e.color,content:e.content}).data).safeParse(e).data)).transform(e=>compact(e))})}),iqiyiCommentsResponseSchema=schemas_object({danmu:looseObject({code:literal("A00000"),data:schemas_object({entry:schemas_array(unknown().transform(e=>{var t;return null==(t=iqiyiCommentsEntrySchema.safeParse(e).data)?void 0:t.list.bulletInfo})).transform(e=>compact(e.flat()))})})}).transform(e=>e.danmu.data.entry);function iqiyi_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class IqiyiScraper extends BaseScraper{async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=[];try{r=await this.getEpisodesV3(n.entityId)}catch(e){this.logger.warn("新版API (v3) 获取分集时发生错误:",e),r=[]}return(!r.length,t)?r.filter(e=>e.episodeNumber===t):r}async getSegments(e){let t=this.parseIdString(e);if(!t)return[];let n=await this.getVideoBaseInfo(t.entityId),r=null==n?void 0:n.durationSec;return r?Array.from({length:Math.floor(r/300)+1},(e,t)=>({provider:this.providerName,startTime:300*t,segmentId:(t+1).toString()})):[]}async getComments(e,t){let n=this.parseIdString(e);if(!n)return[];let r=n.entityId;if(!r||r.length<4)return[];let i=r.slice(-4,-2),o=r.slice(-2),a=`http://cmts.iqiyi.com/bullet/${i}/${o}/${r}_300_${t}.z`;this.logger.debug("URL构建: s1=",i,"s2=",o,"完整URL=",a);let s=await this.fetch.get(a,{zlibMode:!0}),u=this.xmlParser.parse(s.data),{success:l,data:c,error:d}=iqiyiCommentsResponseSchema.safeParse(u);return l?c:(this.logger.warn("解析弹幕数据时发生错误:",prettifyError(d)),[])}async getEpisodesV3(e){let t={entity_id:e,device_id:"qd5fwuaj4hunxxdgzwkcqmefeb3ww5hx",auth_cookie:"",user_id:"0",vip_type:"-1",vip_status:"0",conduit_id:"",pcv:"13.082.22866",app_version:"13.082.22866",ext:"",app_mode:"standard",scale:"100",timestamp:Date.now().toString(),src:"pca_tvg",os:"",ad_ext:'{"r":"2.2.0-ares6-pure"}'};t.sign=this.createSign(t);try{var n,r,i,o,a,s,u,l;let e=(await this.fetch.get("https://www.iqiyi.com/prelw/tvg/v2/lw/base_info",{params:t,schema:iqiyiV3ApiResponseSchema})).data,c=null!=(o=null==e||null==(i=e.data)||null==(r=i.base_data)||null==(n=r.video_list)?void 0:n.map(e=>({provider:this.providerName,episodeId:e.tv_id.toString(),episodeTitle:e.name,episodeNumber:e.order,url:e.play_url})))?o:[];if(!c.length){let t=null==e||null==(u=e.data)||null==(s=u.template)||null==(a=s.tabs)?void 0:a.flatMap(e=>e.blocks||[]).find(e=>iqiyiEpisodeTabSchema.safeParse(e).success),{success:n,data:r,error:i}=iqiyiEpisodeTabSchema.safeParse(t);if(!n)return this.logger.warn("解析分集列表数据时发生错误:",prettifyError(i),t),[];let o=1;for(let e of r){if(17===e.mark_type_show)continue;let t=this.videoIdToEntityId(e.videoId);t&&(this.episodeBlacklistPattern.test(e.title)||(c.push({provider:this.providerName,episodeId:this.generateIdString({entityId:t}),episodeTitle:e.title,episodeNumber:e.short_display_name&&null!=(l=this.getEpisodeIndexFromTitle(e.short_display_name))?l:o}),o+=1))}}return c}catch(e){return this.logger.error("获取分集时发生错误:",e),[]}}videoIdToEntityId(e){try{let t,n=parseInt(e,36),r=BigInt(n)^BigInt(0x75706971676c);return(t=r<BigInt(9e5)?BigInt(100)*(r+BigInt(9e5)):r).toString()}catch(t){return this.logger.error("将 video_id '",e,"' 转换为 entity_id 时出错:",t),null}}createSign(e){let t=Object.keys(e).filter(e=>"sign"!==e).sort().map(t=>{var n;return`${t}=${null!=(n=e[t])?n:""}`}).join("&");return md5_default()(`${t}&secret_key=howcuteitis`).toString().toUpperCase()}async getVideoBaseInfo(e){var t;return null==(t=(await this.fetch.get(`https://pcw-api.iqiyi.com/video/video/baseinfo/${e}`,{schema:iqiyiVideoBaseInfoResponseSchema,cache:{cacheKey:`iqiyi:video:baseinfo:${e}`}})).data)?void 0:t.data}constructor(){super(),iqiyi_define_property(this,"providerName","iqiyi"),iqiyi_define_property(this,"xmlParser",new XMLParser({htmlEntities:!0})),iqiyi_define_property(this,"idSchema",iqiyiIdSchema),iqiyi_define_property(this,"PROVIDER_SPECIFIC_BLACKLIST","^(.*?)(抢先(版|篇)?|加更(版|篇)?|花絮|预告|特辑|彩蛋|专访|幕后(故事|花絮)?|直播|纯享|未播|衍生|番外|会员(专属|加长)?|片花|精华|看点|速览|解读|reaction|影评)(.*?)$"),this.fetch.setCookie({pgv_pvid:"40b67e3b06027f3d",video_platform:"2",vversion_name:"8.2.95",video_bucketid:"4",video_omgid:"0a1ff6bc9407c0b1cff86ee5d359614d"}),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36 Edg/136.0.0.0"})}}const formatDistanceLocale={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},formatDistance=(e,t,n)=>{let r,i=formatDistanceLocale[e];if(r="string"==typeof i?i:1===t?i.one:i.other.replace("{{count}}",t.toString()),n?.addSuffix)if(n.comparison&&n.comparison>0)return"in "+r;else return r+" ago";return r};function buildFormatLongFn(e){return (t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const dateFormats={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},timeFormats={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},dateTimeFormats={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},formatLong_formatLong={date:buildFormatLongFn({formats:dateFormats,defaultWidth:"full"}),time:buildFormatLongFn({formats:timeFormats,defaultWidth:"full"}),dateTime:buildFormatLongFn({formats:dateTimeFormats,defaultWidth:"full"})},formatRelativeLocale={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},formatRelative=(e,t,n,r)=>formatRelativeLocale[e];function buildLocalizeFn(e){return(t,n)=>{let r;if("formatting"===(n?.context?String(n.context):"standalone")&&e.formattingValues){let t=e.defaultFormattingWidth||e.defaultWidth,i=n?.width?String(n.width):t;r=e.formattingValues[i]||e.formattingValues[t]}else{let t=e.defaultWidth,i=n?.width?String(n.width):e.defaultWidth;r=e.values[i]||e.values[t]}return r[e.argumentCallback?e.argumentCallback(t):t]}}const eraValues={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},quarterValues={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},monthValues={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},dayValues={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},dayPeriodValues={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},formattingDayPeriodValues={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ordinalNumber=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},localize_localize={ordinalNumber,era:buildLocalizeFn({values:eraValues,defaultWidth:"wide"}),quarter:buildLocalizeFn({values:quarterValues,defaultWidth:"wide",argumentCallback:e=>e-1}),month:buildLocalizeFn({values:monthValues,defaultWidth:"wide"}),day:buildLocalizeFn({values:dayValues,defaultWidth:"wide"}),dayPeriod:buildLocalizeFn({values:dayPeriodValues,defaultWidth:"wide",formattingValues:formattingDayPeriodValues,defaultFormattingWidth:"wide"})};function buildMatchFn(e){return(t,n={})=>{let r,i=n.width,o=i&&e.matchPatterns[i]||e.matchPatterns[e.defaultMatchWidth],a=t.match(o);if(!a)return null;let s=a[0],u=i&&e.parsePatterns[i]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(u)?findIndex(u,e=>e.test(s)):findKey(u,e=>e.test(s));return r=e.valueCallback?e.valueCallback(l):l,{value:r=n.valueCallback?n.valueCallback(r):r,rest:t.slice(s.length)}}}function findKey(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function findIndex(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n}function buildMatchPatternFn(e){return(t,n={})=>{let r=t.match(e.matchPattern);if(!r)return null;let i=r[0],o=t.match(e.parsePattern);if(!o)return null;let a=e.valueCallback?e.valueCallback(o[0]):o[0];return{value:a=n.valueCallback?n.valueCallback(a):a,rest:t.slice(i.length)}}}const matchOrdinalNumberPattern=/^(\d+)(th|st|nd|rd)?/i,parseOrdinalNumberPattern=/\d+/i,matchEraPatterns={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},parseEraPatterns={any:[/^b/i,/^(a|c)/i]},matchQuarterPatterns={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},parseQuarterPatterns={any:[/1/i,/2/i,/3/i,/4/i]},matchMonthPatterns={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},parseMonthPatterns={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},matchDayPatterns={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},parseDayPatterns={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},matchDayPeriodPatterns={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},parseDayPeriodPatterns={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},match_match={ordinalNumber:buildMatchPatternFn({matchPattern:matchOrdinalNumberPattern,parsePattern:parseOrdinalNumberPattern,valueCallback:e=>parseInt(e,10)}),era:buildMatchFn({matchPatterns:matchEraPatterns,defaultMatchWidth:"wide",parsePatterns:parseEraPatterns,defaultParseWidth:"any"}),quarter:buildMatchFn({matchPatterns:matchQuarterPatterns,defaultMatchWidth:"wide",parsePatterns:parseQuarterPatterns,defaultParseWidth:"any",valueCallback:e=>e+1}),month:buildMatchFn({matchPatterns:matchMonthPatterns,defaultMatchWidth:"wide",parsePatterns:parseMonthPatterns,defaultParseWidth:"any"}),day:buildMatchFn({matchPatterns:matchDayPatterns,defaultMatchWidth:"wide",parsePatterns:parseDayPatterns,defaultParseWidth:"any"}),dayPeriod:buildMatchFn({matchPatterns:matchDayPeriodPatterns,defaultMatchWidth:"any",parsePatterns:parseDayPeriodPatterns,defaultParseWidth:"any"})},enUS={code:"en-US",formatDistance:formatDistance,formatLong:formatLong_formatLong,formatRelative:formatRelative,localize:localize_localize,match:match_match,options:{weekStartsOn:0,firstWeekContainsDate:1}};let defaultOptions_defaultOptions={};function getDefaultOptions(){return defaultOptions_defaultOptions}const millisecondsInWeek=6048e5,millisecondsInDay=864e5,constructFromSymbol=Symbol.for("constructDateFrom");function constructFrom(e,t){return"function"==typeof e?e(t):e&&"object"==typeof e&&constructFromSymbol in e?e[constructFromSymbol](t):e instanceof Date?new e.constructor(t):new Date(t)}function toDate(e,t){return constructFrom(t||e,e)}function getTimezoneOffsetInMilliseconds(e){let t=toDate(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),e-n}function normalizeDates(e,...t){let n=constructFrom.bind(null,e||t.find(e=>"object"==typeof e));return t.map(n)}function startOfDay_startOfDay(e,t){let n=toDate(e,t?.in);return n.setHours(0,0,0,0),n}function differenceInCalendarDays(e,t,n){let[r,i]=normalizeDates(n?.in,e,t),o=startOfDay_startOfDay(r),a=startOfDay_startOfDay(i);return Math.round((o-getTimezoneOffsetInMilliseconds(o)-(a-getTimezoneOffsetInMilliseconds(a)))/millisecondsInDay)}function startOfYear(e,t){let n=toDate(e,t?.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function getDayOfYear(e,t){let n=toDate(e,t?.in);return differenceInCalendarDays(n,startOfYear(n))+1}function startOfWeek_startOfWeek(e,t){let n=getDefaultOptions(),r=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??n.weekStartsOn??n.locale?.options?.weekStartsOn??0,i=toDate(e,t?.in),o=i.getDay(),a=7*(o<r)+o-r;return i.setDate(i.getDate()-a),i.setHours(0,0,0,0),i}function startOfISOWeek(e,t){return startOfWeek_startOfWeek(e,{...t,weekStartsOn:1})}function getISOWeekYear(e,t){let n=toDate(e,t?.in),r=n.getFullYear(),i=constructFrom(n,0);i.setFullYear(r+1,0,4),i.setHours(0,0,0,0);let o=startOfISOWeek(i),a=constructFrom(n,0);a.setFullYear(r,0,4),a.setHours(0,0,0,0);let s=startOfISOWeek(a);return n.getTime()>=o.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function startOfISOWeekYear(e,t){let n=getISOWeekYear(e,t),r=constructFrom(t?.in||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),startOfISOWeek(r)}function getISOWeek(e,t){let n=toDate(e,t?.in);return Math.round((startOfISOWeek(n)-startOfISOWeekYear(n))/millisecondsInWeek)+1}function getWeekYear(e,t){let n=toDate(e,t?.in),r=n.getFullYear(),i=getDefaultOptions(),o=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??i.firstWeekContainsDate??i.locale?.options?.firstWeekContainsDate??1,a=constructFrom(t?.in||e,0);a.setFullYear(r+1,0,o),a.setHours(0,0,0,0);let s=startOfWeek_startOfWeek(a,t),u=constructFrom(t?.in||e,0);u.setFullYear(r,0,o),u.setHours(0,0,0,0);let l=startOfWeek_startOfWeek(u,t);return+n>=+s?r+1:+n>=+l?r:r-1}function startOfWeekYear_startOfWeekYear(e,t){let n=getDefaultOptions(),r=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,i=getWeekYear(e,t),o=constructFrom(t?.in||e,0);return o.setFullYear(i,0,r),o.setHours(0,0,0,0),startOfWeek_startOfWeek(o,t)}function getWeek_getWeek(e,t){let n=toDate(e,t?.in);return Math.round((startOfWeek_startOfWeek(n,t)-startOfWeekYear_startOfWeekYear(n,t))/millisecondsInWeek)+1}function addLeadingZeros(e,t){return(e<0?"-":"")+Math.abs(e).toString().padStart(t,"0")}const lightFormatters={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return addLeadingZeros("yy"===t?r%100:r,t.length)},M(e,t){let n=e.getMonth();return"M"===t?String(n+1):addLeadingZeros(n+1,2)},d:(e,t)=>addLeadingZeros(e.getDate(),t.length),a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];default:return"am"===n?"a.m.":"p.m."}},h:(e,t)=>addLeadingZeros(e.getHours()%12||12,t.length),H:(e,t)=>addLeadingZeros(e.getHours(),t.length),m:(e,t)=>addLeadingZeros(e.getMinutes(),t.length),s:(e,t)=>addLeadingZeros(e.getSeconds(),t.length),S(e,t){let n=t.length;return addLeadingZeros(Math.trunc(e.getMilliseconds()*Math.pow(10,n-3)),t.length)}},dayPeriodEnum={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},formatters={G:function(e,t,n){let r=+(e.getFullYear()>0);switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){let t=e.getFullYear(),r=t>0?t:1-t;return n.ordinalNumber(r,{unit:"year"})}return lightFormatters.y(e,t)},Y:function(e,t,n,r){let i=getWeekYear(e,r),o=i>0?i:1-i;return"YY"===t?addLeadingZeros(o%100,2):"Yo"===t?n.ordinalNumber(o,{unit:"year"}):addLeadingZeros(o,t.length)},R:function(e,t){return addLeadingZeros(getISOWeekYear(e),t.length)},u:function(e,t){return addLeadingZeros(e.getFullYear(),t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return addLeadingZeros(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return addLeadingZeros(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return lightFormatters.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return addLeadingZeros(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let i=getWeek_getWeek(e,r);return"wo"===t?n.ordinalNumber(i,{unit:"week"}):addLeadingZeros(i,t.length)},I:function(e,t,n){let r=getISOWeek(e);return"Io"===t?n.ordinalNumber(r,{unit:"week"}):addLeadingZeros(r,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getDate(),{unit:"date"}):lightFormatters.d(e,t)},D:function(e,t,n){let r=getDayOfYear(e);return"Do"===t?n.ordinalNumber(r,{unit:"dayOfYear"}):addLeadingZeros(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let i=e.getDay(),o=(i-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(o);case"ee":return addLeadingZeros(o,2);case"eo":return n.ordinalNumber(o,{unit:"day"});case"eee":return n.day(i,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(i,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(i,{width:"short",context:"formatting"});default:return n.day(i,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let i=e.getDay(),o=(i-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(o);case"cc":return addLeadingZeros(o,t.length);case"co":return n.ordinalNumber(o,{unit:"day"});case"ccc":return n.day(i,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(i,{width:"narrow",context:"standalone"});case"cccccc":return n.day(i,{width:"short",context:"standalone"});default:return n.day(i,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),i=0===r?7:r;switch(t){case"i":return String(i);case"ii":return addLeadingZeros(i,t.length);case"io":return n.ordinalNumber(i,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r,i=e.getHours();switch(r=12===i?dayPeriodEnum.noon:0===i?dayPeriodEnum.midnight:i/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r,i=e.getHours();switch(r=i>=17?dayPeriodEnum.evening:i>=12?dayPeriodEnum.afternoon:i>=4?dayPeriodEnum.morning:dayPeriodEnum.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){let t=e.getHours()%12;return 0===t&&(t=12),n.ordinalNumber(t,{unit:"hour"})}return lightFormatters.h(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getHours(),{unit:"hour"}):lightFormatters.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):addLeadingZeros(r,t.length)},k:function(e,t,n){let r=e.getHours();return(0===r&&(r=24),"ko"===t)?n.ordinalNumber(r,{unit:"hour"}):addLeadingZeros(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):lightFormatters.m(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getSeconds(),{unit:"second"}):lightFormatters.s(e,t)},S:function(e,t){return lightFormatters.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(0===r)return"Z";switch(t){case"X":return formatTimezoneWithOptionalMinutes(r);case"XXXX":case"XX":return formatTimezone(r);default:return formatTimezone(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return formatTimezoneWithOptionalMinutes(r);case"xxxx":case"xx":return formatTimezone(r);default:return formatTimezone(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+formatTimezoneShort(r,":");default:return"GMT"+formatTimezone(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+formatTimezoneShort(r,":");default:return"GMT"+formatTimezone(r,":")}},t:function(e,t,n){return addLeadingZeros(Math.trunc(e/1e3),t.length)},T:function(e,t,n){return addLeadingZeros(+e,t.length)}};function formatTimezoneShort(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),i=Math.trunc(r/60),o=r%60;return 0===o?n+String(i):n+String(i)+t+addLeadingZeros(o,2)}function formatTimezoneWithOptionalMinutes(e,t){return e%60==0?(e>0?"-":"+")+addLeadingZeros(Math.abs(e)/60,2):formatTimezone(e,t)}function formatTimezone(e,t=""){let n=e>0?"-":"+",r=Math.abs(e);return n+addLeadingZeros(Math.trunc(r/60),2)+t+addLeadingZeros(r%60,2)}const dateLongFormatter=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},timeLongFormatter=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},dateTimeLongFormatter=(e,t)=>{let n,r=e.match(/(P+)(p+)?/)||[],i=r[1],o=r[2];if(!o)return dateLongFormatter(e,t);switch(i){case"P":n=t.dateTime({width:"short"});break;case"PP":n=t.dateTime({width:"medium"});break;case"PPP":n=t.dateTime({width:"long"});break;default:n=t.dateTime({width:"full"})}return n.replace("{{date}}",dateLongFormatter(i,t)).replace("{{time}}",timeLongFormatter(o,t))},longFormatters={p:timeLongFormatter,P:dateTimeLongFormatter},dayOfYearTokenRE=/^D+$/,weekYearTokenRE=/^Y+$/,throwTokens=["D","DD","YY","YYYY"];function isProtectedDayOfYearToken(e){return dayOfYearTokenRE.test(e)}function isProtectedWeekYearToken(e){return weekYearTokenRE.test(e)}function warnOrThrowProtectedError(e,t,n){let r=protectedTokens_message(e,t,n);if(console.warn(r),throwTokens.includes(e))throw RangeError(r)}function protectedTokens_message(e,t,n){let r="Y"===e[0]?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function isDate_isDate(e){return e instanceof Date||"object"==typeof e&&"[object Date]"===Object.prototype.toString.call(e)}function isValid_isValid(e){return!(!isDate_isDate(e)&&"number"!=typeof e||isNaN(+toDate(e)))}const formattingTokensRegExp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,longFormattingTokensRegExp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,escapedStringRegExp=/^'([^]*?)'?$/,doubleQuoteRegExp=/''/g,unescapedLatinCharacterRegExp=/[a-zA-Z]/;function format_format(e,t,n){let r=getDefaultOptions(),i=n?.locale??r.locale??enUS,o=n?.firstWeekContainsDate??n?.locale?.options?.firstWeekContainsDate??r.firstWeekContainsDate??r.locale?.options?.firstWeekContainsDate??1,a=n?.weekStartsOn??n?.locale?.options?.weekStartsOn??r.weekStartsOn??r.locale?.options?.weekStartsOn??0,s=toDate(e,n?.in);if(!isValid_isValid(s))throw RangeError("Invalid time value");let u=t.match(longFormattingTokensRegExp).map(e=>{let t=e[0];return"p"===t||"P"===t?(0,longFormatters[t])(e,i.formatLong):e}).join("").match(formattingTokensRegExp).map(e=>{if("''"===e)return{isToken:!1,value:"'"};let t=e[0];if("'"===t)return{isToken:!1,value:cleanEscapedString(e)};if(formatters[t])return{isToken:!0,value:e};if(t.match(unescapedLatinCharacterRegExp))throw RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return{isToken:!1,value:e}});i.localize.preprocessor&&(u=i.localize.preprocessor(s,u));let l={firstWeekContainsDate:o,weekStartsOn:a,locale:i};return u.map(r=>{if(!r.isToken)return r.value;let o=r.value;return(!n?.useAdditionalWeekYearTokens&&isProtectedWeekYearToken(o)||!n?.useAdditionalDayOfYearTokens&&isProtectedDayOfYearToken(o))&&warnOrThrowProtectedError(o,t,String(e)),(0,formatters[o[0]])(s,o,i.localize,l)}).join("")}function cleanEscapedString(e){let t=e.match(escapedStringRegExp);return t?t[1].replace(doubleQuoteRegExp,"'"):e}function uniqBy(e,t){let n=new Map;for(let r=0;r<e.length;r++){let i=e[r],o=t(i);n.has(o)||n.set(o,i)}return Array.from(n.values())}function identity(e){return e}function range(e,t,n=1){if(null==t&&(t=e,e=0),!Number.isInteger(n)||0===n)throw Error("The step value must be a non-zero integer.");let r=Math.max(Math.ceil((t-e)/n),0),i=Array(r);for(let t=0;t<r;t++)i[t]=e+t*n;return i}function isLength(e){return Number.isSafeInteger(e)&&e>=0}function isArrayLike(e){return null!=e&&"function"!=typeof e&&isLength(e.length)}function reduceRight(e,t=identity,n){let r,i;if(!e)return n;isArrayLike(e)?(r=range(0,e.length).reverse(),null==n&&e.length>0?(n=e[e.length-1],i=1):i=0):(r=Object.keys(e).reverse(),null==n?(n=e[r[0]],i=1):i=0);for(let o=i;o<r.length;o++){let i=r[o];n=t(n,e[i],i,e)}return n}const mgtvIdSchema=schemas_object({dramaId:schemas_string(),videoId:schemas_string().optional()}),mgtvSearchResponseSchema=schemas_object({data:schemas_object({contents:schemas_array(unknown().transform(e=>{var t,n;return null!=(n=null==(t=schemas_object({type:literal("media"),data:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({source:literal("imgo"),title:schemas_string().transform(e=>e.replace(/<[^>]*>?/g,"").trim()),url:schemas_string(),desc:schemas_array(schemas_string())}).transform(e=>{let[,,t,n]=e.url.split("/"),r=n.split(".").shift();return{...e,dramaId:t,videoId:r,get mediaType(){var i,o;return"电影"===(null==(o=e.desc)||null==(i=o[0].split("/"))?void 0:i[0].replace("类型:","").trim())?constants_MediaType.Movie:constants_MediaType.TV}}}).safeParse(e).data)?t:null})).transform(e=>compact(e))}).safeParse(e).data)?void 0:t.data)?n:null})).transform(e=>compact(e))})}).transform(e=>compact(e.data.contents.flat())),episodeBlacklistPattern=getEpisodeBlacklistPattern("^(.*?)(抢先(看|版)|加更(版)?|花絮|预告|特辑|(特别|惊喜|纳凉)?企划|彩蛋|专访|幕后(花絮)?|直播|纯享|未播|衍生|番外|合伙人手记|会员(专享|加长)|片花|精华|看点|速看|解读|reaction|超前营业|超前(vlog)?|陪看(记)?|.{3,}篇|影评)(.*?)$"),mgtvEpisodeInfoResponseSchema=schemas_object({data:schemas_object({tab_m:schemas_array(schemas_object({m:schemas_string()})).catch([]),list:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({isIntact:schemas_string(),isnew:schemas_string(),video_id:schemas_string(),t1:schemas_string().refine(e=>!episodeBlacklistPattern.test(e)),t2:schemas_string().refine(e=>!episodeBlacklistPattern.test(e)),t3:schemas_string(),time:schemas_string().transform(e=>reduceRight(e.split(":"),(e,t,n)=>0===n?e+parseInt(t):1===n?e+60*parseInt(t):e+3600*parseInt(t),0))}).safeParse(e).data)?t:null})).transform(e=>compact(e))})}),mgtvCommentConfigResponseSchema=schemas_object({status:literal(0),data:schemas_object({cdn_list:schemas_string().transform(e=>e.split(",")).catch(["bullet-ali.hitv.com"]),cdn_version:schemas_string()})}).transform(e=>e.data),commentColorSchema=schemas_object({r:schemas_number().min(0).max(255),g:schemas_number().min(0).max(255),b:schemas_number().min(0).max(255)}).transform(e=>256*e.r*256+256*e.g+e.b).catch(-1),mgtvCommentResponseSchema=schemas_object({data:schemas_object({items:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({ids:schemas_string(),content:schemas_string(),time:schemas_number().transform(e=>e/1e3),v2_color:schemas_object({color_left:commentColorSchema,color_right:commentColorSchema}).optional().transform(e=>e&&(-1!==e.color_left||-1!==e.color_right)?-1===e.color_left?e.color_right:-1===e.color_right?e.color_left:(e.color_left+e.color_right)/2:DEFAULT_COLOR_INT),v2_position:schemas_int().optional().transform(e=>{switch(e){case 1:return 5;case 2:return 4;default:return 1}})}).safeParse(e).data)?t:null}).transform(e=>{var t;return e&&null!=(t=providerCommentItemSchema.safeParse({id:e.ids,timestamp:e.time,mode:e.v2_position,color:e.v2_color,content:e.content}).data)?t:null})).transform(e=>compact(e))})}).transform(e=>e.data.items);function mgtv_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class MgTVScraper extends BaseScraper{async search(e){var t;let{success:n,data:r,error:i}=searchDanmuParamsSchema.safeParse(e);if(!n)return this.logger.error("搜索参数无效,错误:",prettifyError(i)),[];let{seriesName:o,season:a,airDate:s}=r;if(!o)return[];let u=await this.fetch.get("https://mobileso.bz.mgtv.com/msite/search/v2",{params:{q:o,pc:30,pn:1,sort:-99,ty:0,du:0,pt:0,corr:1,abroad:0,_support:"10000000000000000"},schema:mgtvSearchResponseSchema});if(!(null==(t=u.data)?void 0:t.length))return this.logger.warn("搜索结果为空"),[];let l=[];for(let e of u.data){if(e.mediaType===constants_MediaType.Movie){l.push({provider:this.providerName,dramaId:e.dramaId,dramaTitle:e.title,season:1});continue}let t=await this.getEpisodeInfo(e.dramaId,s);for(let n of null!=t?t:[])l.push({provider:this.providerName,dramaId:e.dramaId,dramaTitle:n.t3,season:null!=a?a:1})}return l}async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=await this.getEpisodeInfo(n.dramaId);if(!(null==r?void 0:r.length))return[];let i=r.map((e,t)=>{var r;return{provider:this.providerName,episodeId:this.generateIdString({dramaId:n.dramaId,videoId:e.video_id}),episodeTitle:e.t3,episodeNumber:null!=(r=this.getEpisodeIndexFromTitle(e.t2))?r:t+1}});return t?i.filter(e=>e.episodeNumber===t):i}async getSegments(e){let t=this.parseIdString(e);if(!t)return[];let n=await this.getEpisodeInfo(t.dramaId);if(!(null==n?void 0:n.length))return this.logger.warn("没有找到对应的剧集",t.dramaId),[];let r=n.find(e=>e.video_id===t.videoId);return r?Array.from({length:Math.ceil(r.time/3600)},(e,t)=>({provider:this.providerName,startTime:3600*t,segmentId:t.toString()})):(this.logger.warn("没有找到对应的集数",t.dramaId,t.videoId),[])}async getComments(e,t){var n,r,i;let o=this.parseIdString(e);if(!o)return[];let a=await this.fetch.get("https://galaxy.bz.mgtv.com/getctlbarrage",{params:{version:"8.1.39",abroad:0,uuid:"",os:"10.15.7",platform:0,mac:"",cid:o.dramaId,vid:o.videoId,pid:"",ticket:""},schema:mgtvCommentConfigResponseSchema,cache:{cacheKey:`mgtv:comment_config:${o.dramaId}_${o.videoId}`,ttl:TTL_1_DAY}});return a.data&&null!=(i=(await this.fetch.get(`https://${null==(n=a.data)?void 0:n.cdn_list[0]}/${null==(r=a.data)?void 0:r.cdn_version}/${t}.json`,{schema:mgtvCommentResponseSchema})).data)?i:[]}async getEpisodeInfo(e,t){var n,r,i,o,a;let s="";try{t&&(s=format_format(t,"yyyyMM"))}catch(e){this.logger.warn("Failed to format air date",e)}let u=[],l=await this.getEpisodeInfoByMonth(e,s);if(u.push(...null!=(r=null==l||null==(n=l.data)?void 0:n.list)?r:[]),!s&&(null==l?void 0:l.data.tab_m.length))for(let t of(this.logger.warn("没有指定月份,拉取全部月份"),null!=(i=null==l?void 0:l.data.tab_m)?i:[])){let n=await this.getEpisodeInfoByMonth(e,t.m);u.push(...null!=(a=null==n||null==(o=n.data)?void 0:o.list)?a:[])}return uniqBy(u,e=>e.video_id)}async getEpisodeInfoByMonth(e,t){return(await this.fetch.get("https://pcweb.api.mgtv.com/variety/showlist",{params:{allowedRC:1,collection_id:e,month:t,page:1,_support:"10000000"},schema:mgtvEpisodeInfoResponseSchema,cache:`mgtv_episode_info_${e}_${t}`,successStatus:[200]})).data}constructor(){super(),mgtv_define_property(this,"providerName","mgtv"),mgtv_define_property(this,"idSchema",mgtvIdSchema),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",Referer:"https://www.mgtv.com/","Sec-Fetch-Site":"same-site","Sec-Fetch-Mode":"cors","Sec-Fetch-Dest":"empty"})}}const assignValue=(e,t,n)=>{let r=e[t];Object.hasOwn(e,t)&&eq(r,n)&&(void 0!==n||t in e)||(e[t]=n)},IS_UNSIGNED_INTEGER=/^(?:0|[1-9]\d*)$/;function isIndex(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e<t;case"symbol":return!1;case"string":return IS_UNSIGNED_INTEGER.test(e)}}function isSymbol(e){return"symbol"==typeof e||e instanceof Symbol}const regexIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,regexIsPlainProp=/^\w*$/;function isKey(e,t){return!Array.isArray(e)&&(!!("number"==typeof e||"boolean"==typeof e||null==e||isSymbol(e))||"string"==typeof e&&(regexIsPlainProp.test(e)||!regexIsDeepProp.test(e))||null!=t&&Object.hasOwn(t,e))}function isObject_isObject(e){return null!==e&&("object"==typeof e||"function"==typeof e)}function updateWith(e,t,n,r){if(null==e&&!isObject_isObject(e))return e;let i=isKey(t,e)?[t]:Array.isArray(t)?t:"string"==typeof t?toPath(t):[t],o=e;for(let t=0;t<i.length&&null!=o;t++){let a,s=toKey(i[t]);if(!isUnsafeProperty(s)){if(t===i.length-1)a=n(o[s]);else{let n=o[s],u=r?.(n,s,e);a=void 0!==u?u:isObject_isObject(n)?n:isIndex(i[t+1])?[]:{}}assignValue(o,s,a),o=o[s]}}return e}function set_set(e,t,n){return updateWith(e,t,()=>n,()=>void 0)}const providerConfigSchema=schemas_object({"provider.renren.mode":schemas_enum(["default","choice"]).catch("default")}).transform(e=>{let t={};return Object.entries(e).forEach(e=>{let[n,r]=e;set_set(t,n,r)}),t.provider});var hmac_sha256=__webpack_require__(939),hmac_sha256_default=__webpack_require__.n(hmac_sha256);function isNil(e){return null==e}var aes=__webpack_require__(129),aes_default=__webpack_require__.n(aes),enc_utf8=__webpack_require__(60),enc_utf8_default=__webpack_require__.n(enc_utf8),mode_ecb=__webpack_require__(760),mode_ecb_default=__webpack_require__.n(mode_ecb),pad_pkcs7=__webpack_require__(186),pad_pkcs7_default=__webpack_require__.n(pad_pkcs7);const renrenIdSchema=schemas_object({dramaId:coerce_number(),episodeId:coerce_number().optional()}),AES_KEY="3b744389882a4067",aesResponeSchema=schemas_string().transform(e=>{let t=enc_base64_default().parse(e);return safeJsonParseWithZod(aes_default().decrypt({ciphertext:t},enc_utf8_default().parse(AES_KEY),{mode:mode_ecb_default(),padding:pad_pkcs7_default()}).toString(enc_utf8_default()),schemas_object({data:unknown()}))}),renrenSearchResponseSchema=schemas_object({searchDramaList:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({id:schemas_string(),title:schemas_string(),subtitle:schemas_string().optional(),classify:preprocess(e=>{var t;return null!=(t=({电影:constants_MediaType.Movie,电视剧:constants_MediaType.TV})[e])?t:null},schemas_enum(constants_MediaType).nullish().catch(null)),name:schemas_string().optional(),year:coerce_number().optional()}).safeParse(e).data)?t:null})).transform(e=>compact(e))}),schema_episodeBlacklistPattern=getEpisodeBlacklistPattern(),renrenDramaInfoResponseSchema=schemas_object({dramaInfo:schemas_object({dramaId:coerce_number(),title:schemas_string(),enName:schemas_string().optional(),seasonNo:coerce_number().optional()}).optional(),episodeList:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({id:coerce_number(),episodeNo:coerce_number(),text:schemas_string().optional(),title:schemas_string().refine(e=>!schema_episodeBlacklistPattern.test(e)).optional()}).safeParse(e).data)?t:null})).transform(e=>compact(e))}),renrenCommentItemSchema=schemas_object({d:schemas_string(),p:schemas_string().transform(e=>{let t=e.split(","),n=coerce_number().catch(0).parse(t[0]),r=coerce_number().int().catch(1).parse(t[1]),i=coerce_number().int().catch(DEFAULT_COLOR_INT).parse(t[3]),o=t[6]||"",a=t[7]||`${n.toFixed(3)}:${o}`;return{timestamp:n,mode:r,color:i,userId:o,contentId:a}})}).transform(e=>{var t;return null!=(t=providerCommentItemSchema.safeParse({id:e.p.contentId,timestamp:e.p.timestamp,mode:e.p.mode,color:e.p.color,content:e.d}).data)?t:null});function renren_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const SIGN_SECRET="ES513W0B1CsdUrR13Qk5EgDAKPeeKZY",BASE_API="https://api.rrmj.plus",CLIENT_TYPE="web_pc",CLIENT_VERSION="1.0.0";class RenRenScraper extends BaseScraper{get deviceId(){return generateUUID().toUpperCase()}async search(e){let{success:t,data:n,error:r}=searchDanmuParamsSchema.safeParse(e);if(!t)return this.logger.error("搜索参数无效,错误:",prettifyError(r)),[];let{seriesName:i,season:o}=n;if(!i)return[];let a=await this.request("/m-station/search/drama",{params:{keywords:i,size:Math.max(10,null!=o?o:1),order:"match",search_after:"",isExecuteVipActivity:!0},cache:{cacheKey:`renren:search:${i}`,ttl:TTL_1_DAY},schema:aesResponeSchema.transform(e=>{var t;let n=renrenSearchResponseSchema.safeParse(null==e?void 0:e.data);return n.success?null==(t=n.data)?void 0:t.searchDramaList:(this.logger.warn("搜索解析错误,错误:",prettifyError(n.error),null==e?void 0:e.data),[])})});if(!a.data)return[];this.logger.info("搜索结果:",a.data);let s=[];for await(let e of a.data){var u,l,c,d,f,h,p;let t=e.title.replace(/<[^>]+>/g,"").replace(":",":"),n=await this.getDramaInfo(e.id);if(!n){this.logger.warn("详细信息未找到,title:",t,"id:",e.id);continue}if(!((null==(l=n.dramaInfo)||null==(u=l.enName)?void 0:u.includes(i))||(null==(d=n.dramaInfo)||null==(c=d.title)?void 0:c.includes(i))||t.includes(i)||(null==(f=e.name)?void 0:f.includes(i)))){this.logger.warn("置信度过低,跳过,title:",t,"id:",e.id);continue}let r=!1,a=null!=(p=null==(h=n.dramaInfo)?void 0:h.seasonNo)?p:1;isNil(o)||a!==o||(r=!0);let m={provider:this.providerName,dramaId:e.id,dramaTitle:t,season:a};if(s.push(m),r){this.logger.info("命中高置信度,忽略其他,title:",t,"id:",e.id),s=[m];break}}return s}async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=await this.getDramaInfo(n.dramaId.toString());if(!r)return[];let i=r.episodeList.map(e=>{var t;return{provider:this.providerName,episodeId:this.generateIdString({dramaId:n.dramaId,episodeId:e.id}),episodeTitle:e.title||`${null==(t=r.dramaInfo)?void 0:t.title} E${e.episodeNo}`,episodeNumber:e.episodeNo}});return isNil(t)?i:i.filter(e=>e.episodeNumber===t)}async getSegments(){return[{provider:this.providerName,segmentId:"1",startTime:0}]}async getComments(e){let t=this.parseIdString(e);return(null==t?void 0:t.episodeId)?this.fetchEpisodeDanmu(t.episodeId.toString()):[]}async getDramaInfo(e){return(await this.request("/m-station/drama/page",{params:{hsdrOpen:0,isAgeLimit:0,dramaId:e,hevcOpen:1},schema:aesResponeSchema.transform(t=>{let n=renrenDramaInfoResponseSchema.safeParse(null==t?void 0:t.data);return n.success?n.data:(this.logger.warn("详细信息解析错误,dramaId:",e,"错误:",prettifyError(n.error),null==t?void 0:t.data),null)}),cache:{cacheKey:`renren:dramaInfo:${e}`,ttl:TTL_1_DAY}})).data}async fetchEpisodeDanmu(e){let t=`https://static-dm.rrmj.plus/v1/produce/danmu/EPISODE/${e}`;return"choice"===this.providerConfig.renren.mode&&(t=`https://static-dm.rrmj.plus/v1/produce/danmu/choice/EPISODE/${e}`),(await this.fetch.get(t,{headers:{Accept:"application/json"},schema:schemas_array(unknown().transform(e=>{var t;return null!=(t=renrenCommentItemSchema.safeParse(e).data)?t:null})).transform(e=>compact(e))})).data}generateSignature(e){let{method:t,aliId:n,timestampMs:r,path:i,sortedQuery:o,secret:a}=e,s=[t.toUpperCase(),`aliId:${n}`,`ct:${CLIENT_TYPE}`,`cv:${CLIENT_VERSION}`,`t:${r}`,`${i}?${o}`].join("\n"),u=hmac_sha256_default()(s,a);return enc_base64_default().stringify(u)}generateHeaders(e){let{method:t,path:n,params:r}=e,i=Object.entries(r).sort((e,t)=>e[0].localeCompare(t[0])).map(e=>{let[t,n]=e;return`${t}=${encodeURIComponent(n)}`}).join("&"),o=Date.now(),a=this.deviceId,s=this.generateSignature({method:t,aliId:a,timestampMs:o,path:n,sortedQuery:i,secret:SIGN_SECRET});return{clientVersion:CLIENT_VERSION,deviceId:a,clientType:CLIENT_TYPE,t:o.toString(),aliId:a,umid:a,token:"",cv:CLIENT_VERSION,ct:CLIENT_TYPE,uet:"9","x-ca-sign":s,Accept:"application/json"}}request(e,t){let{params:n={},...r}=t,i=this.generateHeaders({method:"GET",path:e,params:n});return this.fetch.get(`${BASE_API}${e}`,{...r,headers:i,params:n})}constructor(){super(),renren_define_property(this,"providerName","renren"),renren_define_property(this,"idSchema",renrenIdSchema),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0",Origin:"https://rrsp.com.cn",Referer:"https://rrsp.com.cn/"})}}const tencentIdSchema=schemas_object({cid:schemas_string(),vid:schemas_string().optional()}),tencent_schema_episodeBlacklistPattern=getEpisodeBlacklistPattern("拍摄花絮|制作花絮|幕后花絮|未播花絮|独家花絮|花絮特辑|预告片|先导预告|终极预告|正式预告|官方预告|彩蛋片段|删减片段|未播片段|番外彩蛋|精彩片段|精彩看点|精彩回顾|精彩集锦|看点解析|看点预告|NG镜头|NG花絮|番外篇|番外特辑|制作特辑|拍摄特辑|幕后特辑|导演特辑|演员特辑|片尾曲|插曲|主题曲|背景音乐|OST|音乐MV|歌曲MV|前季回顾|剧情回顾|往期回顾|内容总结|剧情盘点|精选合集|剪辑合集|混剪视频|独家专访|演员访谈|导演访谈|主创访谈|媒体采访|发布会采访|抢先看|抢先版|试看版|短剧|vlog|纯享|加更|reaction|精编|会员版|Plus|独家版|特别版|短片|合唱"),tencentEpisodeSchema=schemas_object({vid:schemas_string().refine(e=>!!e),is_trailer:schemas_string().refine(e=>"1"!==e),title:schemas_string().refine(e=>!tencent_schema_episodeBlacklistPattern.test(e)),union_title:schemas_string().refine(e=>!tencent_schema_episodeBlacklistPattern.test(e)).optional()}),tencentEpisodeResultSchema=schemas_object({data:schemas_object({module_list_datas:schemas_array(schemas_object({module_datas:schemas_array(schemas_object({item_data_lists:schemas_object({item_datas:schemas_array(schemas_object({item_params:unknown().transform(e=>{var t;return null!=(t=tencentEpisodeSchema.safeParse(e).data)?t:null})}).transform(e=>{var t;return null!=(t=e.item_params)?t:null})).transform(e=>compact(e))})}))}))})}).transform(e=>{var t,n,r,i,o,a;return null!=(a=null==(o=e.data.module_list_datas)||null==(i=o[0])||null==(r=i.module_datas)||null==(n=r[0])||null==(t=n.item_data_lists)?void 0:t.item_datas)?a:[]}),tencentSegmentIndexSchema=schemas_object({segment_index:record(schemas_string(),schemas_object({segment_name:schemas_string()}))}),tencentCommentItemSchema=schemas_object({id:schemas_string(),content:schemas_string(),time_offset:coerce_number().transform(e=>e/1e3),content_style:schemas_string().nullish().transform(e=>safeJsonParseWithZod(null!=e?e:"{}",schemas_object({color:schemas_string().optional().default(DEFAULT_COLOR_HEX),position:schemas_number().optional().default(1),gradient_colors:schemas_array(schemas_string()).optional()}).transform(e=>{var t;let n=1;2===e.position?n=5:3===e.position&&(n=4);let r=e.color?parseInt(e.color,16):DEFAULT_COLOR_INT;return r===DEFAULT_COLOR_INT&&(null==(t=e.gradient_colors)?void 0:t.length)&&(r=e.gradient_colors.reduce((e,t)=>e+parseInt(t,16),0)/e.gradient_colors.length),{mode:n,color:r}})))}).transform(e=>{var t,n,r;return null!=(r=providerCommentItemSchema.safeParse({id:e.id,timestamp:e.time_offset,mode:null==(t=e.content_style)?void 0:t.mode,color:null==(n=e.content_style)?void 0:n.color,content:e.content}).data)?r:null}),tencentSegmentSchema=schemas_object({barrage_list:schemas_array(unknown().transform(e=>{var t;return null!=(t=tencentCommentItemSchema.safeParse(e).data)?t:null})).transform(e=>e.filter(e=>null!==e))});function tencent_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const tencent_pageSize=100;class TencentScraper extends BaseScraper{async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=(await this.internalGetEpisodes(n.cid)).map((e,t)=>{let r=this.getEpisodeIndexFromTitle(e.title);return r||(r=t+1),{provider:this.providerName,episodeId:this.generateIdString({cid:n.cid,vid:e.vid}),episodeTitle:e.union_title&&e.union_title!==e.title?e.union_title:e.title,episodeNumber:r}});return void 0!==t?r.filter(e=>e.episodeNumber===t):r}async getSegments(e){let t=this.parseIdString(e);if(!t)return[];let n={};try{var r;let e=await this.fetch.get(`https://dm.video.qq.com/barrage/base/${t.vid}`,{schema:tencentSegmentIndexSchema,cache:{cacheKey:`tencent:segment:${t.vid}`,ttl:TTL_2_HOURS}});if(!e.data)return[];if(!(null==(r=e.data)?void 0:r.segment_index))return this.logger.info("vid:",t.vid,"没有找到弹幕分段索引。"),[];n=e.data.segment_index}catch(e){return this.logger.error("获取弹幕索引失败,vid:",t.vid,"错误:",e),[]}let i=Object.keys(n).sort((e,t)=>parseInt(e,10)-parseInt(t,10));return this.logger.debug("为 vid:",t.vid,"找到",i.length,"个弹幕分段"),i.map(e=>{var t;return{provider:this.providerName,startTime:parseInt(e,10)/1e3,segmentId:null==(t=n[e])?void 0:t.segment_name}})}async getComments(e,t){let n=this.parseIdString(e);if(!(null==n?void 0:n.vid))return[];let r=await this.internalGetComments(n.vid,t);return this.logger.info("找到",r.length,"条弹幕"),r}async internalGetEpisodes(e){let t=[],n=0,r="";for(this.fetch.setHeaders({Referer:`https://v.qq.com/x/cover/${e}.html`});;)try{var i;let o=null!=(i=(await this.fetch.post("https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2",{page_params:{cid:e,page_type:"detail_operation",page_id:"vsite_episode_list",id_type:"1",page_size:tencent_pageSize.toString(),lid:"0",req_from:"web_mobile",page_context:r},has_cache:1},{headers:{"Content-Type":"application/json"},schema:tencentEpisodeResultSchema,cache:{cacheKey:`tencent:episodes:${e}:${n}`}})).data)?i:[];if(o.length>=tencent_pageSize?(n+=1,r=url_parse.qs.stringify({episode_begin:n*tencent_pageSize,episode_end:(n+1)*tencent_pageSize,episode_step:tencent_pageSize})):r="",t.push(...o),!r)break}catch(t){this.logger.error("获取分集列表失败,cid:",e,"错误:",t);break}return t}async internalGetComments(e,t){try{var n,r;return null!=(r=null==(n=(await this.fetch.get(`https://dm.video.qq.com/barrage/segment/${e}/${t}`,{schema:tencentSegmentSchema})).data)?void 0:n.barrage_list)?r:[]}catch(n){return this.logger.error("获取分段",t,"失败,vid:",e,"错误:",n),[]}}constructor(){super(),tencent_define_property(this,"providerName","tencent"),tencent_define_property(this,"idSchema",tencentIdSchema),this.fetch.setCookie({pgv_pvid:"40b67e3b06027f3d",video_platform:"2",vversion_name:"8.2.95",video_bucketid:"4",video_omgid:"0a1ff6bc9407c0b1cff86ee5d359614d"}),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"})}}const youkuIdSchema=schemas_object({showId:schemas_string().optional(),vid:schemas_string().optional()}),youku_schema_episodeBlacklistPattern=getEpisodeBlacklistPattern("^(.*?)(抢先(版|篇)?|加更(版|篇)?|花絮|预告|特辑|彩蛋|专访|幕后(故事|花絮)?|直播|纯享|未播|衍生|番外|会员(专属|加长)?|片花|精华|看点|速览|解读|reaction|影评)(.*?)$"),youkuEpisodeInfoSchema=schemas_object({id:schemas_string(),show_id:schemas_string().optional(),title:schemas_string().refine(e=>!youku_schema_episodeBlacklistPattern.test(e)),seq:coerce_number().optional(),duration:schemas_string(),category:schemas_string(),link:schemas_string()}).transform(e=>({...e,get totalMat(){try{let t=parseFloat(e.duration);return Math.floor(t/60)+1}catch(e){return 0}}})),youkuVideoResultSchema=schemas_object({total:schemas_number().or(schemas_string().transform(e=>parseInt(e))),videos:schemas_array(youkuEpisodeInfoSchema)}),youkuCommentSchema=schemas_object({id:schemas_number(),content:schemas_string(),playat:schemas_number().transform(e=>e/1e3),propertis:schemas_string().nullish().transform(e=>safeJsonParseWithZod(null!=e?e:"{}",schemas_object({color:schemas_number().optional().default(DEFAULT_COLOR_INT),pos:schemas_number().optional().transform(e=>{let t=1;return 1===e?t=5:2===e&&(t=4),t})})))}).transform(e=>{var t,n,r;return null!=(r=providerCommentItemSchema.safeParse({id:e.id.toString(),timestamp:e.playat,mode:null==(t=e.propertis)?void 0:t.pos,color:null==(n=e.propertis)?void 0:n.color,content:e.content}).data)?r:null}),youkuDanmuResultSchema=schemas_object({data:schemas_object({result:schemas_array(youkuCommentSchema)})});function youku_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class YoukuScraper extends BaseScraper{get token(){var e,t;return(null!=(t=null==(e=this.fetch.getCookie("_m_h5_tk"))?void 0:e.split("_")[0])?t:"").substring(0,32)}get cna(){var e;return null!=(e=this.fetch.getCookie("cna"))?e:""}async getEpisodes(e,t){var n,r,i;let o=this.parseIdString(e);if(!o)return[];let a=o.showId;if(!a&&o.vid){let e=await this.getVideoInfo(o.vid);a=null!=(n=null==e?void 0:e.show_id)?n:""}if(!a)return[];let s=20,u=null!=t?t:1,l=Math.max(1,Math.ceil(u/20));try{let e=e=>e.filter(e=>!this.EPISODE_BLACKLIST_KEYWORDS.some(t=>e.title.includes(t))),n=(e,t)=>({provider:this.providerName,episodeId:this.generateIdString({showId:a,vid:e.id}),episodeTitle:e.title,episodeNumber:t}),o=await this.getEpisodesPage(a,l,s),c=e(null!=(r=null==o?void 0:o.videos)?r:[]),d=c.find(e=>e.seq===u);if(d)return[n(d,u)];let f=Number(null!=(i=null==o?void 0:o.total)?i:0),h=Math.max(1,Math.ceil(f/s)),p=Array.from({length:h},(e,t)=>t+1).filter(e=>e!==l),m=[];for(let e of p){await this.sleep(500);let t=await this.getEpisodesPage(a,e,s);m.push(t)}let g=e(m.flatMap(e=>{var t;return null!=(t=null==e?void 0:e.videos)?t:[]})),v=[...c,...g];if(void 0!==t){let e=v.find(e=>e.seq===u);return e?[n(e,u)]:[]}return v.sort((e,t)=>{var n,r;return(null!=(n=e.seq)?n:Number.MAX_SAFE_INTEGER)-(null!=(r=t.seq)?r:Number.MAX_SAFE_INTEGER)}).map((e,t)=>n(e,t+1))}catch(e){return this.logger.error("获取分集失败,showId:",a,"错误:",e),[]}}async getSegments(e){var t;let{vid:n}=null!=(t=this.parseIdString(e))?t:{};if(!n)return[];try{await this.ensureTokenCookie();let e=await this.getVideoInfo(n);if(!e)return this.logger.warn("获取分集信息失败,vid:",n),[];let t=e.totalMat;if(0===t)return this.logger.warn("视频时长为0,无法获取弹幕,vid:",n),[];return Array.from({length:t},(e,t)=>({provider:this.providerName,startTime:60*t,segmentId:t.toString()}))}catch(e){return this.logger.error("获取分段信息失败,vid:",n,"错误:",e),[]}}async getComments(e,t){var n;let{vid:r}=null!=(n=this.parseIdString(e))?n:{};if(!r)return[];try{return await this.ensureTokenCookie(),this.getDanmuContentByMat(r,parseInt(t,10))}catch(e){return this.logger.error("获取弹幕信息失败,vid:",r,"错误:",e),[]}}async getVideoInfo(e){return(await this.fetch.get("https://openapi.youku.com/v2/videos/show_basic.json",{params:{client_id:"53e6cc67237fc59a",package:"com.huawei.hwvplayer.youku",video_id:e},schema:youkuEpisodeInfoSchema,cache:{cacheKey:`youku:segments:${e}`}})).data}async getEpisodesPage(e,t,n){return(await this.fetch.get("https://openapi.youku.com/v2/shows/videos.json",{params:{client_id:"53e6cc67237fc59a",package:"com.huawei.hwvplayer.youku",ext:"show",show_id:e,page:t.toString(),count:n.toString()},schema:youkuVideoResultSchema,cache:{cacheKey:`youku:episodes:${e}:${t}:${n}`}})).data}async getDanmuContentByMat(e,t){if(!this.token)return this.logger.error("无法获取弹幕,_m_h5_tk 缺失"),[];let n={pid:0,ctype:10004,sver:"3.1.0",cver:"v1.0",ctime:Date.now(),guid:this.cna,vid:e,mat:t,mcount:1,type:1},r=JSON.stringify(Object.fromEntries(Object.entries(n).sort())),i=enc_base64_default().stringify(enc_utf8_default().parse(r));n.msg=i,n.sign=this.generateMsgSign(i);let o="24679788",a=JSON.stringify(n),s=Date.now().toString();try{var u,l,c;let e=null!=(c=null==(l=(await this.fetch.get("https://acs.youku.com/h5/mopen.youku.danmu.list/1.0/",{params:{jsv:"2.7.0",appKey:o,t:s,sign:this.generateTokenSign(s,o,a),api:"mopen.youku.danmu.list",v:"1.0",type:"originaljson",dataType:"jsonp",timeout:"20000",jsonpIncPrefix:"utility",data:a},headers:{Referer:"https://v.youku.com"},successStatus:[200],schema:looseObject({data:schemas_object({result:schemas_string().transform(e=>safeJsonParseWithZod(e,youkuDanmuResultSchema)).optional()})})})).data)||null==(u=l.data.result)?void 0:u.data.result)?c:[];return this.logger.info("获取到分段",t,"的弹幕",e.length,"条"),e}catch(n){return this.logger.error("解析弹幕响应失败,vid:",e,"mat:",t,"错误:",n),[]}}generateMsgSign(e){return md5_default()(`${e}MkmC9SoIw6xCkSKHhJ7b5D2r51kBiREr`).toString().toLowerCase()}generateTokenSign(e,t,n){return md5_default()([this.token,e,t,n].join("&")).toString().toLowerCase()}async ensureTokenCookie(){this.fetch.cookie={};try{await this.fetch.get("https://log.mmstat.com/eg.js",{headers:{Cookie:"","If-None-Match":""}})}catch(e){this.logger.warn("无法连接到 youku.com 获取 'cna' cookie。错误:",e)}try{await this.fetch.get("https://acs.youku.com/h5/mtop.com.youku.aplatform.weakget/1.0/?jsv=2.5.1&appKey=24679788")}catch(e){this.logger.error("无法连接到 acs.youku.com 获取令牌 cookie。弹幕获取很可能会失败。错误:",e)}this.cna&&this.token||this.logger.warn("未能获取到弹幕签名所需的全部 cookie。 cna:",this.cna,"token:",this.token)}constructor(){super(),youku_define_property(this,"providerName","youku"),youku_define_property(this,"idSchema",youkuIdSchema),youku_define_property(this,"EPISODE_BLACKLIST_KEYWORDS",["彩蛋","加更","走心","解忧","纯享"]),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"})}}function scrapers_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const scrapers=[TencentScraper,YoukuScraper,IqiyiScraper,BilibiliScraper,RenRenScraper,MgTVScraper];class scrapers_Scraper{get scraperMap(){return keyBy(this.scrapers,e=>e.providerName)}async getSegmentsByProvider(e,t){let n=this.scraperMap[e];if(!n)return[];let r=await n.getSegments(t);return sortBy(r,["startTime"])}findSegmentAtTime(e,t){var n;if(!e.length)return null;let r=0,i=e.length-1;for(;r<=i;){let n=r+i>>1;e[n].startTime<=t?r=n+1:i=n-1}let o=i;return o<0?null:null!=(n=e[o])?n:null}async getSegmentWithTime(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;for(var t,n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];let o=[];for(let{provider:t,idString:n}of r)o.push((async()=>{let r=await this.getSegmentsByProvider(t,n);if(!r.length)return null;let i=this.findSegmentAtTime(r,e);if(!i)return null;let o=this.scraperMap[t];if(!o)return null;let a=await o.getComments(n,i.segmentId);return a?{comments:a,provider:t}:null})());let a=await Promise.all(o),s=new Map;for(let e of a)if(null==e||null==(t=e.comments)?void 0:t.length)for(let t of e.comments){if(!t)continue;let n=[t.mode,t.color,t.content].join("___"),r=s.get(n);r?(t.timestamp<r.item.timestamp&&(r.item=t),r.count+=1):s.set(n,{item:t,count:1,provider:e.provider})}let u=[];return s.forEach(e=>{let{item:t,count:n,provider:r}=e,i=n>1?`${t.content} \xd7 ${n}`:t.content;u.push({cid:t.id,p:`${t.timestamp.toFixed(2)},${t.mode},${t.color},[${r}]`,m:i})}),u}getDanmuWithSegmentTimeByVideoId(e,t){let n=e.split(",").map(e=>{let[t,n]=e.split(":");return{provider:t,idString:n}});return this.getSegmentWithTime(t,...n)}async getEpisodes(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];let r=[];for(let{provider:e,idString:n,episodeNumber:i}of t){let t=this.scraperMap[e];t&&r.push(t.getEpisodes(n,i).catch(e=>(console.error(e),[])))}return(await Promise.all(r).catch(e=>(console.error(e),[]))).flat().map(e=>({...e,episodeId:`${e.provider}:${e.episodeId}`}))}getEpisodeNumber(e,t){if(e===constants_MediaType.TV&&t)return parseInt(t)}async getDetailWithAnimeId(e,t,n){let[r,i]=e.split(":");return await this.getEpisodes({provider:r,idString:i,episodeNumber:this.getEpisodeNumber(t,n)})}async getDetailWithDoubanIds(e,t,n){let r=await Promise.all(e.map(e=>getVideoPlatformInfoByDoubanId(e).catch(()=>null))),i=this.getEpisodeNumber(t,n),o=[];for(let e of r)e&&Object.entries(e.providers).forEach(e=>{var t,n;let[r,a]=e;o.push({provider:r,idString:null!=(n=null==(t=this.scraperMap[r])?void 0:t.generateIdString(a))?n:"",episodeNumber:i})});return this.getEpisodes(...uniqWith(o,isEqual))}async getDetailWithSearchParams(e){let t=[];for(let n of this.scrapers)n.search&&t.push(n.search(e).catch(e=>(console.error(e),[])));let n=(await Promise.all(t)).flat();if(!n.length)return[];let r=this.getEpisodeNumber(e.type,e.episode),i=[];for(let e of n){let t=this.scraperMap[e.provider];if(!t)continue;let n=t.generateIdString({dramaId:e.dramaId});i.push({provider:e.provider,idString:n,episodeNumber:r})}return this.getEpisodes(...uniqWith(i,isEqual))}setProviderConfig(e){let{success:t,data:n}=providerConfigSchema.safeParse(e);t&&this.scrapers.forEach(e=>{e.providerConfig=n})}constructor(){scrapers_define_property(this,"scrapers",[]),scrapers.forEach(e=>{this.scrapers.push(new e)})}}const widgetVersion="0.6.0";WidgetMetadata = {id:"baranwang.danmu.universe",title:"通用弹幕",description:"通用弹幕插件,支持腾讯、优酷、爱奇艺、哔哩哔哩、人人视频等平台",author:"Baran",version:widgetVersion,site:"https://github.com/baranwang/forward-widgets/tree/main/packages/danmu-universe",requiredVersion:"0.0.2",globalParams:[{title:"模糊匹配",name:"fuzzyMatch",description:"是否开启模糊匹配",value:"auto",type:"enumeration",enumOptions:[{title:"自动",value:"auto"},{title:"始终开启",value:"always"},{title:"始终关闭",value:"never"}]},{title:"未匹配到资源提示",name:"emptyAnimeTitle",description:"是否显示未匹配到资源提示",value:"true",type:"enumeration",enumOptions:[{title:"开启",value:"true"},{title:"关闭",value:"false"}]},{title:`[${PROVIDER_NAMES.renren}] \u{5F39}\u{5E55}\u{6A21}\u{5F0F}`,name:"provider.renren.mode",description:"弹幕模式,精选弹幕相比默认弹幕质量更高",value:"default",type:"enumeration",enumOptions:[{title:"默认",value:"default"},{title:"精选",value:"choice"}]}],modules:[{type:"danmu",id:"searchDanmu",title:"搜索弹幕",functionName:"searchDanmu",description:"搜索弹幕"},{type:"danmu",id:"getDetail",title:"获取详情",functionName:"getDetail",description:"获取详情"},{type:"danmu",id:"getComments",title:"获取弹幕",functionName:"getComments",description:"获取弹幕"},{type:"danmu",id:"getDanmuWithSegmentTime",title:"获取弹幕切片",functionName:"getComments",description:"获取弹幕切片"}]};const src_scraper=new scrapers_Scraper;searchDanmu=async e=>{src_scraper.setProviderConfig(e);let{type:t,episode:n,fuzzyMatch:r="auto"}=e,i=[],o=await getDoubanIds(e);if(o.length&&(i=await src_scraper.getDetailWithDoubanIds(o,t,n)),!(null==i?void 0:i.length)&&"auto"===r||"always"===r){let t=await src_scraper.getDetailWithSearchParams(e);i=i.concat(t)}let a=stringbool().catch(!0).parse(e.emptyAnimeTitle);return!i.length&&a?{animes:[{animeId:EMPTY_ANIME_CONFIG.ID,animeTitle:EMPTY_ANIME_CONFIG.TITLE}]}:{animes:i.map(e=>{let t=`[${PROVIDER_NAMES[e.provider]}] `;return e.episodeTitle&&(t+=e.episodeTitle),{animeId:e.episodeId,animeTitle:t}})}},getDetail=async e=>{src_scraper.setProviderConfig(e);let{animeId:t,type:n,episode:r}=e;return t&&t!==EMPTY_ANIME_CONFIG.ID?src_scraper.getDetailWithAnimeId(t.toString(),n,r):null},getComments=async e=>{src_scraper.setProviderConfig(e);let{animeId:t,commentId:n,segmentTime:r,tmdbId:i,type:o,episode:a}=e,s=null!=n?n:t;if(s===EMPTY_ANIME_CONFIG.ID)return null;if(!s){if(!i)return null;let t=await getDoubanIds(e);if(!t.length)return null;s=(await src_scraper.getDetailWithDoubanIds(t,o,a)).map(e=>[e.provider,e.episodeId].join(":")).join(",")}let u=await src_scraper.getDanmuWithSegmentTimeByVideoId(s.toString(),r);return{comments:u,count:u.length}};
|
|
16
|
+
`)}t.write("payload.value = newResult;"),t.write("return payload;");let s=t.compile();return(t,n)=>s(e,t,n)},a=util_isObject,s=!globalConfig.jitless,u=util_allowsEval,l=s&&u.value,c=t.catchall;e._zod.parse=(u,d)=>{r??(r=i.value);let f=u.value;if(!a(f))return u.issues.push({expected:"object",code:"invalid_type",input:f,inst:e}),u;let h=[];if(s&&l&&d?.async===!1&&!0!==d.jitless)n||(n=o(t.shape)),u=n(u,d);else{u.value={};let e=r.shape;for(let t of r.keys){let n=e[t]._zod.run({value:f[t],issues:[]},d);n instanceof Promise?h.push(n.then(e=>handlePropertyResult(e,u,t,f))):handlePropertyResult(n,u,t,f)}}if(!c)return h.length?Promise.all(h).then(()=>u):u;let p=[],m=r.keySet,g=c._zod,v=g.def.type;for(let e of Object.keys(f)){if(m.has(e))continue;if("never"===v){p.push(e);continue}let t=g.run({value:f[e],issues:[]},d);t instanceof Promise?h.push(t.then(t=>handlePropertyResult(t,u,e,f))):handlePropertyResult(t,u,e,f)}return(p.length&&u.issues.push({code:"unrecognized_keys",keys:p,input:f,inst:e}),h.length)?Promise.all(h).then(()=>u):u}});function handleUnionResults(e,t,n,r){for(let n of e)if(0===n.issues.length)return t.value=n.value,t;let i=e.filter(e=>!aborted(e));return 1===i.length?(t.value=i[0].value,i[0]):(t.issues.push({code:"invalid_union",input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>finalizeIssue(e,r,core_config())))}),t)}const $ZodUnion=$constructor("$ZodUnion",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"optin",()=>t.options.some(e=>"optional"===e._zod.optin)?"optional":void 0),defineLazy(e._zod,"optout",()=>t.options.some(e=>"optional"===e._zod.optout)?"optional":void 0),defineLazy(e._zod,"values",()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),defineLazy(e._zod,"pattern",()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>cleanRegex(e.source)).join("|")})$`)}});let n=1===t.options.length,r=t.options[0]._zod.run;e._zod.parse=(i,o)=>{if(n)return r(i,o);let a=!1,s=[];for(let e of t.options){let t=e._zod.run({value:i.value,issues:[]},o);if(t instanceof Promise)s.push(t),a=!0;else{if(0===t.issues.length)return t;s.push(t)}}return a?Promise.all(s).then(t=>handleUnionResults(t,i,e,o)):handleUnionResults(s,i,e,o)}}),$ZodDiscriminatedUnion=$constructor("$ZodDiscriminatedUnion",(e,t)=>{$ZodUnion.init(e,t);let n=e._zod.parse;defineLazy(e._zod,"propValues",()=>{let e={};for(let n of t.options){let r=n._zod.propValues;if(!r||0===Object.keys(r).length)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(n)}"`);for(let[t,n]of Object.entries(r))for(let r of(e[t]||(e[t]=new Set),n))e[t].add(r)}return e});let r=util_cached(()=>{let e=t.options,n=new Map;for(let r of e){let e=r._zod.propValues?.[t.discriminator];if(!e||0===e.size)throw Error(`Invalid discriminated union option at index "${t.options.indexOf(r)}"`);for(let t of e){if(n.has(t))throw Error(`Duplicate discriminator value "${String(t)}"`);n.set(t,r)}}return n});e._zod.parse=(i,o)=>{let a=i.value;if(!util_isObject(a))return i.issues.push({code:"invalid_type",expected:"object",input:a,inst:e}),i;let s=r.value.get(a?.[t.discriminator]);return s?s._zod.run(i,o):t.unionFallback?n(i,o):(i.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",discriminator:t.discriminator,input:a,path:[t.discriminator],inst:e}),i)}}),$ZodIntersection=$constructor("$ZodIntersection",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),o=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||o instanceof Promise?Promise.all([i,o]).then(([t,n])=>handleIntersectionResults(e,t,n)):handleIntersectionResults(e,i,o)}});function mergeValues(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(isPlainObject(e)&&isPlainObject(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>-1!==n.indexOf(e)),i={...e,...t};for(let n of r){let r=mergeValues(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r<e.length;r++){let i=mergeValues(e[r],t[r]);if(!i.valid)return{valid:!1,mergeErrorPath:[r,...i.mergeErrorPath]};n.push(i.data)}return{valid:!0,data:n}}return{valid:!1,mergeErrorPath:[]}}function handleIntersectionResults(e,t,n){if(t.issues.length&&e.issues.push(...t.issues),n.issues.length&&e.issues.push(...n.issues),aborted(e))return e;let r=mergeValues(t.value,n.value);if(!r.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(r.mergeErrorPath)}`);return e.value=r.data,e}(e,t)=>{$ZodType.init(e,t);let n=t.items,r=n.length-[...n].reverse().findIndex(e=>"optional"!==e._zod.optin);e._zod.parse=(i,o)=>{let a=i.value;if(!Array.isArray(a))return i.issues.push({input:a,inst:e,expected:"tuple",code:"invalid_type"}),i;i.value=[];let s=[];if(!t.rest){let t=a.length>n.length,o=a.length<r-1;if(t||o)return i.issues.push({...t?{code:"too_big",maximum:n.length}:{code:"too_small",minimum:n.length},input:a,inst:e,origin:"array"}),i}let u=-1;for(let e of n){if(++u>=a.length&&u>=r)continue;let t=e._zod.run({value:a[u],issues:[]},o);t instanceof Promise?s.push(t.then(e=>handleTupleResult(e,i,u))):handleTupleResult(t,i,u)}if(t.rest)for(let e of a.slice(n.length)){u++;let n=t.rest._zod.run({value:e,issues:[]},o);n instanceof Promise?s.push(n.then(e=>handleTupleResult(e,i,u))):handleTupleResult(n,i,u)}return s.length?Promise.all(s).then(()=>i):i}};function handleTupleResult(e,t,n){e.issues.length&&t.issues.push(...prefixIssues(n,e.issues)),t.value[n]=e.value}const $ZodRecord=$constructor("$ZodRecord",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!isPlainObject(i))return n.issues.push({expected:"record",code:"invalid_type",input:i,inst:e}),n;let o=[];if(t.keyType._zod.values){let a,s=t.keyType._zod.values;for(let e of(n.value={},s))if("string"==typeof e||"number"==typeof e||"symbol"==typeof e){let a=t.valueType._zod.run({value:i[e],issues:[]},r);a instanceof Promise?o.push(a.then(t=>{t.issues.length&&n.issues.push(...prefixIssues(e,t.issues)),n.value[e]=t.value})):(a.issues.length&&n.issues.push(...prefixIssues(e,a.issues)),n.value[e]=a.value)}for(let e in i)s.has(e)||(a=a??[]).push(e);a&&a.length>0&&n.issues.push({code:"unrecognized_keys",input:i,inst:e,keys:a})}else for(let a of(n.value={},Reflect.ownKeys(i))){if("__proto__"===a)continue;let s=t.keyType._zod.run({value:a,issues:[]},r);if(s instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(s.issues.length){n.issues.push({code:"invalid_key",origin:"record",issues:s.issues.map(e=>finalizeIssue(e,r,core_config())),input:a,path:[a],inst:e}),n.value[s.value]=s.value;continue}let u=t.valueType._zod.run({value:i[a],issues:[]},r);u instanceof Promise?o.push(u.then(e=>{e.issues.length&&n.issues.push(...prefixIssues(a,e.issues)),n.value[s.value]=e.value})):(u.issues.length&&n.issues.push(...prefixIssues(a,u.issues)),n.value[s.value]=u.value)}return o.length?Promise.all(o).then(()=>n):n}}),$ZodMap=$constructor("$ZodMap",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!(i instanceof Map))return n.issues.push({expected:"map",code:"invalid_type",input:i,inst:e}),n;let o=[];for(let[a,s]of(n.value=new Map,i)){let u=t.keyType._zod.run({value:a,issues:[]},r),l=t.valueType._zod.run({value:s,issues:[]},r);u instanceof Promise||l instanceof Promise?o.push(Promise.all([u,l]).then(([t,o])=>{handleMapResult(t,o,n,a,i,e,r)})):handleMapResult(u,l,n,a,i,e,r)}return o.length?Promise.all(o).then(()=>n):n}});function handleMapResult(e,t,n,r,i,o,a){e.issues.length&&(propertyKeyTypes.has(typeof r)?n.issues.push(...prefixIssues(r,e.issues)):n.issues.push({code:"invalid_key",origin:"map",input:i,inst:o,issues:e.issues.map(e=>finalizeIssue(e,a,core_config()))})),t.issues.length&&(propertyKeyTypes.has(typeof r)?n.issues.push(...prefixIssues(r,t.issues)):n.issues.push({origin:"map",code:"invalid_element",input:i,inst:o,key:r,issues:t.issues.map(e=>finalizeIssue(e,a,core_config()))})),n.value.set(e.value,t.value)}(e,t)=>{$ZodType.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!(i instanceof Set))return n.issues.push({input:i,inst:e,expected:"set",code:"invalid_type"}),n;let o=[];for(let e of(n.value=new Set,i)){let i=t.valueType._zod.run({value:e,issues:[]},r);i instanceof Promise?o.push(i.then(e=>handleSetResult(e,n))):handleSetResult(i,n)}return o.length?Promise.all(o).then(()=>n):n}};function handleSetResult(e,t){e.issues.length&&t.issues.push(...e.issues),t.value.add(e.value)}const $ZodEnum=$constructor("$ZodEnum",(e,t)=>{$ZodType.init(e,t);let n=getEnumValues(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>propertyKeyTypes.has(typeof e)).map(e=>"string"==typeof e?escapeRegex(e):e.toString()).join("|")})$`),e._zod.parse=(t,i)=>{let o=t.value;return r.has(o)||t.issues.push({code:"invalid_value",values:n,input:o,inst:e}),t}}),$ZodLiteral=$constructor("$ZodLiteral",(e,t)=>{if($ZodType.init(e,t),0===t.values.length)throw Error("Cannot create literal schema with no valid values");e._zod.values=new Set(t.values),e._zod.pattern=RegExp(`^(${t.values.map(e=>"string"==typeof e?escapeRegex(e):e?escapeRegex(e.toString()):String(e)).join("|")})$`),e._zod.parse=(n,r)=>{let i=n.value;return e._zod.values.has(i)||n.issues.push({code:"invalid_value",values:t.values,input:i,inst:e}),n}}),$ZodFile=$constructor("$ZodFile",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(t,n)=>{let r=t.value;return r instanceof File||t.issues.push({expected:"file",code:"invalid_type",input:r,inst:e}),t}}),$ZodTransform=$constructor("$ZodTransform",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(e,n)=>{let r=t.transform(e.value,e);if(n.async)return(r instanceof Promise?r:Promise.resolve(r)).then(t=>(e.value=t,e));if(r instanceof Promise)throw new $ZodAsyncError;return e.value=r,e}});function handleOptionalResult(e,t){return e.issues.length&&void 0===t?{issues:[],value:void 0}:e}const $ZodOptional=$constructor("$ZodOptional",(e,t)=>{$ZodType.init(e,t),e._zod.optin="optional",e._zod.optout="optional",defineLazy(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),defineLazy(e._zod,"pattern",()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${cleanRegex(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if("optional"===t.innerType._zod.optin){let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(t=>handleOptionalResult(t,e.value)):handleOptionalResult(r,e.value)}return void 0===e.value?e:t.innerType._zod.run(e,n)}}),$ZodNullable=$constructor("$ZodNullable",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"optin",()=>t.innerType._zod.optin),defineLazy(e._zod,"optout",()=>t.innerType._zod.optout),defineLazy(e._zod,"pattern",()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${cleanRegex(e.source)}|null)$`):void 0}),defineLazy(e._zod,"values",()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>null===e.value?e:t.innerType._zod.run(e,n)}),$ZodDefault=$constructor("$ZodDefault",(e,t)=>{$ZodType.init(e,t),e._zod.optin="optional",defineLazy(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(void 0===e.value)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>handleDefaultResult(e,t)):handleDefaultResult(r,t)}});function handleDefaultResult(e,t){return void 0===e.value&&(e.value=t.defaultValue),e}const $ZodPrefault=$constructor("$ZodPrefault",(e,t)=>{$ZodType.init(e,t),e._zod.optin="optional",defineLazy(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(void 0===e.value&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),$ZodNonOptional=$constructor("$ZodNonOptional",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"values",()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>void 0!==e)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>handleNonOptionalResult(t,e)):handleNonOptionalResult(i,e)}});function handleNonOptionalResult(e,t){return e.issues.length||void 0!==e.value||e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:t}),e}const $ZodSuccess=$constructor("$ZodSuccess",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(e,n)=>{let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(t=>(e.value=0===t.issues.length,e)):(e.value=0===r.issues.length,e)}}),$ZodCatch=$constructor("$ZodCatch",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"optin",()=>t.innerType._zod.optin),defineLazy(e._zod,"optout",()=>t.innerType._zod.optout),defineLazy(e._zod,"values",()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>finalizeIssue(e,n,core_config()))},input:e.value}),e.issues=[]),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>finalizeIssue(e,n,core_config()))},input:e.value}),e.issues=[]),e)}}),$ZodNaN=$constructor("$ZodNaN",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(t,n)=>("number"==typeof t.value&&Number.isNaN(t.value)||t.issues.push({input:t.value,inst:e,expected:"nan",code:"invalid_type"}),t)}),$ZodPipe=$constructor("$ZodPipe",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"values",()=>t.in._zod.values),defineLazy(e._zod,"optin",()=>t.in._zod.optin),defineLazy(e._zod,"optout",()=>t.out._zod.optout),defineLazy(e._zod,"propValues",()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>handlePipeResult(e,t,n)):handlePipeResult(r,t,n)}});function handlePipeResult(e,t,n){return e.issues.length?e:t.out._zod.run({value:e.value,issues:e.issues},n)}const $ZodReadonly=$constructor("$ZodReadonly",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"propValues",()=>t.innerType._zod.propValues),defineLazy(e._zod,"values",()=>t.innerType._zod.values),defineLazy(e._zod,"optin",()=>t.innerType._zod.optin),defineLazy(e._zod,"optout",()=>t.innerType._zod.optout),e._zod.parse=(e,n)=>{let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(handleReadonlyResult):handleReadonlyResult(r)}});function handleReadonlyResult(e){return e.value=Object.freeze(e.value),e}const $ZodTemplateLiteral=$constructor("$ZodTemplateLiteral",(e,t)=>{$ZodType.init(e,t);let n=[];for(let e of t.parts)if("object"==typeof e&&null!==e){if(!e._zod.pattern)throw Error(`Invalid template literal part, no pattern found: ${[...e._zod.traits].shift()}`);let t=e._zod.pattern instanceof RegExp?e._zod.pattern.source:e._zod.pattern;if(!t)throw Error(`Invalid template literal part: ${e._zod.traits}`);let r=+!!t.startsWith("^"),i=t.endsWith("$")?t.length-1:t.length;n.push(t.slice(r,i))}else if(null===e||primitiveTypes.has(typeof e))n.push(escapeRegex(`${e}`));else throw Error(`Invalid template literal part: ${e}`);e._zod.pattern=RegExp(`^${n.join("")}$`),e._zod.parse=(n,r)=>("string"!=typeof n.value?n.issues.push({input:n.value,inst:e,expected:"template_literal",code:"invalid_type"}):(e._zod.pattern.lastIndex=0,e._zod.pattern.test(n.value)||n.issues.push({input:n.value,inst:e,code:"invalid_format",format:t.format??"template_literal",pattern:e._zod.pattern.source})),n)}),$ZodPromise=$constructor("$ZodPromise",(e,t)=>{$ZodType.init(e,t),e._zod.parse=(e,n)=>Promise.resolve(e.value).then(e=>t.innerType._zod.run({value:e,issues:[]},n))}),$ZodLazy=$constructor("$ZodLazy",(e,t)=>{$ZodType.init(e,t),defineLazy(e._zod,"innerType",()=>t.getter()),defineLazy(e._zod,"pattern",()=>e._zod.innerType._zod.pattern),defineLazy(e._zod,"propValues",()=>e._zod.innerType._zod.propValues),defineLazy(e._zod,"optin",()=>e._zod.innerType._zod.optin??void 0),defineLazy(e._zod,"optout",()=>e._zod.innerType._zod.optout??void 0),e._zod.parse=(t,n)=>e._zod.innerType._zod.run(t,n)}),$ZodCustom=$constructor("$ZodCustom",(e,t)=>{$ZodCheck.init(e,t),$ZodType.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>handleRefineResult(t,n,r,e));handleRefineResult(i,n,r,e)}});function handleRefineResult(e,t,n,r){if(!e){let e={code:"custom",input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(util_issue(e))}}const en_parsedType=e=>{let t=typeof e;switch(t){case"number":return Number.isNaN(e)?"NaN":"number";case"object":if(Array.isArray(e))return"array";if(null===e)return"null";if(Object.getPrototypeOf(e)!==Object.prototype&&e.constructor)return e.constructor.name}return t},en_error=()=>{let e={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"}};function t(t){return e[t]??null}let n={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"};return e=>{switch(e.code){case"invalid_type":return`Invalid input: expected ${e.expected}, received ${en_parsedType(e.input)}`;case"invalid_value":if(1===e.values.length)return`Invalid input: expected ${stringifyPrimitive(e.values[0])}`;return`Invalid option: expected one of ${joinValues(e.values,"|")}`;case"too_big":{let n=e.inclusive?"<=":"<",r=t(e.origin);if(r)return`Too big: expected ${e.origin??"value"} to have ${n}${e.maximum.toString()} ${r.unit??"elements"}`;return`Too big: expected ${e.origin??"value"} to be ${n}${e.maximum.toString()}`}case"too_small":{let n=e.inclusive?">=":">",r=t(e.origin);if(r)return`Too small: expected ${e.origin} to have ${n}${e.minimum.toString()} ${r.unit}`;return`Too small: expected ${e.origin} to be ${n}${e.minimum.toString()}`}case"invalid_format":{let t=e;if("starts_with"===t.format)return`Invalid string: must start with "${t.prefix}"`;if("ends_with"===t.format)return`Invalid string: must end with "${t.suffix}"`;if("includes"===t.format)return`Invalid string: must include "${t.includes}"`;if("regex"===t.format)return`Invalid string: must match pattern ${t.pattern}`;return`Invalid ${n[t.format]??e.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${e.divisor}`;case"unrecognized_keys":return`Unrecognized key${e.keys.length>1?"s":""}: ${joinValues(e.keys,", ")}`;case"invalid_key":return`Invalid key in ${e.origin}`;case"invalid_union":default:return"Invalid input";case"invalid_element":return`Invalid value in ${e.origin}`}}};function en(){return{localeError:en_error()}}const zh_CN_error=()=>{let e={string:{unit:"字符",verb:"包含"},file:{unit:"字节",verb:"包含"},array:{unit:"项",verb:"包含"},set:{unit:"项",verb:"包含"}};function t(t){return e[t]??null}let n=e=>{let t=typeof e;switch(t){case"number":return Number.isNaN(e)?"非数字(NaN)":"数字";case"object":if(Array.isArray(e))return"数组";if(null===e)return"空值(null)";if(Object.getPrototypeOf(e)!==Object.prototype&&e.constructor)return e.constructor.name}return t},r={regex:"输入",email:"电子邮件",url:"URL",emoji:"表情符号",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO日期时间",date:"ISO日期",time:"ISO时间",duration:"ISO时长",ipv4:"IPv4地址",ipv6:"IPv6地址",cidrv4:"IPv4网段",cidrv6:"IPv6网段",base64:"base64编码字符串",base64url:"base64url编码字符串",json_string:"JSON字符串",e164:"E.164号码",jwt:"JWT",template_literal:"输入"};return e=>{switch(e.code){case"invalid_type":return`无效输入:期望 ${e.expected},实际接收 ${n(e.input)}`;case"invalid_value":if(1===e.values.length)return`无效输入:期望 ${stringifyPrimitive(e.values[0])}`;return`无效选项:期望以下之一 ${joinValues(e.values,"|")}`;case"too_big":{let n=e.inclusive?"<=":"<",r=t(e.origin);if(r)return`数值过大:期望 ${e.origin??"值"} ${n}${e.maximum.toString()} ${r.unit??"个元素"}`;return`数值过大:期望 ${e.origin??"值"} ${n}${e.maximum.toString()}`}case"too_small":{let n=e.inclusive?">=":">",r=t(e.origin);if(r)return`数值过小:期望 ${e.origin} ${n}${e.minimum.toString()} ${r.unit}`;return`数值过小:期望 ${e.origin} ${n}${e.minimum.toString()}`}case"invalid_format":{let t=e;if("starts_with"===t.format)return`无效字符串:必须以 "${t.prefix}" 开头`;if("ends_with"===t.format)return`无效字符串:必须以 "${t.suffix}" 结尾`;if("includes"===t.format)return`无效字符串:必须包含 "${t.includes}"`;if("regex"===t.format)return`无效字符串:必须满足正则表达式 ${t.pattern}`;return`无效${r[t.format]??e.format}`}case"not_multiple_of":return`无效数字:必须是 ${e.divisor} 的倍数`;case"unrecognized_keys":return`出现未知的键(key): ${joinValues(e.keys,", ")}`;case"invalid_key":return`${e.origin} 中的键(key)无效`;case"invalid_union":return"无效输入";case"invalid_element":return`${e.origin} 中包含无效值(value)`;default:return`无效输入`}}};function zh_CN(){return{localeError:zh_CN_error()}}Symbol("ZodOutput"),Symbol("ZodInput");class $ZodRegistry{constructor(){this._map=new Map,this._idmap=new Map}add(e,...t){let n=t[0];if(this._map.set(e,n),n&&"object"==typeof n&&"id"in n){if(this._idmap.has(n.id))throw Error(`ID ${n.id} already exists in the registry`);this._idmap.set(n.id,e)}return this}clear(){return this._map=new Map,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&"object"==typeof t&&"id"in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}}function registry(){return new $ZodRegistry}const globalRegistry=registry();function _string(e,t){return new e({type:"string",...normalizeParams(t)})}function _coercedString(e,t){return new e({type:"string",coerce:!0,...normalizeParams(t)})}function _email(e,t){return new e({type:"string",format:"email",check:"string_format",abort:!1,...normalizeParams(t)})}function _guid(e,t){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...normalizeParams(t)})}function _uuid(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,...normalizeParams(t)})}function _uuidv4(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...normalizeParams(t)})}function _uuidv6(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...normalizeParams(t)})}function _uuidv7(e,t){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...normalizeParams(t)})}function _url(e,t){return new e({type:"string",format:"url",check:"string_format",abort:!1,...normalizeParams(t)})}function api_emoji(e,t){return new e({type:"string",format:"emoji",check:"string_format",abort:!1,...normalizeParams(t)})}function _nanoid(e,t){return new e({type:"string",format:"nanoid",check:"string_format",abort:!1,...normalizeParams(t)})}function _cuid(e,t){return new e({type:"string",format:"cuid",check:"string_format",abort:!1,...normalizeParams(t)})}function _cuid2(e,t){return new e({type:"string",format:"cuid2",check:"string_format",abort:!1,...normalizeParams(t)})}function _ulid(e,t){return new e({type:"string",format:"ulid",check:"string_format",abort:!1,...normalizeParams(t)})}function _xid(e,t){return new e({type:"string",format:"xid",check:"string_format",abort:!1,...normalizeParams(t)})}function _ksuid(e,t){return new e({type:"string",format:"ksuid",check:"string_format",abort:!1,...normalizeParams(t)})}function _ipv4(e,t){return new e({type:"string",format:"ipv4",check:"string_format",abort:!1,...normalizeParams(t)})}function _ipv6(e,t){return new e({type:"string",format:"ipv6",check:"string_format",abort:!1,...normalizeParams(t)})}function _cidrv4(e,t){return new e({type:"string",format:"cidrv4",check:"string_format",abort:!1,...normalizeParams(t)})}function _cidrv6(e,t){return new e({type:"string",format:"cidrv6",check:"string_format",abort:!1,...normalizeParams(t)})}function _base64(e,t){return new e({type:"string",format:"base64",check:"string_format",abort:!1,...normalizeParams(t)})}function _base64url(e,t){return new e({type:"string",format:"base64url",check:"string_format",abort:!1,...normalizeParams(t)})}function _e164(e,t){return new e({type:"string",format:"e164",check:"string_format",abort:!1,...normalizeParams(t)})}function _jwt(e,t){return new e({type:"string",format:"jwt",check:"string_format",abort:!1,...normalizeParams(t)})}function _isoDateTime(e,t){return new e({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...normalizeParams(t)})}function _isoDate(e,t){return new e({type:"string",format:"date",check:"string_format",...normalizeParams(t)})}function _isoTime(e,t){return new e({type:"string",format:"time",check:"string_format",precision:null,...normalizeParams(t)})}function _isoDuration(e,t){return new e({type:"string",format:"duration",check:"string_format",...normalizeParams(t)})}function _number(e,t){return new e({type:"number",checks:[],...normalizeParams(t)})}function _coercedNumber(e,t){return new e({type:"number",coerce:!0,checks:[],...normalizeParams(t)})}function _int(e,t){return new e({type:"number",check:"number_format",abort:!1,format:"safeint",...normalizeParams(t)})}function _boolean(e,t){return new e({type:"boolean",...normalizeParams(t)})}function _any(e){return new e({type:"any"})}function _unknown(e){return new e({type:"unknown"})}function _never(e,t){return new e({type:"never",...normalizeParams(t)})}function _lt(e,t){return new $ZodCheckLessThan({check:"less_than",...normalizeParams(t),value:e,inclusive:!1})}function _lte(e,t){return new $ZodCheckLessThan({check:"less_than",...normalizeParams(t),value:e,inclusive:!0})}function _gt(e,t){return new $ZodCheckGreaterThan({check:"greater_than",...normalizeParams(t),value:e,inclusive:!1})}function _gte(e,t){return new $ZodCheckGreaterThan({check:"greater_than",...normalizeParams(t),value:e,inclusive:!0})}function _multipleOf(e,t){return new $ZodCheckMultipleOf({check:"multiple_of",...normalizeParams(t),value:e})}function _maxLength(e,t){return new $ZodCheckMaxLength({check:"max_length",...normalizeParams(t),maximum:e})}function _minLength(e,t){return new $ZodCheckMinLength({check:"min_length",...normalizeParams(t),minimum:e})}function _length(e,t){return new $ZodCheckLengthEquals({check:"length_equals",...normalizeParams(t),length:e})}function _regex(e,t){return new $ZodCheckRegex({check:"string_format",format:"regex",...normalizeParams(t),pattern:e})}function _lowercase(e){return new $ZodCheckLowerCase({check:"string_format",format:"lowercase",...normalizeParams(e)})}function _uppercase(e){return new $ZodCheckUpperCase({check:"string_format",format:"uppercase",...normalizeParams(e)})}function _includes(e,t){return new $ZodCheckIncludes({check:"string_format",format:"includes",...normalizeParams(t),includes:e})}function _startsWith(e,t){return new $ZodCheckStartsWith({check:"string_format",format:"starts_with",...normalizeParams(t),prefix:e})}function _endsWith(e,t){return new $ZodCheckEndsWith({check:"string_format",format:"ends_with",...normalizeParams(t),suffix:e})}function _overwrite(e){return new $ZodCheckOverwrite({check:"overwrite",tx:e})}function _normalize(e){return _overwrite(t=>t.normalize(e))}function _trim(){return _overwrite(e=>e.trim())}function _toLowerCase(){return _overwrite(e=>e.toLowerCase())}function _toUpperCase(){return _overwrite(e=>e.toUpperCase())}function _array(e,t,n){return new e({type:"array",element:t,...normalizeParams(n)})}function _refine(e,t,n){return new e({type:"custom",check:"custom",fn:t,...normalizeParams(n)})}function _superRefine(e){let t=_check(n=>(n.addIssue=e=>{if("string"==typeof e)n.issues.push(util_issue(e,n.value,t._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??(r.code="custom"),r.input??(r.input=n.value),r.inst??(r.inst=t),r.continue??(r.continue=!t._zod.def.abort),n.issues.push(util_issue(r))}},e(n.value,n)));return t}function _check(e,t){let n=new $ZodCheck({check:"custom",...normalizeParams(t)});return n._zod.check=e,n}function _stringbool(e,t){let n=normalizeParams(t),r=n.truthy??["true","1","yes","on","y","enabled"],i=n.falsy??["false","0","no","off","n","disabled"];"sensitive"!==n.case&&(r=r.map(e=>"string"==typeof e?e.toLowerCase():e),i=i.map(e=>"string"==typeof e?e.toLowerCase():e));let o=new Set(r),a=new Set(i),s=e.Pipe??$ZodPipe,u=e.Boolean??$ZodBoolean,l=e.String??$ZodString,c=new(e.Transform??$ZodTransform)({type:"transform",transform:(e,t)=>{let r=e;return"sensitive"!==n.case&&(r=r.toLowerCase()),!!o.has(r)||!a.has(r)&&(t.issues.push({code:"invalid_value",expected:"stringbool",values:[...o,...a],input:t.value,inst:c,continue:!1}),{})},error:n.error}),d=new s({type:"pipe",in:new l({type:"string",error:n.error}),out:c,error:n.error});return new s({type:"pipe",in:d,out:new u({type:"boolean",error:n.error}),error:n.error})}const ZodISODateTime=$constructor("ZodISODateTime",(e,t)=>{$ZodISODateTime.init(e,t),ZodStringFormat.init(e,t)});function iso_datetime(e){return _isoDateTime(ZodISODateTime,e)}const ZodISODate=$constructor("ZodISODate",(e,t)=>{$ZodISODate.init(e,t),ZodStringFormat.init(e,t)});function iso_date(e){return _isoDate(ZodISODate,e)}const ZodISOTime=$constructor("ZodISOTime",(e,t)=>{$ZodISOTime.init(e,t),ZodStringFormat.init(e,t)});function iso_time(e){return _isoTime(ZodISOTime,e)}const ZodISODuration=$constructor("ZodISODuration",(e,t)=>{$ZodISODuration.init(e,t),ZodStringFormat.init(e,t)});function iso_duration(e){return _isoDuration(ZodISODuration,e)}const classic_errors_initializer=(e,t)=>{$ZodError.init(e,t),e.name="ZodError",Object.defineProperties(e,{format:{value:t=>formatError(e,t)},flatten:{value:t=>flattenError(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,jsonStringifyReplacer,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,jsonStringifyReplacer,2)}},isEmpty:{get:()=>0===e.issues.length}})};$constructor("ZodError",classic_errors_initializer);const ZodRealError=$constructor("ZodError",classic_errors_initializer,{Parent:Error}),parse_parse=_parse(ZodRealError),parse_parseAsync=_parseAsync(ZodRealError),parse_safeParse=_safeParse(ZodRealError),parse_safeParseAsync=_safeParseAsync(ZodRealError),ZodType=$constructor("ZodType",(e,t)=>($ZodType.init(e,t),e.def=t,Object.defineProperty(e,"_def",{value:t}),e.check=(...n)=>e.clone({...t,checks:[...t.checks??[],...n.map(e=>"function"==typeof e?{_zod:{check:e,def:{check:"custom"},onattach:[]}}:e)]}),e.clone=(t,n)=>clone(e,t,n),e.brand=()=>e,e.register=(t,n)=>(t.add(e,n),e),e.parse=(t,n)=>parse_parse(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>parse_safeParse(e,t,n),e.parseAsync=async(t,n)=>parse_parseAsync(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>parse_safeParseAsync(e,t,n),e.spa=e.safeParseAsync,e.refine=(t,n)=>e.check(refine(t,n)),e.superRefine=t=>e.check(superRefine(t)),e.overwrite=t=>e.check(_overwrite(t)),e.optional=()=>optional(e),e.nullable=()=>nullable(e),e.nullish=()=>optional(nullable(e)),e.nonoptional=t=>nonoptional(e,t),e.array=()=>schemas_array(e),e.or=t=>union([e,t]),e.and=t=>intersection(e,t),e.transform=t=>pipe(e,transform(t)),e.default=t=>schemas_default(e,t),e.prefault=t=>prefault(e,t),e.catch=t=>schemas_catch(e,t),e.pipe=t=>pipe(e,t),e.readonly=()=>readonly(e),e.describe=t=>{let n=e.clone();return globalRegistry.add(n,{description:t}),n},Object.defineProperty(e,"description",{get:()=>globalRegistry.get(e)?.description,configurable:!0}),e.meta=(...t)=>{if(0===t.length)return globalRegistry.get(e);let n=e.clone();return globalRegistry.add(n,t[0]),n},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e)),_ZodString=$constructor("_ZodString",(e,t)=>{$ZodString.init(e,t),ZodType.init(e,t);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,e.regex=(...t)=>e.check(_regex(...t)),e.includes=(...t)=>e.check(_includes(...t)),e.startsWith=(...t)=>e.check(_startsWith(...t)),e.endsWith=(...t)=>e.check(_endsWith(...t)),e.min=(...t)=>e.check(_minLength(...t)),e.max=(...t)=>e.check(_maxLength(...t)),e.length=(...t)=>e.check(_length(...t)),e.nonempty=(...t)=>e.check(_minLength(1,...t)),e.lowercase=t=>e.check(_lowercase(t)),e.uppercase=t=>e.check(_uppercase(t)),e.trim=()=>e.check(_trim()),e.normalize=(...t)=>e.check(_normalize(...t)),e.toLowerCase=()=>e.check(_toLowerCase()),e.toUpperCase=()=>e.check(_toUpperCase())}),ZodString=$constructor("ZodString",(e,t)=>{$ZodString.init(e,t),_ZodString.init(e,t),e.email=t=>e.check(_email(ZodEmail,t)),e.url=t=>e.check(_url(ZodURL,t)),e.jwt=t=>e.check(_jwt(ZodJWT,t)),e.emoji=t=>e.check(api_emoji(ZodEmoji,t)),e.guid=t=>e.check(_guid(ZodGUID,t)),e.uuid=t=>e.check(_uuid(ZodUUID,t)),e.uuidv4=t=>e.check(_uuidv4(ZodUUID,t)),e.uuidv6=t=>e.check(_uuidv6(ZodUUID,t)),e.uuidv7=t=>e.check(_uuidv7(ZodUUID,t)),e.nanoid=t=>e.check(_nanoid(ZodNanoID,t)),e.guid=t=>e.check(_guid(ZodGUID,t)),e.cuid=t=>e.check(_cuid(ZodCUID,t)),e.cuid2=t=>e.check(_cuid2(ZodCUID2,t)),e.ulid=t=>e.check(_ulid(ZodULID,t)),e.base64=t=>e.check(_base64(ZodBase64,t)),e.base64url=t=>e.check(_base64url(ZodBase64URL,t)),e.xid=t=>e.check(_xid(ZodXID,t)),e.ksuid=t=>e.check(_ksuid(ZodKSUID,t)),e.ipv4=t=>e.check(_ipv4(ZodIPv4,t)),e.ipv6=t=>e.check(_ipv6(ZodIPv6,t)),e.cidrv4=t=>e.check(_cidrv4(ZodCIDRv4,t)),e.cidrv6=t=>e.check(_cidrv6(ZodCIDRv6,t)),e.e164=t=>e.check(_e164(ZodE164,t)),e.datetime=t=>e.check(iso_datetime(t)),e.date=t=>e.check(iso_date(t)),e.time=t=>e.check(iso_time(t)),e.duration=t=>e.check(iso_duration(t))});function schemas_string(e){return _string(ZodString,e)}const ZodStringFormat=$constructor("ZodStringFormat",(e,t)=>{$ZodStringFormat.init(e,t),_ZodString.init(e,t)}),ZodEmail=$constructor("ZodEmail",(e,t)=>{$ZodEmail.init(e,t),ZodStringFormat.init(e,t)}),ZodGUID=$constructor("ZodGUID",(e,t)=>{$ZodGUID.init(e,t),ZodStringFormat.init(e,t)}),ZodUUID=$constructor("ZodUUID",(e,t)=>{$ZodUUID.init(e,t),ZodStringFormat.init(e,t)}),ZodURL=$constructor("ZodURL",(e,t)=>{$ZodURL.init(e,t),ZodStringFormat.init(e,t)}),ZodEmoji=$constructor("ZodEmoji",(e,t)=>{$ZodEmoji.init(e,t),ZodStringFormat.init(e,t)}),ZodNanoID=$constructor("ZodNanoID",(e,t)=>{$ZodNanoID.init(e,t),ZodStringFormat.init(e,t)}),ZodCUID=$constructor("ZodCUID",(e,t)=>{$ZodCUID.init(e,t),ZodStringFormat.init(e,t)}),ZodCUID2=$constructor("ZodCUID2",(e,t)=>{$ZodCUID2.init(e,t),ZodStringFormat.init(e,t)}),ZodULID=$constructor("ZodULID",(e,t)=>{$ZodULID.init(e,t),ZodStringFormat.init(e,t)}),ZodXID=$constructor("ZodXID",(e,t)=>{$ZodXID.init(e,t),ZodStringFormat.init(e,t)}),ZodKSUID=$constructor("ZodKSUID",(e,t)=>{$ZodKSUID.init(e,t),ZodStringFormat.init(e,t)}),ZodIPv4=$constructor("ZodIPv4",(e,t)=>{$ZodIPv4.init(e,t),ZodStringFormat.init(e,t)}),ZodIPv6=$constructor("ZodIPv6",(e,t)=>{$ZodIPv6.init(e,t),ZodStringFormat.init(e,t)}),ZodCIDRv4=$constructor("ZodCIDRv4",(e,t)=>{$ZodCIDRv4.init(e,t),ZodStringFormat.init(e,t)}),ZodCIDRv6=$constructor("ZodCIDRv6",(e,t)=>{$ZodCIDRv6.init(e,t),ZodStringFormat.init(e,t)}),ZodBase64=$constructor("ZodBase64",(e,t)=>{$ZodBase64.init(e,t),ZodStringFormat.init(e,t)}),ZodBase64URL=$constructor("ZodBase64URL",(e,t)=>{$ZodBase64URL.init(e,t),ZodStringFormat.init(e,t)}),ZodE164=$constructor("ZodE164",(e,t)=>{$ZodE164.init(e,t),ZodStringFormat.init(e,t)}),ZodJWT=$constructor("ZodJWT",(e,t)=>{$ZodJWT.init(e,t),ZodStringFormat.init(e,t)}),ZodNumber=$constructor("ZodNumber",(e,t)=>{$ZodNumber.init(e,t),ZodType.init(e,t),e.gt=(t,n)=>e.check(_gt(t,n)),e.gte=(t,n)=>e.check(_gte(t,n)),e.min=(t,n)=>e.check(_gte(t,n)),e.lt=(t,n)=>e.check(_lt(t,n)),e.lte=(t,n)=>e.check(_lte(t,n)),e.max=(t,n)=>e.check(_lte(t,n)),e.int=t=>e.check(schemas_int(t)),e.safe=t=>e.check(schemas_int(t)),e.positive=t=>e.check(_gt(0,t)),e.nonnegative=t=>e.check(_gte(0,t)),e.negative=t=>e.check(_lt(0,t)),e.nonpositive=t=>e.check(_lte(0,t)),e.multipleOf=(t,n)=>e.check(_multipleOf(t,n)),e.step=(t,n)=>e.check(_multipleOf(t,n)),e.finite=()=>e;let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??"").includes("int")||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function schemas_number(e){return _number(ZodNumber,e)}const ZodNumberFormat=$constructor("ZodNumberFormat",(e,t)=>{$ZodNumberFormat.init(e,t),ZodNumber.init(e,t)});function schemas_int(e){return _int(ZodNumberFormat,e)}const ZodBoolean=$constructor("ZodBoolean",(e,t)=>{$ZodBoolean.init(e,t),ZodType.init(e,t)});function schemas_boolean(e){return _boolean(ZodBoolean,e)}const ZodBigInt=$constructor("ZodBigInt",(e,t)=>{$ZodBigInt.init(e,t),ZodType.init(e,t),e.gte=(t,n)=>e.check(_gte(t,n)),e.min=(t,n)=>e.check(_gte(t,n)),e.gt=(t,n)=>e.check(_gt(t,n)),e.gte=(t,n)=>e.check(_gte(t,n)),e.min=(t,n)=>e.check(_gte(t,n)),e.lt=(t,n)=>e.check(_lt(t,n)),e.lte=(t,n)=>e.check(_lte(t,n)),e.max=(t,n)=>e.check(_lte(t,n)),e.positive=t=>e.check(_gt(BigInt(0),t)),e.negative=t=>e.check(_lt(BigInt(0),t)),e.nonpositive=t=>e.check(_lte(BigInt(0),t)),e.nonnegative=t=>e.check(_gte(BigInt(0),t)),e.multipleOf=(t,n)=>e.check(_multipleOf(t,n));let n=e._zod.bag;e.minValue=n.minimum??null,e.maxValue=n.maximum??null,e.format=n.format??null}),ZodAny=$constructor("ZodAny",(e,t)=>{$ZodAny.init(e,t),ZodType.init(e,t)});function any(){return _any(ZodAny)}const ZodUnknown=$constructor("ZodUnknown",(e,t)=>{$ZodUnknown.init(e,t),ZodType.init(e,t)});function unknown(){return _unknown(ZodUnknown)}const ZodNever=$constructor("ZodNever",(e,t)=>{$ZodNever.init(e,t),ZodType.init(e,t)});function never(e){return _never(ZodNever,e)}const ZodArray=$constructor("ZodArray",(e,t)=>{$ZodArray.init(e,t),ZodType.init(e,t),e.element=t.element,e.min=(t,n)=>e.check(_minLength(t,n)),e.nonempty=t=>e.check(_minLength(1,t)),e.max=(t,n)=>e.check(_maxLength(t,n)),e.length=(t,n)=>e.check(_length(t,n)),e.unwrap=()=>e.element});function schemas_array(e,t){return _array(ZodArray,e,t)}const ZodObject=$constructor("ZodObject",(e,t)=>{$ZodObject.init(e,t),ZodType.init(e,t),defineLazy(e,"shape",()=>t.shape),e.keyof=()=>schemas_enum(Object.keys(e._zod.def.shape)),e.catchall=t=>e.clone({...e._zod.def,catchall:t}),e.passthrough=()=>e.clone({...e._zod.def,catchall:unknown()}),e.loose=()=>e.clone({...e._zod.def,catchall:unknown()}),e.strict=()=>e.clone({...e._zod.def,catchall:never()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=t=>extend(e,t),e.merge=t=>merge(e,t),e.pick=t=>pick(e,t),e.omit=t=>omit(e,t),e.partial=(...t)=>partial(ZodOptional,e,t[0]),e.required=(...t)=>required(ZodNonOptional,e,t[0])});function schemas_object(e,t){return new ZodObject({type:"object",get shape(){return assignProp(this,"shape",e?objectClone(e):{}),this.shape},...normalizeParams(t)})}function looseObject(e,t){return new ZodObject({type:"object",get shape(){return assignProp(this,"shape",objectClone(e)),this.shape},catchall:unknown(),...normalizeParams(t)})}const ZodUnion=$constructor("ZodUnion",(e,t)=>{$ZodUnion.init(e,t),ZodType.init(e,t),e.options=t.options});function union(e,t){return new ZodUnion({type:"union",options:e,...normalizeParams(t)})}const ZodIntersection=$constructor("ZodIntersection",(e,t)=>{$ZodIntersection.init(e,t),ZodType.init(e,t)});function intersection(e,t){return new ZodIntersection({type:"intersection",left:e,right:t})}const ZodRecord=$constructor("ZodRecord",(e,t)=>{$ZodRecord.init(e,t),ZodType.init(e,t),e.keyType=t.keyType,e.valueType=t.valueType});function record(e,t,n){return new ZodRecord({type:"record",keyType:e,valueType:t,...normalizeParams(n)})}const ZodEnum=$constructor("ZodEnum",(e,t)=>{$ZodEnum.init(e,t),ZodType.init(e,t),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new ZodEnum({...t,checks:[],...normalizeParams(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new ZodEnum({...t,checks:[],...normalizeParams(r),entries:i})}});function schemas_enum(e,t){return new ZodEnum({type:"enum",entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...normalizeParams(t)})}const ZodLiteral=$constructor("ZodLiteral",(e,t)=>{$ZodLiteral.init(e,t),ZodType.init(e,t),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function literal(e,t){return new ZodLiteral({type:"literal",values:Array.isArray(e)?e:[e],...normalizeParams(t)})}const ZodTransform=$constructor("ZodTransform",(e,t)=>{$ZodTransform.init(e,t),ZodType.init(e,t),e._zod.parse=(n,r)=>{n.addIssue=r=>{if("string"==typeof r)n.issues.push(util_issue(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??(t.code="custom"),t.input??(t.input=n.value),t.inst??(t.inst=e),n.issues.push(util_issue(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function transform(e){return new ZodTransform({type:"transform",transform:e})}const ZodOptional=$constructor("ZodOptional",(e,t)=>{$ZodOptional.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function optional(e){return new ZodOptional({type:"optional",innerType:e})}const ZodNullable=$constructor("ZodNullable",(e,t)=>{$ZodNullable.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function nullable(e){return new ZodNullable({type:"nullable",innerType:e})}const ZodDefault=$constructor("ZodDefault",(e,t)=>{$ZodDefault.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function schemas_default(e,t){return new ZodDefault({type:"default",innerType:e,get defaultValue(){return"function"==typeof t?t():shallowClone(t)}})}const ZodPrefault=$constructor("ZodPrefault",(e,t)=>{$ZodPrefault.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function prefault(e,t){return new ZodPrefault({type:"prefault",innerType:e,get defaultValue(){return"function"==typeof t?t():shallowClone(t)}})}const ZodNonOptional=$constructor("ZodNonOptional",(e,t)=>{$ZodNonOptional.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function nonoptional(e,t){return new ZodNonOptional({type:"nonoptional",innerType:e,...normalizeParams(t)})}const ZodCatch=$constructor("ZodCatch",(e,t)=>{$ZodCatch.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function schemas_catch(e,t){return new ZodCatch({type:"catch",innerType:e,catchValue:"function"==typeof t?t:()=>t})}const ZodPipe=$constructor("ZodPipe",(e,t)=>{$ZodPipe.init(e,t),ZodType.init(e,t),e.in=t.in,e.out=t.out});function pipe(e,t){return new ZodPipe({type:"pipe",in:e,out:t})}const ZodReadonly=$constructor("ZodReadonly",(e,t)=>{$ZodReadonly.init(e,t),ZodType.init(e,t),e.unwrap=()=>e._zod.def.innerType});function readonly(e){return new ZodReadonly({type:"readonly",innerType:e})}const ZodCustom=$constructor("ZodCustom",(e,t)=>{$ZodCustom.init(e,t),ZodType.init(e,t)});function refine(e,t={}){return _refine(ZodCustom,e,t)}function superRefine(e){return _superRefine(e)}const stringbool=(...e)=>_stringbool({Pipe:ZodPipe,Boolean:ZodBoolean,String:ZodString,Transform:ZodTransform},...e);function preprocess(e,t){return pipe(transform(e),t)}function coerce_string(e){return _coercedString(ZodString,e)}function coerce_number(e){return _coercedNumber(ZodNumber,e)}compat_ZodFirstPartyTypeKind||(compat_ZodFirstPartyTypeKind={}),core_config(en()),core_config(zh_CN());var constants_MediaType=function(e){return e.Movie="movie",e.TV="tv",e}({});const DEFAULT_COLOR_HEX="ffffff",DEFAULT_COLOR_INT=parseInt(DEFAULT_COLOR_HEX,16),PROVIDER_NAMES={tencent:"腾讯视频",iqiyi:"爱奇艺",youku:"优酷视频",bilibili:"哔哩哔哩",renren:"人人视频",mgtv:"芒果 TV"},searchDanmuParamsSchema=schemas_object({tmdbId:coerce_string().optional(),type:schemas_enum(["movie","tv"]).transform(e=>e).catch("movie"),title:coerce_string().optional(),seriesName:coerce_string().optional(),season:coerce_number().optional(),airDate:coerce_string().optional(),episode:coerce_number().optional(),fuzzyMatch:schemas_enum(["always","never","auto"]).catch("auto").optional().default("auto"),qihooSearch:stringbool().catch(!1).optional().default(!1)}),EMPTY_ANIME_CONFIG={ID:"__empty__",TITLE:"\uD83D\uDE2D 未匹配到资源"};var enc_base64=__webpack_require__(716),enc_base64_default=__webpack_require__.n(enc_base64);function safeJsonParse(e){try{if(!e)return null;return JSON.parse(e)}catch(e){return null}}function safeJsonParseWithZod(e,t){let n=safeJsonParse(e);if(!n)return null;let{success:r,data:i,error:o}=t.safeParse(n);return r?i:(console.warn(`Failed to parse JSON with Zod: ${e}`,o),null)}function base64ToUint8Array(e){let t=enc_base64_default().parse(e),n=new Uint8Array(t.sigBytes);for(let e=0;e<t.sigBytes;e++){let r=e>>>2,i=e%4;n[e]=t.words[r]>>>24-8*i&255}return n}function generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function _define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const TTL_7_DAYS=6048e5,TTL_1_DAY=864e5,TTL_2_HOURS=72e5,TTL_5_MINUTES=3e5,StorageValue=schemas_object({value:schemas_string(),expiresAt:schemas_number()});class Storage{async get(e){let t=await Widget.storage.get(e);if(!t)return null;let n=safeJsonParseWithZod(t,StorageValue);return n?(null==n?void 0:n.expiresAt)<Date.now()?(console.warn(`Storage value for key: ${e} has expired`),this.remove(e),null):n.value:(console.warn(`Failed to parse storage value for key: ${e}`),this.remove(e),null)}set(e,t,n){var r;let i=null!=(r=null==n?void 0:n.ttl)?r:this.defaultTTL,o=Date.now()+i,a=StorageValue.parse({value:t,expiresAt:o});return Widget.storage.set(e,JSON.stringify(a))}remove(e){return Widget.storage.remove(e)}clear(){return Widget.storage.clear()}async getJson(e){let t=await this.get(e);return t?safeJsonParse(t):null}setJson(e,t,n){return this.set(e,JSON.stringify(t),n)}async cleanup(){try{let e="__storage_last_cleanup__";this.get(e)||(await Widget.storage.keys()).forEach(e=>{this.get(e)}),this.set(e,"1",{ttl:TTL_1_DAY})}catch(e){console.error("Failed to cleanup storage",e)}}constructor(){_define_property(this,"defaultTTL",TTL_5_MINUTES)}}const storage=new Storage,getExternalIdsByTmdbId=async(e,t)=>{let n=null,r=`tmdb:${e}:${t}:external_ids`,i=await storage.getJson(r);return i?n=i:(n=await Widget.tmdb.get(`/${e}/${t}/external_ids`),storage.setJson(r,n,{ttl:TTL_7_DAYS})),n};function omit_omit(e,t){let n={...e};for(let e=0;e<t.length;e++){let r=t[e];delete n[r]}return n}function isUnsafeProperty(e){return"__proto__"===e}function isPlainObject_isPlainObject(e){if(!e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&"[object Object]"===Object.prototype.toString.call(e)}function merge_merge(e,t){let n=Object.keys(t);for(let r=0;r<n.length;r++){let i=n[r];if(isUnsafeProperty(i))continue;let o=t[i],a=e[i];Array.isArray(o)?Array.isArray(a)?e[i]=merge_merge(a,o):e[i]=merge_merge([],o):isPlainObject_isPlainObject(o)?isPlainObject_isPlainObject(a)?e[i]=merge_merge(a,o):e[i]=merge_merge({},o):(void 0===a||void 0!==o)&&(e[i]=o)}return e}var url_parse=__webpack_require__(337),url_parse_default=__webpack_require__.n(url_parse);function fetch_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class HttpStatusError extends Error{constructor(e,t,n,r){super(`HTTP ${e} - Expected: [${t.join(", ")}] - ${n.method} ${n.url}`),fetch_define_property(this,"statusCode",void 0),fetch_define_property(this,"expectedStatus",void 0),fetch_define_property(this,"context",void 0),fetch_define_property(this,"response",void 0),this.statusCode=e,this.expectedStatus=t,this.context=n,this.response=r,this.name="HttpStatusError",console.error(`\u{1F6AB} HTTP Request Failed: ${n.method} ${n.url}`,"Status",e),n.body&&console.error("Request Body:",JSON.stringify(n.body)),n.options&&console.error("Request Options:",omit_omit(n.options,["schema","successStatus"])),console.error("Response:",{headers:r.headers,data:r.data})}}class HttpSchemaError extends Error{constructor(e,t,n){super(`Failed to parse response with schema: ${prettifyError(n)}`),fetch_define_property(this,"context",void 0),fetch_define_property(this,"response",void 0),fetch_define_property(this,"error",void 0),this.context=e,this.response=t,this.error=n,this.name="HttpSchemaError",console.error(`\u{1F6AB} HTTP Request Failed Failed to parse response with schema: ${prettifyError(n)}: ${e.method} ${e.url}`),e.options&&console.error("Request Options:",omit_omit(e.options,["schema","successStatus"])),console.error("Response:",{headers:t.headers,data:t.data})}}class Fetch{setCookie(e){this.cookie=merge_merge(this.cookie,e)}getCookie(e){return this.cookie[e]}setHeaders(e){this.headers=merge_merge(this.headers,e)}async get(e,t){var n,r;null!=t||(t={}),null!=(r=(n=t).headers)||(n.headers={}),t.headers=this.buildHeaders(t.headers);let i=await this.executeRequest("GET",e,t),o={url:e,method:"GET",options:t};return this.handleResponse(i,o,t)}async post(e,t,n){var r,i;null!=n||(n={}),null!=(i=(r=n).headers)||(r.headers={}),n.headers=this.buildHeaders(n.headers);let o=await this.executeRequest("POST",e,t,n),a={url:e,method:"POST",body:t,options:n};return this.handleResponse(o,a,n)}buildHeaders(e){let t=Object.entries(this.cookie).map(e=>{let[t,n]=e;return`${t}=${n}`}).join("; ");return{...this.headers,...t&&{Cookie:t},...e}}createTimeoutPromise(e){return new Promise((t,n)=>{setTimeout(()=>{n(Error(`Request timeout after ${e}ms`))},e)})}async executeRequest(e,t,n,r){var i;let o="GET"===e,a=null!=(i=o?n:r)?i:{},s=this.getCacheConfig(a);if(null==s?void 0:s.cacheKey){let e=await storage.getJson(s.cacheKey);if(e)return console.debug("♻️ fetch cache hit",s.cacheKey),{data:e,statusCode:200,headers:{},fromCache:!0}}let u=o?void 0:n,{timeout:l,schema:c,params:d,...f}=a,h=t;d&&(h=`${t}?${url_parse.qs.stringify(d)}`),console.debug("⬆️ fetch",h,null!=u?u:"",f);let p=o?Widget.http.get(h,f):Widget.http.post(h,u,f);return l&&l>0?Promise.race([p,this.createTimeoutPromise(l)]):p}getCacheConfig(e){return"string"==typeof(null==e?void 0:e.cache)?{cacheKey:e.cache,ttl:void 0}:null==e?void 0:e.cache}constructor(e={},t={}){fetch_define_property(this,"cookie",void 0),fetch_define_property(this,"headers",void 0),fetch_define_property(this,"handleResponse",void 0),this.cookie=e,this.headers=t,this.handleResponse=(e,t,n)=>{var r;if(e.fromCache)return e;if((null==n||null==(r=n.successStatus)?void 0:r.length)&&!n.successStatus.includes(e.statusCode))throw new HttpStatusError(e.statusCode,n.successStatus,t,e);if(null==n?void 0:n.schema){let r=n.schema.safeParse(e.data);if(!r.success)throw new HttpSchemaError(t,e,r.error);e.data=r.data}let i=e.headers["set-cookie"]||e.headers["Set-Cookie"];if(i){let e=i.split(",").reduce((e,t)=>{if(!t)return e;let[n]=t.split(";"),[r,...i]=n.split("=");return r&&i.length>0&&(e[r.trim()]=i.join("=").trim()),e},{});this.setCookie(e)}let o=this.getCacheConfig(n);return(null==o?void 0:o.cacheKey)&&storage.setJson(o.cacheKey,e.data,{ttl:o.ttl}),e}}}const fetch=new Fetch,BASE_URL="https://api.imdbapi.dev",imdb_fetch=new Fetch,episodesRequestSchema=schemas_object({season:coerce_number().optional().default(1),pageSize:coerce_number().optional().default(20),pageToken:schemas_string().optional()}),getImdbEpisodes=async(e,t)=>{let{season:n,pageSize:r,pageToken:i}=episodesRequestSchema.parse(null!=t?t:{});return(await imdb_fetch.get(`${BASE_URL}/titles/${e}/episodes`,{params:{season:n,pageSize:r,pageToken:i},cache:{cacheKey:["imdb","episodes",e,n,r,i].filter(Boolean).join(":")},successStatus:[200],schema:schemas_object({episodes:schemas_array(schemas_object({id:schemas_string(),title:schemas_string().optional(),episodeNumber:schemas_number().optional()})),totalCount:schemas_number(),nextPageToken:schemas_string().optional()})})).data},getImdbSeasons=async e=>(await imdb_fetch.get(`${BASE_URL}/titles/${e}/seasons`,{cache:{cacheKey:["imdb:seasons",e].join(":")},schema:schemas_object({seasons:schemas_array(schemas_object({season:schemas_string(),episodeCount:schemas_number().optional()}))})})).data,DOUBAN_API_KEY="0ac44ae016490db2204ce0a042db2916",doubanImdbResponseSchema=schemas_object({id:schemas_string(),title:schemas_string().optional()}),getDoubanInfoByImdbId=async(e,t)=>{var n,r,i,o,a,s;let u=e;if(t&&"1"!==t.toString()){let n=await getImdbSeasons(e);if(!n||parseInt(t.toString())>n.seasons.length)return null;let r=await getImdbEpisodes(e,{season:t});u=null!=(a=null==r||null==(o=r.episodes.find(e=>1===e.episodeNumber))?void 0:o.id)?a:""}u||(u=e),console.log("Get douban info by imdb id",u);let l=await fetch.post(`https://api.douban.com/v2/movie/imdb/${u}`,{apikey:DOUBAN_API_KEY},{headers:{"Content-Type":"application/json"},schema:doubanImdbResponseSchema,cache:{cacheKey:`douban:imdb:${u}`,ttl:TTL_7_DAYS}});if(200!==l.statusCode)throw Error(`Failed to get Douban info: ${l.statusCode}, ${JSON.stringify(l.data)}`);let c=null==(i=l.data)||null==(r=i.id)||null==(n=r.split("/"))?void 0:n.pop();if(!c)throw Error(`Failed to extract Douban ID from response: ${null==(s=l.data)?void 0:s.id}`);return/\d+/.test(c)?{doubanId:c,originResponse:l.data}:null};function compact(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];r&&t.push(r)}return t}const doubanSubjectItemSchema=schemas_object({type_name:schemas_string(),target_type:schemas_string(),target_id:schemas_string(),target:schemas_object({title:schemas_string(),has_linewatch:schemas_boolean().refine(e=>e)})}),doubanSearchResponseSchema=schemas_object({subjects:schemas_object({items:schemas_array(unknown().transform(e=>{var t;return null!=(t=doubanSubjectItemSchema.safeParse(e).data)?t:null})).transform(e=>compact(e))})}),searchDoubanInfoByName=async e=>{var t,n;return e&&null!=(n=null==(t=(await fetch.get("https://m.douban.com/rexxar/api/v2/search",{params:{q:e,start:0,count:20,type:"movie"},headers:{Referer:"https://m.douban.com/movie/","Content-Type":"application/json"},schema:doubanSearchResponseSchema,cache:{cacheKey:["douban","search",e].filter(Boolean).join(":")}})).data)?void 0:t.subjects.items)?n:[]},getDoubanIds=async e=>{let t=new Set,{tmdbId:n,type:r,seriesName:i,season:o,fuzzyMatch:a}=searchDanmuParamsSchema.parse(e);try{let e=await getDoubanInfoByTmdbId(r,n,o);(null==e?void 0:e.doubanId)&&t.add(e.doubanId)}catch(e){console.error("Error getting douban info by tmdb id",e)}if("always"===a||"auto"===a&&!t.size)try{let e=i;for(let n of(o&&parseInt(o.toString())>1&&(e+=o.toString()),await searchDoubanInfoByName(e)))t.add(n.target_id)}catch(e){console.error("Error searching douban info by name",e)}return Array.from(t)},getDoubanInfoByTmdbId=async(e,t,n)=>{if(!t)return null;let r=await getExternalIdsByTmdbId(e,t);return(console.log("Get external ids by tmdb id",r),r.imdb_id)?getDoubanInfoByImdbId(r.imdb_id,n):null},doubanInfoResponseSchema=schemas_object({is_tv:schemas_boolean().optional(),vendors:schemas_array(schemas_object({id:schemas_string(),is_ad:schemas_boolean().optional(),uri:schemas_string()}))}),getVideoPlatformInfoByDoubanId=async e=>{var t,n,r;let i=await fetch.get(`https://m.douban.com/rexxar/api/v2/movie/${e}?for_mobile=1`,{headers:{Referer:`https://m.douban.com/movie/subject/${e}/?dt_dapp=1`,"Content-Type":"application/json"},schema:doubanInfoResponseSchema,cache:{cacheKey:`douban:${e}:info`,ttl:TTL_7_DAYS}});if(200!==i.statusCode)throw Error(`Failed to get video platform info: ${i.statusCode}, ${JSON.stringify(i.data)}`);let o={mediaType:(null==(t=i.data)?void 0:t.is_tv)?constants_MediaType.TV:constants_MediaType.Movie,providers:{}};for(let e of null!=(r=null==(n=i.data)?void 0:n.vendors)?r:[]){if(e.is_ad)continue;let t=url_parse_default()(e.uri,!0);switch(e.id){case"qq":{let{cid:e,vid:n}=t.query;e&&(o.providers.tencent={cid:e,vid:n});break}case"iqiyi":{let{tvid:e}=t.query;e&&(o.providers.iqiyi={entityId:e});break}case"youku":{let{showid:e,vid:n}=t.query;(e||n)&&(o.providers.youku={showId:e,vid:n});break}case"bilibili":{let e=t.pathname.split("/").pop();e&&/\d+/.test(e)&&(o.providers.bilibili={seasonId:e})}}}return o};function keyBy(e,t){let n={};for(let r=0;r<e.length;r++){let i=e[r];n[t(i)]=i}return n}function compareValues(e,t,n){return e<t?"asc"===n?-1:1:e>t?"asc"===n?1:-1:0}function orderBy(e,t,n){return e.slice().sort((e,r)=>{let i=n.length;for(let o=0;o<t.length;o++){let a=i>o?n[o]:n[i-1],s=t[o],u="function"==typeof s,l=compareValues(u?s(e):e[s],u?s(r):r[s],a);if(0!==l)return l}return 0})}function sortBy(e,t){return orderBy(e,t,["asc"])}function uniqWith(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r];n.every(e=>!t(e,i))&&n.push(i)}return n}function getSymbols(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function getTag(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const regexpTag="[object RegExp]",stringTag="[object String]",numberTag="[object Number]",booleanTag="[object Boolean]",argumentsTag="[object Arguments]",symbolTag="[object Symbol]",dateTag="[object Date]",mapTag="[object Map]",setTag="[object Set]",arrayTag="[object Array]",functionTag="[object Function]",arrayBufferTag="[object ArrayBuffer]",objectTag="[object Object]",errorTag="[object Error]",dataViewTag="[object DataView]",uint8ArrayTag="[object Uint8Array]",uint8ClampedArrayTag="[object Uint8ClampedArray]",uint16ArrayTag="[object Uint16Array]",uint32ArrayTag="[object Uint32Array]",bigUint64ArrayTag="[object BigUint64Array]",int8ArrayTag="[object Int8Array]",int16ArrayTag="[object Int16Array]",int32ArrayTag="[object Int32Array]",bigInt64ArrayTag="[object BigInt64Array]",float32ArrayTag="[object Float32Array]",float64ArrayTag="[object Float64Array]";function eq(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function isEqualWith(e,t,n){return isEqualWithImpl(e,t,void 0,void 0,void 0,void 0,n)}function isEqualWithImpl(e,t,n,r,i,o,a){let s=a(e,t,n,r,i,o);if(void 0!==s)return s;if(typeof e==typeof t)switch(typeof e){case"bigint":case"string":case"boolean":case"symbol":case"undefined":case"function":return e===t;case"number":return e===t||Object.is(e,t)}return areObjectsEqual(e,t,o,a)}function areObjectsEqual(e,t,n,r){if(Object.is(e,t))return!0;let i=getTag(e),o=getTag(t);if(i===argumentsTag&&(i=objectTag),o===argumentsTag&&(o=objectTag),i!==o)return!1;switch(i){case stringTag:return e.toString()===t.toString();case numberTag:return eq(e.valueOf(),t.valueOf());case booleanTag:case dateTag:case symbolTag:return Object.is(e.valueOf(),t.valueOf());case regexpTag:return e.source===t.source&&e.flags===t.flags;case functionTag:return e===t}let a=(n=n??new Map).get(e),s=n.get(t);if(null!=a&&null!=s)return a===t;n.set(e,t),n.set(t,e);try{switch(i){case mapTag:if(e.size!==t.size)return!1;for(let[i,o]of e.entries())if(!t.has(i)||!isEqualWithImpl(o,t.get(i),i,e,t,n,r))return!1;return!0;case setTag:{if(e.size!==t.size)return!1;let i=Array.from(e.values()),o=Array.from(t.values());for(let a=0;a<i.length;a++){let s=i[a],u=o.findIndex(i=>isEqualWithImpl(s,i,void 0,e,t,n,r));if(-1===u)return!1;o.splice(u,1)}return!0}case arrayTag:case uint8ArrayTag:case uint8ClampedArrayTag:case uint16ArrayTag:case uint32ArrayTag:case bigUint64ArrayTag:case int8ArrayTag:case int16ArrayTag:case int32ArrayTag:case bigInt64ArrayTag:case float32ArrayTag:case float64ArrayTag:if("undefined"!=typeof Buffer&&Buffer.isBuffer(e)!==Buffer.isBuffer(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!isEqualWithImpl(e[i],t[i],i,e,t,n,r))return!1;return!0;case arrayBufferTag:if(e.byteLength!==t.byteLength)return!1;return areObjectsEqual(new Uint8Array(e),new Uint8Array(t),n,r);case dataViewTag:if(e.byteLength!==t.byteLength||e.byteOffset!==t.byteOffset)return!1;return areObjectsEqual(new Uint8Array(e),new Uint8Array(t),n,r);case errorTag:return e.name===t.name&&e.message===t.message;case objectTag:{if(!(areObjectsEqual(e.constructor,t.constructor,n,r)||isPlainObject_isPlainObject(e)&&isPlainObject_isPlainObject(t)))return!1;let i=[...Object.keys(e),...getSymbols(e)],o=[...Object.keys(t),...getSymbols(t)];if(i.length!==o.length)return!1;for(let o=0;o<i.length;o++){let a=i[o],s=e[a];if(!Object.hasOwn(t,a))return!1;let u=t[a];if(!isEqualWithImpl(s,u,a,e,t,n,r))return!1}return!0}default:return!1}}finally{n.delete(e),n.delete(t)}}function noop(){}function isEqual(e,t){return isEqualWith(e,t,noop)}const BASE_API="https://api.so.360kan.com",qihooSearchResponseSchema=schemas_object({data:schemas_object({longData:schemas_object({rows:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({cat_id:schemas_enum(["1","2","3","4"]),id:schemas_string(),en_id:schemas_string(),cat_name:schemas_string(),titleTxt:schemas_string(),playlinks:record(schemas_string(),schemas_string()).optional()}).safeParse(e).data)?t:null})).transform(e=>compact(e))})})}).transform(e=>e.data.longData.rows),searchVideoPlatformInfoWith360kan=async e=>{var t,n,r,i,o;let{success:a,data:s,error:u}=searchDanmuParamsSchema.safeParse(e);if(!a)return console.error("[360] 搜索参数无效,错误:",prettifyError(u)),[];let{seriesName:l,season:c,type:d,episode:f}=s;if(!l)return[];let h=await fetch.get(`${BASE_API}/index`,{params:{force_v:"1",kw:`${l} ${c&&c>1?c:""}`.trim(),from:"",pageno:"1",v_ap:"1",tab:"all"},schema:qihooSearchResponseSchema});if(!(null==(t=h.data)?void 0:t.length))return[];let p=[];for(let e of h.data){if(d===constants_MediaType.Movie&&"1"!==e.cat_id){console.warn("[360] 电影搜索结果中包含电视剧,跳过");continue}if(d===constants_MediaType.TV&&"1"===e.cat_id){console.warn("[360] 电视剧搜索结果中包含电影,跳过");continue}if(!e.titleTxt.includes(l)){console.warn("[360] 搜索结果中包含的剧集标题与搜索关键词不匹配,跳过");continue}if(!e.playlinks){console.warn("[360] 搜索结果中包含的剧集没有播放链接,跳过");continue}if(e.playlinks.qq){let t=null==(n=e.playlinks.qq.match(/\/cover\/([^/]+?)(\/|.html|$)/))?void 0:n[1];t&&p.push({provider:"tencent",idString:scrapers_scraper.scraperMap.tencent.generateIdString({cid:t}),episodeNumber:f})}if(e.playlinks.youku){let{vid:t,showid:n}=url_parse_default()(e.playlinks.youku,!0).query;(t||n)&&p.push({provider:"youku",idString:scrapers_scraper.scraperMap.youku.generateIdString({vid:t,showId:n}),episodeNumber:f})}if(e.playlinks.qiyi){let t=null==(r=e.playlinks.qiyi.match(/\/v_([^/]+?)(\/|.html|$)/))?void 0:r[1],n=t?scrapers_scraper.scraperMap.iqiyi.videoIdToEntityId(t):void 0;n&&p.push({provider:"iqiyi",idString:scrapers_scraper.scraperMap.iqiyi.generateIdString({entityId:n}),episodeNumber:f})}if(e.playlinks.bilibili1){let t=null==(i=(await fetch.get(e.playlinks.bilibili1,{cache:e.playlinks.bilibili1})).data.match(/"season_id":(\d+)/))?void 0:i[1];t&&p.push({provider:"bilibili",idString:scrapers_scraper.scraperMap.bilibili.generateIdString({seasonId:t}),episodeNumber:f})}if(e.playlinks.imgo){let t=null==(o=e.playlinks.imgo.match(/\/b\/([^/]+)\//))?void 0:o[1];t&&p.push({provider:"mgtv",idString:scrapers_scraper.scraperMap.mgtv.generateIdString({dramaId:t}),episodeNumber:f})}}return p};function isDeepKey(e){switch(typeof e){case"number":case"symbol":return!1;case"string":return e.includes(".")||e.includes("[")||e.includes("]")}}function toKey(e){return"string"==typeof e||"symbol"==typeof e?e:Object.is(e?.valueOf?.(),-0)?"-0":String(e)}function toPath(e){let t=[],n=e.length;if(0===n)return t;let r=0,i="",o="",a=!1;for(46===e.charCodeAt(0)&&(t.push(""),r++);r<n;){let s=e[r];o?"\\"===s&&r+1<n?i+=e[++r]:s===o?o="":i+=s:a?'"'===s||"'"===s?o=s:"]"===s?(a=!1,t.push(i),i=""):i+=s:"["===s?(a=!0,i&&(t.push(i),i="")):"."===s?i&&(t.push(i),i=""):i+=s,r++}return i&&t.push(i),t}function get(e,t,n){if(null==e)return n;switch(typeof t){case"string":{if(isUnsafeProperty(t))return n;let r=e[t];if(void 0===r)if(isDeepKey(t))return get(e,toPath(t),n);else return n;return r}case"number":case"symbol":{"number"==typeof t&&(t=toKey(t));let r=e[t];if(void 0===r)return n;return r}default:{if(Array.isArray(t))return getWithPath(e,t,n);if(isUnsafeProperty(t=Object.is(t?.valueOf(),-0)?"-0":String(t)))return n;let r=e[t];if(void 0===r)return n;return r}}}function getWithPath(e,t,n){if(0===t.length)return n;let r=e;for(let e=0;e<t.length;e++){if(null==r||isUnsafeProperty(t[e]))return n;r=r[t[e]]}return void 0===r?n:r}const GLOBAL_EPISODE_BLACKLIST="^(.*?)((.+?版)|(特(别|典))|((导|演)员|嘉宾|角色)访谈|福利|先导|彩蛋|花絮|预告|特辑|专访|访谈|幕后|周边|资讯|看点|速看|回顾|盘点|合集|PV|MV|CM|OST|ED|OP|BD|特典|SP|NCOP|NCED|MENU|Web-DL|rip|x264|x265|aac|flac)(.*?)$",getEpisodeBlacklistPattern=e=>{let t=[GLOBAL_EPISODE_BLACKLIST];(null==e?void 0:e.trim())&&t.push(e);let n=t.join("|");try{return RegExp(n,"i")}catch(e){return console.error("编译分集黑名单正则表达式失败:",n,"错误:",e),RegExp(GLOBAL_EPISODE_BLACKLIST,"i")}};function base_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var base_CommentMode=function(e){return e[e.SCROLL=1]="SCROLL",e[e.BOTTOM=4]="BOTTOM",e[e.TOP=5]="TOP",e}({});const providerCommentItemSchema=schemas_object({id:coerce_string().optional(),timestamp:coerce_number(),mode:schemas_enum(base_CommentMode).catch(1).optional().default(1),color:schemas_number().catch(DEFAULT_COLOR_INT).optional().default(DEFAULT_COLOR_INT),content:schemas_string()});class BaseScraper{get providerConfig(){return this._providerConfig}set providerConfig(e){let t=get(e,this.providerName);t&&(this.logger.debug("设置 Provider 配置",t),this._providerConfig=e)}parseIdString(e){var t,n;let r=safeJsonParse(decodeURIComponent(e)),i=null==(t=this.idSchema)?void 0:t.safeParse(r);return i?i.success?null!=(n=i.data)?n:null:(this.logger.error("parseIdString",e,prettifyError(i.error)),null):(this.logger.error("parseIdString",e,"idSchema is not defined"),null)}generateIdString(e){return encodeURIComponent(JSON.stringify(e))}sleep(e){return new Promise(t=>setTimeout(t,e))}getEpisodeIndexFromTitle(e){if(!e)return null;let t=/(?:第)?(\d+)(?:集|话)?$/.exec(e.trim());if(t)try{return parseInt(t[1],10)}catch(t){this.logger.error("从标题中提取集数失败:",e,"错误:",t)}return null}get episodeBlacklistPattern(){return getEpisodeBlacklistPattern(this.PROVIDER_SPECIFIC_BLACKLIST)}constructor(){var e=this;base_define_property(this,"_providerConfig",{}),base_define_property(this,"idSchema",void 0),base_define_property(this,"fetch",new Fetch),base_define_property(this,"PROVIDER_SPECIFIC_BLACKLIST",""),base_define_property(this,"logger",{log:function(t){for(var n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];console[t](`[${e.providerName}]`,...r)},debug:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];e.logger.log("debug",...n)},info:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];e.logger.log("info",...n)},warn:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];e.logger.log("warn",...n)},error:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];e.logger.log("error",...n)}})}}var dm_proto=__webpack_require__(252);const bilibiliIdSchema=schemas_object({seasonId:schemas_string(),aid:schemas_string().optional(),cid:schemas_string().optional()}),pgcEpisodeSchema=schemas_object({aid:schemas_int(),cid:schemas_int(),badge:schemas_string(),duration:schemas_number(),title:schemas_string(),show_title:schemas_string(),long_title:schemas_string()}),pgcEpisodeResultSchema=schemas_object({code:literal(0),result:schemas_object({episodes:schemas_array(unknown().transform(e=>pgcEpisodeSchema.safeParse(e).data)).transform(e=>compact(e))})});function bilibili_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class BilibiliScraper extends BaseScraper{async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=[],i=await this.getPgcEpisodes(n.seasonId),o=1;for(let e of null!=i?i:[]){if("预告"===e.badge){this.logger.warn("预告,跳过,title:",e.title);continue}if(this.episodeBlacklistPattern.test(e.title)){this.logger.warn("黑名单,跳过,title:",e.title);continue}r.push({provider:this.providerName,episodeId:this.generateIdString({seasonId:n.seasonId,aid:e.aid.toString(),cid:e.cid.toString()}),episodeTitle:e.show_title||e.title,episodeNumber:o}),o+=1}return t?r.filter(e=>e.episodeNumber===t):r}async getSegments(e){var t;let{aid:n,cid:r,seasonId:i}=null!=(t=this.parseIdString(e))?t:{};if(!n||!r||!i)return[];let o=await this.getPgcEpisodes(i),a=null==o?void 0:o.find(e=>e.aid===parseInt(n)&&e.cid===parseInt(r));return a?Array.from({length:Math.floor(a.duration/1e3/360)+1},(e,t)=>({provider:this.providerName,startTime:360*t,segmentId:(t+1).toString()})):[]}async getComments(e,t){var n;let{aid:r,cid:i,seasonId:o}=null!=(n=this.parseIdString(e))?n:{};if(!r||!i||!o)return this.logger.warn("aid:",r,"cid:",i,"seasonId:",o,"不存在"),null;let a=await this.getPgcEpisodes(o);if(!(null==a?void 0:a.find(e=>e.aid===parseInt(r)&&e.cid===parseInt(i))))return this.logger.warn("未找到分集,aid:",r,"cid:",i,"seasonId:",o),null;let s=await this.fetchCommentsForCid(r,i,t);return s?s.map(e=>{var t,n;if(!e.progress)return null;let r=(null==(t=e.content)?void 0:t.toString().replace(/\0/g,""))||"";return r&&null!=(n=providerCommentItemSchema.safeParse({id:e.id.toString(),timestamp:e.progress/1e3,mode:e.mode,color:e.color,content:r}).data)?n:null}):(this.logger.warn("未找到弹幕,aid:",r,"cid:",i,"segmentId:",t),null)}async getPgcEpisodes(e){var t;return null==(t=(await this.fetch.get("https://api.bilibili.com/pgc/view/web/ep/list",{params:{season_id:e},schema:pgcEpisodeResultSchema,cache:{cacheKey:`bilibili:episodes:${e}`}})).data)?void 0:t.result.episodes}async fetchCommentsForCid(e,t,n){try{let r=await this.fetch.get("https://api.bilibili.com/x/v2/dm/web/seg.so",{params:{type:"1",oid:t,pid:e,segment_index:n},base64Data:!0});if(404===r.statusCode||304===r.statusCode)return null;return this.DmSegMobileReply.decode(base64ToUint8Array(r.data)).elems}catch(r){this.logger.error("获取分段",n,"失败,aid:",e,"cid:",t,"错误:",r)}return null}constructor(){super(),bilibili_define_property(this,"providerName","bilibili"),bilibili_define_property(this,"idSchema",bilibiliIdSchema),bilibili_define_property(this,"DmSegMobileReply",dm_proto.biliproto.community.service.dm.v1.DmSegMobileReply),this.fetch.setHeaders({Referer:"https://www.bilibili.com/"})}}var md5=__webpack_require__(478),md5_default=__webpack_require__.n(md5);const OptionsBuilder_defaultOptions={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(e,t){return t},attributeValueProcessor:function(e,t){return t},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(e,t,n){return e},captureMetaData:!1},buildOptions=function(e){return Object.assign({},OptionsBuilder_defaultOptions,e)},nameStartChar=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",nameChar=nameStartChar+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040",nameRegexp="["+nameStartChar+"]["+nameChar+"]*",regexName=RegExp("^"+nameRegexp+"$");function getAllMatches(e,t){let n=[],r=t.exec(e);for(;r;){let i=[];i.startIndex=t.lastIndex-r[0].length;let o=r.length;for(let e=0;e<o;e++)i.push(r[e]);n.push(i),r=t.exec(e)}return n}const isName=function(e){return null!=regexName.exec(e)};function isExist(e){return void 0!==e}METADATA_SYMBOL="function"!=typeof Symbol?"@@xmlMetadata":Symbol("XML Node Metadata");class XmlNode{constructor(e){this.tagname=e,this.child=[],this[":@"]={}}add(e,t){"__proto__"===e&&(e="#__proto__"),this.child.push({[e]:t})}addChild(e,t){"__proto__"===e.tagname&&(e.tagname="#__proto__"),e[":@"]&&Object.keys(e[":@"]).length>0?this.child.push({[e.tagname]:e.child,":@":e[":@"]}):this.child.push({[e.tagname]:e.child}),void 0!==t&&(this.child[this.child.length-1][METADATA_SYMBOL]={startIndex:t})}static getMetaDataSymbol(){return METADATA_SYMBOL}}function readDocType(e,t){let n={};if("O"===e[t+3]&&"C"===e[t+4]&&"T"===e[t+5]&&"Y"===e[t+6]&&"P"===e[t+7]&&"E"===e[t+8]){t+=9;let r=1,i=!1,o=!1,a="";for(;t<e.length;t++)if("<"!==e[t]||o)if(">"===e[t]){if(o?"-"===e[t-1]&&"-"===e[t-2]&&(o=!1,r--):r--,0===r)break}else"["===e[t]?i=!0:a+=e[t];else{if(i&&hasSeq(e,"!ENTITY",t)){let r,i;t+=7,[r,i,t]=readEntityExp(e,t+1),-1===i.indexOf("&")&&(n[r]={regx:RegExp(`&${r};`,"g"),val:i})}else if(i&&hasSeq(e,"!ELEMENT",t)){let{index:n}=readElementExp(e,(t+=8)+1);t=n}else if(i&&hasSeq(e,"!ATTLIST",t))t+=8;else if(i&&hasSeq(e,"!NOTATION",t)){let{index:n}=readNotationExp(e,(t+=9)+1);t=n}else if(hasSeq(e,"!--",t))o=!0;else throw Error("Invalid DOCTYPE");r++,a=""}if(0!==r)throw Error("Unclosed DOCTYPE")}else throw Error("Invalid Tag instead of DOCTYPE");return{entities:n,i:t}}const skipWhitespace=(e,t)=>{for(;t<e.length&&/\s/.test(e[t]);)t++;return t};function readEntityExp(e,t){t=skipWhitespace(e,t);let n="";for(;t<e.length&&!/\s/.test(e[t])&&'"'!==e[t]&&"'"!==e[t];)n+=e[t],t++;if(validateEntityName(n),t=skipWhitespace(e,t),"SYSTEM"===e.substring(t,t+6).toUpperCase())throw Error("External entities are not supported");if("%"===e[t])throw Error("Parameter entities are not supported");let r="";return[t,r]=readIdentifierVal(e,t,"entity"),[n,r,--t]}function readNotationExp(e,t){t=skipWhitespace(e,t);let n="";for(;t<e.length&&!/\s/.test(e[t]);)n+=e[t],t++;validateEntityName(n),t=skipWhitespace(e,t);let r=e.substring(t,t+6).toUpperCase();if("SYSTEM"!==r&&"PUBLIC"!==r)throw Error(`Expected SYSTEM or PUBLIC, found "${r}"`);t+=r.length,t=skipWhitespace(e,t);let i=null,o=null;if("PUBLIC"===r)[t,i]=readIdentifierVal(e,t,"publicIdentifier"),t=skipWhitespace(e,t),('"'===e[t]||"'"===e[t])&&([t,o]=readIdentifierVal(e,t,"systemIdentifier"));else if("SYSTEM"===r&&([t,o]=readIdentifierVal(e,t,"systemIdentifier"),!o))throw Error("Missing mandatory system identifier for SYSTEM notation");return{notationName:n,publicIdentifier:i,systemIdentifier:o,index:--t}}function readIdentifierVal(e,t,n){let r="",i=e[t];if('"'!==i&&"'"!==i)throw Error(`Expected quoted string, found "${i}"`);for(t++;t<e.length&&e[t]!==i;)r+=e[t],t++;if(e[t]!==i)throw Error(`Unterminated ${n} value`);return[++t,r]}function readElementExp(e,t){t=skipWhitespace(e,t);let n="";for(;t<e.length&&!/\s/.test(e[t]);)n+=e[t],t++;if(!validateEntityName(n))throw Error(`Invalid element name: "${n}"`);t=skipWhitespace(e,t);let r="";if("E"===e[t]&&hasSeq(e,"MPTY",t))t+=4;else if("A"===e[t]&&hasSeq(e,"NY",t))t+=2;else if("("===e[t]){for(t++;t<e.length&&")"!==e[t];)r+=e[t],t++;if(")"!==e[t])throw Error("Unterminated content model")}else throw Error(`Invalid Element Expression, found "${e[t]}"`);return{elementName:n,contentModel:r.trim(),index:t}}function hasSeq(e,t,n){for(let r=0;r<t.length;r++)if(t[r]!==e[n+r+1])return!1;return!0}function validateEntityName(e){if(isName(e))return e;throw Error(`Invalid entity name ${e}`)}const hexRegex=/^[-+]?0x[a-fA-F0-9]+$/,numRegex=/^([\-\+])?(0*)([0-9]*(\.[0-9]*)?)$/,consider={hex:!0,leadingZeros:!0,decimalPoint:".",eNotation:!0};function toNumber(e,t={}){if(t=Object.assign({},consider,t),!e||"string"!=typeof e)return e;let n=e.trim();if(void 0!==t.skipLike&&t.skipLike.test(n))return e;{if("0"===e)return 0;if(t.hex&&hexRegex.test(n))return parse_int(n,16);if(-1!==n.search(/.+[eE].+/))return resolveEnotation(e,n,t);let r=numRegex.exec(n);if(!r)return e;{let i=r[1]||"",o=r[2],a=trimZeros(r[3]),s=i?"."===e[o.length+1]:"."===e[o.length];if(!t.leadingZeros&&(o.length>1||1===o.length&&!s))return e;{let r=Number(n),s=String(r);if(0===r)return r;if(-1!==s.search(/[eE]/))if(t.eNotation)return r;else return e;if(-1!==n.indexOf("."))if("0"===s)return r;else if(s===a)return r;else if(s===`${i}${a}`)return r;else return e;let u=o?a:n;return o?u===s||i+u===s?r:e:u===s||u===i+s?r:e}}}}const eNotationRegx=/^([-+])?(0*)(\d*(\.\d*)?[eE][-\+]?\d+)$/;function resolveEnotation(e,t,n){if(!n.eNotation)return e;let r=t.match(eNotationRegx);if(!r)return e;{let i=r[1]||"",o=-1===r[3].indexOf("e")?"E":"e",a=r[2],s=i?e[a.length+1]===o:e[a.length]===o;return a.length>1&&s?e:1===a.length&&(r[3].startsWith(`.${o}`)||r[3][0]===o)?Number(t):n.leadingZeros&&!s?Number(t=(r[1]||"")+r[3]):e}}function trimZeros(e){return e&&-1!==e.indexOf(".")&&("."===(e=e.replace(/0+$/,""))?e="0":"."===e[0]?e="0"+e:"."===e[e.length-1]&&(e=e.substring(0,e.length-1))),e}function parse_int(e,t){if(parseInt)return parseInt(e,t);if(Number.parseInt)return Number.parseInt(e,t);if(window&&window.parseInt)return window.parseInt(e,t);throw Error("parseInt, Number.parseInt, window.parseInt are not supported")}function getIgnoreAttributesFn(e){return"function"==typeof e?e:Array.isArray(e)?t=>{for(let n of e)if("string"==typeof n&&t===n||n instanceof RegExp&&n.test(t))return!0}:()=>!1}class OrderedObjParser{constructor(e){this.options=e,this.currentNode=null,this.tagsNodeStack=[],this.docTypeEntities={},this.lastEntities={apos:{regex:/&(apos|#39|#x27);/g,val:"'"},gt:{regex:/&(gt|#62|#x3E);/g,val:">"},lt:{regex:/&(lt|#60|#x3C);/g,val:"<"},quot:{regex:/&(quot|#34|#x22);/g,val:'"'}},this.ampEntity={regex:/&(amp|#38|#x26);/g,val:"&"},this.htmlEntities={space:{regex:/&(nbsp|#160);/g,val:" "},cent:{regex:/&(cent|#162);/g,val:"\xa2"},pound:{regex:/&(pound|#163);/g,val:"\xa3"},yen:{regex:/&(yen|#165);/g,val:"\xa5"},euro:{regex:/&(euro|#8364);/g,val:"€"},copyright:{regex:/&(copy|#169);/g,val:"\xa9"},reg:{regex:/&(reg|#174);/g,val:"\xae"},inr:{regex:/&(inr|#8377);/g,val:"₹"},num_dec:{regex:/&#([0-9]{1,7});/g,val:(e,t)=>String.fromCodePoint(Number.parseInt(t,10))},num_hex:{regex:/&#x([0-9a-fA-F]{1,6});/g,val:(e,t)=>String.fromCodePoint(Number.parseInt(t,16))}},this.addExternalEntities=addExternalEntities,this.parseXml=parseXml,this.parseTextData=parseTextData,this.resolveNameSpace=resolveNameSpace,this.buildAttributesMap=buildAttributesMap,this.isItStopNode=isItStopNode,this.replaceEntitiesValue=replaceEntitiesValue,this.readStopNodeData=readStopNodeData,this.saveTextToParentTag=saveTextToParentTag,this.addChild=addChild,this.ignoreAttributesFn=getIgnoreAttributesFn(this.options.ignoreAttributes)}}function addExternalEntities(e){let t=Object.keys(e);for(let n=0;n<t.length;n++){let r=t[n];this.lastEntities[r]={regex:RegExp("&"+r+";","g"),val:e[r]}}}function parseTextData(e,t,n,r,i,o,a){if(void 0!==e&&(this.options.trimValues&&!r&&(e=e.trim()),e.length>0)){a||(e=this.replaceEntitiesValue(e));let r=this.options.tagValueProcessor(t,e,n,i,o);return null==r?e:typeof r!=typeof e||r!==e?r:this.options.trimValues||e.trim()===e?parseValue(e,this.options.parseTagValue,this.options.numberParseOptions):e}}function resolveNameSpace(e){if(this.options.removeNSPrefix){let t=e.split(":"),n="/"===e.charAt(0)?"/":"";if("xmlns"===t[0])return"";2===t.length&&(e=n+t[1])}return e}const attrsRegx=RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");function buildAttributesMap(e,t,n){if(!0!==this.options.ignoreAttributes&&"string"==typeof e){let n=getAllMatches(e,attrsRegx),r=n.length,i={};for(let e=0;e<r;e++){let r=this.resolveNameSpace(n[e][1]);if(this.ignoreAttributesFn(r,t))continue;let o=n[e][4],a=this.options.attributeNamePrefix+r;if(r.length)if(this.options.transformAttributeName&&(a=this.options.transformAttributeName(a)),"__proto__"===a&&(a="#__proto__"),void 0!==o){this.options.trimValues&&(o=o.trim()),o=this.replaceEntitiesValue(o);let e=this.options.attributeValueProcessor(r,o,t);null==e?i[a]=o:typeof e!=typeof o||e!==o?i[a]=e:i[a]=parseValue(o,this.options.parseAttributeValue,this.options.numberParseOptions)}else this.options.allowBooleanAttributes&&(i[a]=!0)}if(Object.keys(i).length){if(this.options.attributesGroupName){let e={};return e[this.options.attributesGroupName]=i,e}return i}}}const parseXml=function(e){e=e.replace(/\r\n?/g,"\n");let t=new XmlNode("!xml"),n=t,r="",i="";for(let o=0;o<e.length;o++)if("<"===e[o])if("/"===e[o+1]){let t=findClosingIndex(e,">",o,"Closing Tag is not closed."),a=e.substring(o+2,t).trim();if(this.options.removeNSPrefix){let e=a.indexOf(":");-1!==e&&(a=a.substr(e+1))}this.options.transformTagName&&(a=this.options.transformTagName(a)),n&&(r=this.saveTextToParentTag(r,n,i));let s=i.substring(i.lastIndexOf(".")+1);if(a&&-1!==this.options.unpairedTags.indexOf(a))throw Error(`Unpaired tag can not be used as closing tag: </${a}>`);let u=0;s&&-1!==this.options.unpairedTags.indexOf(s)?(u=i.lastIndexOf(".",i.lastIndexOf(".")-1),this.tagsNodeStack.pop()):u=i.lastIndexOf("."),i=i.substring(0,u),n=this.tagsNodeStack.pop(),r="",o=t}else if("?"===e[o+1]){let t=readTagExp(e,o,!1,"?>");if(!t)throw Error("Pi Tag is not closed.");if(r=this.saveTextToParentTag(r,n,i),this.options.ignoreDeclaration&&"?xml"===t.tagName||this.options.ignorePiTags);else{let e=new XmlNode(t.tagName);e.add(this.options.textNodeName,""),t.tagName!==t.tagExp&&t.attrExpPresent&&(e[":@"]=this.buildAttributesMap(t.tagExp,i,t.tagName)),this.addChild(n,e,i,o)}o=t.closeIndex+1}else if("!--"===e.substr(o+1,3)){let t=findClosingIndex(e,"--\x3e",o+4,"Comment is not closed.");if(this.options.commentPropName){let a=e.substring(o+4,t-2);r=this.saveTextToParentTag(r,n,i),n.add(this.options.commentPropName,[{[this.options.textNodeName]:a}])}o=t}else if("!D"===e.substr(o+1,2)){let t=readDocType(e,o);this.docTypeEntities=t.entities,o=t.i}else if("!["===e.substr(o+1,2)){let t=findClosingIndex(e,"]]>",o,"CDATA is not closed.")-2,a=e.substring(o+9,t);r=this.saveTextToParentTag(r,n,i);let s=this.parseTextData(a,n.tagname,i,!0,!1,!0,!0);void 0==s&&(s=""),this.options.cdataPropName?n.add(this.options.cdataPropName,[{[this.options.textNodeName]:a}]):n.add(this.options.textNodeName,s),o=t+2}else{let a=readTagExp(e,o,this.options.removeNSPrefix),s=a.tagName,u=a.rawTagName,l=a.tagExp,c=a.attrExpPresent,d=a.closeIndex;this.options.transformTagName&&(s=this.options.transformTagName(s)),n&&r&&"!xml"!==n.tagname&&(r=this.saveTextToParentTag(r,n,i,!1));let f=n;f&&-1!==this.options.unpairedTags.indexOf(f.tagname)&&(n=this.tagsNodeStack.pop(),i=i.substring(0,i.lastIndexOf("."))),s!==t.tagname&&(i+=i?"."+s:s);let h=o;if(this.isItStopNode(this.options.stopNodes,i,s)){let t="";if(l.length>0&&l.lastIndexOf("/")===l.length-1)"/"===s[s.length-1]?(s=s.substr(0,s.length-1),i=i.substr(0,i.length-1),l=s):l=l.substr(0,l.length-1),o=a.closeIndex;else if(-1!==this.options.unpairedTags.indexOf(s))o=a.closeIndex;else{let n=this.readStopNodeData(e,u,d+1);if(!n)throw Error(`Unexpected end of ${u}`);o=n.i,t=n.tagContent}let r=new XmlNode(s);s!==l&&c&&(r[":@"]=this.buildAttributesMap(l,i,s)),t&&(t=this.parseTextData(t,s,i,!0,c,!0,!0)),i=i.substr(0,i.lastIndexOf(".")),r.add(this.options.textNodeName,t),this.addChild(n,r,i,h)}else{if(l.length>0&&l.lastIndexOf("/")===l.length-1){"/"===s[s.length-1]?(s=s.substr(0,s.length-1),i=i.substr(0,i.length-1),l=s):l=l.substr(0,l.length-1),this.options.transformTagName&&(s=this.options.transformTagName(s));let e=new XmlNode(s);s!==l&&c&&(e[":@"]=this.buildAttributesMap(l,i,s)),this.addChild(n,e,i,h),i=i.substr(0,i.lastIndexOf("."))}else{let e=new XmlNode(s);this.tagsNodeStack.push(n),s!==l&&c&&(e[":@"]=this.buildAttributesMap(l,i,s)),this.addChild(n,e,i,h),n=e}r="",o=d}}else r+=e[o];return t.child};function addChild(e,t,n,r){this.options.captureMetaData||(r=void 0);let i=this.options.updateTag(t.tagname,n,t[":@"]);!1===i||("string"==typeof i&&(t.tagname=i),e.addChild(t,r))}const replaceEntitiesValue=function(e){if(this.options.processEntities){for(let t in this.docTypeEntities){let n=this.docTypeEntities[t];e=e.replace(n.regx,n.val)}for(let t in this.lastEntities){let n=this.lastEntities[t];e=e.replace(n.regex,n.val)}if(this.options.htmlEntities)for(let t in this.htmlEntities){let n=this.htmlEntities[t];e=e.replace(n.regex,n.val)}e=e.replace(this.ampEntity.regex,this.ampEntity.val)}return e};function saveTextToParentTag(e,t,n,r){return e&&(void 0===r&&(r=0===t.child.length),void 0!==(e=this.parseTextData(e,t.tagname,n,!1,!!t[":@"]&&0!==Object.keys(t[":@"]).length,r))&&""!==e&&t.add(this.options.textNodeName,e),e=""),e}function isItStopNode(e,t,n){let r="*."+n;for(let n in e){let i=e[n];if(r===i||t===i)return!0}return!1}function tagExpWithClosingIndex(e,t,n=">"){let r,i="";for(let o=t;o<e.length;o++){let t=e[o];if(r)t===r&&(r="");else if('"'===t||"'"===t)r=t;else if(t===n[0]){if(!n[1])return{data:i,index:o};else if(e[o+1]===n[1])return{data:i,index:o}}else" "===t&&(t=" ");i+=t}}function findClosingIndex(e,t,n,r){let i=e.indexOf(t,n);if(-1!==i)return i+t.length-1;throw Error(r)}function readTagExp(e,t,n,r=">"){let i=tagExpWithClosingIndex(e,t+1,r);if(!i)return;let o=i.data,a=i.index,s=o.search(/\s/),u=o,l=!0;-1!==s&&(u=o.substring(0,s),o=o.substring(s+1).trimStart());let c=u;if(n){let e=u.indexOf(":");-1!==e&&(l=(u=u.substr(e+1))!==i.data.substr(e+1))}return{tagName:u,tagExp:o,closeIndex:a,attrExpPresent:l,rawTagName:c}}function readStopNodeData(e,t,n){let r=n,i=1;for(;n<e.length;n++)if("<"===e[n])if("/"===e[n+1]){let o=findClosingIndex(e,">",n,`${t} is not closed`);if(e.substring(n+2,o).trim()===t&&0==--i)return{tagContent:e.substring(r,n),i:o};n=o}else if("?"===e[n+1])n=findClosingIndex(e,"?>",n+1,"StopNode is not closed.");else if("!--"===e.substr(n+1,3))n=findClosingIndex(e,"--\x3e",n+3,"StopNode is not closed.");else if("!["===e.substr(n+1,2))n=findClosingIndex(e,"]]>",n,"StopNode is not closed.")-2;else{let r=readTagExp(e,n,">");r&&((r&&r.tagName)===t&&"/"!==r.tagExp[r.tagExp.length-1]&&i++,n=r.closeIndex)}}function parseValue(e,t,n){if(t&&"string"==typeof e){let t=e.trim();return"true"===t||"false"!==t&&toNumber(e,n)}return isExist(e)?e:""}const node2json_METADATA_SYMBOL=XmlNode.getMetaDataSymbol();function prettify(e,t){return compress(e,t)}function compress(e,t,n){let r,i={};for(let o=0;o<e.length;o++){let a=e[o],s=propName(a),u="";if(u=void 0===n?s:n+"."+s,s===t.textNodeName)void 0===r?r=a[s]:r+=""+a[s];else if(void 0===s)continue;else if(a[s]){let e=compress(a[s],t,u),n=isLeafTag(e,t);void 0!==a[node2json_METADATA_SYMBOL]&&(e[node2json_METADATA_SYMBOL]=a[node2json_METADATA_SYMBOL]),a[":@"]?assignAttributes(e,a[":@"],u,t):1!==Object.keys(e).length||void 0===e[t.textNodeName]||t.alwaysCreateTextNode?0===Object.keys(e).length&&(t.alwaysCreateTextNode?e[t.textNodeName]="":e=""):e=e[t.textNodeName],void 0!==i[s]&&i.hasOwnProperty(s)?(Array.isArray(i[s])||(i[s]=[i[s]]),i[s].push(e)):t.isArray(s,u,n)?i[s]=[e]:i[s]=e}}return"string"==typeof r?r.length>0&&(i[t.textNodeName]=r):void 0!==r&&(i[t.textNodeName]=r),i}function propName(e){let t=Object.keys(e);for(let e=0;e<t.length;e++){let n=t[e];if(":@"!==n)return n}}function assignAttributes(e,t,n,r){if(t){let i=Object.keys(t),o=i.length;for(let a=0;a<o;a++){let o=i[a];r.isArray(o,n+"."+o,!0,!0)?e[o]=[t[o]]:e[o]=t[o]}}}function isLeafTag(e,t){let{textNodeName:n}=t,r=Object.keys(e).length;return 0===r||1===r&&(!!e[n]||"boolean"==typeof e[n]||0===e[n])}const validator_defaultOptions={allowBooleanAttributes:!1,unpairedTags:[]};function validate(e,t){t=Object.assign({},validator_defaultOptions,t);let n=[],r=!1,i=!1;"\uFEFF"===e[0]&&(e=e.substr(1));for(let o=0;o<e.length;o++)if("<"===e[o]&&"?"===e[o+1]){if(o+=2,(o=readPI(e,o)).err)return o}else if("<"===e[o]){let a=o;if("!"===e[++o]){o=readCommentAndCDATA(e,o);continue}{let s=!1;"/"===e[o]&&(s=!0,o++);let u="";for(;o<e.length&&">"!==e[o]&&" "!==e[o]&&" "!==e[o]&&"\n"!==e[o]&&"\r"!==e[o];o++)u+=e[o];if("/"===(u=u.trim())[u.length-1]&&(u=u.substring(0,u.length-1),o--),!validateTagName(u)){let t;return getErrorObject("InvalidTag",t=0===u.trim().length?"Invalid space after '<'.":"Tag '"+u+"' is an invalid name.",getLineNumberForPosition(e,o))}let l=readAttributeStr(e,o);if(!1===l)return getErrorObject("InvalidAttr","Attributes for '"+u+"' have open quote.",getLineNumberForPosition(e,o));let c=l.value;if(o=l.index,"/"===c[c.length-1]){let n=o-c.length,i=validateAttributeString(c=c.substring(0,c.length-1),t);if(!0!==i)return getErrorObject(i.err.code,i.err.msg,getLineNumberForPosition(e,n+i.err.line));r=!0}else if(s)if(!l.tagClosed)return getErrorObject("InvalidTag","Closing tag '"+u+"' doesn't have proper closing.",getLineNumberForPosition(e,o));else{if(c.trim().length>0)return getErrorObject("InvalidTag","Closing tag '"+u+"' can't have attributes or invalid starting.",getLineNumberForPosition(e,a));if(0===n.length)return getErrorObject("InvalidTag","Closing tag '"+u+"' has not been opened.",getLineNumberForPosition(e,a));let t=n.pop();if(u!==t.tagName){let n=getLineNumberForPosition(e,t.tagStartPos);return getErrorObject("InvalidTag","Expected closing tag '"+t.tagName+"' (opened in line "+n.line+", col "+n.col+") instead of closing tag '"+u+"'.",getLineNumberForPosition(e,a))}0==n.length&&(i=!0)}else{let s=validateAttributeString(c,t);if(!0!==s)return getErrorObject(s.err.code,s.err.msg,getLineNumberForPosition(e,o-c.length+s.err.line));if(!0===i)return getErrorObject("InvalidXml","Multiple possible root nodes found.",getLineNumberForPosition(e,o));-1!==t.unpairedTags.indexOf(u)||n.push({tagName:u,tagStartPos:a}),r=!0}for(o++;o<e.length;o++)if("<"===e[o])if("!"===e[o+1]){o=readCommentAndCDATA(e,++o);continue}else if("?"===e[o+1]){if((o=readPI(e,++o)).err)return o}else break;else if("&"===e[o]){let t=validateAmpersand(e,o);if(-1==t)return getErrorObject("InvalidChar","char '&' is not expected.",getLineNumberForPosition(e,o));o=t}else if(!0===i&&!isWhiteSpace(e[o]))return getErrorObject("InvalidXml","Extra text at the end",getLineNumberForPosition(e,o));"<"===e[o]&&o--}}else{if(isWhiteSpace(e[o]))continue;return getErrorObject("InvalidChar","char '"+e[o]+"' is not expected.",getLineNumberForPosition(e,o))}return r?1==n.length?getErrorObject("InvalidTag","Unclosed tag '"+n[0].tagName+"'.",getLineNumberForPosition(e,n[0].tagStartPos)):!(n.length>0)||getErrorObject("InvalidXml","Invalid '"+JSON.stringify(n.map(e=>e.tagName),null,4).replace(/\r?\n/g,"")+"' found.",{line:1,col:1}):getErrorObject("InvalidXml","Start tag expected.",1)}function isWhiteSpace(e){return" "===e||" "===e||"\n"===e||"\r"===e}function readPI(e,t){let n=t;for(;t<e.length;t++)if("?"==e[t]||" "==e[t]){let r=e.substr(n,t-n);if(t>5&&"xml"===r)return getErrorObject("InvalidXml","XML declaration allowed only at the start of the document.",getLineNumberForPosition(e,t));if("?"!=e[t]||">"!=e[t+1])continue;t++;break}return t}function readCommentAndCDATA(e,t){if(e.length>t+5&&"-"===e[t+1]&&"-"===e[t+2]){for(t+=3;t<e.length;t++)if("-"===e[t]&&"-"===e[t+1]&&">"===e[t+2]){t+=2;break}}else if(e.length>t+8&&"D"===e[t+1]&&"O"===e[t+2]&&"C"===e[t+3]&&"T"===e[t+4]&&"Y"===e[t+5]&&"P"===e[t+6]&&"E"===e[t+7]){let n=1;for(t+=8;t<e.length;t++)if("<"===e[t])n++;else if(">"===e[t]&&0==--n)break}else if(e.length>t+9&&"["===e[t+1]&&"C"===e[t+2]&&"D"===e[t+3]&&"A"===e[t+4]&&"T"===e[t+5]&&"A"===e[t+6]&&"["===e[t+7]){for(t+=8;t<e.length;t++)if("]"===e[t]&&"]"===e[t+1]&&">"===e[t+2]){t+=2;break}}return t}const doubleQuote='"',singleQuote="'";function readAttributeStr(e,t){let n="",r="",i=!1;for(;t<e.length;t++){if(e[t]===doubleQuote||e[t]===singleQuote)""===r?r=e[t]:r!==e[t]||(r="");else if(">"===e[t]&&""===r){i=!0;break}n+=e[t]}return""===r&&{value:n,index:t,tagClosed:i}}const validAttrStrRegxp=RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");function validateAttributeString(e,t){let n=getAllMatches(e,validAttrStrRegxp),r={};for(let e=0;e<n.length;e++){if(0===n[e][1].length)return getErrorObject("InvalidAttr","Attribute '"+n[e][2]+"' has no space in starting.",getPositionFromMatch(n[e]));if(void 0!==n[e][3]&&void 0===n[e][4])return getErrorObject("InvalidAttr","Attribute '"+n[e][2]+"' is without value.",getPositionFromMatch(n[e]));if(void 0===n[e][3]&&!t.allowBooleanAttributes)return getErrorObject("InvalidAttr","boolean attribute '"+n[e][2]+"' is not allowed.",getPositionFromMatch(n[e]));let i=n[e][2];if(!validateAttrName(i))return getErrorObject("InvalidAttr","Attribute '"+i+"' is an invalid name.",getPositionFromMatch(n[e]));if(r.hasOwnProperty(i))return getErrorObject("InvalidAttr","Attribute '"+i+"' is repeated.",getPositionFromMatch(n[e]));r[i]=1}return!0}function validateNumberAmpersand(e,t){let n=/\d/;for("x"===e[t]&&(t++,n=/[\da-fA-F]/);t<e.length;t++){if(";"===e[t])return t;if(!e[t].match(n))break}return -1}function validateAmpersand(e,t){if(";"===e[++t])return -1;if("#"===e[t])return validateNumberAmpersand(e,++t);let n=0;for(;t<e.length;t++,n++)if(!e[t].match(/\w/)||!(n<20)){if(";"===e[t])break;return -1}return t}function getErrorObject(e,t,n){return{err:{code:e,msg:t,line:n.line||n,col:n.col}}}function validateAttrName(e){return isName(e)}function validateTagName(e){return isName(e)}function getLineNumberForPosition(e,t){let n=e.substring(0,t).split(/\r?\n/);return{line:n.length,col:n[n.length-1].length+1}}function getPositionFromMatch(e){return e.startIndex+e[1].length}class XMLParser{constructor(e){this.externalEntities={},this.options=buildOptions(e)}parse(e,t){if("string"==typeof e);else if(e.toString)e=e.toString();else throw Error("XML data is accepted in String or Bytes[] form.");if(t){!0===t&&(t={});let n=validate(e,t);if(!0!==n)throw Error(`${n.err.msg}:${n.err.line}:${n.err.col}`)}let n=new OrderedObjParser(this.options);n.addExternalEntities(this.externalEntities);let r=n.parseXml(e);return this.options.preserveOrder||void 0===r?r:prettify(r,this.options)}addEntity(e,t){if(-1!==t.indexOf("&"))throw Error("Entity value can't have '&'");if(-1!==e.indexOf("&")||-1!==e.indexOf(";"))throw Error("An entity must be set without '&' and ';'. Eg. use '#xD' for '
'");if("&"===t)throw Error("An entity with value '&' is not permitted");this.externalEntities[e]=t}static getMetaDataSymbol(){return XmlNode.getMetaDataSymbol()}}const iqiyiIdSchema=schemas_object({entityId:schemas_string()}),iqiyiEpisodeTabDataVideoSchema=schemas_object({page_url:schemas_string(),short_display_name:schemas_string().optional(),title:schemas_string(),mark_type_show:schemas_int().optional()}).transform(e=>({...e,get videoId(){var t;let n=e.page_url.match(/v_(\S+)\.html/);return null!=(t=null==n?void 0:n[1])?t:""}})),safeParseVideo=e=>{let t=iqiyiEpisodeTabDataVideoSchema.safeParse(e);return t.success?t.data:(console.warn("爱奇艺: 解析分集数据时发生错误:",prettifyError(t.error),e),null)},iqiyiTvTabSchema=schemas_object({bk_id:literal("selector_bk"),bk_type:literal("album_episodes"),data:schemas_object({data:schemas_array(unknown().transform(e=>schemas_object({videos:schemas_object({feature_paged:record(any(),schemas_array(unknown().transform(e=>safeParseVideo(e)))).optional().transform(e=>compact(Object.values(null!=e?e:{}).flat()))}).optional()}).transform(e=>{var t;return null==(t=e.videos)?void 0:t.feature_paged}).safeParse(e).data)).transform(e=>compact(e.flat()))})}),iqiyiMovieTabSchema=schemas_object({bk_id:literal("film_feature_bk"),bk_type:literal("video_list"),data:schemas_object({data:schemas_object({videos:schemas_array(unknown().transform(e=>safeParseVideo(e)))}).transform(e=>compact(e.videos))})}),iqiyiEpisodeTabSchema=union([iqiyiTvTabSchema,iqiyiMovieTabSchema]).transform(e=>e.data.data),iqiyiV3ApiResponseSchema=schemas_object({status_code:schemas_number(),data:schemas_object({base_data:schemas_object({video_list:schemas_array(schemas_object({tv_id:schemas_string(),name:schemas_string(),order:schemas_number(),play_url:schemas_string()})).optional()}),template:schemas_object({tabs:schemas_array(schemas_object({tab_id:schemas_string(),tab_title:schemas_string(),blocks:schemas_array(schemas_object({bk_id:schemas_string(),bk_type:schemas_string(),data:unknown().optional()}))}))})}).optional()}),iqiyiVideoBaseInfoResponseSchema=schemas_object({code:literal("A00000"),data:schemas_object({tvId:schemas_int(),albumId:schemas_int(),durationSec:schemas_int()})}),iqiyiCommentsEntrySchema=schemas_object({int:schemas_number(),list:schemas_object({bulletInfo:schemas_array(unknown().transform(e=>schemas_object({contentId:schemas_string(),content:schemas_string(),showTime:schemas_number(),color:schemas_string().optional().default(DEFAULT_COLOR_HEX).transform(e=>parseInt(e,16))}).transform(e=>providerCommentItemSchema.safeParse({id:e.contentId.toString(),timestamp:e.showTime,color:e.color,content:e.content}).data).safeParse(e).data)).transform(e=>compact(e))})}),iqiyiCommentsResponseSchema=schemas_object({danmu:looseObject({code:literal("A00000"),data:schemas_object({entry:schemas_array(unknown().transform(e=>{var t;return null==(t=iqiyiCommentsEntrySchema.safeParse(e).data)?void 0:t.list.bulletInfo})).transform(e=>compact(e.flat()))})})}).transform(e=>e.danmu.data.entry);function iqiyi_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class IqiyiScraper extends BaseScraper{async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=[];try{r=await this.getEpisodesV3(n.entityId)}catch(e){this.logger.warn("新版API (v3) 获取分集时发生错误:",e),r=[]}return(!r.length,t)?r.filter(e=>e.episodeNumber===t):r}async getSegments(e){let t=this.parseIdString(e);if(!t)return[];let n=await this.getVideoBaseInfo(t.entityId),r=null==n?void 0:n.durationSec;return r?Array.from({length:Math.floor(r/300)+1},(e,t)=>({provider:this.providerName,startTime:300*t,segmentId:(t+1).toString()})):[]}async getComments(e,t){let n=this.parseIdString(e);if(!n)return[];let r=n.entityId;if(!r||r.length<4)return[];let i=r.slice(-4,-2),o=r.slice(-2),a=`http://cmts.iqiyi.com/bullet/${i}/${o}/${r}_300_${t}.z`;this.logger.debug("URL构建: s1=",i,"s2=",o,"完整URL=",a);let s=await this.fetch.get(a,{zlibMode:!0}),u=this.xmlParser.parse(s.data),{success:l,data:c,error:d}=iqiyiCommentsResponseSchema.safeParse(u);return l?c:(this.logger.warn("解析弹幕数据时发生错误:",prettifyError(d)),[])}async getEpisodesV3(e){let t={entity_id:e,device_id:"qd5fwuaj4hunxxdgzwkcqmefeb3ww5hx",auth_cookie:"",user_id:"0",vip_type:"-1",vip_status:"0",conduit_id:"",pcv:"13.082.22866",app_version:"13.082.22866",ext:"",app_mode:"standard",scale:"100",timestamp:Date.now().toString(),src:"pca_tvg",os:"",ad_ext:'{"r":"2.2.0-ares6-pure"}'};t.sign=this.createSign(t);try{var n,r,i,o,a,s,u,l;let e=(await this.fetch.get("https://www.iqiyi.com/prelw/tvg/v2/lw/base_info",{params:t,schema:iqiyiV3ApiResponseSchema})).data,c=null!=(o=null==e||null==(i=e.data)||null==(r=i.base_data)||null==(n=r.video_list)?void 0:n.map(e=>({provider:this.providerName,episodeId:e.tv_id.toString(),episodeTitle:e.name,episodeNumber:e.order,url:e.play_url})))?o:[];if(!c.length){let t=null==e||null==(u=e.data)||null==(s=u.template)||null==(a=s.tabs)?void 0:a.flatMap(e=>e.blocks||[]).find(e=>iqiyiEpisodeTabSchema.safeParse(e).success),{success:n,data:r,error:i}=iqiyiEpisodeTabSchema.safeParse(t);if(!n)return this.logger.warn("解析分集列表数据时发生错误:",prettifyError(i),t),[];let o=1;for(let e of r){if(17===e.mark_type_show)continue;let t=this.videoIdToEntityId(e.videoId);t&&(this.episodeBlacklistPattern.test(e.title)||(c.push({provider:this.providerName,episodeId:this.generateIdString({entityId:t}),episodeTitle:e.title,episodeNumber:e.short_display_name&&null!=(l=this.getEpisodeIndexFromTitle(e.short_display_name))?l:o}),o+=1))}}return c}catch(e){return this.logger.error("获取分集时发生错误:",e),[]}}videoIdToEntityId(e){try{let t,n=parseInt(e,36),r=BigInt(n)^BigInt(0x75706971676c);return(t=r<BigInt(9e5)?BigInt(100)*(r+BigInt(9e5)):r).toString()}catch(t){return this.logger.error("将 video_id '",e,"' 转换为 entity_id 时出错:",t),null}}createSign(e){let t=Object.keys(e).filter(e=>"sign"!==e).sort().map(t=>{var n;return`${t}=${null!=(n=e[t])?n:""}`}).join("&");return md5_default()(`${t}&secret_key=howcuteitis`).toString().toUpperCase()}async getVideoBaseInfo(e){var t;return null==(t=(await this.fetch.get(`https://pcw-api.iqiyi.com/video/video/baseinfo/${e}`,{schema:iqiyiVideoBaseInfoResponseSchema,cache:{cacheKey:`iqiyi:video:baseinfo:${e}`}})).data)?void 0:t.data}constructor(){super(),iqiyi_define_property(this,"providerName","iqiyi"),iqiyi_define_property(this,"xmlParser",new XMLParser({htmlEntities:!0})),iqiyi_define_property(this,"idSchema",iqiyiIdSchema),iqiyi_define_property(this,"PROVIDER_SPECIFIC_BLACKLIST","^(.*?)(抢先(版|篇)?|加更(版|篇)?|花絮|预告|特辑|彩蛋|专访|幕后(故事|花絮)?|直播|纯享|未播|衍生|番外|会员(专属|加长)?|片花|精华|看点|速览|解读|reaction|影评)(.*?)$"),this.fetch.setCookie({pgv_pvid:"40b67e3b06027f3d",video_platform:"2",vversion_name:"8.2.95",video_bucketid:"4",video_omgid:"0a1ff6bc9407c0b1cff86ee5d359614d"}),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36 Edg/136.0.0.0"})}}const formatDistanceLocale={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},formatDistance=(e,t,n)=>{let r,i=formatDistanceLocale[e];if(r="string"==typeof i?i:1===t?i.one:i.other.replace("{{count}}",t.toString()),n?.addSuffix)if(n.comparison&&n.comparison>0)return"in "+r;else return r+" ago";return r};function buildFormatLongFn(e){return (t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const dateFormats={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},timeFormats={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},dateTimeFormats={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},formatLong_formatLong={date:buildFormatLongFn({formats:dateFormats,defaultWidth:"full"}),time:buildFormatLongFn({formats:timeFormats,defaultWidth:"full"}),dateTime:buildFormatLongFn({formats:dateTimeFormats,defaultWidth:"full"})},formatRelativeLocale={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},formatRelative=(e,t,n,r)=>formatRelativeLocale[e];function buildLocalizeFn(e){return(t,n)=>{let r;if("formatting"===(n?.context?String(n.context):"standalone")&&e.formattingValues){let t=e.defaultFormattingWidth||e.defaultWidth,i=n?.width?String(n.width):t;r=e.formattingValues[i]||e.formattingValues[t]}else{let t=e.defaultWidth,i=n?.width?String(n.width):e.defaultWidth;r=e.values[i]||e.values[t]}return r[e.argumentCallback?e.argumentCallback(t):t]}}const eraValues={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},quarterValues={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},monthValues={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},dayValues={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},dayPeriodValues={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},formattingDayPeriodValues={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ordinalNumber=(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},localize_localize={ordinalNumber,era:buildLocalizeFn({values:eraValues,defaultWidth:"wide"}),quarter:buildLocalizeFn({values:quarterValues,defaultWidth:"wide",argumentCallback:e=>e-1}),month:buildLocalizeFn({values:monthValues,defaultWidth:"wide"}),day:buildLocalizeFn({values:dayValues,defaultWidth:"wide"}),dayPeriod:buildLocalizeFn({values:dayPeriodValues,defaultWidth:"wide",formattingValues:formattingDayPeriodValues,defaultFormattingWidth:"wide"})};function buildMatchFn(e){return(t,n={})=>{let r,i=n.width,o=i&&e.matchPatterns[i]||e.matchPatterns[e.defaultMatchWidth],a=t.match(o);if(!a)return null;let s=a[0],u=i&&e.parsePatterns[i]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(u)?findIndex(u,e=>e.test(s)):findKey(u,e=>e.test(s));return r=e.valueCallback?e.valueCallback(l):l,{value:r=n.valueCallback?n.valueCallback(r):r,rest:t.slice(s.length)}}}function findKey(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function findIndex(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n}function buildMatchPatternFn(e){return(t,n={})=>{let r=t.match(e.matchPattern);if(!r)return null;let i=r[0],o=t.match(e.parsePattern);if(!o)return null;let a=e.valueCallback?e.valueCallback(o[0]):o[0];return{value:a=n.valueCallback?n.valueCallback(a):a,rest:t.slice(i.length)}}}const matchOrdinalNumberPattern=/^(\d+)(th|st|nd|rd)?/i,parseOrdinalNumberPattern=/\d+/i,matchEraPatterns={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},parseEraPatterns={any:[/^b/i,/^(a|c)/i]},matchQuarterPatterns={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},parseQuarterPatterns={any:[/1/i,/2/i,/3/i,/4/i]},matchMonthPatterns={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},parseMonthPatterns={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},matchDayPatterns={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},parseDayPatterns={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},matchDayPeriodPatterns={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},parseDayPeriodPatterns={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},match_match={ordinalNumber:buildMatchPatternFn({matchPattern:matchOrdinalNumberPattern,parsePattern:parseOrdinalNumberPattern,valueCallback:e=>parseInt(e,10)}),era:buildMatchFn({matchPatterns:matchEraPatterns,defaultMatchWidth:"wide",parsePatterns:parseEraPatterns,defaultParseWidth:"any"}),quarter:buildMatchFn({matchPatterns:matchQuarterPatterns,defaultMatchWidth:"wide",parsePatterns:parseQuarterPatterns,defaultParseWidth:"any",valueCallback:e=>e+1}),month:buildMatchFn({matchPatterns:matchMonthPatterns,defaultMatchWidth:"wide",parsePatterns:parseMonthPatterns,defaultParseWidth:"any"}),day:buildMatchFn({matchPatterns:matchDayPatterns,defaultMatchWidth:"wide",parsePatterns:parseDayPatterns,defaultParseWidth:"any"}),dayPeriod:buildMatchFn({matchPatterns:matchDayPeriodPatterns,defaultMatchWidth:"any",parsePatterns:parseDayPeriodPatterns,defaultParseWidth:"any"})},enUS={code:"en-US",formatDistance:formatDistance,formatLong:formatLong_formatLong,formatRelative:formatRelative,localize:localize_localize,match:match_match,options:{weekStartsOn:0,firstWeekContainsDate:1}};let defaultOptions_defaultOptions={};function getDefaultOptions(){return defaultOptions_defaultOptions}const millisecondsInWeek=6048e5,millisecondsInDay=864e5,constructFromSymbol=Symbol.for("constructDateFrom");function constructFrom_constructFrom(e,t){return"function"==typeof e?e(t):e&&"object"==typeof e&&constructFromSymbol in e?e[constructFromSymbol](t):e instanceof Date?new e.constructor(t):new Date(t)}function toDate(e,t){return constructFrom_constructFrom(t||e,e)}function getTimezoneOffsetInMilliseconds(e){let t=toDate(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),e-n}function normalizeDates(e,...t){let n=constructFrom_constructFrom.bind(null,e||t.find(e=>"object"==typeof e));return t.map(n)}function startOfDay(e,t){let n=toDate(e,t?.in);return n.setHours(0,0,0,0),n}function differenceInCalendarDays_differenceInCalendarDays(e,t,n){let[r,i]=normalizeDates(n?.in,e,t),o=startOfDay(r),a=startOfDay(i);return Math.round((o-getTimezoneOffsetInMilliseconds(o)-(a-getTimezoneOffsetInMilliseconds(a)))/millisecondsInDay)}function startOfYear(e,t){let n=toDate(e,t?.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function getDayOfYear_getDayOfYear(e,t){let n=toDate(e,t?.in);return differenceInCalendarDays_differenceInCalendarDays(n,startOfYear(n))+1}function startOfWeek_startOfWeek(e,t){let n=getDefaultOptions(),r=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??n.weekStartsOn??n.locale?.options?.weekStartsOn??0,i=toDate(e,t?.in),o=i.getDay(),a=7*(o<r)+o-r;return i.setDate(i.getDate()-a),i.setHours(0,0,0,0),i}function startOfISOWeek(e,t){return startOfWeek_startOfWeek(e,{...t,weekStartsOn:1})}function getISOWeekYear_getISOWeekYear(e,t){let n=toDate(e,t?.in),r=n.getFullYear(),i=constructFrom_constructFrom(n,0);i.setFullYear(r+1,0,4),i.setHours(0,0,0,0);let o=startOfISOWeek(i),a=constructFrom_constructFrom(n,0);a.setFullYear(r,0,4),a.setHours(0,0,0,0);let s=startOfISOWeek(a);return n.getTime()>=o.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function startOfISOWeekYear(e,t){let n=getISOWeekYear_getISOWeekYear(e,t),r=constructFrom_constructFrom(t?.in||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),startOfISOWeek(r)}function getISOWeek_getISOWeek(e,t){let n=toDate(e,t?.in);return Math.round((startOfISOWeek(n)-startOfISOWeekYear(n))/millisecondsInWeek)+1}function getWeekYear(e,t){let n=toDate(e,t?.in),r=n.getFullYear(),i=getDefaultOptions(),o=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??i.firstWeekContainsDate??i.locale?.options?.firstWeekContainsDate??1,a=constructFrom_constructFrom(t?.in||e,0);a.setFullYear(r+1,0,o),a.setHours(0,0,0,0);let s=startOfWeek_startOfWeek(a,t),u=constructFrom_constructFrom(t?.in||e,0);u.setFullYear(r,0,o),u.setHours(0,0,0,0);let l=startOfWeek_startOfWeek(u,t);return+n>=+s?r+1:+n>=+l?r:r-1}function startOfWeekYear_startOfWeekYear(e,t){let n=getDefaultOptions(),r=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??n.firstWeekContainsDate??n.locale?.options?.firstWeekContainsDate??1,i=getWeekYear(e,t),o=constructFrom_constructFrom(t?.in||e,0);return o.setFullYear(i,0,r),o.setHours(0,0,0,0),startOfWeek_startOfWeek(o,t)}function getWeek_getWeek(e,t){let n=toDate(e,t?.in);return Math.round((startOfWeek_startOfWeek(n,t)-startOfWeekYear_startOfWeekYear(n,t))/millisecondsInWeek)+1}function addLeadingZeros(e,t){return(e<0?"-":"")+Math.abs(e).toString().padStart(t,"0")}const lightFormatters={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return addLeadingZeros("yy"===t?r%100:r,t.length)},M(e,t){let n=e.getMonth();return"M"===t?String(n+1):addLeadingZeros(n+1,2)},d:(e,t)=>addLeadingZeros(e.getDate(),t.length),a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];default:return"am"===n?"a.m.":"p.m."}},h:(e,t)=>addLeadingZeros(e.getHours()%12||12,t.length),H:(e,t)=>addLeadingZeros(e.getHours(),t.length),m:(e,t)=>addLeadingZeros(e.getMinutes(),t.length),s:(e,t)=>addLeadingZeros(e.getSeconds(),t.length),S(e,t){let n=t.length;return addLeadingZeros(Math.trunc(e.getMilliseconds()*Math.pow(10,n-3)),t.length)}},dayPeriodEnum={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},formatters={G:function(e,t,n){let r=+(e.getFullYear()>0);switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){let t=e.getFullYear(),r=t>0?t:1-t;return n.ordinalNumber(r,{unit:"year"})}return lightFormatters.y(e,t)},Y:function(e,t,n,r){let i=getWeekYear(e,r),o=i>0?i:1-i;return"YY"===t?addLeadingZeros(o%100,2):"Yo"===t?n.ordinalNumber(o,{unit:"year"}):addLeadingZeros(o,t.length)},R:function(e,t){return addLeadingZeros(getISOWeekYear_getISOWeekYear(e),t.length)},u:function(e,t){return addLeadingZeros(e.getFullYear(),t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return addLeadingZeros(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return addLeadingZeros(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return lightFormatters.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return addLeadingZeros(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let i=getWeek_getWeek(e,r);return"wo"===t?n.ordinalNumber(i,{unit:"week"}):addLeadingZeros(i,t.length)},I:function(e,t,n){let r=getISOWeek_getISOWeek(e);return"Io"===t?n.ordinalNumber(r,{unit:"week"}):addLeadingZeros(r,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getDate(),{unit:"date"}):lightFormatters.d(e,t)},D:function(e,t,n){let r=getDayOfYear_getDayOfYear(e);return"Do"===t?n.ordinalNumber(r,{unit:"dayOfYear"}):addLeadingZeros(r,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let i=e.getDay(),o=(i-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(o);case"ee":return addLeadingZeros(o,2);case"eo":return n.ordinalNumber(o,{unit:"day"});case"eee":return n.day(i,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(i,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(i,{width:"short",context:"formatting"});default:return n.day(i,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let i=e.getDay(),o=(i-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(o);case"cc":return addLeadingZeros(o,t.length);case"co":return n.ordinalNumber(o,{unit:"day"});case"ccc":return n.day(i,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(i,{width:"narrow",context:"standalone"});case"cccccc":return n.day(i,{width:"short",context:"standalone"});default:return n.day(i,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),i=0===r?7:r;switch(t){case"i":return String(i);case"ii":return addLeadingZeros(i,t.length);case"io":return n.ordinalNumber(i,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r,i=e.getHours();switch(r=12===i?dayPeriodEnum.noon:0===i?dayPeriodEnum.midnight:i/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r,i=e.getHours();switch(r=i>=17?dayPeriodEnum.evening:i>=12?dayPeriodEnum.afternoon:i>=4?dayPeriodEnum.morning:dayPeriodEnum.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){let t=e.getHours()%12;return 0===t&&(t=12),n.ordinalNumber(t,{unit:"hour"})}return lightFormatters.h(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getHours(),{unit:"hour"}):lightFormatters.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):addLeadingZeros(r,t.length)},k:function(e,t,n){let r=e.getHours();return(0===r&&(r=24),"ko"===t)?n.ordinalNumber(r,{unit:"hour"}):addLeadingZeros(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):lightFormatters.m(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getSeconds(),{unit:"second"}):lightFormatters.s(e,t)},S:function(e,t){return lightFormatters.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(0===r)return"Z";switch(t){case"X":return formatTimezoneWithOptionalMinutes(r);case"XXXX":case"XX":return formatTimezone(r);default:return formatTimezone(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return formatTimezoneWithOptionalMinutes(r);case"xxxx":case"xx":return formatTimezone(r);default:return formatTimezone(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+formatTimezoneShort(r,":");default:return"GMT"+formatTimezone(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+formatTimezoneShort(r,":");default:return"GMT"+formatTimezone(r,":")}},t:function(e,t,n){return addLeadingZeros(Math.trunc(e/1e3),t.length)},T:function(e,t,n){return addLeadingZeros(+e,t.length)}};function formatTimezoneShort(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),i=Math.trunc(r/60),o=r%60;return 0===o?n+String(i):n+String(i)+t+addLeadingZeros(o,2)}function formatTimezoneWithOptionalMinutes(e,t){return e%60==0?(e>0?"-":"+")+addLeadingZeros(Math.abs(e)/60,2):formatTimezone(e,t)}function formatTimezone(e,t=""){let n=e>0?"-":"+",r=Math.abs(e);return n+addLeadingZeros(Math.trunc(r/60),2)+t+addLeadingZeros(r%60,2)}const dateLongFormatter=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},timeLongFormatter=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},dateTimeLongFormatter=(e,t)=>{let n,r=e.match(/(P+)(p+)?/)||[],i=r[1],o=r[2];if(!o)return dateLongFormatter(e,t);switch(i){case"P":n=t.dateTime({width:"short"});break;case"PP":n=t.dateTime({width:"medium"});break;case"PPP":n=t.dateTime({width:"long"});break;default:n=t.dateTime({width:"full"})}return n.replace("{{date}}",dateLongFormatter(i,t)).replace("{{time}}",timeLongFormatter(o,t))},longFormatters={p:timeLongFormatter,P:dateTimeLongFormatter},dayOfYearTokenRE=/^D+$/,weekYearTokenRE=/^Y+$/,throwTokens=["D","DD","YY","YYYY"];function isProtectedDayOfYearToken(e){return dayOfYearTokenRE.test(e)}function isProtectedWeekYearToken(e){return weekYearTokenRE.test(e)}function warnOrThrowProtectedError(e,t,n){let r=protectedTokens_message(e,t,n);if(console.warn(r),throwTokens.includes(e))throw RangeError(r)}function protectedTokens_message(e,t,n){let r="Y"===e[0]?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}function isDate_isDate(e){return e instanceof Date||"object"==typeof e&&"[object Date]"===Object.prototype.toString.call(e)}function isValid_isValid(e){return!(!isDate_isDate(e)&&"number"!=typeof e||isNaN(+toDate(e)))}const formattingTokensRegExp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,longFormattingTokensRegExp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,escapedStringRegExp=/^'([^]*?)'?$/,doubleQuoteRegExp=/''/g,unescapedLatinCharacterRegExp=/[a-zA-Z]/;function format_format(e,t,n){let r=getDefaultOptions(),i=n?.locale??r.locale??enUS,o=n?.firstWeekContainsDate??n?.locale?.options?.firstWeekContainsDate??r.firstWeekContainsDate??r.locale?.options?.firstWeekContainsDate??1,a=n?.weekStartsOn??n?.locale?.options?.weekStartsOn??r.weekStartsOn??r.locale?.options?.weekStartsOn??0,s=toDate(e,n?.in);if(!isValid_isValid(s))throw RangeError("Invalid time value");let u=t.match(longFormattingTokensRegExp).map(e=>{let t=e[0];return"p"===t||"P"===t?(0,longFormatters[t])(e,i.formatLong):e}).join("").match(formattingTokensRegExp).map(e=>{if("''"===e)return{isToken:!1,value:"'"};let t=e[0];if("'"===t)return{isToken:!1,value:cleanEscapedString(e)};if(formatters[t])return{isToken:!0,value:e};if(t.match(unescapedLatinCharacterRegExp))throw RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return{isToken:!1,value:e}});i.localize.preprocessor&&(u=i.localize.preprocessor(s,u));let l={firstWeekContainsDate:o,weekStartsOn:a,locale:i};return u.map(r=>{if(!r.isToken)return r.value;let o=r.value;return(!n?.useAdditionalWeekYearTokens&&isProtectedWeekYearToken(o)||!n?.useAdditionalDayOfYearTokens&&isProtectedDayOfYearToken(o))&&warnOrThrowProtectedError(o,t,String(e)),(0,formatters[o[0]])(s,o,i.localize,l)}).join("")}function cleanEscapedString(e){let t=e.match(escapedStringRegExp);return t?t[1].replace(doubleQuoteRegExp,"'"):e}function uniqBy(e,t){let n=new Map;for(let r=0;r<e.length;r++){let i=e[r],o=t(i);n.has(o)||n.set(o,i)}return Array.from(n.values())}function identity(e){return e}function range(e,t,n=1){if(null==t&&(t=e,e=0),!Number.isInteger(n)||0===n)throw Error("The step value must be a non-zero integer.");let r=Math.max(Math.ceil((t-e)/n),0),i=Array(r);for(let t=0;t<r;t++)i[t]=e+t*n;return i}function isLength(e){return Number.isSafeInteger(e)&&e>=0}function isArrayLike(e){return null!=e&&"function"!=typeof e&&isLength(e.length)}function reduceRight(e,t=identity,n){let r,i;if(!e)return n;isArrayLike(e)?(r=range(0,e.length).reverse(),null==n&&e.length>0?(n=e[e.length-1],i=1):i=0):(r=Object.keys(e).reverse(),null==n?(n=e[r[0]],i=1):i=0);for(let o=i;o<r.length;o++){let i=r[o];n=t(n,e[i],i,e)}return n}const mgtvIdSchema=schemas_object({dramaId:schemas_string(),videoId:schemas_string().optional()}),mgtvSearchResponseSchema=schemas_object({data:schemas_object({contents:schemas_array(unknown().transform(e=>{var t,n;return null!=(n=null==(t=schemas_object({type:literal("media"),data:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({source:literal("imgo"),title:schemas_string().transform(e=>e.replace(/<[^>]*>?/g,"").trim()),url:schemas_string(),desc:schemas_array(schemas_string())}).transform(e=>{let[,,t,n]=e.url.split("/"),r=n.split(".").shift();return{...e,dramaId:t,videoId:r,get mediaType(){var i,o;return"电影"===(null==(o=e.desc)||null==(i=o[0].split("/"))?void 0:i[0].replace("类型:","").trim())?constants_MediaType.Movie:constants_MediaType.TV}}}).safeParse(e).data)?t:null})).transform(e=>compact(e))}).safeParse(e).data)?void 0:t.data)?n:null})).transform(e=>compact(e))})}).transform(e=>compact(e.data.contents.flat())),episodeBlacklistPattern=getEpisodeBlacklistPattern("^(.*?)(抢先(看|版)|加更(版)?|花絮|预告|特辑|(特别|惊喜|纳凉)?企划|彩蛋|专访|幕后(花絮)?|直播|纯享|未播|衍生|番外|合伙人手记|会员(专享|加长)|片花|精华|看点|速看|解读|reaction|超前营业|超前(vlog)?|陪看(记)?|.{3,}篇|影评)(.*?)$"),mgtvEpisodeInfoResponseSchema=schemas_object({data:schemas_object({tab_m:schemas_array(schemas_object({m:schemas_string()})).catch([]),list:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({isIntact:schemas_string(),isnew:schemas_string(),video_id:schemas_string(),t1:schemas_string().refine(e=>!episodeBlacklistPattern.test(e)),t2:schemas_string().refine(e=>!episodeBlacklistPattern.test(e)),t3:schemas_string(),time:schemas_string().transform(e=>reduceRight(e.split(":"),(e,t,n)=>0===n?e+parseInt(t):1===n?e+60*parseInt(t):e+3600*parseInt(t),0))}).safeParse(e).data)?t:null})).transform(e=>compact(e))})}),mgtvCommentConfigResponseSchema=schemas_object({status:literal(0),data:schemas_object({cdn_list:schemas_string().transform(e=>e.split(",")).catch(["bullet-ali.hitv.com"]),cdn_version:schemas_string()})}).transform(e=>e.data),commentColorSchema=schemas_object({r:schemas_number().min(0).max(255),g:schemas_number().min(0).max(255),b:schemas_number().min(0).max(255)}).transform(e=>256*e.r*256+256*e.g+e.b).catch(-1),mgtvCommentResponseSchema=schemas_object({data:schemas_object({items:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({ids:schemas_string(),content:schemas_string(),time:schemas_number().transform(e=>e/1e3),v2_color:schemas_object({color_left:commentColorSchema,color_right:commentColorSchema}).optional().transform(e=>e&&(-1!==e.color_left||-1!==e.color_right)?-1===e.color_left?e.color_right:-1===e.color_right?e.color_left:(e.color_left+e.color_right)/2:DEFAULT_COLOR_INT),v2_position:schemas_int().optional().transform(e=>{switch(e){case 1:return 5;case 2:return 4;default:return 1}})}).safeParse(e).data)?t:null}).transform(e=>{var t;return e&&null!=(t=providerCommentItemSchema.safeParse({id:e.ids,timestamp:e.time,mode:e.v2_position,color:e.v2_color,content:e.content}).data)?t:null})).transform(e=>compact(e))})}).transform(e=>e.data.items);function mgtv_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class MgTVScraper extends BaseScraper{async search(e){var t;let{success:n,data:r,error:i}=searchDanmuParamsSchema.safeParse(e);if(!n)return this.logger.error("搜索参数无效,错误:",prettifyError(i)),[];let{seriesName:o,season:a,airDate:s}=r;if(!o)return[];let u=await this.fetch.get("https://mobileso.bz.mgtv.com/msite/search/v2",{params:{q:o,pc:30,pn:1,sort:-99,ty:0,du:0,pt:0,corr:1,abroad:0,_support:"10000000000000000"},schema:mgtvSearchResponseSchema});if(!(null==(t=u.data)?void 0:t.length))return this.logger.warn("搜索结果为空"),[];let l=[];for(let e of u.data){if(e.mediaType===constants_MediaType.Movie){l.push({provider:this.providerName,dramaId:e.dramaId,dramaTitle:e.title,season:1});continue}let t=await this.getEpisodeInfo(e.dramaId,s);for(let n of null!=t?t:[])l.push({provider:this.providerName,dramaId:e.dramaId,dramaTitle:n.t3,season:null!=a?a:1})}return l}async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=await this.getEpisodeInfo(n.dramaId);if(!(null==r?void 0:r.length))return[];let i=r.map((e,t)=>{var r;return{provider:this.providerName,episodeId:this.generateIdString({dramaId:n.dramaId,videoId:e.video_id}),episodeTitle:e.t3,episodeNumber:null!=(r=this.getEpisodeIndexFromTitle(e.t2))?r:t+1}});return t?i.filter(e=>e.episodeNumber===t):i}async getSegments(e){let t=this.parseIdString(e);if(!t)return[];let n=await this.getEpisodeInfo(t.dramaId);if(!(null==n?void 0:n.length))return this.logger.warn("没有找到对应的剧集",t.dramaId),[];let r=n.find(e=>e.video_id===t.videoId);return r?Array.from({length:Math.ceil(r.time/60)},(e,t)=>({provider:this.providerName,startTime:60*t,segmentId:t.toString()})):(this.logger.warn("没有找到对应的集数",t.dramaId,t.videoId),[])}async getComments(e,t){var n,r,i;let o=this.parseIdString(e);if(!o)return[];let a=await this.fetch.get("https://galaxy.bz.mgtv.com/getctlbarrage",{params:{version:"8.1.39",abroad:0,uuid:"",os:"10.15.7",platform:0,mac:"",cid:o.dramaId,vid:o.videoId,pid:"",ticket:""},schema:mgtvCommentConfigResponseSchema,cache:{cacheKey:`mgtv:comment_config:${o.dramaId}_${o.videoId}`,ttl:TTL_1_DAY}});return a.data&&null!=(i=(await this.fetch.get(`https://${null==(n=a.data)?void 0:n.cdn_list[0]}/${null==(r=a.data)?void 0:r.cdn_version}/${t}.json`,{schema:mgtvCommentResponseSchema})).data)?i:[]}async getEpisodeInfo(e,t){var n,r,i,o,a;let s="";try{t&&(s=format_format(t,"yyyyMM"))}catch(e){this.logger.warn("Failed to format air date",e)}let u=[],l=await this.getEpisodeInfoByMonth(e,s);if(u.push(...null!=(r=null==l||null==(n=l.data)?void 0:n.list)?r:[]),!s&&(null==l?void 0:l.data.tab_m.length))for(let t of(this.logger.warn("没有指定月份,拉取全部月份"),null!=(i=null==l?void 0:l.data.tab_m)?i:[])){let n=await this.getEpisodeInfoByMonth(e,t.m);u.push(...null!=(a=null==n||null==(o=n.data)?void 0:o.list)?a:[])}return uniqBy(u,e=>e.video_id)}async getEpisodeInfoByMonth(e,t){return(await this.fetch.get("https://pcweb.api.mgtv.com/variety/showlist",{params:{allowedRC:1,collection_id:e,month:t,page:1,_support:"10000000"},schema:mgtvEpisodeInfoResponseSchema,cache:`mgtv_episode_info_${e}_${t}`,successStatus:[200]})).data}constructor(){super(),mgtv_define_property(this,"providerName","mgtv"),mgtv_define_property(this,"idSchema",mgtvIdSchema),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",Referer:"https://www.mgtv.com/","Sec-Fetch-Site":"same-site","Sec-Fetch-Mode":"cors","Sec-Fetch-Dest":"empty"})}}const assignValue=(e,t,n)=>{let r=e[t];Object.hasOwn(e,t)&&eq(r,n)&&(void 0!==n||t in e)||(e[t]=n)},IS_UNSIGNED_INTEGER=/^(?:0|[1-9]\d*)$/;function isIndex(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e<t;case"symbol":return!1;case"string":return IS_UNSIGNED_INTEGER.test(e)}}function isSymbol(e){return"symbol"==typeof e||e instanceof Symbol}const regexIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,regexIsPlainProp=/^\w*$/;function isKey(e,t){return!Array.isArray(e)&&(!!("number"==typeof e||"boolean"==typeof e||null==e||isSymbol(e))||"string"==typeof e&&(regexIsPlainProp.test(e)||!regexIsDeepProp.test(e))||null!=t&&Object.hasOwn(t,e))}function isObject_isObject(e){return null!==e&&("object"==typeof e||"function"==typeof e)}function updateWith(e,t,n,r){if(null==e&&!isObject_isObject(e))return e;let i=isKey(t,e)?[t]:Array.isArray(t)?t:"string"==typeof t?toPath(t):[t],o=e;for(let t=0;t<i.length&&null!=o;t++){let a,s=toKey(i[t]);if(!isUnsafeProperty(s)){if(t===i.length-1)a=n(o[s]);else{let n=o[s],u=r?.(n,s,e);a=void 0!==u?u:isObject_isObject(n)?n:isIndex(i[t+1])?[]:{}}assignValue(o,s,a),o=o[s]}}return e}function set_set(e,t,n){return updateWith(e,t,()=>n,()=>void 0)}const providerConfigSchema=schemas_object({"provider.renren.mode":schemas_enum(["default","choice"]).catch("default")}).transform(e=>{let t={};return Object.entries(e).forEach(e=>{let[n,r]=e;set_set(t,n,r)}),t.provider});var hmac_sha256=__webpack_require__(939),hmac_sha256_default=__webpack_require__.n(hmac_sha256);function isNil(e){return null==e}var aes=__webpack_require__(129),aes_default=__webpack_require__.n(aes),enc_utf8=__webpack_require__(60),enc_utf8_default=__webpack_require__.n(enc_utf8),mode_ecb=__webpack_require__(760),mode_ecb_default=__webpack_require__.n(mode_ecb),pad_pkcs7=__webpack_require__(186),pad_pkcs7_default=__webpack_require__.n(pad_pkcs7);const renrenIdSchema=schemas_object({dramaId:coerce_number(),episodeId:coerce_number().optional()}),AES_KEY="3b744389882a4067",aesResponeSchema=schemas_string().transform(e=>{let t=enc_base64_default().parse(e);return safeJsonParseWithZod(aes_default().decrypt({ciphertext:t},enc_utf8_default().parse(AES_KEY),{mode:mode_ecb_default(),padding:pad_pkcs7_default()}).toString(enc_utf8_default()),schemas_object({data:unknown()}))}),renrenSearchResponseSchema=schemas_object({searchDramaList:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({id:schemas_string(),title:schemas_string(),subtitle:schemas_string().optional(),classify:preprocess(e=>{var t;return null!=(t=({电影:constants_MediaType.Movie,电视剧:constants_MediaType.TV})[e])?t:null},schemas_enum(constants_MediaType).nullish().catch(null)),name:schemas_string().optional(),year:coerce_number().optional()}).safeParse(e).data)?t:null})).transform(e=>compact(e))}),schema_episodeBlacklistPattern=getEpisodeBlacklistPattern(),renrenDramaInfoResponseSchema=schemas_object({dramaInfo:schemas_object({dramaId:coerce_number(),title:schemas_string(),enName:schemas_string().optional(),seasonNo:coerce_number().optional()}).optional(),episodeList:schemas_array(unknown().transform(e=>{var t;return null!=(t=schemas_object({id:coerce_number(),episodeNo:coerce_number(),text:schemas_string().optional(),title:schemas_string().refine(e=>!schema_episodeBlacklistPattern.test(e)).optional()}).safeParse(e).data)?t:null})).transform(e=>compact(e))}),renrenCommentItemSchema=schemas_object({d:schemas_string(),p:schemas_string().transform(e=>{let t=e.split(","),n=coerce_number().catch(0).parse(t[0]),r=coerce_number().int().catch(1).parse(t[1]),i=coerce_number().int().catch(DEFAULT_COLOR_INT).parse(t[3]),o=t[6]||"",a=t[7]||`${n.toFixed(3)}:${o}`;return{timestamp:n,mode:r,color:i,userId:o,contentId:a}})}).transform(e=>{var t;return null!=(t=providerCommentItemSchema.safeParse({id:e.p.contentId,timestamp:e.p.timestamp,mode:e.p.mode,color:e.p.color,content:e.d}).data)?t:null});function renren_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const SIGN_SECRET="ES513W0B1CsdUrR13Qk5EgDAKPeeKZY",renren_BASE_API="https://api.rrmj.plus",CLIENT_TYPE="web_pc",CLIENT_VERSION="1.0.0";class RenRenScraper extends BaseScraper{get deviceId(){return generateUUID().toUpperCase()}async search(e){let{success:t,data:n,error:r}=searchDanmuParamsSchema.safeParse(e);if(!t)return this.logger.error("搜索参数无效,错误:",prettifyError(r)),[];let{seriesName:i,season:o}=n;if(!i)return[];let a=await this.request("/m-station/search/drama",{params:{keywords:i,size:Math.max(10,null!=o?o:1),order:"match",search_after:"",isExecuteVipActivity:!0},cache:{cacheKey:`renren:search:${i}`,ttl:TTL_1_DAY},schema:aesResponeSchema.transform(e=>{var t;let n=renrenSearchResponseSchema.safeParse(null==e?void 0:e.data);return n.success?null==(t=n.data)?void 0:t.searchDramaList:(this.logger.warn("搜索解析错误,错误:",prettifyError(n.error),null==e?void 0:e.data),[])})});if(!a.data)return[];this.logger.info("搜索结果:",a.data);let s=[];for await(let e of a.data){var u,l,c,d,f,h,p;let t=e.title.replace(/<[^>]+>/g,"").replace(":",":"),n=await this.getDramaInfo(e.id);if(!n){this.logger.warn("详细信息未找到,title:",t,"id:",e.id);continue}if(!((null==(l=n.dramaInfo)||null==(u=l.enName)?void 0:u.includes(i))||(null==(d=n.dramaInfo)||null==(c=d.title)?void 0:c.includes(i))||t.includes(i)||(null==(f=e.name)?void 0:f.includes(i)))){this.logger.warn("置信度过低,跳过,title:",t,"id:",e.id);continue}let r=!1,a=null!=(p=null==(h=n.dramaInfo)?void 0:h.seasonNo)?p:1;isNil(o)||a!==o||(r=!0);let m={provider:this.providerName,dramaId:e.id,dramaTitle:t,season:a};if(s.push(m),r){this.logger.info("命中高置信度,忽略其他,title:",t,"id:",e.id),s=[m];break}}return s}async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=await this.getDramaInfo(n.dramaId.toString());if(!r)return[];let i=r.episodeList.map(e=>{var t;return{provider:this.providerName,episodeId:this.generateIdString({dramaId:n.dramaId,episodeId:e.id}),episodeTitle:e.title||`${null==(t=r.dramaInfo)?void 0:t.title} E${e.episodeNo}`,episodeNumber:e.episodeNo}});return isNil(t)?i:i.filter(e=>e.episodeNumber===t)}async getSegments(){return[{provider:this.providerName,segmentId:"1",startTime:0}]}async getComments(e){let t=this.parseIdString(e);return(null==t?void 0:t.episodeId)?this.fetchEpisodeDanmu(t.episodeId.toString()):[]}async getDramaInfo(e){return(await this.request("/m-station/drama/page",{params:{hsdrOpen:0,isAgeLimit:0,dramaId:e,hevcOpen:1},schema:aesResponeSchema.transform(t=>{let n=renrenDramaInfoResponseSchema.safeParse(null==t?void 0:t.data);return n.success?n.data:(this.logger.warn("详细信息解析错误,dramaId:",e,"错误:",prettifyError(n.error),null==t?void 0:t.data),null)}),cache:{cacheKey:`renren:dramaInfo:${e}`,ttl:TTL_1_DAY}})).data}async fetchEpisodeDanmu(e){let t=`https://static-dm.rrmj.plus/v1/produce/danmu/EPISODE/${e}`;return"choice"===this.providerConfig.renren.mode&&(t=`https://static-dm.rrmj.plus/v1/produce/danmu/choice/EPISODE/${e}`),(await this.fetch.get(t,{headers:{Accept:"application/json"},schema:schemas_array(unknown().transform(e=>{var t;return null!=(t=renrenCommentItemSchema.safeParse(e).data)?t:null})).transform(e=>compact(e))})).data}generateSignature(e){let{method:t,aliId:n,timestampMs:r,path:i,sortedQuery:o,secret:a}=e,s=[t.toUpperCase(),`aliId:${n}`,`ct:${CLIENT_TYPE}`,`cv:${CLIENT_VERSION}`,`t:${r}`,`${i}?${o}`].join("\n"),u=hmac_sha256_default()(s,a);return enc_base64_default().stringify(u)}generateHeaders(e){let{method:t,path:n,params:r}=e,i=Object.entries(r).sort((e,t)=>e[0].localeCompare(t[0])).map(e=>{let[t,n]=e;return`${t}=${encodeURIComponent(n)}`}).join("&"),o=Date.now(),a=this.deviceId,s=this.generateSignature({method:t,aliId:a,timestampMs:o,path:n,sortedQuery:i,secret:SIGN_SECRET});return{clientVersion:CLIENT_VERSION,deviceId:a,clientType:CLIENT_TYPE,t:o.toString(),aliId:a,umid:a,token:"",cv:CLIENT_VERSION,ct:CLIENT_TYPE,uet:"9","x-ca-sign":s,Accept:"application/json"}}request(e,t){let{params:n={},...r}=t,i=this.generateHeaders({method:"GET",path:e,params:n});return this.fetch.get(`${renren_BASE_API}${e}`,{...r,headers:i,params:n})}constructor(){super(),renren_define_property(this,"providerName","renren"),renren_define_property(this,"idSchema",renrenIdSchema),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0",Origin:"https://rrsp.com.cn",Referer:"https://rrsp.com.cn/"})}}const tencentIdSchema=schemas_object({cid:schemas_string(),vid:schemas_string().optional()}),tencent_schema_episodeBlacklistPattern=getEpisodeBlacklistPattern("拍摄花絮|制作花絮|幕后花絮|未播花絮|独家花絮|花絮特辑|预告片|先导预告|终极预告|正式预告|官方预告|彩蛋片段|删减片段|未播片段|番外彩蛋|精彩片段|精彩看点|精彩回顾|精彩集锦|看点解析|看点预告|NG镜头|NG花絮|番外篇|番外特辑|制作特辑|拍摄特辑|幕后特辑|导演特辑|演员特辑|片尾曲|插曲|主题曲|背景音乐|OST|音乐MV|歌曲MV|前季回顾|剧情回顾|往期回顾|内容总结|剧情盘点|精选合集|剪辑合集|混剪视频|独家专访|演员访谈|导演访谈|主创访谈|媒体采访|发布会采访|抢先看|抢先版|试看版|短剧|vlog|纯享|加更|reaction|精编|会员版|Plus|独家版|特别版|短片|合唱"),tencentEpisodeSchema=schemas_object({vid:schemas_string().refine(e=>!!e),is_trailer:schemas_string().refine(e=>"1"!==e),title:schemas_string().refine(e=>!tencent_schema_episodeBlacklistPattern.test(e)),union_title:schemas_string().refine(e=>!tencent_schema_episodeBlacklistPattern.test(e)).optional()}),tencentEpisodeResultSchema=schemas_object({data:schemas_object({module_list_datas:schemas_array(schemas_object({module_datas:schemas_array(schemas_object({item_data_lists:schemas_object({item_datas:schemas_array(schemas_object({item_params:unknown().transform(e=>{var t;return null!=(t=tencentEpisodeSchema.safeParse(e).data)?t:null})}).transform(e=>{var t;return null!=(t=e.item_params)?t:null})).transform(e=>compact(e))})}))}))})}).transform(e=>{var t,n,r,i,o,a;return null!=(a=null==(o=e.data.module_list_datas)||null==(i=o[0])||null==(r=i.module_datas)||null==(n=r[0])||null==(t=n.item_data_lists)?void 0:t.item_datas)?a:[]}),tencentSegmentIndexSchema=schemas_object({segment_index:record(schemas_string(),schemas_object({segment_name:schemas_string()}))}),tencentCommentItemSchema=schemas_object({id:schemas_string(),content:schemas_string(),time_offset:coerce_number().transform(e=>e/1e3),content_style:schemas_string().nullish().transform(e=>safeJsonParseWithZod(null!=e?e:"{}",schemas_object({color:schemas_string().optional().default(DEFAULT_COLOR_HEX),position:schemas_number().optional().default(1),gradient_colors:schemas_array(schemas_string()).optional()}).transform(e=>{var t;let n=1;2===e.position?n=5:3===e.position&&(n=4);let r=e.color?parseInt(e.color,16):DEFAULT_COLOR_INT;return r===DEFAULT_COLOR_INT&&(null==(t=e.gradient_colors)?void 0:t.length)&&(r=e.gradient_colors.reduce((e,t)=>e+parseInt(t,16),0)/e.gradient_colors.length),{mode:n,color:r}})))}).transform(e=>{var t,n,r;return null!=(r=providerCommentItemSchema.safeParse({id:e.id,timestamp:e.time_offset,mode:null==(t=e.content_style)?void 0:t.mode,color:null==(n=e.content_style)?void 0:n.color,content:e.content}).data)?r:null}),tencentSegmentSchema=schemas_object({barrage_list:schemas_array(unknown().transform(e=>{var t;return null!=(t=tencentCommentItemSchema.safeParse(e).data)?t:null})).transform(e=>e.filter(e=>null!==e))});function tencent_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const tencent_pageSize=100;class TencentScraper extends BaseScraper{async getEpisodes(e,t){let n=this.parseIdString(e);if(!n)return[];let r=(await this.internalGetEpisodes(n.cid)).map((e,t)=>{let r=this.getEpisodeIndexFromTitle(e.title);return r||(r=t+1),{provider:this.providerName,episodeId:this.generateIdString({cid:n.cid,vid:e.vid}),episodeTitle:e.union_title&&e.union_title!==e.title?e.union_title:e.title,episodeNumber:r}});return void 0!==t?r.filter(e=>e.episodeNumber===t):r}async getSegments(e){let t=this.parseIdString(e);if(!t)return[];let n={};try{var r;let e=await this.fetch.get(`https://dm.video.qq.com/barrage/base/${t.vid}`,{schema:tencentSegmentIndexSchema,cache:{cacheKey:`tencent:segment:${t.vid}`,ttl:TTL_2_HOURS}});if(!e.data)return[];if(!(null==(r=e.data)?void 0:r.segment_index))return this.logger.info("vid:",t.vid,"没有找到弹幕分段索引。"),[];n=e.data.segment_index}catch(e){return this.logger.error("获取弹幕索引失败,vid:",t.vid,"错误:",e),[]}let i=Object.keys(n).sort((e,t)=>parseInt(e,10)-parseInt(t,10));return this.logger.debug("为 vid:",t.vid,"找到",i.length,"个弹幕分段"),i.map(e=>{var t;return{provider:this.providerName,startTime:parseInt(e,10)/1e3,segmentId:null==(t=n[e])?void 0:t.segment_name}})}async getComments(e,t){let n=this.parseIdString(e);if(!(null==n?void 0:n.vid))return[];let r=await this.internalGetComments(n.vid,t);return this.logger.info("找到",r.length,"条弹幕"),r}async internalGetEpisodes(e){let t=[],n=0,r="";for(this.fetch.setHeaders({Referer:`https://v.qq.com/x/cover/${e}.html`});;)try{var i;let o=null!=(i=(await this.fetch.post("https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2",{page_params:{cid:e,page_type:"detail_operation",page_id:"vsite_episode_list",id_type:"1",page_size:tencent_pageSize.toString(),lid:"0",req_from:"web_mobile",page_context:r},has_cache:1},{headers:{"Content-Type":"application/json"},schema:tencentEpisodeResultSchema,cache:{cacheKey:`tencent:episodes:${e}:${n}`}})).data)?i:[];if(o.length>=tencent_pageSize?(n+=1,r=url_parse.qs.stringify({episode_begin:n*tencent_pageSize,episode_end:(n+1)*tencent_pageSize,episode_step:tencent_pageSize})):r="",t.push(...o),!r)break}catch(t){this.logger.error("获取分集列表失败,cid:",e,"错误:",t);break}return t}async internalGetComments(e,t){try{var n,r;return null!=(r=null==(n=(await this.fetch.get(`https://dm.video.qq.com/barrage/segment/${e}/${t}`,{schema:tencentSegmentSchema})).data)?void 0:n.barrage_list)?r:[]}catch(n){return this.logger.error("获取分段",t,"失败,vid:",e,"错误:",n),[]}}constructor(){super(),tencent_define_property(this,"providerName","tencent"),tencent_define_property(this,"idSchema",tencentIdSchema),this.fetch.setCookie({pgv_pvid:"40b67e3b06027f3d",video_platform:"2",vversion_name:"8.2.95",video_bucketid:"4",video_omgid:"0a1ff6bc9407c0b1cff86ee5d359614d"}),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"})}}const youkuIdSchema=schemas_object({showId:schemas_string().optional(),vid:schemas_string().optional()}),youku_schema_episodeBlacklistPattern=getEpisodeBlacklistPattern("^(.*?)(抢先(版|篇)?|加更(版|篇)?|花絮|预告|特辑|彩蛋|专访|幕后(故事|花絮)?|直播|纯享|未播|衍生|番外|会员(专属|加长)?|片花|精华|看点|速览|解读|reaction|影评)(.*?)$"),youkuEpisodeInfoSchema=schemas_object({id:schemas_string(),show_id:schemas_string().optional(),title:schemas_string().refine(e=>!youku_schema_episodeBlacklistPattern.test(e)),seq:coerce_number().optional(),duration:schemas_string(),category:schemas_string(),link:schemas_string()}).transform(e=>({...e,get totalMat(){try{let t=parseFloat(e.duration);return Math.floor(t/60)+1}catch(e){return 0}}})),youkuVideoResultSchema=schemas_object({total:schemas_number().or(schemas_string().transform(e=>parseInt(e))),videos:schemas_array(youkuEpisodeInfoSchema)}),youkuCommentSchema=schemas_object({id:schemas_number(),content:schemas_string(),playat:schemas_number().transform(e=>e/1e3),propertis:schemas_string().nullish().transform(e=>safeJsonParseWithZod(null!=e?e:"{}",schemas_object({color:schemas_number().optional().default(DEFAULT_COLOR_INT),pos:schemas_number().optional().transform(e=>{let t=1;return 1===e?t=5:2===e&&(t=4),t})})))}).transform(e=>{var t,n,r;return null!=(r=providerCommentItemSchema.safeParse({id:e.id.toString(),timestamp:e.playat,mode:null==(t=e.propertis)?void 0:t.pos,color:null==(n=e.propertis)?void 0:n.color,content:e.content}).data)?r:null}),youkuDanmuResultSchema=schemas_object({data:schemas_object({result:schemas_array(youkuCommentSchema)})});function youku_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class YoukuScraper extends BaseScraper{get token(){var e,t;return(null!=(t=null==(e=this.fetch.getCookie("_m_h5_tk"))?void 0:e.split("_")[0])?t:"").substring(0,32)}get cna(){var e;return null!=(e=this.fetch.getCookie("cna"))?e:""}async getEpisodes(e,t){var n,r,i;let o=this.parseIdString(e);if(!o)return[];let a=o.showId;if(!a&&o.vid){let e=await this.getVideoInfo(o.vid);a=null!=(n=null==e?void 0:e.show_id)?n:""}if(!a)return[];let s=20,u=null!=t?t:1,l=Math.max(1,Math.ceil(u/20));try{let e=e=>e.filter(e=>!this.EPISODE_BLACKLIST_KEYWORDS.some(t=>e.title.includes(t))),n=(e,t)=>({provider:this.providerName,episodeId:this.generateIdString({showId:a,vid:e.id}),episodeTitle:e.title,episodeNumber:t}),o=await this.getEpisodesPage(a,l,s),c=e(null!=(r=null==o?void 0:o.videos)?r:[]),d=c.find(e=>e.seq===u);if(d)return[n(d,u)];let f=Number(null!=(i=null==o?void 0:o.total)?i:0),h=Math.max(1,Math.ceil(f/s)),p=Array.from({length:h},(e,t)=>t+1).filter(e=>e!==l),m=[];for(let e of p){await this.sleep(500);let t=await this.getEpisodesPage(a,e,s);m.push(t)}let g=e(m.flatMap(e=>{var t;return null!=(t=null==e?void 0:e.videos)?t:[]})),v=[...c,...g];if(void 0!==t){let e=v.find(e=>e.seq===u);return e?[n(e,u)]:[]}return v.sort((e,t)=>{var n,r;return(null!=(n=e.seq)?n:Number.MAX_SAFE_INTEGER)-(null!=(r=t.seq)?r:Number.MAX_SAFE_INTEGER)}).map((e,t)=>n(e,t+1))}catch(e){return this.logger.error("获取分集失败,showId:",a,"错误:",e),[]}}async getSegments(e){var t;let{vid:n}=null!=(t=this.parseIdString(e))?t:{};if(!n)return[];try{await this.ensureTokenCookie();let e=await this.getVideoInfo(n);if(!e)return this.logger.warn("获取分集信息失败,vid:",n),[];let t=e.totalMat;if(0===t)return this.logger.warn("视频时长为0,无法获取弹幕,vid:",n),[];return Array.from({length:t},(e,t)=>({provider:this.providerName,startTime:60*t,segmentId:t.toString()}))}catch(e){return this.logger.error("获取分段信息失败,vid:",n,"错误:",e),[]}}async getComments(e,t){var n;let{vid:r}=null!=(n=this.parseIdString(e))?n:{};if(!r)return[];try{return await this.ensureTokenCookie(),this.getDanmuContentByMat(r,parseInt(t,10))}catch(e){return this.logger.error("获取弹幕信息失败,vid:",r,"错误:",e),[]}}async getVideoInfo(e){return(await this.fetch.get("https://openapi.youku.com/v2/videos/show_basic.json",{params:{client_id:"53e6cc67237fc59a",package:"com.huawei.hwvplayer.youku",video_id:e},schema:youkuEpisodeInfoSchema,cache:{cacheKey:`youku:segments:${e}`}})).data}async getEpisodesPage(e,t,n){return(await this.fetch.get("https://openapi.youku.com/v2/shows/videos.json",{params:{client_id:"53e6cc67237fc59a",package:"com.huawei.hwvplayer.youku",ext:"show",show_id:e,page:t.toString(),count:n.toString()},schema:youkuVideoResultSchema,cache:{cacheKey:`youku:episodes:${e}:${t}:${n}`}})).data}async getDanmuContentByMat(e,t){if(!this.token)return this.logger.error("无法获取弹幕,_m_h5_tk 缺失"),[];let n={pid:0,ctype:10004,sver:"3.1.0",cver:"v1.0",ctime:Date.now(),guid:this.cna,vid:e,mat:t,mcount:1,type:1},r=JSON.stringify(Object.fromEntries(Object.entries(n).sort())),i=enc_base64_default().stringify(enc_utf8_default().parse(r));n.msg=i,n.sign=this.generateMsgSign(i);let o="24679788",a=JSON.stringify(n),s=Date.now().toString();try{var u,l,c;let e=null!=(c=null==(l=(await this.fetch.get("https://acs.youku.com/h5/mopen.youku.danmu.list/1.0/",{params:{jsv:"2.7.0",appKey:o,t:s,sign:this.generateTokenSign(s,o,a),api:"mopen.youku.danmu.list",v:"1.0",type:"originaljson",dataType:"jsonp",timeout:"20000",jsonpIncPrefix:"utility",data:a},headers:{Referer:"https://v.youku.com"},successStatus:[200],schema:looseObject({data:schemas_object({result:schemas_string().transform(e=>safeJsonParseWithZod(e,youkuDanmuResultSchema)).optional()})})})).data)||null==(u=l.data.result)?void 0:u.data.result)?c:[];return this.logger.info("获取到分段",t,"的弹幕",e.length,"条"),e}catch(n){return this.logger.error("解析弹幕响应失败,vid:",e,"mat:",t,"错误:",n),[]}}generateMsgSign(e){return md5_default()(`${e}MkmC9SoIw6xCkSKHhJ7b5D2r51kBiREr`).toString().toLowerCase()}generateTokenSign(e,t,n){return md5_default()([this.token,e,t,n].join("&")).toString().toLowerCase()}async ensureTokenCookie(){this.fetch.cookie={};try{await this.fetch.get("https://log.mmstat.com/eg.js",{headers:{Cookie:"","If-None-Match":""}})}catch(e){this.logger.warn("无法连接到 youku.com 获取 'cna' cookie。错误:",e)}try{await this.fetch.get("https://acs.youku.com/h5/mtop.com.youku.aplatform.weakget/1.0/?jsv=2.5.1&appKey=24679788")}catch(e){this.logger.error("无法连接到 acs.youku.com 获取令牌 cookie。弹幕获取很可能会失败。错误:",e)}this.cna&&this.token||this.logger.warn("未能获取到弹幕签名所需的全部 cookie。 cna:",this.cna,"token:",this.token)}constructor(){super(),youku_define_property(this,"providerName","youku"),youku_define_property(this,"idSchema",youkuIdSchema),youku_define_property(this,"EPISODE_BLACKLIST_KEYWORDS",["彩蛋","加更","走心","解忧","纯享"]),this.fetch.setHeaders({"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"})}}function scrapers_define_property(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const scrapers=[TencentScraper,YoukuScraper,IqiyiScraper,BilibiliScraper,RenRenScraper,MgTVScraper];class scrapers_Scraper{get scraperMap(){return keyBy(this.scrapers,e=>e.providerName)}async getSegmentsByProvider(e,t){let n=this.scraperMap[e];if(!n)return[];let r=await n.getSegments(t);return sortBy(r,["startTime"])}findSegmentAtTime(e,t){var n;if(!e.length)return null;let r=0,i=e.length-1;for(;r<=i;){let n=r+i>>1;e[n].startTime<=t?r=n+1:i=n-1}let o=i;return o<0?null:null!=(n=e[o])?n:null}async getSegmentWithTime(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;for(var t,n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];let o=[];for(let{provider:t,idString:n}of r)o.push((async()=>{let r=await this.getSegmentsByProvider(t,n);if(!r.length)return null;let i=this.findSegmentAtTime(r,e);if(!i)return null;let o=this.scraperMap[t];if(!o)return null;let a=await o.getComments(n,i.segmentId);return a?{comments:a,provider:t}:null})());let a=await Promise.all(o),s=new Map;for(let e of a)if(null==e||null==(t=e.comments)?void 0:t.length)for(let t of e.comments){if(!t)continue;let n=[t.mode,t.color,t.content].join("___"),r=s.get(n);r?(t.timestamp<r.item.timestamp&&(r.item=t),r.count+=1):s.set(n,{item:t,count:1,provider:e.provider})}let u=[];return s.forEach(e=>{let{item:t,count:n,provider:r}=e,i=n>1?`${t.content} \xd7 ${n}`:t.content;u.push({cid:t.id,p:`${t.timestamp.toFixed(2)},${t.mode},${t.color},[${r}]`,m:i})}),u}getDanmuWithSegmentTimeByVideoId(e,t){let n=e.split(",").map(e=>{let[t,n]=e.split(":");return{provider:t,idString:n}});return this.getSegmentWithTime(t,...n)}async getEpisodes(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];let r=[];for(let{provider:e,idString:n,episodeNumber:i}of t){let t=this.scraperMap[e];t&&r.push(t.getEpisodes(n,i).catch(e=>(console.error(e),[])))}return(await Promise.all(r).catch(e=>(console.error(e),[]))).flat().map(e=>({...e,episodeId:`${e.provider}:${e.episodeId}`}))}getEpisodeNumber(e,t){if(e===constants_MediaType.TV&&t)return parseInt(t)}async getDetailWithAnimeId(e,t,n){let[r,i]=e.split(":");return await this.getEpisodes({provider:r,idString:i,episodeNumber:this.getEpisodeNumber(t,n)})}async getDetailWithDoubanIds(e,t,n){let r=await Promise.all(e.map(e=>getVideoPlatformInfoByDoubanId(e).catch(()=>null))),i=this.getEpisodeNumber(t,n),o=[];for(let e of r)e&&Object.entries(e.providers).forEach(e=>{var t,n;let[r,a]=e;o.push({provider:r,idString:null!=(n=null==(t=this.scraperMap[r])?void 0:t.generateIdString(a))?n:"",episodeNumber:i})});return this.getEpisodes(...uniqWith(o,isEqual))}async getDetailWithSearchParams(e){let t=[];for(let n of this.scrapers)n.search&&t.push(n.search(e).catch(e=>(console.error(e),[])));let n=(await Promise.all(t)).flat();if(!n.length)return[];let r=this.getEpisodeNumber(e.type,e.episode),i=[];for(let e of n){let t=this.scraperMap[e.provider];if(!t)continue;let n=t.generateIdString({dramaId:e.dramaId});i.push({provider:e.provider,idString:n,episodeNumber:r})}if("true"===e.qihooSearch){let t=await searchVideoPlatformInfoWith360kan(e);i.push(...t)}return this.getEpisodes(...uniqWith(i,isEqual))}setProviderConfig(e){let{success:t,data:n}=providerConfigSchema.safeParse(e);t&&this.scrapers.forEach(e=>{e.providerConfig=n})}constructor(){scrapers_define_property(this,"scrapers",[]),scrapers.forEach(e=>{this.scrapers.push(new e)})}}const scrapers_scraper=new scrapers_Scraper,widgetVersion="0.7.0";WidgetMetadata = {id:"baranwang.danmu.universe",title:"通用弹幕",description:"通用弹幕插件,支持腾讯、优酷、爱奇艺、哔哩哔哩、人人视频等平台",author:"Baran",version:widgetVersion,site:"https://github.com/baranwang/forward-widgets/tree/main/packages/danmu-universe",requiredVersion:"0.0.2",globalParams:[{title:"模糊匹配",name:"fuzzyMatch",description:"是否开启模糊匹配",value:"auto",type:"enumeration",enumOptions:[{title:"自动",value:"auto"},{title:"始终开启",value:"always"},{title:"始终关闭",value:"never"}]},{title:"360 影视搜索(实验性)",name:"qihooSearch",description:"是否开启 360 影视搜索",value:"false",type:"enumeration",enumOptions:[{title:"开启",value:"true"},{title:"关闭",value:"false"}]},{title:"未匹配到资源提示",name:"emptyAnimeTitle",description:"是否显示未匹配到资源提示",value:"true",type:"enumeration",enumOptions:[{title:"开启",value:"true"},{title:"关闭",value:"false"}]},{title:`[${PROVIDER_NAMES.renren}] \u{5F39}\u{5E55}\u{6A21}\u{5F0F}`,name:"provider.renren.mode",description:"弹幕模式,精选弹幕相比默认弹幕质量更高",value:"default",type:"enumeration",enumOptions:[{title:"默认",value:"default"},{title:"精选",value:"choice"}]}],modules:[{type:"danmu",id:"searchDanmu",title:"搜索弹幕",functionName:"searchDanmu",description:"搜索弹幕"},{type:"danmu",id:"getDetail",title:"获取详情",functionName:"getDetail",description:"获取详情"},{type:"danmu",id:"getComments",title:"获取弹幕",functionName:"getComments",description:"获取弹幕"},{type:"danmu",id:"getDanmuWithSegmentTime",title:"获取弹幕切片",functionName:"getComments",description:"获取弹幕切片"}]},searchDanmu=async e=>{scrapers_scraper.setProviderConfig(e);let{type:t,episode:n,fuzzyMatch:r="auto"}=e,i=[],o=await getDoubanIds(e);if(o.length&&(i=await scrapers_scraper.getDetailWithDoubanIds(o,t,n)),!(null==i?void 0:i.length)&&"auto"===r||"always"===r){let t=await scrapers_scraper.getDetailWithSearchParams(e);i=i.concat(t)}let a=stringbool().catch(!0).parse(e.emptyAnimeTitle);return!i.length&&a?{animes:[{animeId:EMPTY_ANIME_CONFIG.ID,animeTitle:EMPTY_ANIME_CONFIG.TITLE}]}:{animes:i.map(e=>{let t=`[${PROVIDER_NAMES[e.provider]}] `;return e.episodeTitle&&(t+=e.episodeTitle),{animeId:e.episodeId,animeTitle:t}})}},getDetail=async e=>{scrapers_scraper.setProviderConfig(e);let{animeId:t,type:n,episode:r}=e;return t&&t!==EMPTY_ANIME_CONFIG.ID?scrapers_scraper.getDetailWithAnimeId(t.toString(),n,r):null},getComments=async e=>{scrapers_scraper.setProviderConfig(e);let{animeId:t,commentId:n,segmentTime:r,tmdbId:i,type:o,episode:a}=e,s=null!=n?n:t;if(s===EMPTY_ANIME_CONFIG.ID)return null;if(!s){if(!i)return null;let t=await getDoubanIds(e);if(!t.length)return null;s=(await scrapers_scraper.getDetailWithDoubanIds(t,o,a)).map(e=>[e.provider,e.episodeId].join(":")).join(",")}let u=await scrapers_scraper.getDanmuWithSegmentTimeByVideoId(s.toString(),r);return{comments:u,count:u.length}};
|