@hopeplayer/react-native 1.0.16 → 1.0.18
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/player-html.js +31 -11
- package/dist/player-html.js.map +1 -1
- package/dist/playerHtml.d.ts.map +1 -1
- package/package.json +3 -10
package/dist/player-html.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const i = "1.0.18", d = `https://cdn.jsdelivr.net/npm/@hopeplayer/core@${i}/dist/hope-player.js`, s = [
|
|
2
2
|
"hp:play",
|
|
3
3
|
"hp:pause",
|
|
4
4
|
"hp:ended",
|
|
@@ -15,16 +15,16 @@ function t(e) {
|
|
|
15
15
|
return JSON.stringify(e).split("<").join("\\u003c").split(l).join("\\u2028").split(p).join("\\u2029");
|
|
16
16
|
}
|
|
17
17
|
function c(e) {
|
|
18
|
-
const
|
|
18
|
+
const a = e.coreUrl ?? d, r = e.backgroundColor ?? "#000", o = e.timeUpdateIntervalMs ?? 250, n = (e.css ?? "").split("</").join("<\\/");
|
|
19
19
|
return `<!DOCTYPE html>
|
|
20
20
|
<html>
|
|
21
21
|
<head>
|
|
22
22
|
<meta charset="utf-8">
|
|
23
23
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
|
24
24
|
<style>
|
|
25
|
-
html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: ${
|
|
25
|
+
html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: ${r}; }
|
|
26
26
|
hope-player { display: block; width: 100%; }
|
|
27
|
-
${
|
|
27
|
+
${n}
|
|
28
28
|
</style>
|
|
29
29
|
</head>
|
|
30
30
|
<body>
|
|
@@ -41,7 +41,7 @@ let run = null;
|
|
|
41
41
|
window.__hopeCommand = (cmd) => (run ? run(cmd) : queue.push(cmd));
|
|
42
42
|
|
|
43
43
|
try {
|
|
44
|
-
await import(${t(
|
|
44
|
+
await import(${t(a)});
|
|
45
45
|
} catch (err) {
|
|
46
46
|
post('error', { message: 'HopePlayer core could not be loaded: ' + (err && err.message ? err.message : String(err)), code: 'core-load' });
|
|
47
47
|
throw err;
|
|
@@ -57,7 +57,7 @@ for (const name of ${t(s)}) {
|
|
|
57
57
|
let lastTimeUpdate = 0;
|
|
58
58
|
const sendTime = (force) => {
|
|
59
59
|
const now = Date.now();
|
|
60
|
-
if (!force && now - lastTimeUpdate < ${
|
|
60
|
+
if (!force && now - lastTimeUpdate < ${o}) return;
|
|
61
61
|
lastTimeUpdate = now;
|
|
62
62
|
post('timeupdate', { currentTime: video.currentTime, duration: Number.isFinite(video.duration) ? video.duration : null, paused: video.paused });
|
|
63
63
|
};
|
|
@@ -65,12 +65,32 @@ video.addEventListener('timeupdate', () => sendTime(false));
|
|
|
65
65
|
video.addEventListener('seeked', () => sendTime(true));
|
|
66
66
|
video.addEventListener('loadedmetadata', () => post('loadedmetadata', { duration: Number.isFinite(video.duration) ? video.duration : null, width: video.videoWidth, height: video.videoHeight }));
|
|
67
67
|
|
|
68
|
+
// Sarma: meta veri yoksa beklenir; WebKit (iOS WKWebView) meta veri işlenirken yapılan sarmayı sıfırlayabildiği için
|
|
69
|
+
// sonucu (seeked) doğrulanır, kaydıysa yeniden uygulanır. Art arda gelen sarmalarda son hedef geçerli.
|
|
70
|
+
let seekTarget = null;
|
|
71
|
+
let seekRetries = 0;
|
|
72
|
+
const applySeek = () => {
|
|
73
|
+
if (seekTarget === null) return;
|
|
74
|
+
if (Math.abs(video.currentTime - seekTarget) <= 0.5 || seekRetries-- <= 0) {
|
|
75
|
+
seekTarget = null;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
video.addEventListener('seeked', applySeek, { once: true });
|
|
79
|
+
video.currentTime = seekTarget;
|
|
80
|
+
};
|
|
81
|
+
const seekTo = (time) => {
|
|
82
|
+
seekTarget = Number(time) || 0;
|
|
83
|
+
seekRetries = 3;
|
|
84
|
+
if (video.readyState >= 1) applySeek();
|
|
85
|
+
else video.addEventListener('loadedmetadata', applySeek, { once: true });
|
|
86
|
+
};
|
|
87
|
+
|
|
68
88
|
run = (cmd) => {
|
|
69
89
|
switch (cmd && cmd.type) {
|
|
70
90
|
case 'options': el.options = cmd.options; break;
|
|
71
91
|
case 'play': video.play().catch((err) => post('error', { message: String(err && err.message ? err.message : err), code: 'play' })); break;
|
|
72
92
|
case 'pause': video.pause(); break;
|
|
73
|
-
case 'seek':
|
|
93
|
+
case 'seek': seekTo(cmd.time); break;
|
|
74
94
|
case 'muted': video.muted = !!cmd.value; break;
|
|
75
95
|
case 'toggleStats': el.toggleStats(cmd.force); break;
|
|
76
96
|
}
|
|
@@ -81,13 +101,13 @@ post('ready', { version: el.constructor.version || null });
|
|
|
81
101
|
</body>
|
|
82
102
|
</html>`;
|
|
83
103
|
}
|
|
84
|
-
function
|
|
104
|
+
function u(e) {
|
|
85
105
|
return `window.__hopeCommand && window.__hopeCommand(${t(e)}); true;`;
|
|
86
106
|
}
|
|
87
107
|
export {
|
|
88
|
-
|
|
89
|
-
|
|
108
|
+
d as DEFAULT_CORE_URL,
|
|
109
|
+
i as HOPE_PLAYER_RN_VERSION,
|
|
90
110
|
c as buildPlayerHtml,
|
|
91
|
-
|
|
111
|
+
u as commandScript
|
|
92
112
|
};
|
|
93
113
|
//# sourceMappingURL=player-html.js.map
|
package/dist/player-html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player-html.js","sources":["../src/playerHtml.ts"],"sourcesContent":["import type { HopePlayerOptions } from '@hopeplayer/core';\n\n/** Paket sürümü — build sırasında package.json'dan gömülür; varsayılan core adresi aynı sürüme sabitlenir. */\nexport const HOPE_PLAYER_RN_VERSION: string = __HOPE_VERSION__;\n\n/** Varsayılan core adresi: jsDelivr üzerinden bu paketle aynı sürümdeki @hopeplayer/core. */\nexport const DEFAULT_CORE_URL = `https://cdn.jsdelivr.net/npm/@hopeplayer/core@${HOPE_PLAYER_RN_VERSION}/dist/hope-player.js`;\n\n/** WebView → React Native mesajı. `type`: köprü olayı (ready/timeupdate/error) ya da `hp:` öneki atılmış player olayı. */\nexport interface HopeBridgeMessage {\n __hope: 1;\n type: string;\n data: unknown;\n}\n\n/** React Native → WebView komutu (`window.__hopeCommand`). */\nexport type HopeBridgeCommand =\n | { type: 'options'; options: HopePlayerOptions }\n | { type: 'play' }\n | { type: 'pause' }\n | { type: 'seek'; time: number }\n | { type: 'muted'; value: boolean }\n | { type: 'toggleStats'; force?: boolean };\n\nexport interface PlayerHtmlConfig {\n /** Başlangıç seçenekleri — JSON'a çevrilebilir olmalı (fonksiyonlar WebView'a taşınamaz). */\n options: HopePlayerOptions;\n /** @hopeplayer/core ESM giriş dosyası. Varsayılan: jsDelivr, aynı sürüm. */\n coreUrl?: string;\n /** Sayfa arka planı (player yüklenene kadar görünen). Varsayılan #000. */\n backgroundColor?: string;\n /** WebView sayfasına eklenen CSS — `--hp-*` token'ları ve `hope-player::part(...)` kuralları için. */\n css?: string;\n /** `timeupdate` köprü olayının en sık gönderilme aralığı (ms). Varsayılan 250. */\n timeUpdateIntervalMs?: number;\n}\n\n/** Player'ın yaydığı ve React Native'e aktarılan olaylar (`hp:` öneki atılarak). */\nconst FORWARDED_EVENTS = [\n 'hp:play',\n 'hp:pause',\n 'hp:ended',\n 'hp:error',\n 'hp:qualitychange',\n 'hp:ratechange',\n 'hp:adstart',\n 'hp:adend',\n 'hp:aderror',\n 'hp:itemchange',\n 'hp:pausead',\n];\n\n/** Satır/paragraf ayırıcı — JSON'da geçerli, JS string'inde (eski motorlarda) değil. */\nconst LINE_SEP = String.fromCharCode(0x2028);\nconst PARA_SEP = String.fromCharCode(0x2029);\n\n/** JSON'u <script> içine güvenle gömer (`</script>` ve satır ayırıcıları kaçırılır). */\nfunction inlineJson(value: unknown): string {\n return JSON.stringify(value).split('<').join('\\\\u003c').split(LINE_SEP).join('\\\\u2028').split(PARA_SEP).join('\\\\u2029');\n}\n\n/**\n * WebView'da çalışan sayfa: <hope-player> + köprü. React Native `window.__hopeCommand(...)` ile komut verir\n * (injectJavaScript), sayfa olayları `window.ReactNativeWebView.postMessage` ile geri gönderir.\n */\nexport function buildPlayerHtml(config: PlayerHtmlConfig): string {\n const coreUrl = config.coreUrl ?? DEFAULT_CORE_URL;\n const background = config.backgroundColor ?? '#000';\n const interval = config.timeUpdateIntervalMs ?? 250;\n // `</style` CSS'in içinden <style> etiketini kapatamasın.\n const css = (config.css ?? '').split('</').join('<\\\\/');\n return `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\">\n<style>\nhtml, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: ${background}; }\nhope-player { display: block; width: 100%; }\n${css}\n</style>\n</head>\n<body>\n<hope-player id=\"hope-player\"></hope-player>\n<script type=\"module\">\nconst post = (type, data) => {\n const message = JSON.stringify({ __hope: 1, type, data: data === undefined ? null : data });\n if (window.ReactNativeWebView) window.ReactNativeWebView.postMessage(message);\n else if (window.parent !== window) window.parent.postMessage(message, '*');\n};\n// Player hazır olana kadar gelen komutlar sıraya alınır.\nconst queue = [];\nlet run = null;\nwindow.__hopeCommand = (cmd) => (run ? run(cmd) : queue.push(cmd));\n\ntry {\n await import(${inlineJson(coreUrl)});\n} catch (err) {\n post('error', { message: 'HopePlayer core could not be loaded: ' + (err && err.message ? err.message : String(err)), code: 'core-load' });\n throw err;\n}\nawait customElements.whenDefined('hope-player');\nconst el = document.getElementById('hope-player');\nel.options = ${inlineJson(config.options)};\nconst video = el.shadowRoot.querySelector('video');\n\nfor (const name of ${inlineJson(FORWARDED_EVENTS)}) {\n el.addEventListener(name, (e) => post(name.slice(3), e.detail === undefined ? null : e.detail));\n}\nlet lastTimeUpdate = 0;\nconst sendTime = (force) => {\n const now = Date.now();\n if (!force && now - lastTimeUpdate < ${interval}) return;\n lastTimeUpdate = now;\n post('timeupdate', { currentTime: video.currentTime, duration: Number.isFinite(video.duration) ? video.duration : null, paused: video.paused });\n};\nvideo.addEventListener('timeupdate', () => sendTime(false));\nvideo.addEventListener('seeked', () => sendTime(true));\nvideo.addEventListener('loadedmetadata', () => post('loadedmetadata', { duration: Number.isFinite(video.duration) ? video.duration : null, width: video.videoWidth, height: video.videoHeight }));\n\nrun = (cmd) => {\n switch (cmd && cmd.type) {\n case 'options': el.options = cmd.options; break;\n case 'play': video.play().catch((err) => post('error', { message: String(err && err.message ? err.message : err), code: 'play' })); break;\n case 'pause': video.pause(); break;\n case 'seek':
|
|
1
|
+
{"version":3,"file":"player-html.js","sources":["../src/playerHtml.ts"],"sourcesContent":["import type { HopePlayerOptions } from '@hopeplayer/core';\n\n/** Paket sürümü — build sırasında package.json'dan gömülür; varsayılan core adresi aynı sürüme sabitlenir. */\nexport const HOPE_PLAYER_RN_VERSION: string = __HOPE_VERSION__;\n\n/** Varsayılan core adresi: jsDelivr üzerinden bu paketle aynı sürümdeki @hopeplayer/core. */\nexport const DEFAULT_CORE_URL = `https://cdn.jsdelivr.net/npm/@hopeplayer/core@${HOPE_PLAYER_RN_VERSION}/dist/hope-player.js`;\n\n/** WebView → React Native mesajı. `type`: köprü olayı (ready/timeupdate/error) ya da `hp:` öneki atılmış player olayı. */\nexport interface HopeBridgeMessage {\n __hope: 1;\n type: string;\n data: unknown;\n}\n\n/** React Native → WebView komutu (`window.__hopeCommand`). */\nexport type HopeBridgeCommand =\n | { type: 'options'; options: HopePlayerOptions }\n | { type: 'play' }\n | { type: 'pause' }\n | { type: 'seek'; time: number }\n | { type: 'muted'; value: boolean }\n | { type: 'toggleStats'; force?: boolean };\n\nexport interface PlayerHtmlConfig {\n /** Başlangıç seçenekleri — JSON'a çevrilebilir olmalı (fonksiyonlar WebView'a taşınamaz). */\n options: HopePlayerOptions;\n /** @hopeplayer/core ESM giriş dosyası. Varsayılan: jsDelivr, aynı sürüm. */\n coreUrl?: string;\n /** Sayfa arka planı (player yüklenene kadar görünen). Varsayılan #000. */\n backgroundColor?: string;\n /** WebView sayfasına eklenen CSS — `--hp-*` token'ları ve `hope-player::part(...)` kuralları için. */\n css?: string;\n /** `timeupdate` köprü olayının en sık gönderilme aralığı (ms). Varsayılan 250. */\n timeUpdateIntervalMs?: number;\n}\n\n/** Player'ın yaydığı ve React Native'e aktarılan olaylar (`hp:` öneki atılarak). */\nconst FORWARDED_EVENTS = [\n 'hp:play',\n 'hp:pause',\n 'hp:ended',\n 'hp:error',\n 'hp:qualitychange',\n 'hp:ratechange',\n 'hp:adstart',\n 'hp:adend',\n 'hp:aderror',\n 'hp:itemchange',\n 'hp:pausead',\n];\n\n/** Satır/paragraf ayırıcı — JSON'da geçerli, JS string'inde (eski motorlarda) değil. */\nconst LINE_SEP = String.fromCharCode(0x2028);\nconst PARA_SEP = String.fromCharCode(0x2029);\n\n/** JSON'u <script> içine güvenle gömer (`</script>` ve satır ayırıcıları kaçırılır). */\nfunction inlineJson(value: unknown): string {\n return JSON.stringify(value).split('<').join('\\\\u003c').split(LINE_SEP).join('\\\\u2028').split(PARA_SEP).join('\\\\u2029');\n}\n\n/**\n * WebView'da çalışan sayfa: <hope-player> + köprü. React Native `window.__hopeCommand(...)` ile komut verir\n * (injectJavaScript), sayfa olayları `window.ReactNativeWebView.postMessage` ile geri gönderir.\n */\nexport function buildPlayerHtml(config: PlayerHtmlConfig): string {\n const coreUrl = config.coreUrl ?? DEFAULT_CORE_URL;\n const background = config.backgroundColor ?? '#000';\n const interval = config.timeUpdateIntervalMs ?? 250;\n // `</style` CSS'in içinden <style> etiketini kapatamasın.\n const css = (config.css ?? '').split('</').join('<\\\\/');\n return `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\">\n<style>\nhtml, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: ${background}; }\nhope-player { display: block; width: 100%; }\n${css}\n</style>\n</head>\n<body>\n<hope-player id=\"hope-player\"></hope-player>\n<script type=\"module\">\nconst post = (type, data) => {\n const message = JSON.stringify({ __hope: 1, type, data: data === undefined ? null : data });\n if (window.ReactNativeWebView) window.ReactNativeWebView.postMessage(message);\n else if (window.parent !== window) window.parent.postMessage(message, '*');\n};\n// Player hazır olana kadar gelen komutlar sıraya alınır.\nconst queue = [];\nlet run = null;\nwindow.__hopeCommand = (cmd) => (run ? run(cmd) : queue.push(cmd));\n\ntry {\n await import(${inlineJson(coreUrl)});\n} catch (err) {\n post('error', { message: 'HopePlayer core could not be loaded: ' + (err && err.message ? err.message : String(err)), code: 'core-load' });\n throw err;\n}\nawait customElements.whenDefined('hope-player');\nconst el = document.getElementById('hope-player');\nel.options = ${inlineJson(config.options)};\nconst video = el.shadowRoot.querySelector('video');\n\nfor (const name of ${inlineJson(FORWARDED_EVENTS)}) {\n el.addEventListener(name, (e) => post(name.slice(3), e.detail === undefined ? null : e.detail));\n}\nlet lastTimeUpdate = 0;\nconst sendTime = (force) => {\n const now = Date.now();\n if (!force && now - lastTimeUpdate < ${interval}) return;\n lastTimeUpdate = now;\n post('timeupdate', { currentTime: video.currentTime, duration: Number.isFinite(video.duration) ? video.duration : null, paused: video.paused });\n};\nvideo.addEventListener('timeupdate', () => sendTime(false));\nvideo.addEventListener('seeked', () => sendTime(true));\nvideo.addEventListener('loadedmetadata', () => post('loadedmetadata', { duration: Number.isFinite(video.duration) ? video.duration : null, width: video.videoWidth, height: video.videoHeight }));\n\n// Sarma: meta veri yoksa beklenir; WebKit (iOS WKWebView) meta veri işlenirken yapılan sarmayı sıfırlayabildiği için\n// sonucu (seeked) doğrulanır, kaydıysa yeniden uygulanır. Art arda gelen sarmalarda son hedef geçerli.\nlet seekTarget = null;\nlet seekRetries = 0;\nconst applySeek = () => {\n if (seekTarget === null) return;\n if (Math.abs(video.currentTime - seekTarget) <= 0.5 || seekRetries-- <= 0) {\n seekTarget = null;\n return;\n }\n video.addEventListener('seeked', applySeek, { once: true });\n video.currentTime = seekTarget;\n};\nconst seekTo = (time) => {\n seekTarget = Number(time) || 0;\n seekRetries = 3;\n if (video.readyState >= 1) applySeek();\n else video.addEventListener('loadedmetadata', applySeek, { once: true });\n};\n\nrun = (cmd) => {\n switch (cmd && cmd.type) {\n case 'options': el.options = cmd.options; break;\n case 'play': video.play().catch((err) => post('error', { message: String(err && err.message ? err.message : err), code: 'play' })); break;\n case 'pause': video.pause(); break;\n case 'seek': seekTo(cmd.time); break;\n case 'muted': video.muted = !!cmd.value; break;\n case 'toggleStats': el.toggleStats(cmd.force); break;\n }\n};\nqueue.splice(0).forEach(run);\npost('ready', { version: el.constructor.version || null });\n</script>\n</body>\n</html>`;\n}\n\n/** `window.__hopeCommand(...)` çağrısı — WebView `injectJavaScript`'e verilir (sondaki `true` iOS uyarısını önler). */\nexport function commandScript(cmd: HopeBridgeCommand): string {\n return `window.__hopeCommand && window.__hopeCommand(${inlineJson(cmd)}); true;`;\n}\n"],"names":["HOPE_PLAYER_RN_VERSION","DEFAULT_CORE_URL","FORWARDED_EVENTS","LINE_SEP","PARA_SEP","inlineJson","value","buildPlayerHtml","config","coreUrl","background","interval","css","commandScript","cmd"],"mappings":"AAGO,MAAMA,IAAiC,UAGjCC,IAAmB,iDAAiDD,CAAsB,wBAgCjGE,IAAmB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAGMC,IAAW,UACXC,IAAW;AAGjB,SAASC,EAAWC,GAAwB;AACxC,SAAO,KAAK,UAAUA,CAAK,EAAE,MAAM,GAAG,EAAE,KAAK,SAAS,EAAE,MAAMH,CAAQ,EAAE,KAAK,SAAS,EAAE,MAAMC,CAAQ,EAAE,KAAK,SAAS;AAC1H;AAMO,SAASG,EAAgBC,GAAkC;AAC9D,QAAMC,IAAUD,EAAO,WAAWP,GAC5BS,IAAaF,EAAO,mBAAmB,QACvCG,IAAWH,EAAO,wBAAwB,KAE1CI,KAAOJ,EAAO,OAAO,IAAI,MAAM,IAAI,EAAE,KAAK,MAAM;AACtD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+FAMoFE,CAAU;AAAA;AAAA,EAEvGE,CAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAiBcP,EAAWI,CAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOvBJ,EAAWG,EAAO,OAAO,CAAC;AAAA;AAAA;AAAA,qBAGpBH,EAAWH,CAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAMNS,CAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CnD;AAGO,SAASE,EAAcC,GAAgC;AAC1D,SAAO,gDAAgDT,EAAWS,CAAG,CAAC;AAC1E;"}
|
package/dist/playerHtml.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playerHtml.d.ts","sourceRoot":"","sources":["../src/playerHtml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,8GAA8G;AAC9G,eAAO,MAAM,sBAAsB,EAAE,MAAyB,CAAC;AAE/D,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB,QAAgG,CAAC;AAE9H,0HAA0H;AAC1H,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,MAAM,iBAAiB,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC7B,6FAA6F;IAC7F,OAAO,EAAE,iBAAiB,CAAC;IAC3B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sGAAsG;IACtG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AA0BD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"playerHtml.d.ts","sourceRoot":"","sources":["../src/playerHtml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,8GAA8G;AAC9G,eAAO,MAAM,sBAAsB,EAAE,MAAyB,CAAC;AAE/D,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB,QAAgG,CAAC;AAE9H,0HAA0H;AAC1H,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,8DAA8D;AAC9D,MAAM,MAAM,iBAAiB,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC7B,6FAA6F;IAC7F,OAAO,EAAE,iBAAiB,CAAC;IAC3B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sGAAsG;IACtG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AA0BD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA0FhE;AAED,uHAAuH;AACvH,wBAAgB,aAAa,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAE5D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hopeplayer/react-native",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.18",
|
|
4
4
|
"description": "React Native wrapper for HopeCorePlayer — runs <hope-player> in a WebView with a prop/event bridge (same options and callbacks as @hopeplayer/react)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,21 +35,14 @@
|
|
|
35
35
|
"files": [
|
|
36
36
|
"dist"
|
|
37
37
|
],
|
|
38
|
-
"keywords": [
|
|
39
|
-
"react-native",
|
|
40
|
-
"video",
|
|
41
|
-
"player",
|
|
42
|
-
"hls",
|
|
43
|
-
"webview",
|
|
44
|
-
"hopeplayer"
|
|
45
|
-
],
|
|
38
|
+
"keywords": ["react-native", "expo", "webview", "video-player", "video", "player", "html5-video", "hls", "m3u8", "web-component", "custom-element", "ima", "vast", "vmap", "prebid", "ads", "monetization", "chromecast", "airplay", "subtitles", "shadow-dom", "hopeplayer"],
|
|
46
39
|
"scripts": {
|
|
47
40
|
"build": "vite build && tsc -p tsconfig.json --emitDeclarationOnly --outDir dist",
|
|
48
41
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
49
42
|
"test": "node test/bridge.e2e.mjs"
|
|
50
43
|
},
|
|
51
44
|
"dependencies": {
|
|
52
|
-
"@hopeplayer/core": "^1.0.
|
|
45
|
+
"@hopeplayer/core": "^1.0.18"
|
|
53
46
|
},
|
|
54
47
|
"peerDependencies": {
|
|
55
48
|
"react": ">=18",
|