[{"data":1,"prerenderedAt":294},["ShallowReactive",2],{"project-42411727":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":44,"post_text":46,"what":47,"said":82,"maker_in_thread":134,"shape":146,"grid":148,"attempts":255,"same_week":256,"maker_shows":35,"maker_hidden":286,"reader_version":287,"card":288},"42411727","@smoores\u002Fepub","A JavaScript library for working with EPUB publications","title","Show HN: @smoores\u002Fepub, a JavaScript library for working with EPUB publications","https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@smoores\u002Fepub","npmjs.com","smoores",1734119546,2024,156,43,539,3515,16,"notable","languages","epub library","library",[24,25,26,27,28],"epub","javascript","node.js","npm","media overlays","curious",0.224,{"positive":32,"neutral":33,"mixed":34,"critical":35},7,12,0,2,21,{"docs":38,"idea":39,"performance":41,"design":43},{"positive":34,"critical":34},{"positive":40,"critical":34},5,{"positive":34,"critical":42},1,{"positive":34,"critical":42},[45,45,34,45,45,40,34,40,34,45,34,45,34,40,34,45,34,45,34,45,34,45,34,34,40,34,34,34,34,42,34,45,34,40,34,42,45,34,40,40],3,"Howdy! I've just written a blog post about this, and I figured I would share it here: https:\u002F\u002Fsmoores.dev\u002Fpost\u002Fannouncing_smoores_epub\u002F. As I've been working on Storyteller[1], I've been developing a library for working with EPUB files, since that's a large amount of the work that Storyteller does. After a friend asked for advice on creating EPUB books in Node.js, I decided to publish Storyteller's EPUB library as a standalone NPM package. I really love the EPUB spec, and I think the Node.js developer community deserves an actively maintained library for working with it!\n\n[1]: https:\u002F\u002Fsmoores.",{"problem":48,"audience":57,"pricing":61,"motivation":62,"time_to_build":61,"stack":66,"openness":79,"stage":80,"team_size":81},{"value":49,"source":50,"evidence":51},"Creating and modifying EPUB files programmatically in Node.js","maker",[52,54],{"id":53},"post",{"id":55,"by":11,"text":56},"42417437","Readium is fantastic, and Storyteller uses it basically whenever possible. But Readium is exclusively for reading EPUB contents, and doesn’t have any support for modifying or…",{"value":58,"source":50,"evidence":59},"Node.js developers working with EPUB files",[60],{"id":53},null,{"value":63,"source":50,"evidence":64},"Extracted from Storyteller's EPUB work to share an actively maintained library with the Node.js community",[65],{"id":53},[67,75],{"value":68,"source":69,"evidence":70},"TypeScript","commenter",[71],{"id":72,"by":73,"text":74},"42414232","tills13","I'm going to be annoying and simply laugh at the fact it's a 2k line, single file in source. It's TypeScript! You HAVE to compile it to ship it as an npm package (_technically_…",{"value":76,"source":50,"evidence":77},"Node.js",[78],{"id":53},"open_source","launched","unknown",{"praise":83,"objections":99,"requests":104,"questions":120,"alternatives":128},[84],{"value":85,"source":69,"evidence":86},"Thanks for the library and clear interest in EPUB tooling",[87,91,95],{"id":88,"by":89,"text":90},"42415681","Daiz","As someone who has built custom EPUB authoring scripts in Node.js for work and also quite likes the EPUB spec: cool! I expect I'll still keep using said scripts for work, but I…",{"id":92,"by":93,"text":94},"42411968","seanwessmith","sometimes life just delivers. was looking for this 2 days ago",{"id":96,"by":97,"text":98},"42412395","revskill","Genius. Thanks.",[100],{"value":101,"source":69,"evidence":102},"Single 2k-line file in source is hard to maintain",[103],{"id":72,"by":73,"text":74},[105],{"value":106,"source":69,"evidence":107},"Clearer explanation of what Storyteller does",[108,112,116],{"id":109,"by":110,"text":111},"42413423","antonyt","I feel stupid. I read “automatically syncing ebooks and audiobooks” and thought StoryTeller was a file synchronization service (like SyncThing) that for some reason only…",{"id":113,"by":114,"text":115},"42414279","chrismorgan","“Aligning” seems a perfectly good word to me. It’s the technical term that gets used, and it’s not particularly overloaded so people aren’t going to expect it to mean something…",{"id":117,"by":118,"text":119},"42414492","rahimnathwani","Maybe you can use examples of the 'why'? - Switch between reading and listening whenever you want - Follow the text while listening to audiobooks - Enjoy audiobooks while reading…",[121],{"value":122,"source":69,"evidence":123},"Why not use Readium's ecosystem",[124],{"id":125,"by":126,"text":127},"42416250","jspizziri","You mentioned readium in one of your comments. I’m curious why you didn’t use the readium spec and corresponding ecosystem. Coming in cold and just glanced at your blog post, and…",[129],{"value":130,"source":69,"evidence":131},"Readium",[132,133],{"id":125,"by":126,"text":127},{"id":55,"by":11,"text":56},{"comments":18,"answered":135,"key":136},6,[137,140,143],{"id":138,"text":139},"42414159","This is like... comically hard to express succinctly haha. We've been having several conversations about how to explain it quickly to new folks. I like the phrase that the…",{"id":141,"text":142},"42417443","Thanks! Looking forward to your feedback!",{"id":144,"text":145},"42412858","That’s a really interesting idea! The more I think about it, the more I like it. A challenge I foresee is that the media overlays are only reusable if you have the exact same…",{"commenters":36,"max_depth":32,"maker_replies":18,"first_comment_mins":18,"lifespan_hours":147},19,[149,151,154,156,157,158,160,162,165,167,171,173,175,177,180,184,187,191,193,194,195,198,200,204,208,210,213,215,218,220,222,225,228,231,233,235,237,240,243,246,249,251,253],[109,34,45,150,110,34],"project\u002Fneutral\u002Fdocs",[152,34,45,150,153,34],"42413844","trevor-e",[138,34,34,155,11,42],"maker\u002Fneutral\u002Fdocs",[113,34,45,150,114,34],[117,34,45,150,118,34],[88,42,40,159,89,34],"project\u002Fpositive\u002Fidea",[141,42,34,161,11,42],"commenter\u002Fneutral\u002Fnone",[163,35,40,159,164,34],"42412785","cyberax",[144,35,34,166,11,42],"maker\u002Fpositive\u002Fidea",[168,35,45,169,170,34],"42413579","project\u002Fneutral\u002Fidea","NoahKAndrews",[172,35,34,169,11,42],"42413703",[174,35,45,169,164,34],"42413776",[176,35,34,169,11,42],"42414143",[178,35,40,159,179,34],"42413692","smeej",[181,45,34,182,183,34],"42411872","other\u002Fneutral\u002Fnone","hombre_fatal",[185,45,34,186,11,42],"42412510","maker\u002Fneutral\u002Fnone",[188,189,45,186,190,34],"42411873",4,"gavmor",[192,189,34,186,11,42],"42411985",[125,40,45,169,126,34],[55,40,34,169,11,42],[196,135,45,169,197,34],"42412436","herrvogel-",[199,135,34,159,11,42],"42412482",[201,135,45,202,203,34],"42412604","project\u002Fneutral\u002Fnone","9dev",[205,32,34,206,207,34],"42411966","other\u002Fneutral\u002Fperformance","curtis3389",[209,32,34,206,11,42],"42412078",[211,32,40,212,207,34],"42412337","maker\u002Fpositive\u002Fnone",[214,32,34,212,11,42],"42412385",[216,32,34,206,217,34],"42412384","giantrobot",[219,32,34,206,11,42],"42412531",[221,32,34,206,164,34],"42412762",[223,32,34,206,224,34],"42412614","Yoric",[226,32,42,227,164,34],"42412728","project\u002Fcritical\u002Fperformance",[229,32,34,230,11,42],"42412814","maker\u002Fneutral\u002Fperformance",[232,32,45,169,164,34],"42412885",[234,32,34,166,11,42],"42412938",[236,32,40,159,179,34],"42413683",[238,32,34,182,239,34],"42412786","sriacha",[72,241,42,242,73,34],8,"project\u002Fcritical\u002Fdesign",[244,241,45,245,114,34],"42414316","project\u002Fneutral\u002Fdesign",[247,241,34,248,11,42],"42414449","maker\u002Fneutral\u002Fdesign",[96,250,40,212,97,34],9,[92,252,40,159,93,34],10,[254,252,34,212,11,42],"42412000",[],[257,262,267,272,277,282],{"id":258,"name":259,"points":260,"category":261},"42405046","Velofuso",797,"hardware",{"id":263,"name":264,"points":265,"category":266},"42398471","Quantus",279,"learning_science",{"id":268,"name":269,"points":270,"category":271},"42424508","SmartHome",268,"games",{"id":273,"name":274,"points":275,"category":276},"42417330","Buzee",229,"productivity",{"id":278,"name":279,"points":280,"category":281},"42399701","Kubernetes Spec Explorer",216,"dev_tools",{"id":283,"name":284,"points":285,"category":266},"42416258","Chord Nebula",215,false,"v2",{"id":289,"name":5,"line":6,"ai":286,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":290,"top":18,"kw":291,"maker":11,"domain":10,"tier":19,"attempts":34,"strip":292,"url":9,"mix":293,"praise":85,"objection":101,"sub":21},42411727,0.22,[24,25,26,27,28],"3303350503030503030303005000010305013055",[32,33,34,35],1794036665793]