Skip to content

v1.0.0-beta.1

Pre-release
Pre-release
Compare
Choose a tag to compare
@kbrsh kbrsh released this 19 Jul 00:35
· 309 commits to master since this release
  • fe7cfac: v1.0.0-beta.1

  • 300d9bb: prerelease

  • 3601e18: correct commit release

  • c795918: 1.0.0-beta.1

  • 12b4140: 1.0.0-alpha

  • 760d774: remove tag

  • 7cca02b: push tags

  • 630df3c: 1.0.0-beta.1

  • ef0807c: 1.0.0-alpha

  • 1207ad8: stringify log

  • 83eac6f: remove web from master

  • 45130c4: push after build

  • 2b1b1e5: Moon v1

  • 806aef1: tab

  • 7587745: Merge branch 'master' into rewrite

  • 3d3bbe6: add build scripts

  • a1cd9c5: release script

  • 8db839f: update css re

  • aea1806: remove unused file

  • 4c48829: new hot API

  • 1de8c9b: add hot utilities

  • f61723d: use scope css

  • b987360: export css scoper

  • bca5892: export css

  • e293cf1: export file info

  • 6e73fbb: export libraries

  • 5491005: remove deps

  • 06d37ad: add css rule when scoping

  • 21683b3: require correctly, compile correctly

  • e6fccfb: fix syntax

  • 2a75c5d: require correctly

  • eaeb873: add css scoper

  • d6201ef: work on css mvl

  • 4960970: export parser and generator

  • 7c7bef3: use contents

  • 4b871c9: add start instruction

  • 2868428: compile created files

  • a206f79: consistent descriptions

  • c6afd10: moon-cli

  • 7928036: deps

  • a9122a3: add readme for moon-mvl

  • f1630ec: add mvl

  • 01063d9: move release script

  • 60ef57a: scripts

  • 25da182: infrastructure

  • 9c99ab1: finish up guide

  • d393cfe: begin guide

  • ec62a88: add coming soon

  • 9661801: add examples section

  • fa17f7e: finish up component docs for now

  • c79eb0a: add component arguments section

  • cbdcaeb: update button styles

  • 0f2059c: add component definition doc

  • c4fe44d: write about alternate syntax

  • 8380f6c: add runnable examples and loops

  • fd983fd: finish up view events

  • dedc90a: add more data docs

  • bbffecb: add data

  • f0c96cb: add events

  • 69cdf35: organize

  • 941dc5c: remove local

  • 7d009a7: fix syntax highlighting and begin view section

  • 8378305: add about

  • 661631e: basic structure

  • 40fbdb4: start guide

  • 61d0eed: slight redesign

  • 378cfe0: spacing in fast example

  • 1320190: update fast compiled result

  • 37f3051: update cta links

  • c0af2f6: update fast example

  • 4a76c41: add nav

  • 67de7da: update header styles

  • 93a3bfd: update example style

  • 878d64c: update website

  • e4b97d7: update code colors

  • b5c7140: update logo & colors

  • 3151bab: update todo

  • b8b70d7: fix component initial update

  • d6200cc: add basic components

  • 1305a50: reorganize directive runtimes

  • 3562b2c: use correct view create API

  • 3cc843c: remove reference from API

  • d7749e2: create using root and reference

  • 446d549: allow precompiled views

  • a7d6267: update todo example

  • 871e598: optimize events and create bind event

  • b7fc498: update example

  • ac2cc37: fix #for/@event locals

  • f061475: add variable support to #for

  • aebb99e: add basic #for

  • ad94c7a: spacing

  • 0b19e6c: build

  • 24053df: update option shape and correctly implement directives

  • 42b4157: use variable based compiler

  • bb448e8: consistent colors

  • fdfc6cc: make button brighter

  • 506cd37: add #elseif, make attribute values selfish, and fix attribute with value bug

  • bb2265c: update spacing

  • 127ef76: update landing

  • 6d4ea3e: add web section

  • c8b174b: add basic landing page

  • 83b1823: add events system + #if/#else

  • e171bf5: update website

  • 5b08686: add #if

  • b55f09f: clean up conditional implementation

  • f2e8484: set -> update

  • 047ac2e: add #if, #elseif, and #else create

  • 17c2544: add #if #else

  • de6c133: new syntax: events -> attributes & directive -> elements/attributes

  • 24c9e4e: add destroy directives and user-defined m-text & m-comment

  • 878ec4f: new directive system and create/update/destroy

  • afaecd9: new directive system + destroy

  • 16271e8: add m-root, locals with $, and change directive system

  • ca1b73f: ignore whitespace-only nodes

  • cc3070f: update component API and add mount in create

  • 9762139: use m.cae

  • 7c6ae48: don't update directive in create

  • bca8d20: update directive system and change locals & structure

  • c099ac3: cleaner implementation of directives

  • 1755adb: add updated hook

  • 544ce31: remove mount and add created hook

  • 7b3fa8e: add events

  • ef28850: change API for options object, view array, and actions

  • d2a92b7: update attributes, add m-on attribute

  • c123582: compile arguments & events, consistent formatting

  • 8118cad: update dynamic expressions and attribute expressions

  • 4b41d73: concise code for creating attributes

  • 2ee4e9e: correctly mark attribute as dynamic

  • 72aca99: correctly mark attributes as expressions and dynamic

  • 347af97: create attributes, fix generated code formatting, and create case for no attributes

  • f2ee4dd: parse attributes

  • f3692d5: add global components

  • a260014: remove m from locals

  • b859484: create component constructor

  • 60c2c60: remove unnecessary exports

  • a446ca4: create with dynamic content

  • 1369fd2: split up generator

  • 03a0590: split up parser

  • 612b95a: add eslint

  • 455d570: remove gulp

  • b35fe7e: add default data and data in root

  • 588d008: correct dependency path

  • 3ed828b: build

  • 4fd3e6b: use mapReduce & DOM utilities, correctly mount fragment

  • 4d53a3c: add DOM utilities and initial update

  • f05b028: add mapReduce to utilities

  • 463b553: add update

  • 6def4af: generate create + mount for expressions and generate dependencies

  • 9ab89e5: remove instance from locals

  • 91238d8: generate fragments

  • c1e5a81: add fragments in parser

  • c438218: parse expressions

  • 1da4378: remove unused regex

  • 0136716: parse comments

  • 6eb47d2: add escapes

  • 71f1472: build

  • ebe2a2f: better error message

  • a00d869: add text content

  • 1f0857d: correctly mount to root

  • 1e4114a: add mount

  • 4807076: generator for creation

  • e20a58b: add root instance

  • 74bf27d: add create, mount, and update

  • 9392d5f: m-fragment -> array

  • 462b86e: build

  • 69fdd42: add basic incomplete generator

  • 5c06921: add parse index to parse elements

  • a8a52fc: add component and root instance constructor

  • 7189dca: add sizes to build

  • 107c1e5: remove global

  • f86bc7a: update structure

  • ca49d0f: remove file names from imports

  • 1470b53: add compiler shell

  • 0e080bc: export parser

  • adde9e4: correct error message for unclosed tag

  • c621cce: use config in util

  • 946b5a5: install global API

  • c13ac49: basic Moon template parser

  • 57f89a4: add error utility

  • 50d19e1: add Moon configuration

  • 5285c63: use env variable MOON_ENV

  • e3b2856: add plugins and env

  • a954458: improve style

  • 166dc84: remove current Moon API from tests

  • 2ec94b4: stop saucelabs for rewrite

  • a0f4eed: update browser support table

  • 1299977: refactor index code

  • bfb231e: development + production build system

  • 8a43b17: update build system

  • a81a456: remove old build scripts

  • 02ff14f: update karma configs

  • c501192: update travis scripts

  • 413bedc: rewrite build scripts

  • 8f0ec5e: remove benchmarks

  • 2a493ce: rewrite source

  • 10d3791: rewrite test structure

  • f3b700d: rewrite package details

  • 029aae6: remove file structure for now

  • e777676: wording in description

  • babbf8b: see documentation

  • 16abac3: update website (fixes #219)

  • c910a5a: update website URL (#218)

  • 3365188: 2018 in license

  • 7a1eafa: 2018

  • 76651e4: consistent spacing

  • 02e22ad: simpler subheading

  • aac29ee: refactor: use convention for chars

  • e620897: feat: static flags & m-dom directive

    • Compiler
      • m is now a global variable
      • Lexer
        • attributes is an array
      • Parser
        • Every node has data with no flags
      • Generator
        • generateNodeState
          • Compiles text values
          • Compiles inserts
          • Compiles attributes
          • Compiles directives
          • Compiles before + during special directives
          • Creates a list of after special directives
          • Compiles child states and adds static flags
        • generateNode
          • Converts compiled nodes into function calls
          • Calls special directives after
          • Returns static node if static flag is present
        • generate
          • Marks tree as static if state is static
          • Uses generateNodeState and generateNode
    • Directives
      • m-if/m-else
        • Only generates output for m-else
        • Outer if/else nodes are always dynamic
      • m-for
        • Always dynamic
        • Allows generateNodeState to restore locals
      • m-on + m-bind
        • Uses new naming conventions
      • m-dom
        • Adds dom property
        • Replacement for m-literal:prop.dom="value"
      • m-literal
        • Only for literal attributes
    • Virtual DOM
      • HyperMoon for text nodes requires
        • type -> type of node ("#text")
        • data -> data of node (only flags)
        • value -> value of node (text content)
  • f6adec5: fix: change flag values

  • a5192d8: refactor: order constants

  • 64fb32d: fix markup

  • 51b3ae4: comparison to other libraries

  • b50906d: change description for CLI

  • 597756c: refactor: add flags correctly

  • 5dccf1d: refactor: vnode data flags

  • d459e2d: perf: remove replace for static nodes

  • 3355521: add virtual DOM hoisting tests

  • fe3f4ee: wording for virtual dom trees

  • 37b0513: explain uses

  • 17b3b44: update explanation

  • 1ddb983: change explanation for another library

  • d63c607: correct comment

  • 18514af: change description for router

  • c135b3f: fix test quotes

  • 9ae71c4: fix: allow whitespace between aliases in for

  • b566451: refactor: Consistent Naming for hydrate & patch

  • 451aad1: refactor: Functions & Consistent Naming

    • patchChildren -> patches children
    • operationNode & operationVNode
      • operationNode -> handles low-level DOM operation
      • operationVNode -> handles mounting/destroying components along with DOM
    • consistent naming -> root path + properties in camel case
  • 74ed50c: fix: escape non-breaking spaces (fixes #190)

  • 7cefee2: Add Support Section

  • ac315d3: Revert "add patreon link"

    This reverts commit bd6dc53.

  • bd6dc53: add patreon link

  • 48e450e: fix: create static empty node for (fixes #179)

  • 5b305a6: Optimize loop benchmark

  • dc36037: breaking: Template Compilation

    • generator state
      • staticNodes -> static node code
      • dependencies -> method and prop dependencies
      • exclude -> global variables and keywords
      • locals -> local variables
    • on directive
      • event variable is available, but not by default
  • 99d361b: fix: compile DOM props once

  • 40d2774: fix: deoptimize dynamic DOM props

  • f2b68c7: improve dbMon implementation

  • 04482ef: breaking: Rewrite Generator and Optimizer (fixes #146)

    • Compiler
      • template
        • fix bug and mark as dynamic even if referring to a prop that has been referenced before
      • lexer
        • store argument in arg
      • parser
        • parse text nodes with a type of #text
        • store index in node
      • generator
        • rewritten
        • attrs can be undefined
        • hoist static nodes (#146)
          • generates all children and becomes dynamic if a child is dynamic
          • if dynamic then hoist static children
          • if static then return as usual to let caller handle it
          • stores static nodes in instance.compiledRender.staticNodes and initializes them at runtime
        • optimize by joining with a separator instead of substrings
        • returns output and boolean representing if the node is dynamic
      • directives
        • before special directives are expected to return a boolean representing if the element is dynamic or not
        • during special directives are expected to return an object containing the output and a boolean representing if the element is dynamic or not
        • if/else
          • if the condition is static
            • it will be evaluated once
            • no optimization will be done directly to the nodes so that the parent can handle it
          • if the condition is dynamic
            • if either the if or else node is static, then it will be optimized and hoisted
        • for, on, bind, literal
          • use new API
        • remove m-show
    • Virtual DOM
      • patch props
        • if vnode attributes are undefined
          • if node attributes aren't undefined, remove all of them
        • if vnode attributes are defined
          • if node attributes are undefined
            • add all attributes
          • if node attributes are defined
            • add non false vnode attributes that have changed or need to be added
            • remove false vnode attributes along with vnode attributes that no longer exist
        • execute directives
        • add/update DOM props
    • Tests
      • update all tests for new API
  • 373c098: add tests for having multiple dependencies

  • ef7fae8: add tests for static directive

  • 3ab9879: add tests for computed property cache

  • c3c4507: fix: warn when root element is text

  • 517f30d: add tests for updating the default insertion

  • cb518d1: add utility to capture errors when testing, and add tests for unknown directives

  • 031cfc0: simplify intuitive API feature

  • af0ce48: add Slack badge to README

  • f888763: add tests for errors when data isn't a function in components

  • 85d155e: add tests for removing events for a type, and referencing undefined values

  • 5911494: add tests for invalid expressions

  • 64438cd: add tests for empty attributes

  • 554f003: test unclosed mustaches

  • a05cc3b: mute logs in tests

  • 250a30b: refactor: tests for self closing elements

  • 3e931b5: fix: remove "m-else" from directives list when compiling

    • "m-if" already handles "m-else"
  • 74fbbea: add tests for destroying components by replacing and removing

  • 68bcfad: add tests for xlink:href

  • f7a9ee4: add tests for removing items from a list

  • 3305b1d: refactor: rename delimiter to separator

  • 2ac841d: improve test suite output

  • a5d2b89: fix: don't check for different root when building (root element can only change during hydration due to component mounting)

  • 18ffb75: breaking: simplify event emitter payload system (fixes #153)

    • payload does not need to be an object
    • normal event handlers are passed with the payload as the only parameter
    • global event handlers are passed with the type of event and the payload
  • 9136b0b: refactor: remove jsdoc comments from global API

  • 50c91f5: breaking: Rewrite Virtual DOM Engine (fixes #158)

    • Root
      • any root element doesn't have "moon" with a reference to the instance anymore
    • VNode:
      • "meta" has been renamed to "data"
      • "eventListeners" has been renamed to "events"
    • Hydrate:
      • hydrates children, and does work in loop
      • uses inline DOM utilities
    • Patch:
      • rewritten
      • uses inline DOM utilities
      • doesn't use "dynamic" in favor of VNode reference check (#146)
      • components
        • if the component has props, it is a deoptimization and the component will be updated (#158)
        • patches events (in case they changed)
    • Components:
      • if creating a component using the constructor, the following options are available
        • required options
          • "props" - values of props to merge with data
          • "events" - default events
          • "insert" - the default insert
        • optional options
          • "root" - root element to mount component to
      • all components are expected to be pure, meaning that the output depends on the props and state only. the component won't be updated if none of these aspects are dynamic
      • functional components are removed
    • Compiler:
      • Parser:
        • will no longer deoptimize if an HTML element is custom (components are expected to be pure, so they are optimized depending on if the props and inserts are dynamic)
  • d50505e: refactor: add note about parser stack for non void elements

  • 8aa0f8f: fix: allow empty attributes (closes #157)

  • 6f5acef: add more details about the 'util' folder

  • 8d1a65e: fix: don't run browser support tests on PR's (fixes #156)

  • a19acff: refactor: move hydration to mount

  • 9598309: refactor: consistent naming when diffing props

  • bff7b09: fix: edge cases for diffing engine

    • update DOM props and directives
    • always diff children, even if innerHTML or textContent DOM property was set
  • 342f080: feat: efficient component mounting (fixes #150)

    • component constructor can take "events" to add before "init"
    • "init" is called before "mounted"
    • props, events, and inserts are available in "init"
  • 7022c3e: update variable order in release script

  • 37e696c: refactor: beautiful changelog generator

  • 71ee4fb: refactor: add implementation details about parser

  • a902ea2: refactor: compiler and generator

  • dba4241: fix: make compiler output cleaner (#144)

    • only concat when needed
    • no inefficient checks for dynamic nodes, template compiler returns dynamic state
  • 6637090: breaking: remove event modifiers

    • simplifies "m-on"
    • can easily be added in event listener code
    • keeps core minimal
  • a83fd4e: breaking: New Method API (fixes #141)

    • methods are stored in "instance.methods" and are callable (the context is changed)
    • methods are constants and cannot change
      • "m-on" will optimize all method calls unless they pass a dynamic property as a parameter
    • methods and data can have the same name, but it is considered a bad practice
  • cf276f7: use es5 tests

  • 4d10341: make tests IE compatible

  • 66f9d09: fix: correctly parse multiple void elements

    • tags are now case-sensitive
  • a1a8994: breaking: Rewrite Moon (fixes #127, fixes #132)

    • compiler
      • lexer
        • rewritten
        • ignores whitespace-only text nodes
        • can handle any whitespace (#127)
      • parser
        • rewritten
        • uses a stack to keep track of nodes
        • doesn't warn about extra closing tags
      • generator
        • cleaner implementation
        • cleaner specification for state and special directives
      • template compiler
        • rewritten
        • uses a single pass and eats leading/trailing whitespace
    • directives
      • fix edge cases
      • beautify code more
    • global API
      • remove "Moon.util.extend" (not used in core)
      • make component creation faster
    • instance methods
      • event system
        • refactor ".on"
        • refactor ".emit"
      • mount
        • refactor
        • increase performance by caching
      • build
        • removed "patch" in favor of "build"
        • handles hydration, diffing, and replacing the root element
    • observer
      • refactor
        • remove unused code
        • remove unused methods
      • computed properties
        • simpler caching system
          • when requested:
            • if cache is cleared:
              • captures dependencies for property
              • any ".get" will add the property as a dependency of the key
            • if not, use cached value
          • any ".set" notification will clear the cache for a key if it is not already cleared
      • methods
        • refactor loop
    • DOM utilities
      • "appendChild" and "replaceChild" accept a vnode instead of a node to check for components in an efficient way (#132, #120)
        • "appendChild"
          • if component is found, create a dummy node and mount it
        • "replaceChild"
          • if component is found, mount it on the replacing node (will diff itself)
    • utilities
      • remove "extend"
    • virtual DOM
      • refactor
        • remove unused runtime utility
        • change code style
        • warn on missing directive
        • remove TEXT_TYPE constant
      • hydrate
        • efficiently hydrate children
      • diff
        • fix optimization case
      • use "dynamic" property to indicate deoptimization
      • replace "isSVG" with "SVG" meta property
  • 010a11b: fix: use 'meta.node' when removing an extra child when diffing (fixes #126)

  • 39b654a: breaking: remove 'instance.callMethod' in favor of 'instance.get(method)()'

    • cleaner m-on code
    • warnings when method is undefined in templates
  • f89d24e: fix: edge cases for mounting components (fixes #122, closes #120)

    • appendChild
      • if a component is present, it mounts the component onto a created DOM node with no event listeners or props (no call to 'createNode')
      • if a component is not present, it will append a created node as usual
    • replaceChild
      • if a component is present, it will mount the component onto the node to be replaced, and the component's diff will take care of the rest
      • if a component is not present, it will replace a child with a created node as usual
    • tests
      • add tests for append/replace component mounts
  • 56d0bb4: update tests to use m-bind

  • 289a532: breaking: use 'bind' instead of 'model'

  • a67e761: breaking: use 'Moon.extend' for creating components

  • 3fc782c: perf: advanced compiler optimizations for special directives

    • special directives do not deoptimize by default
      • it is up to the special directive to decide
      • this is made possible by the hydration engine, which handles the initial render regardless of optimization
      • compileTemplateExpression returns a boolean showing if the template was static or dynamic
      • deoptimization is only done if the element must be diffed every time (m-if, m-for, m-model)
    • m-if, m-for, and m-model deoptimize
    • m-on deoptimizes only if dynamic parameters are involved
    • m-literal only deoptimizes if a dynamic property is being set
    • add dbmon repaint rate
  • f3fa265: refactor: double quotes for strings, and single quotes for characters

  • d26dd24: fix: optimize on m-ifs next to each other

    • they will both be replaced by text, not each other (like m-else, which needs to be deoptimized)
  • c23e577: refactor: remove unnecessary code (#117)

  • 81fd585: refactor: remove unused variables and const for in

  • a28ac72: add tests for merging w/ existing events

  • 5b24e1e: fix: merge events for parent-child components correctly (#120)

  • 5bc255b: refactor: don't initialize counter

  • 4a42985: breaking: remove support for custom keycodes

  • de6471e: fix: optimization for m-if/m-else, implementation of m-for, add m-static, and introduce data storage for special directives

    • m-if/m-else
      • doesn't use a stack
      • two m-ifs next to each other (seperated by text) are deoptimized, and so is any m-if/m-else pair
      • an m-ifs seperated by an element are optimized
      • works by setting a property in the data on the most outer deoptimized m-if/m-else, and re
        setting the 'dynamic' property when done processing
        • in case of two or more m-ifs, the last m-if will reset the 'dynamic' property, while all of them are deoptimized
    • m-for
      • doesn't use a static
      • stores data in 'prop.data.forInfo'
    • m-static
      • used to manually override all deoptimizations for an element
      • sets 'static' property of state
      • resets 'static' property of state when most outer m-static is done processing (done by storing 'prop.data.staticSet')
    • data storage for special directives
      • introduced above, special directives can have a shared state throughout each state (beforeGenerate, duringPropGenerate, afterGenerate)
  • 401fb44: change wording

  • 53881ab: refactor: make parser conditions more specific, remove dynamic input tests for m-model (for now)

  • 563313b: refactor: rewrite m-model to work with new 'set' method

    • if key is dynamic
      • creates temporary 'modelValue' variable to hold value of base
      • sets keypath of 'modelValue'
      • calls 'set' on base and 'modelValue'
    • if key is static
      • calls 'set' on base and input value depending on input type
  • 455a945: refactor: refer to generation nodes as 'node' instead of 'vnode'

  • df11ccc: refactor: remove string conversion

  • 9ae5922: refactor: remove unused variable in 'm-if'

  • 878b4ba: feat: allow 'root' to be specified when creating a component constructor

    • if specified, component will be mounted after init
    • add tests
  • 7966be9: refactor: diff props

    • only remove/not set props if they are 'false'
  • 7364d5d: refactor: remove shared state 'output' from template compiler

  • 19360fe: refactor: inline extractAttrs

  • 4638a89: fix: add tests for 'set' with object syntax

  • 191b81d: fix: warn when method has same key as a data property (fixes #115)

  • 2a0f7cc: refactor: make error message for referencing undefined value more clear

  • 02c7d2a: breaking: remove m-html in favor of m-literal:innerHTML.dom

    • refactor setting DOM properties
  • 3d66832: refactor: generator and formalize directive spec

    • state has structure of:

      {
        index: 0, // index of current node being processed
        dynamic: false, // value to override optimization
        exclude: [], // global variables to exclude from generator
        dependencies: [] // all state dependencies
      }
      
    • use stack for m-for to track iteratable, aliases, and exclude

    • make "event" a global exclude

    • remove escaped double quotes

  • fef1525: add information about new categories in CONTRIBUTING guide

  • 6114798: update release script for docs and refactor categories

  • 84234ee: temporarily remove model dynamic tests

  • d81083c: feat: allow objects in 'set' instead of keypaths

    • shallow merge
    • works with observer
    • works with computed properties
  • dc2596f: fix: cache 'component'

  • a94c626: fix: refactor virtual DOM engine and make creating components from instances simpler

    • virtual DOM 'patch'
      • replaces root element of when hydrating and diffing
    • virtual DOM 'hydrate'
      • no return value
      • assume component creation
      • doesn't handle 'null'
    • DOM utilities
      • 'replaceChild' and 'appendChild'
        • correctly check for components
    • instance 'destroy'
      • correctly removes 'moon' from bound DOM node
  • e2f5166: compile m-model correctly

  • 15fccbe: fix: refactor everything to declare variables in correct block scoping

  • aebc0e1: rename el to root for benchmarks (#109)

  • c9f837f: README: Fix capitalization for 'JavaScript' (#112)

  • 585dbfb: breaking: replace slots with insertion system

    • component will render default insert
  • 444e009: fix: warn on unknown directive

  • 5639021: fix: change shape of vnodes to be more memory efficient

    • text nodes only have meta and value
    • normal nodes don't have a value
    • isSVG is 'undefined' or 1
  • 86532b0: breaking: rename 'el' to 'root' and remove 'props' in favor of 'options.props'

    • more descriptive name
    • no need for user to access props on instance
  • f62b63e: fix: remove double assignments

  • f6abebe: fix: optimization technique for m-if/m-else

    • any m-if's with the same parent seperated by text (or nothing) will be deoptimized
    • any m-else will be deoptimized
    • any m-if's with the same parent seperated by an element will be optimized
  • 500bfbe: fix: meta.shouldRender can be '1' or 'undefined'

    • makes render functions much smaller
  • b615582: feat: add 'm-else', and fix optimizer edge case

    • two m-if's inside of the same element (next to each other or seperated by only text), or an m-else will be deoptimized as an element can replace another at anytime, and can sometimes be skipped
    • an m-if by itself, or an m-if seperated by an element (other than text) will be optimized
    • m-else will act as an 'else' statement for any previous 'm-if'. the only allowed seperator between any 'm-if' and 'm-else' is text (including whitespace and line breaks)
  • 85008bf: clean up wording in readme

  • d01cc66: feat: add .dom modifier for m-literal to set a property on a DOM element instead of an attribute

  • cd105b9: fix: call computed setter in right context

  • f53cb7b: breaking: remove '$' prefix from all properties

  • 6cdbadf: fix: update username when referring to voke

  • 23d2b39: fix: use block scoping

  • 2ee78dc: fix: cache options when rendering a functional component

  • c4aa2e8: fix: require data to be a function for functional components

  • eeb2d22: update browser support matrix

  • 136a1db: update username for npm

  • 856f901: update new username

  • 8409b5e: fix: replace lookup and copy for a single lookup

  • 1facdc1: add svg compiler tests

  • 25f32f3: add tests for deoptimizing on unknown html

  • 651d29a: better minification

  • 850095a: fix: set svg elements correctly and deoptimize on components

  • ae84cfb: fix: add a new event handler when a new one is present when diffing event listeners

  • d845a63: fix: call updated hook when updated, not when mounted

  • 48c6b5b: fix: correctly exclude items from scope throughout compilation process

  • 8fc8c86: fix: spaces > tabs

  • 0afedf9: fix: remove unused variables in lexer

  • a72ec6c: fix: remove unused variable when scanning template state until condition

  • 5b5411f: fix: remove unused regular expressions

  • 704f385: fix: remove unused argument in notify

  • 8637d66: fix: correctly exclude aliases from scope in m-for

  • ed26a5b: fix: exclude special custom parameters from scope (fixes #92)

  • afacfbf: fix: call updated hook when built (including mount), and remove destroyed state and replace with queue

  • 404ea12: fix formatting

  • 7981cc2: fix: assume attrs if special directive generates during prop generation

  • f4ba9ee: fix: avoid string conversion in dom props when using html directive

  • 965c7e7: fix: remove isString param from template compiler

  • 498efde: fix: remove unused regex

  • 290fc93: fix: add runtime helpers in HyperMoon (fixes #89)

  • 9863720: fix: fix typo in diffing when appending children

  • 7f6168a: perf: optimize adding children to the end of a list when diffing

  • 030d44e: perf: improve performance of removing children at the end of a list when diffing

  • 5c66f8c: perf: optimize hydration to use less loops

  • e0690f4: perf: cache oldChildren when appending

  • 75d8370: fix return types for diff

  • f00bca3: fix: correctly update reference to children when appending items to the end of a list

  • b99f926: build

  • 2597831: fix: update children when adding items to end of a list when diffing

  • e94948f: perf: improve hydration engine performance by adding fast cases

  • b9fc46b: perf: rewrite diffing engine
    improve performance by diffing children faster, and improve performance when creating children by caching common values