001. Chapter 1. JavaScript reloaded
002. Chapter 1. Objects
003. Chapter 1. Functions
004. Chapter 1. Code
005. Chapter 1. Data
006. Chapter 1. Sample application Blockchain
007. Chapter 1. Summary
008. Part 1. Objects
009. Chapter 2. Inheritance-based object modeling
010. Chapter 2. Constructor functions
011. Chapter 2. Class-based inheritance
012. Chapter 2. Summary
013. Chapter 3. Linked, compositional object models
014. Chapter 3. OLOO
015. Chapter 3. Understanding Object.assign
016. Chapter 3. Assembling objects using mixin composition
017. Chapter 3. Applying shared mixins to multiple objects
018. Chapter 3. Summary
019. Part 2. Functions
020. Chapter 4. Writing composable, pure code
021. Chapter 4. Functional versus imperative at a glance
022. Chapter 4. Composition The functional way
023. Chapter 4. Currying and closures
024. Chapter 4. Working with immutable objects
025. Chapter 4. Point-free coding
026. Chapter 4. Imperative to functional transformation
027. Chapter 4. Native function chains
028. Chapter 4. Summary
029. Chapter 5. Higher-kinded composition
030. Chapter 5. New Array APIs {flat, flatMap}
031. Chapter 5. The mapcompose correspondence
032. Chapter 5. Universal contracts
033. Chapter 5. Contextual validation with higher-order functions
034. Chapter 5. Higher-kinded composition with method extraction and dynamic binding
035. Chapter 5. Summary
036. Part 3. Code
037. Chapter 6. ECMAScript Modules
038. Chapter 6. Module patterns
039. Chapter 6. Static vs. dynamic module systems
040. Chapter 6. ESM basics
041. Chapter 6. Benefits of ESM for tooling
042. Chapter 6. Summary
043. Chapter 7. Hooked on metaprogramming
044. Chapter 7. JavaScript symbols
045. Chapter 7. Symbol registries
046. Chapter 7. Practical application of symbols
047. Chapter 7. Well-known symbols
048. Chapter 7. Dynamic introspection and weaving
049. Chapter 7. Implementing method decorators
050. Chapter 7. Summary
051. Part 4. Data
052. Chapter 8. Linear async flows
053. Chapter 8. JavaScript as promised
054. Chapter 8. API review Promise combinators
055. Chapter 8. async made easy
056. Chapter 8. async iteration
057. Chapter 8. Top-level await
058. Chapter 8. Summary
059. Chapter 9. Streams programming
060. Chapter 9. Generators
061. Chapter 9. Working with data streams
062. Chapter 9. Welcoming a new native Observable
063. Chapter 9. Closing thoughts
064. Chapter 9. Summary
065. Appendix A. Configuring Babel
066. Appendix B. Typed JavaScriptT
067. Appendix B. Benefits and drawbacks of statically typed JavaScript
068. Appendix B. Type annotations