Files
MangaReader/backend/node_modules/b4a/lib/base64.js
renato97 b474182dd9 Initial commit: MangaReader iOS App
 Features:
- App iOS completa para leer manga sin publicidad
- Scraper con WKWebView para manhwaweb.com
- Sistema de descargas offline
- Lector con zoom y navegación
- Favoritos y progreso de lectura
- Compatible con iOS 15+ y Sideloadly/3uTools

📦 Contenido:
- Backend Node.js con Puppeteer (opcional)
- App iOS con SwiftUI
- Scraper de capítulos e imágenes
- Sistema de almacenamiento local
- Testing completo
- Documentación exhaustiva

🧪 Prueba: Capítulo 789 de One Piece descargado exitosamente
  - 21 páginas descargadas
  - 4.68 MB total
  - URLs verificadas y funcionales

🎉 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-04 15:34:18 +01:00

66 lines
1.4 KiB
JavaScript

const alphabet =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
const codes = new Uint8Array(256)
for (let i = 0; i < alphabet.length; i++) {
codes[alphabet.charCodeAt(i)] = i
}
codes[/* - */ 0x2d] = 62
codes[/* _ */ 0x5f] = 63
function byteLength(string) {
let len = string.length
if (string.charCodeAt(len - 1) === 0x3d) len--
if (len > 1 && string.charCodeAt(len - 1) === 0x3d) len--
return (len * 3) >>> 2
}
function toString(buffer) {
const len = buffer.byteLength
let result = ''
for (let i = 0; i < len; i += 3) {
result +=
alphabet[buffer[i] >> 2] +
alphabet[((buffer[i] & 3) << 4) | (buffer[i + 1] >> 4)] +
alphabet[((buffer[i + 1] & 15) << 2) | (buffer[i + 2] >> 6)] +
alphabet[buffer[i + 2] & 63]
}
if (len % 3 === 2) {
result = result.substring(0, result.length - 1) + '='
} else if (len % 3 === 1) {
result = result.substring(0, result.length - 2) + '=='
}
return result
}
function write(buffer, string) {
const len = buffer.byteLength
for (let i = 0, j = 0; j < len; i += 4) {
const a = codes[string.charCodeAt(i)]
const b = codes[string.charCodeAt(i + 1)]
const c = codes[string.charCodeAt(i + 2)]
const d = codes[string.charCodeAt(i + 3)]
buffer[j++] = (a << 2) | (b >> 4)
buffer[j++] = ((b & 15) << 4) | (c >> 2)
buffer[j++] = ((c & 3) << 6) | (d & 63)
}
return len
}
module.exports = {
byteLength,
toString,
write
}