github-actions[bot] a9f29cfd30 [ci] release
2024-12-13 10:54:11 -07:00

207 KiB

Change Log

5.37.0

Minor Changes

Patch Changes

  • Updated dependencies [2be37f7]:
    • @marko/compiler@5.39.0

5.36.5

Patch Changes

  • #2404 fbc0cef Thanks @DylanPiercey! - Upgrade all dependencies. Fix support for latest babel version.

  • Updated dependencies [fbc0cef]:

    • @marko/translator-default@6.1.3
    • @marko/compiler@5.38.5

5.36.4

Patch Changes

5.36.3

Patch Changes

  • #2395 00cc3fb Thanks @DylanPiercey! - Fix issue where lasso manifest file paths were not being provided correctly for lasso-marko.

  • Updated dependencies [00cc3fb]:

    • @marko/translator-default@6.1.2
    • @marko/compiler@5.38.3

5.36.2

Patch Changes

  • #2387 8e67da0 Thanks @DylanPiercey! - Fix issue with an attribute tag containing only a spread.

  • Updated dependencies [8e67da0]:

    • @marko/translator-default@6.1.1
    • @marko/compiler@5.38.2

5.36.1

Patch Changes

5.36.0

Minor Changes

Patch Changes

  • Updated dependencies [c5d2b48]:
    • @marko/translator-default@6.1.0
    • @marko/compiler@5.38.0

5.35.35

Patch Changes

  • #2368 bb44af0 Thanks @DylanPiercey! - Fix issue with "package: " deps (used for lasso) not being hoisted when building the hydrate output.

  • Updated dependencies [bb44af0]:

    • @marko/translator-default@6.0.26
    • @marko/compiler@5.37.26

5.35.34

Patch Changes

  • #2364 cbcd7ec Thanks @DylanPiercey! - Add return method to asyncIterator on render method to better support apis that expect it to be there.

  • #2367 c8e943d Thanks @DylanPiercey! - Ignore errors from child template analysis (assume child will be compiled after imported anyway).

  • #2365 894d0d0 Thanks @rturnq! - Expose globalConfig and fix config default export

  • Updated dependencies [c8e943d, 894d0d0]:

    • @marko/compiler@5.37.25
    • @marko/translator-default@6.0.25

5.35.33

Patch Changes

  • #2358 76951d8 Thanks @DylanPiercey! - Always use MarkoTagBody AST nodes for control flow (even with attribute tags). This fixes a regression with the @marko/tags-api-preview and is more accurate to what is actually happening, especially from a variable scoping perspective.

  • Updated dependencies [76951d8]:

    • @marko/translator-default@6.0.24
    • @marko/compiler@5.37.24

5.35.32

Patch Changes

5.35.31

Patch Changes

  • #2342 8e07673 Thanks @DylanPiercey! - Make attribute tags a property on the MarkoTag AST and refactor how attribute tags are translated.

  • Updated dependencies [8e07673]:

    • @marko/translator-default@6.0.22
    • @marko/compiler@5.37.22

5.35.30

Patch Changes

  • #2338 033adb9 Thanks @DylanPiercey! - Ensure that errors discovered while loading optional module level taglibs are forwarded through the onError api.

  • Updated dependencies [033adb9]:

    • @marko/compiler@5.37.21

5.35.29

Patch Changes

5.35.28

Patch Changes

5.35.27

Patch Changes

  • #2326 807b725 Thanks @DylanPiercey! - Deprecated the Marko.RepeatableAttrTag type (which is now an alias of Marko.AttrTag). This type was overcomplicating things and leading people to incorrectly handle the single item case. Update docs to avoid recommending relying on the array case since this behavior changes in Marko 6 to always be a single (iterable) item.

    Updates the Marko.Input type to handle changes to the Marko.Body type from @marko/language-tools.

5.35.26

Patch Changes

  • #2324 4776e33 Thanks @rturnq! - Allow child template analysis on manually imported tags in translator-default and optimize direct reference of imported tag

  • Updated dependencies [4776e33]:

    • @marko/translator-default@6.0.19
    • @marko/compiler@5.37.19

5.35.25

Patch Changes

  • #2322 420405d Thanks @DylanPiercey! - Remove the default cache auto clearing behavior. Previously the default compiler "cache" was cleared every setImmediate. This was to support server hot reloading in apps using Lasso (and browser-refresh). Since we brought back support for browser-refresh in the Marko package we now clear this cache when browser-refresh triggers a change making the default cache clearing redundant.
  • Updated dependencies [420405d]:
    • @marko/compiler@5.37.18

5.35.24

Patch Changes

  • #2320 13b3270 Thanks @DylanPiercey! - Optimize how style and script tags are diffed (similar to textarea) where the text nodes are concatenated and diffed as a whole.

  • #2320 a9da4d6 Thanks @DylanPiercey! - Fix regression from #2138 which caused nullable native dynamic tags with body contents to not output the end tag. 😱

  • Updated dependencies [13b3270, a9da4d6]:

    • @marko/translator-default@6.0.18
    • @marko/compiler@5.37.17

5.35.23

Patch Changes

  • #2318 1dbb189 Thanks @DylanPiercey! - Fix issue where a null able native tag with no body content (eg <${show && "div}/>) was incorrectly outputting a fragment for the body content (which did not exist).

  • Updated dependencies [1dbb189]:

    • @marko/translator-default@6.0.17
    • @marko/compiler@5.37.16

5.35.22

Patch Changes

  • #2316 e57e706 Thanks @DylanPiercey! - Expose the v3 legacy helpers properly in the marko package.json

  • #2316 1e2c903 Thanks @DylanPiercey! - Fix regression where an out of order await resolves before the "" (automatically injected at the end of the body) would be flushed. In practice this means an in order await after all out of order awaits (that resolves after any of the out of order awaits) was causing some out of order awaits not to be reordered.

5.35.21

Patch Changes

5.35.20

Patch Changes

5.35.19

Patch Changes

5.35.18

Patch Changes

  • #2300 d45f91a Thanks @DylanPiercey! - Fix issue where legacy compat w-bind directives were being incorrectly optimized as static vdom.

  • Updated dependencies [d45f91a]:

    • @marko/translator-default@6.0.15
    • @marko/compiler@5.37.13

5.35.17

Patch Changes

  • #2298 c01d83f Thanks @DylanPiercey! - Fix issue with the "ignoreUnrecognizedTags" compiler option being used with dynamic tags that have attribute tags.

  • #2298 cfff311 Thanks @DylanPiercey! - Removes the debug mode dom manipulation warning since chrome dropped the api's that allowed us to get useful stack traces.

  • Updated dependencies [c01d83f, cfff311]:

    • @marko/translator-default@6.0.14
    • @marko/compiler@5.37.12

5.35.16

Patch Changes

5.35.15

Patch Changes

  • #2294 c600610 Thanks @DylanPiercey! - Fix issue with comment nodes in unescaped html by bringing back virtual comment nodes.

  • Updated dependencies [c600610]:

    • @marko/translator-default@6.0.12
    • @marko/compiler@5.37.10

5.35.14

Patch Changes

5.35.13

Patch Changes

  • #2286 55338b5 Thanks @DylanPiercey! - Optimize template literal printing in html output.

  • Updated dependencies [55338b5]:

    • @marko/translator-default@6.0.11
    • @marko/compiler@5.37.9

5.35.12

Patch Changes

  • #2284 d0723d3 Thanks @DylanPiercey! - Fix off by one issue for static statement sourcemaps (eg import) and for concise mode tags.

  • Updated dependencies [d0723d3]:

    • @marko/compiler@5.37.8
    • @marko/translator-default@6.0.10

5.35.11

Patch Changes

  • #2282 32e2eff Thanks @DylanPiercey! - Improve handling of sourcemaps for inline style blocks and tags.

  • Updated dependencies [32e2eff]:

    • @marko/translator-default@6.0.9
    • @marko/compiler@5.37.7

5.35.10

Patch Changes

  • #2277 ce88d81 Thanks @DylanPiercey! - Fix "off by one" issue with source location information when the index was at the start of the line.

  • Updated dependencies [ce88d81]:

    • @marko/compiler@5.37.6
    • @marko/translator-default@6.0.8

5.35.9

Patch Changes

  • #2274 5cea7d6 Thanks @DylanPiercey! - Optimize javascript parsing helpers to pass in start line / column information to babel rather than faking it with whitespace.

    For large templates this can have a significant impact on parsing performance.

  • Updated dependencies [5cea7d6]:

    • @marko/compiler@5.37.5
    • @marko/translator-default@6.0.7

5.35.8

Patch Changes

5.35.7

Patch Changes

5.35.6

Patch Changes

5.35.5

Patch Changes

5.35.4

Patch Changes

  • #2250 2cf464f Thanks @DylanPiercey! - Allow registering/loading top level hydrated components after the "load" event. Previously after the load event it was assumed all assets would have been loaded but this is not always accurate for assets loaded through interactions.

5.35.3

Patch Changes

  • #2248 0ced6e1 Thanks @DylanPiercey! - Fix typo in upgrade docs and adding missing browser-refresh module.

  • Updated dependencies [0ced6e1]:

    • @marko/compiler@5.37.3
    • @marko/translator-default@6.0.4

5.35.2

Patch Changes

  • #2246 a699cd9 Thanks @DylanPiercey! - Misc backward compat improvements:

    • Expose marko/browser-refresh as a noop
    • Allow translators to specify "optional" taglibs to load if they're installed (used for automatically loading compat taglibs)
    • marko/node-require legacy require hook now disables user babel transforms by default
    • Allow <macro> tag instances to use tag arguments syntax
  • Updated dependencies [a699cd9]:

    • @marko/translator-default@6.0.3
    • @marko/compiler@5.37.2

5.35.1

Patch Changes

  • #2244 934dc13 Thanks @LuLaValva! - Allow mixing comments with attr tags

  • Updated dependencies [934dc13]:

    • @marko/translator-default@6.0.2
    • @marko/compiler@5.37.1

5.35.0

Minor Changes

Patch Changes

  • Updated dependencies [a741f36]:
    • @marko/compiler@5.37.0

5.34.5

Patch Changes

  • #2232 a67e1c4 Thanks @DylanPiercey! - Fix issue where the ignoreUnrecognizedTags compiler option was incorrectly escaping attribute tags for recognized tags that did not explicitly define their attribute tags in a marko.json

  • Updated dependencies [a67e1c4]:

    • @marko/translator-default@6.0.1
    • @marko/compiler@5.36.2

5.34.4

Patch Changes

  • #2226 7691418 Thanks @DylanPiercey! - Fix issue where an out of order await contained an in order await and then another out of order await. This previously caused a race condition where if the final out of order await resolved first, it'd try to send it's content without it's placeholder location being available.

5.34.3

Patch Changes

5.34.2

Patch Changes

  • Updated dependencies [0ee141c]:
    • @marko/translator-default@6.0.0

5.34.1

Patch Changes

  • #2217 4fc4614 Thanks @DylanPiercey! - Fix issue where element keys could be different because of hoisted const elements not always being keyed. This could cause a hydration issue since the server and client compilations would not agree on the keys.

  • Updated dependencies [4fc4614]:

    • @marko/translator-default@5.33.1
    • @marko/compiler@5.36.1

5.34.0

Minor Changes

  • #2214 2d0a566 Thanks @DylanPiercey! - Using event handlers now causes a template to become an implicit component or split component (depending on if a string event handler is used).

Patch Changes

  • Updated dependencies [2d0a566]:
    • @marko/translator-default@5.33.0
    • @marko/compiler@5.36.0

5.33.19

Patch Changes

  • #2212 a1a91a4 Thanks @DylanPiercey! - Fix issues related to hydrating sections under a native tag with the no-update directive.

  • Updated dependencies [a1a91a4]:

    • @marko/compiler@5.35.14
    • @marko/translator-default@5.32.16

5.33.18

Patch Changes

5.33.17

Patch Changes

  • c8fe951 Thanks @DylanPiercey! - Bump compiler and translator to pull in Marko runtime changes.

  • Updated dependencies [c8fe951]:

    • @marko/compiler@5.35.12
    • @marko/translator-default@5.32.14

5.33.16

Patch Changes

  • #2205 af4adcd Thanks @DylanPiercey! - Fix issue where native tags with no-update were not having their key serialized from the server causing a hydration diffing issue in some cases.

  • #2204 11acdf6 Thanks @DylanPiercey! - Fix regression where interpolating null/undefined in a script/style tag was being replaced with an empty string instead of toString'd and added.

    Eg <script>${undefined}</> was changed to render nothing, when previously it output undefined as a string inside the script.

    Note this behavior should not be relied on and will change in the next major of Marko to normalize the interpolated value to an empty string for nullish values.

5.33.15

Patch Changes

  • #2201 e0602bb Thanks @DylanPiercey! - Improve the html content escape helpers. The existing implementations no longer maintain an edge in newer versions of node and the regexp based versions are faster.

5.33.14

Patch Changes

  • #2192 e2d5f18 Thanks @DylanPiercey! - Fix regression where text was bring split too eagerly while hydrating including text which was not rendered by the current component. This lead to a diffing issue where elements could display in the wrong order.

5.33.13

Patch Changes

5.33.12

Patch Changes

  • #2187 fe344b0 Thanks @DylanPiercey! - Fix some tags/class interop issues.

  • Updated dependencies [fe344b0]:

    • @marko/compiler@5.35.10
    • @marko/translator-default@5.32.11

5.33.11

Patch Changes

  • #2182 1fa3b05 Thanks @DylanPiercey! - Support tracking the "input" using babels scope analysis.

  • Updated dependencies [1fa3b05]:

    • @marko/compiler@5.35.9
    • @marko/translator-default@5.32.10

5.33.10

Patch Changes

  • #2180 a8bfb50 Thanks @DylanPiercey! - Fix issue where vdom optimizer was including elements with user key attributes.

  • #2177 ba110fb Thanks @rturnq! - Remove dependency on setTimeout which is not implemented in some isolates

  • Updated dependencies [a8bfb50]:

    • @marko/translator-default@5.32.9
    • @marko/compiler@5.35.8

5.33.9

Patch Changes

  • #2178 f8c66c6 Thanks @DylanPiercey! - Fixes an issue where elements with "simple attributes" (those with a combination of class, style and id attributes) were not correctly removing the attribute value when a new value was false, null or undefined.

5.33.8

Patch Changes

  • #2170 7ab2d67 Thanks @DylanPiercey! - Avoid writing unnecessary comments for server only components when in interop mode.

  • #2173 614f432 Thanks @DylanPiercey! - Fix regression where hydrate dependencies had the incorrect resolved path if they were in node_modules.

  • Updated dependencies [614f432]:

    • @marko/translator-default@5.32.8
    • @marko/compiler@5.35.7

5.33.7

Patch Changes

  • 409ef4e Thanks @DylanPiercey! - Fix regression where hydrate entry files had incorrect relative paths.

  • Updated dependencies [409ef4e]:

    • @marko/translator-default@5.32.7
    • @marko/compiler@5.35.6

5.33.6

Patch Changes

  • #2161 8ff7488 Thanks @DylanPiercey! - Avoid using mutable exported bindings for stream data access in tags api. (It did not work in Vite/Rollup)

  • Updated dependencies [f9cf946, f9cf946]:

    • @marko/translator-default@5.32.4

5.33.5

Patch Changes

5.33.4

Patch Changes

  • #2153 f2a924b Thanks @DylanPiercey! - Fix issues with importing both cjs and mjs @marko/runtime-tags when loaded via compat layer.

  • Updated dependencies [f2a924b]:

    • @marko/translator-default@5.32.3

5.33.3

Patch Changes

5.33.2

Patch Changes

5.33.1

Patch Changes

  • #2138 105c26b Thanks @DylanPiercey! - Fix issue with package json src/dist override script.

  • Updated dependencies [105c26b]:

    • @marko/compiler@5.35.1
    • @marko/translator-default@5.32.1

5.33.0

Minor Changes

Patch Changes

  • Updated dependencies [2704819, 2704819]:
    • @marko/translator-default@5.32.0
    • @marko/compiler@5.35.0

5.32.15

Patch Changes

5.32.14

Patch Changes

  • #2123 5bcc111 Thanks @DylanPiercey! - Fix regression where attribute tags used without renderBody content was clearing existing renderBody content in the input, eg via a spread.

5.32.13

Patch Changes

  • #2121 ddf3b5e Thanks @DylanPiercey! - Fix issue where splitText was incorrectly called during hydrate when the text node content did not match up.

5.32.12

Patch Changes

  • #2119 ee2d9f9 Thanks @DylanPiercey! - Fix regression with merging input and attribute tags if input defined the same property as the attribute tag name.

  • Updated dependencies [ee2d9f9]:

    • @marko/translator-default@5.31.17

5.32.11

Patch Changes

  • #2117 462992e Thanks @DylanPiercey! - Fix issue where :no-update modifier was not working on special element handlers.

  • #2117 462992e Thanks @DylanPiercey! - Use vdom to vdom comparison for special attributes (input.value, input.checked and option.selected) to improve consistency with how other attributes are handled.

  • #2117 462992e Thanks @DylanPiercey! - Avoid setting attribute value for special properties (like input.value, input.checked and option.selected)

  • #2117 462992e Thanks @DylanPiercey! - Normalize attribute values before setting value to avoid unnecessary work.

  • Updated dependencies [462992e, 462992e, 462992e, 462992e]:

    • @marko/translator-default@5.31.16

5.32.10

Patch Changes

  • #2115 a55fb06 Thanks @DylanPiercey! - Improve nested attribute tag handling with scriptlets.

  • Updated dependencies [a55fb06]:

    • @marko/translator-default@5.31.15
    • @marko/compiler@5.34.7

5.32.9

Patch Changes

5.32.8

Patch Changes

5.32.7

Patch Changes

5.32.6

Patch Changes

  • #2079 2976dfa Thanks @DylanPiercey! - Fix issue where additional exports were being removed when stripping typescript types.

  • Updated dependencies [2976dfa]:

    • @marko/compiler@5.34.5
    • @marko/translator-default@5.31.12

5.32.5

Patch Changes

  • #2076 69b3ff5 Thanks @DylanPiercey! - Upgrade all package deps to latest

  • Updated dependencies [69b3ff5]:

    • @marko/translator-default@5.31.11
    • @marko/compiler@5.34.4

5.32.4

Patch Changes

5.32.3

Patch Changes

5.32.2

Patch Changes

  • #2069 977d69078 Thanks @DylanPiercey! - Fix issue with printing variable declarations with multiple variables.

  • Updated dependencies [977d69078]:

    • @marko/translator-default@5.31.9
    • @marko/compiler@5.34.2

5.32.1

Patch Changes

5.32.0

Minor Changes

Patch Changes

  • Updated dependencies [436ace040]:
    • @marko/compiler@5.34.0

5.31.18

Patch Changes

  • #2060 648a94928 Thanks @DylanPiercey! - Expose meta data about which child Marko templates were analyzed for a given compilation.

  • Updated dependencies [648a94928, aed88284b]:

    • @marko/compiler@5.33.8
    • @marko/translator-default@5.31.8

5.31.17

Patch Changes

  • #2056 84f443d60 Thanks @DylanPiercey! - Fix issue when the Marko hot-reload runtime is loaded in native esm

  • Updated dependencies [84f443d60]:

    • @marko/translator-default@5.31.7
    • @marko/compiler@5.33.7

5.31.16

Patch Changes

  • #2054 1c5eccadf Thanks @DylanPiercey! - Fix regression with @marko/babel-utils not exposing new parse helpers.

  • Updated dependencies [1c5eccadf]:

    • @marko/compiler@5.33.6
    • @marko/translator-default@5.31.6

5.31.15

Patch Changes

  • #2053 37b347eb5 Thanks @DylanPiercey! - Improve compatibility of legacy Marko widgets loading a template compiled as esm.

  • Updated dependencies [5354d4411]:

    • @marko/translator-default@5.31.5
    • @marko/compiler@5.33.5

5.31.14

Patch Changes

  • #2049 1554b1e1e Thanks @DylanPiercey! - Allow template.marko to act as index.marko for backword compat with v4/v3.

  • Updated dependencies [1554b1e1e]:

    • @marko/translator-default@5.31.4
    • @marko/compiler@5.33.4

5.31.13

Patch Changes

5.31.12

Patch Changes

5.31.11

Patch Changes

  • #2040 a5e3f0461 Thanks @DylanPiercey! - Fix compat issue where markoWidgets.defineRenderer was not resolving the default export of a Marko 5 template.

5.31.10

Patch Changes

  • #2038 71a227a5f Thanks @DylanPiercey! - Fix issue where using the longhand nested attribute tag syntax in a marko.json with a target-property defined was not registering the alias as a known attribute, leading to compile errors.

  • Updated dependencies [71a227a5f]:

    • @marko/translator-default@5.31.3
    • @marko/compiler@5.33.2

5.31.9

Patch Changes

5.31.8

Patch Changes

5.31.7

Patch Changes

  • #2032 034f96741 Thanks @DylanPiercey! - Add js file extension to compiled import of the registry runtime. This improves prebundling in Vite.

  • Updated dependencies [034f96741]:

    • @marko/translator-default@5.31.2

5.31.6

Patch Changes

5.31.5

Patch Changes

5.31.4

Patch Changes

  • #2020 6a4e947b5 Thanks @DylanPiercey! - Ensure .marko files are resolved for legacy renderer taglib configs.

  • Updated dependencies [6a4e947b5]:

    • @marko/compiler@5.33.1
    • @marko/translator-default@5.31.1

5.31.3

Patch Changes

5.31.2

Patch Changes

5.31.1

Patch Changes

5.31.0

Minor Changes

Patch Changes

5.30.2

Patch Changes

5.30.1

Patch Changes

5.30.0

Minor Changes

  • #2006 b2e70bc45 Thanks @DylanPiercey! - Add compute node helper to replace babels evaluate helper. This helper is less aggressive and doesn't suffer from the false positives that popped up with babels version.

Patch Changes

5.29.2

Patch Changes

  • #1999 7957fb564 Thanks @DylanPiercey! - Switch to .d.marko file for tag types to avoid issues when loaded in a pure typescript project. By default TypeScript doesn't play well with node_modules which are seen as .js files which is what the jsdoc version of a Marko file appears as. By switching to a .d.marko it is instead always seen as .ts which is always analyzed by typescript.

  • Updated dependencies [7957fb564]:

    • @marko/translator-default@5.29.2

5.29.1

Patch Changes

  • #1997 2afa3f6e6 Thanks @DylanPiercey! - Ensure source maps are loaded in dev mode when using the @marko/register hook.

  • Updated dependencies [2afa3f6e6]:

    • @marko/compiler@5.31.1
    • @marko/translator-default@5.29.1

5.29.0

Minor Changes

  • #1996 d93037843 Thanks @DylanPiercey! - Move tag validation to the translate phase and expose new utilities for working with macros in @marko/babel-utils. This allows for migration/transformer/etc compiler hooks to better work with 's.

Patch Changes

  • Updated dependencies [d93037843, 57b280b2f]:
    • @marko/translator-default@5.29.0
    • @marko/compiler@5.31.0

5.28.3

Patch Changes

  • #1992 1bc993012 Thanks @DylanPiercey! - Fix regression which would happen if tools tried to "delete" the loc property on error instances returned from Marko. This property is now configurable and can be deleted again.

  • Updated dependencies [1bc993012]:

    • @marko/compiler@5.30.3
    • @marko/translator-default@5.28.3

5.28.2

Patch Changes

  • #1990 a54a23794 Thanks @DylanPiercey! - Change the stack frame for error messages generated by the compiler to work better with how node prints error messages.

  • Updated dependencies [a54a23794]:

    • @marko/translator-default@5.28.2
    • @marko/compiler@5.30.2

5.28.1

Patch Changes

  • #1987 8bf5cb1f0 Thanks @DylanPiercey! - When duplicate taglib entries are found and merged, nullish values are now ignored. This means if you specify a property in a taglib it will not be unset by another (merged) taglib.

  • #1986 1b29b859f Thanks @DylanPiercey! - Fix issue where module-code entries were not properly checking the expected module output (causing them to always output esm). This was previously fine due to the cjs conversion plugin running for these, however a recent change caused that plugin to no longer run for these files since (which should have been unnecessary, except for that they had the incorrect check).

  • Updated dependencies [8bf5cb1f0, 1b29b859f]:

    • @marko/compiler@5.30.1
    • @marko/translator-default@5.28.1

5.28.0

Minor Changes

Patch Changes

  • Updated dependencies [c6e2d0655]:
    • @marko/compiler@5.30.0
    • @marko/translator-default@5.28.0

5.27.1

Patch Changes

  • #1982 d75ce5243 Thanks @DylanPiercey! - Fix issue where the finish event was not being invoked when rendering a Marko template with a mock writable that was not an event emitter

5.27.0

Minor Changes

  • #1980 9d3b34eef Thanks @DylanPiercey! - Allow parse errors to be recovered from by migrations. This adds a new ast node type of MarkoParseError. MarkoParseError nodes can be removed during the migration stage to handle legacy syntaxes. Any MarkoParseError left in the AST at the end of the migration phase will throw an error similar to what it would have previously thrown synchronously.

    This also means that all parse errors can be surfaced as an aggregate error instead of bailing on the first parse error. When the compiler is ran with errorRecovery: true these errors become diagnostics instead of being thrown.

Patch Changes

  • #1980 20deb5699 Thanks @DylanPiercey! - Fix issue that could happen if DOMContentLoaded was manually invoked multiple times.

  • Updated dependencies [9d3b34eef]:

    • @marko/translator-default@5.27.0
    • @marko/compiler@5.29.0

5.26.5

Patch Changes

  • #1978 931a5d24b Thanks @DylanPiercey! - Avoids loading babel config when compiler output is set to source or migrate.

  • Updated dependencies [931a5d24b]:

    • @marko/compiler@5.28.5
    • @marko/translator-default@5.26.5

5.26.4

Patch Changes

  • #1976 7555a46a1 Thanks @DylanPiercey! - Fix issue where aggregate errors from the compiler were not exposing error objects (was exposing the raw diagnostics).

  • #1976 7555a46a1 Thanks @DylanPiercey! - Include locations and original message for errors thrown from the compiler.

  • Updated dependencies [7555a46a1, 7555a46a1]:

    • @marko/compiler@5.28.4
    • @marko/translator-default@5.26.4

5.26.3

Patch Changes

5.26.2

Patch Changes

  • #1972 897b8beba Thanks @DylanPiercey! - Fix issue where error messages without a source location were losing their message

  • Updated dependencies [897b8beba]:

    • @marko/compiler@5.28.2
    • @marko/translator-default@5.26.2

5.26.1

Patch Changes

  • #1970 ce5c40c95 Thanks @DylanPiercey! - Fix issue when outputting hydrate code with commonjs modules enabled.

  • Updated dependencies [ce5c40c95]:

    • @marko/translator-default@5.26.1
    • @marko/compiler@5.28.1

5.26.0

Minor Changes

Patch Changes

  • Updated dependencies [70922e68e]:
    • @marko/translator-default@5.26.0
    • @marko/compiler@5.28.0

5.25.18

Patch Changes

5.25.17

Patch Changes

5.25.16

Patch Changes

5.25.15

Patch Changes

5.25.14

Patch Changes

5.25.13

Patch Changes

  • 946f596c2 Thanks @DylanPiercey! - Reduce restrictions on Marko.Component type. Add Marko.Template overload type for callback function passed to render.

5.25.12

Patch Changes

  • #1949 7f6b65a4b Thanks @DylanPiercey! - Use @internal module to host browser/worker remapped files. Improves support for some tools that don't work well with nested package.json files.

  • Updated dependencies [7f6b65a4b]:

    • @marko/translator-default@5.25.8
    • @marko/compiler@5.27.8

5.25.11

Patch Changes

  • #1947 7264e6ce6 Thanks @LuLaValva! - Improve TS native tag event handler types

    • add onToggle
    • add onFormData
    • move onSubmit into form

5.25.10

Patch Changes

5.25.9

Patch Changes

5.25.8

Patch Changes

5.25.7

Patch Changes

5.25.6

Patch Changes

5.25.5

Patch Changes

  • #1929 c7a197a5c Thanks @DylanPiercey! - Adds strict typescript types for the native HTML tags.

  • Updated dependencies [c7a197a5c]:

    • @marko/compiler@5.27.6
    • @marko/translator-default@5.25.6

5.25.4

Patch Changes

  • #1923 62afb3256 Thanks @DylanPiercey! - Remove class lifecycle types to avoid the need to override them.

  • Updated dependencies [62afb3256]:

    • @marko/compiler@5.27.4
    • @marko/translator-default@5.25.4

5.25.3

Patch Changes

  • #1921 1fe71a502 Thanks @DylanPiercey! - Avoid using typeof window and prefer typeof document checks for browser environment (improves future deno support).

  • #1921 f0c697d7b Thanks @DylanPiercey! - Avoids using a package.json remap for the browser implementation of the _preserve internal tag (used to implement no-update directives). This fixes an issue where in vite the module could not be loaded properly.

  • Updated dependencies [1fe71a502, f0c697d7b]:

    • @marko/compiler@5.27.3
    • @marko/translator-default@5.25.3

5.25.2

Patch Changes

  • #1920 7d5dab41c Thanks @DylanPiercey! - Avoid adding export {} (from "@babel/plugin-transform-typescript") when outputing a template with the types stripped.

  • #1918 cceab7d20 Thanks @DylanPiercey! - Reduce script parsing restrictions added by Babel. This was causing Babel to error when parsing partial scripts.

    static const x = 1;
    export { x };
    

    Before this change in the above code Babel would error when parsing export { x } saying x was not previously defined. This is because Marko parses these statements in isolation.

  • #1920 7d5dab41c Thanks @DylanPiercey! - Avoid outputing a declare'd type on a class.

  • Updated dependencies [7d5dab41c, cceab7d20, 7d5dab41c]:

    • @marko/compiler@5.27.2
    • @marko/translator-default@5.25.2

5.25.1

Patch Changes

  • #1916 ac1d5062a Thanks @mlrawlings! - fix: modify/remove some inefficient regexes

  • Updated dependencies [ac1d5062a]:

    • @marko/compiler@5.27.1
    • @marko/translator-default@5.25.1

5.25.0

Minor Changes

  • #1909 e8f1370cf Thanks @DylanPiercey! - Allow repeated attribute tags without using a marko.json file. Attribute tag objects now also contain Symbol.iterator implementation to make the single case more easily forwarded to the <for> tag.

Patch Changes

5.24.0

Minor Changes

Patch Changes

  • Updated dependencies [7211a6937]:
    • @marko/translator-default@5.24.0
    • @marko/compiler@5.26.0

5.23.0

Minor Changes

Patch Changes

  • Updated dependencies [4fc38e800]:
    • @marko/compiler@5.25.0
    • @marko/translator-default@5.23.0

5.22.9

Patch Changes

  • #1895 230523adf Thanks @DylanPiercey! - Fix issue where Marko.Component global was potentially not registered before the component file was loaded.

5.22.8

Patch Changes

5.22.7

Patch Changes

  • #1892 c55ae937c Thanks @DylanPiercey! - Improve types for the await tag and Marko.Template.

  • Updated dependencies [c55ae937c]:

    • @marko/translator-default@5.22.6
    • @marko/compiler@5.23.6

5.22.6

Patch Changes

5.22.5

Patch Changes

5.22.4

Patch Changes

5.22.3

Patch Changes

  • #1885 f1efd707a Thanks @DylanPiercey! - Add taglib extensions and type definitions for typescript support.

  • Updated dependencies [f1efd707a]:

    • @marko/translator-default@5.22.3
    • @marko/compiler@5.23.3

5.22.2

Patch Changes

  • #1880 c4cce33e8 Thanks @DylanPiercey! - Fix an issue where merging scripts (via the out.script api) was not properly inserting delimeters when scripts are added in different async writers.

  • Updated dependencies [c4cce33e8]:

    • @marko/compiler@5.23.2
    • @marko/translator-default@5.22.2

5.22.1

Patch Changes

  • #1875 b744720db Thanks @DylanPiercey! - Upgrades "magic-string" module (used for css sourcemaps) to avoid deprecation warning.

  • Updated dependencies [b744720db]:

    • @marko/translator-default@5.22.1
    • @marko/compiler@5.23.1

5.22.0

Minor Changes

  • #1865 797e90489 Thanks @DylanPiercey! - Changes the "default" attributes name to be "value". This is technically a breaking change, but it primarily only impacts the tags-api-preview which will also be getting a release to support this change.

Patch Changes

  • Updated dependencies [797e90489]:
    • @marko/compiler@5.23.0
    • @marko/translator-default@5.22.0

5.21.11

Patch Changes

  • #1862 30e0ea43d Thanks @DylanPiercey! - Avoid mutating component instance in HMR mode. (Improves support in tags api preview)

  • Updated dependencies [30e0ea43d]:

    • @marko/compiler@5.22.10
    • @marko/translator-default@5.21.8

5.21.10

Patch Changes

5.21.9

Patch Changes

  • #1845 65bab8e6d Thanks @DylanPiercey! - Fix issue where Marko runtime was being incorrectly matched when swapping from dev to prod runtimes.

  • Updated dependencies [65bab8e6d]:

    • @marko/compiler@5.22.6
    • @marko/translator-default@5.21.5

5.21.8

Patch Changes

5.21.7

Patch Changes

5.21.6

Patch Changes

5.21.5

Patch Changes

5.21.4

Patch Changes

5.21.3

Patch Changes

  • #1824 2f6459d2c Thanks @DylanPiercey! - Fix issue where shorthand attribute methods could not have a "return" statement.

  • Updated dependencies [2f6459d2c]:

    • @marko/compiler@5.21.7
    • @marko/translator-default@5.21.3

5.21.2

Patch Changes

  • #1804 af8c944a3 Thanks @DylanPiercey! - Fix issue when internal <flush_here_and_after> tag (used by bundler plugins) is used in sync mode.

5.21.1

Patch Changes

  • #1792 c9107ea7f Thanks @DylanPiercey! - Fix broken previous release where the "main" field for package.json files was not correctly updated when published

  • Updated dependencies [c9107ea7f]:

    • @marko/compiler@5.21.1
    • @marko/translator-default@5.21.1

5.21.0

Minor Changes

Patch Changes

  • Updated dependencies [dd9009d66]:
    • @marko/compiler@5.21.0
    • @marko/translator-default@5.21.0

5.20.9 (2022-04-27)

Bug Fixes

  • some environments (deno) provide a window but not a document (e523252)

5.20.8 (2022-04-26)

Note: Version bump only for package marko

5.20.7 (2022-04-26)

Note: Version bump only for package marko

5.20.6 (2022-04-25)

Note: Version bump only for package marko

5.20.5 (2022-04-15)

Note: Version bump only for package marko

5.20.4 (2022-04-11)

Note: Version bump only for package marko

5.20.3 (2022-03-24)

Note: Version bump only for package marko

5.20.1 (2022-03-22)

Bug Fixes

5.19.3 (2022-03-08)

Bug Fixes

  • performance hit in development mode because continually parsing stack trace (#1777) (cb99f92)

5.19.2 (2022-03-08)

Bug Fixes

  • avoid deprecation warning for markoc cli (800861b)

5.19.0 (2022-01-28)

Features

5.18.2 (2022-01-25)

Bug Fixes

  • update invalid docs link (3e67bfe)

5.18.1 (2022-01-25)

Note: Version bump only for package marko

5.18.0 (2022-01-24)

Features

  • add shorthand for dynamic tag names from identifier (#1766) (94e4fd8)

5.17.10 (2022-01-14)

Note: Version bump only for package marko

5.17.9 (2022-01-07)

Bug Fixes

  • improve error handling in web workers (8611e42)

5.17.8 (2022-01-06)

Bug Fixes

  • setTimeout issue in webworkers (d838e4d)

5.17.7 (2022-01-06)

Bug Fixes

  • improve cloudflare (workers) support (185d71b)

5.17.6 (2022-01-02)

Bug Fixes

  • use full file extension for compiler imports (#1762) (041011a)

5.17.5 (2021-11-24)

Note: Version bump only for package marko

5.17.4 (2021-11-17)

Note: Version bump only for package marko

5.17.3 (2021-10-30)

Note: Version bump only for package marko

5.17.2 (2021-10-26)

Bug Fixes

  • ensure host element always a document or shadow root (#1751) (d719724)

5.17.1 (2021-10-25)

Bug Fixes

  • prefer delegating events from document.body (f51ac21)

5.17.0 (2021-10-25)

Features

5.16.1 (2021-10-22)

Bug Fixes

  • regression with identical tag name & taglib deduping (a8d85d7)

5.16.0 (2021-10-11)

Note: Version bump only for package marko

5.15.12 (2021-10-04)

Bug Fixes

  • issue with hydrating adjacent text nodes (#1746) (4b8057a)

5.15.11 (2021-09-29)

Bug Fixes

  • normalize file opts similar to babel (86310e6)

5.15.10 (2021-09-07)

Note: Version bump only for package marko

5.15.9 (2021-09-05)

Note: Version bump only for package marko

5.15.8 (2021-09-05)

Note: Version bump only for package marko

5.15.7 (2021-09-03)

Note: Version bump only for package marko

5.15.6 (2021-09-03)

Note: Version bump only for package marko

5.15.5 (2021-08-26)

Note: Version bump only for package marko

5.15.4 (2021-08-07)

Note: Version bump only for package marko

5.15.2 (2021-08-06)

Note: Version bump only for package marko

5.15.1 (2021-07-30)

Bug Fixes

  • marko: issue with HMR enabled using split components (ab8706c)

5.15.0 (2021-07-28)

Features

  • expose @marko/compiler/register api (5726899)

5.14.2 (2021-07-28)

Note: Version bump only for package marko

5.14.1 (2021-07-26)

Note: Version bump only for package marko

5.14.0 (2021-07-24)

Note: Version bump only for package marko

5.13.0 (2021-07-23)

Note: Version bump only for package marko

5.12.1 (2021-07-21)

Note: Version bump only for package marko

5.12.0 (2021-07-12)

Note: Version bump only for package marko

5.11.3 (2021-07-08)

Bug Fixes

  • allow key attribute to pass through for attribute tags (ab52ae4)

5.11.2 (2021-07-07)

Note: Version bump only for package marko

5.11.1 (2021-07-07)

Note: Version bump only for package marko

5.11.0 (2021-07-07)

Note: Version bump only for package marko

5.10.7 (2021-06-23)

Note: Version bump only for package marko

5.10.6 (2021-06-10)

Bug Fixes

  • translator-default: issue with user defined component var (a36cfd1)

5.10.5 (2021-06-08)

Bug Fixes

  • marko: issue with dynamic tag name string and no renderbody (69e8514)

5.10.4 (2021-05-19)

Bug Fixes

  • marko: issue when last mode stream ends too early (318044f)

5.10.3 (2021-05-14)

Bug Fixes

5.10.2 (2021-05-04)

Note: Version bump only for package marko

5.10.1 (2021-05-04)

Note: Version bump only for package marko

5.10.0 (2021-04-30)

Features

  • marko: leverage new runtime api for node-require hook (67fb144)
  • add new HMR runtime (a873762)

5.9.0 (2021-04-21)

Note: Version bump only for package marko

5.8.4 (2021-04-19)

Note: Version bump only for package marko

5.8.3 (2021-04-18)

Note: Version bump only for package marko

5.8.2 (2021-04-18)

Note: Version bump only for package marko

5.8.1 (2021-04-16)

Note: Version bump only for package marko

5.8.0 (2021-04-16)

Features

5.7.0 (2021-04-07)

Note: Version bump only for package marko

5.6.2 (2021-03-30)

Bug Fixes

  • translator-default: some bundlers not supporting hoisted imports (0233d04)

5.6.0 (2021-03-27)

Features

5.5.4 (2021-03-22)

Note: Version bump only for package marko

5.5.3 (2021-03-22)

Note: Version bump only for package marko

5.5.2 (2021-03-19)

Note: Version bump only for package marko

5.5.1 (2021-03-18)

Note: Version bump only for package marko

5.5.0 (2021-03-18)

Bug Fixes

  • compiler: use provided FS for taglib building (#1674) (edb570e)
  • marko: issue with async hydrate after final flush (#1677) (f2fbaa6)
  • correct Marko debug mode for ci tests (031ca0d)

Features

5.3.0 (2021-03-08)

Features

  • marko: support lazy loading hydrated components (7e14181)

5.2.4 (2021-03-08)

Bug Fixes

  • marko: issue with delegating events from text nodes (787578e)

5.2.3 (2021-03-05)

Bug Fixes

  • marko: issue with MARKO_DEBUG and a const (c17f9fc)

5.2.2 (2021-03-01)

Bug Fixes

  • add some additional missing deps from marko to @marko/compiler (65ac580)

5.2.1 (2021-03-01)

Bug Fixes

  • compiler: add missing dependency after moving taglib code (ae843f1)

5.2.0 (2021-03-01)

Features

  • move taglib apis into compiler source code (f7cbb1b)

5.1.20 (2021-02-26)

Bug Fixes

  • marko: circular dep issue with browser-refresh (a704210)

5.1.19 (2021-02-26)

Bug Fixes

  • marko: bring back hot-reload when node-require hook used (8d856a0)
  • move @marko/babel-types into compiler (5369a63)

5.1.18 (2021-02-21)

Bug Fixes

  • marko: add back missing preserve-name & remove-dashes config (4283178)

5.1.17 (2021-02-18)

Bug Fixes

  • improve windows support for taglib finder (58f6568)

5.1.16 (2021-02-17)

Bug Fixes

  • marko: simplify client-reorder runtime loading login to inline code (#1661) (5d0a74a)

5.1.15 (2021-02-13)

Note: Version bump only for package marko

5.1.14 (2021-02-12)

Note: Version bump only for package marko

5.1.13 (2021-02-12)

Note: Version bump only for package marko

5.1.12 (2021-02-12)

Bug Fixes

  • marko: avoid prematurely resolving taglib paths (29f3cbe)

5.1.11 (2021-02-11)

Bug Fixes

  • prevent potential race condition while tag scanning (cafa138)

5.1.10 (2021-02-05)

Note: Version bump only for package marko

5.1.9 (2021-02-03)

Bug Fixes

  • marko: default export in esm mode for marko/component (9b144e1)
  • marko: drop ie10 only runtime code (2125bf6)
  • marko: include default export in esm marko/components (ed5fbc2)

5.1.8 (2021-02-02)

Note: Version bump only for package marko

5.1.7 (2021-02-01)

Bug Fixes

  • allow passing 'dom' output instead of 'vdom' (9c11a9b)

5.1.6 (2021-01-29)

Note: Version bump only for package marko

5.1.5 (2021-01-28)

Note: Version bump only for package marko

5.1.4 (2021-01-27)

Bug Fixes

5.1.3 (2021-01-27)

Bug Fixes

  • enable inline sourcemaps by default with dev mode require hook (6571a11)

5.1.2 (2021-01-26)

Note: Version bump only for package marko

5.1.1 (2021-01-26)

Note: Version bump only for package marko

5.1.0 (2021-01-26)

Features

  • no longer publish as 'next' dist-tag (8113e25)

5.0.0-next.82 (2021-01-21)

Note: Version bump only for package marko

5.0.0-next.81 (2021-01-20)

Note: Version bump only for package marko

5.0.0-next.80 (2021-01-19)

Note: Version bump only for package marko

5.0.0-next.79 (2021-01-19)

Note: Version bump only for package marko

5.0.0-next.78 (2021-01-19)

Note: Version bump only for package marko

5.0.0-next.77 (2021-01-19)

Bug Fixes

  • force commonjs modules for load api (bd84dad)

5.0.0-next.76 (2021-01-15)

Features

  • improve analysis for stateful tag parameters (#1648) (8c34cb4)

5.0.0-next.75 (2021-01-14)

Bug Fixes

  • issue with using flags before defined (8628d01)

5.0.0-next.74 (2021-01-14)

Bug Fixes

5.0.0-next.73 (2021-01-14)

Bug Fixes

  • use same debug check for compiler and runtime (#1647) (0c8632f)

5.0.0-next.72 (2021-01-13)

Bug Fixes

  • issue with only renderBody being serialized (8c0e045)

5.0.0-next.71 (2021-01-12)

Note: Version bump only for package marko

5.0.0-next.70 (2020-12-16)

Note: Version bump only for package marko

5.0.0-next.69 (2020-12-14)

Note: Version bump only for package marko

5.0.0-next.68 (2020-12-11)

Note: Version bump only for package marko

5.0.0-next.67 (2020-12-09)

Note: Version bump only for package marko

5.0.0-next.66 (2020-12-08)

Bug Fixes

  • renderbody with dynamic attrs (6c33c0f)

5.0.0-next.65 (2020-12-02)

Note: Version bump only for package marko

5.0.0-next.64 (2020-12-02)

Bug Fixes

  • babel-types: support scope analysis for tag variables (c527474)

5.0.0-next.63 (2020-12-01)

Note: Version bump only for package marko

5.0.0-next.62 (2020-12-01)

Note: Version bump only for package marko

5.0.0-next.61 (2020-12-01)

Note: Version bump only for package marko

5.0.0-next.60 (2020-11-22)

Note: Version bump only for package marko

5.0.0-next.59 (2020-11-21)

Note: Version bump only for package marko

5.0.0-next.58 (2020-11-20)

Note: Version bump only for package marko

5.0.0-next.57 (2020-11-20)

Features

5.0.0-next.56 (2020-11-20)

Note: Version bump only for package marko

5.0.0-next.55 (2020-11-19)

Note: Version bump only for package marko

5.0.0-next.54 (2020-11-17)

Note: Version bump only for package marko

5.0.0-next.52 (2020-11-12)

Note: Version bump only for package marko

5.0.0-next.51 (2020-11-11)

Bug Fixes

  • regression with no-update-body with no renderBody (1e89057)

Features

  • cached compilations, nested tag analysis (74d5f10)

5.0.0-next.50 (2020-10-12)

Bug Fixes

  • no longer use fragments for preserved native els (22e9322)
  • regression serializing empty component data with custom runtimeid (7ee0cd1)
  • translator-default: owner component missing for text nodes (50b4e97)

5.0.0-next.49 (2020-09-28)

Bug Fixes

  • marko: output esm for module-code (db4793d)

Performance Improvements

5.0.0-next.48 (2020-09-18)

Note: Version bump only for package marko

5.0.0-next.47 (2020-09-18)

Note: Version bump only for package marko

5.0.0-next.46 (2020-09-17)

Bug Fixes

  • only include template path with meta option enabled (e1b39e1)

Performance Improvements

  • prevent bundlers from pulling in setImmediate shim (585d6be)
  • remove unecessary function for template load api (33ae635)

5.0.0-next.45 (2020-08-26)

Bug Fixes

  • regression with manual component init with custom runtimeid (ec6e670)

5.0.0-next.44 (2020-08-26)

Note: Version bump only for package marko

5.0.0-next.43 (2020-08-20)

Bug Fixes

  • issue with hydrating body-only content (c975b87)

5.0.0-next.42 (2020-08-18)

Note: Version bump only for package marko

5.0.0-next.41 (2020-08-18)

Note: Version bump only for package marko

5.0.0-next.40 (2020-08-12)

Bug Fixes

  • component type use relative path in dev mode (7b7a4f9)

5.0.0-next.39 (2020-08-10)

Bug Fixes

  • invalid missing closing svg tags (47a9834)

5.0.0-next.38 (2020-08-10)

Bug Fixes

  • add support for nested tag long hand properties (#1592) (36c501c)
  • set default value for textarea when created (#1593) (00a0a55)

5.0.0-next.37 (2020-08-05)

Note: Version bump only for package marko

5.0.0-next.36 (2020-08-05)

Features

5.0.0-next.35 (2020-08-04)

Bug Fixes

  • lint and format scripts (57b66ef)

5.0.0-next.34 (2020-08-04)

Bug Fixes

5.0.0-next.33 (2020-08-03)

Note: Version bump only for package marko

5.0.0-next.32 (2020-07-31)

Note: Version bump only for package marko

5.0.0-next.31 (2020-07-31)

Note: Version bump only for package marko

5.0.0-next.30 (2020-07-29)

Note: Version bump only for package marko

5.0.0-next.29 (2020-07-29)

Note: Version bump only for package marko

5.0.0-next.28 (2020-07-27)

Bug Fixes

  • better errors, track deps and cleanup for import shorthand (00464f2)

Features

  • add new syntax for dynamic component import (e9b4cd6)

5.0.0-next.27 (2020-07-24)

Note: Version bump only for package marko

5.0.0-next.26 (2020-07-24)

Bug Fixes

5.0.0-next.25 (2020-07-23)

Note: Version bump only for package marko

5.0.0-next.24 (2020-07-22)

Note: Version bump only for package marko

5.0.0-next.23 (2020-07-14)

Note: Version bump only for package marko

5.0.0-next.22 (2020-07-10)

Note: Version bump only for package marko

5.0.0-next.21 (2020-07-07)

Note: Version bump only for package marko

5.0.0-next.20 (2020-07-07)

Note: Version bump only for package marko

5.0.0-next.19 (2020-07-06)

Note: Version bump only for package marko

5.0.0-next.18 (2020-05-27)

Note: Version bump only for package marko

5.0.0-next.17 (2020-05-27)

Bug Fixes

  • additional taglib cleanup for website support (f462d8a)

5.0.0-next.16 (2020-05-27)

Features

  • website compatibility fixes (4390fd1)

5.0.0-next.15 (2020-05-26)

Note: Version bump only for package marko

5.0.0-next.14 (2020-05-26)

Bug Fixes

5.0.0-next.13 (2020-05-20)

Bug Fixes

  • nextTick timing regression (#1573) (7f35078)
  • marko: prevent loading main entry by default (61c954e)

5.0.0-next.12 (2020-05-19)

Bug Fixes

  • components not always initializing inside client-reorder await (#1566) (da31ead)
  • data-marko attributes under 'no-update' with (#1564) (0a227d0)

5.0.0-next.11 (2020-04-27)

Bug Fixes

  • regression with unquoted attribute with trailing slash (#1561) (128b68a)
  • split components under preserved root resetting ___isPreserved (#1559) (dd9f7ac)

5.0.0-next.10 (2020-04-23)

Bug Fixes

  • switch safe renderer to use nextTick for errors (#1554) (900e7b1)

Performance Improvements

  • minify runtime comments, remove unnecessary attr quotes (#1557) (2882626)

5.0.0-next.9 (2020-04-16)

Bug Fixes

  • add devmode warning for removing fragment markers (#1541) (de27b4a)
  • implement missing methods for void-writer (#1540) (b50f93c)
  • improve micro task helper (2129451)
  • issue with keys under ssr no-update root (#1527) (480bc77)
  • regression with nullish values in partial string attribute values (#1537) (144c352)
  • spread attrs for native tag preserves case (#1530) (6b3156f)

Features

  • improve serialization across multiple writes (#1542) (45e42df)

Performance Improvements

  • misc improvements (#1535) (1fed43e)
  • optimize dynamic tag when types are statically known (#1550) (4719405)
  • optimize merge html attrs (#1538) (792aa6a)
  • optimize serializing renderBody & legacy widgets (#1539) (eb9e156)
  • skip serializing instance props & state for non split components (#1546) (75fd1b0)

5.0.0-next.8 (2020-03-17)

Note: Version bump only for package marko

5.0.0-next.7 (2020-03-17)

Note: Version bump only for package marko

5.0.0-next.6 (2020-03-16)

Bug Fixes

  • don't serialize component boundary keys if the owner isn't hydrated (#1525) (ab3d2a7)

Features

5.0.0-next.5 (2020-02-26)

Bug Fixes

  • always include nested contexts when serializing (#1515) (84aa30e)
  • set preserve false under new rerender roots (#1513) (c00a02c)

5.0.0-next.4 (2020-02-25)

Bug Fixes

5.0.0-next.3 (2020-02-25)

Bug Fixes

5.0.0-next.2 (2020-02-25)

Note: Version bump only for package marko

5.0.0-next.1 (2020-02-25)

chore

  • delete deprecated apis/tests (c163054)

Features

  • update apis/tests for new compiler (ea6736d)

BREAKING CHANGES

  • api for compile-time tags has changed. This affects tranformer/node-factory/code-generator tags.

Co-authored-by: Michael Rawlings mirawlings@ebay.com Co-authored-by: Dylan Piercey dpiercey@ebay.com Co-authored-by: Andrew Gliga agliga@ebay.com

  • The following deprecated apis have been removed:
  • Deprecated top-level entrypoints of the marko package
  • The marko@3/marko-widgets@6 legacy compatibility layer
  • Auto-migratable syntax and api changes to the core tags

Co-authored-by: Michael Rawlings mirawlings@ebay.com Co-authored-by: Dylan Piercey dpiercey@ebay.com

Changelog

4.x

4.18.x

4.18.48

  • Fixes a regression from #1499 which caused <${dynamic}> tags with body content to not have their events registered. #1507
  • Fixes issue with getEl being used on a keyed <${dynamic}> tag. #1507
  • Fixes registering event handlers added to a <${dynamic}> tag that renders a native element under a split component. #1507

4.18.47

  • Deprecate implicit JSON.stringify for attributes, attr toString fix. #1505
  • Remove data-widget, add warning for non-split, non-stateful widgets. #1503
  • Flushing improvements. #1502

4.18.46

  • Fixed issue with <init-components> being rendered under nested async outs. #1500

4.18.45

  • Fixed dynamic tags to add data-marko-key for split components #1499
  • Fixed dynamic tags properly render self-closing tags on the server #1499

4.18.44

  • Fix issue with diffing SSR'd no-update section. #1498

4.18.43

  • No longer serialize input for split legacy widgets. #1497

4.18.42

  • Fix regression for unkeyed elements with toggled spread attributes #1496
  • Fix regression with body-only-if migration for legacy renderers #1495

4.18.41

  • Improve support for conditional w-bind. #1494
  • No longer delete onBeforeDestroy and onBeforeUpdate from legacy widget prototypes. #1494
  • Fix regression with registering event handlers for SSR content under a no-update. #1493

4.18.40

  • Fix issue with the ignoreUnrecognizedTags compiler option with <@attribute> tags inside of a <${dynamic}> tag. #1491
  • Improve support for legacy widgets by allowing for custom init method on prototype. #1490
  • Removes some unused properties that were serialized with legacy widgets #1489
  • Improves consistency with ...spread attributes onto native tags. #1488
    • Now turns camelCase properties into dash-cash
    • Now omits renderBody properties.
  • Improves this.el warning for legacy widgets. #1487
  • Fixes an issue with nested no-update's around components not initializing properly. #1486

4.18.39

  • Support overriding the 'ready' method in legacy widgets. #1484

4.18.38

  • Fix regression with ssr'd components under 'no-update' not initializing. #1483

4.18.37

  • Fix regression with no-update-body on textarea tags. #1482

4.18.36

  • Fix issue for legacy widget rerenders not preserving props. #1481
  • no-update will now preserve elements rendered from the server side. #1480

4.18.35

  • Improve support for legacy split widgets. #1477

4.18.34

  • Improve legacy widgets assigning into state causing a replace instead of merge. #1476

4.18.33

  • Fix event name case normalization for legacy components with w-on. #1475

4.18.32

  • Return the component id if no key is passed to getElId/elId. #1474
  • Support having nullish keys in the legacy (v3) renderer. #1473

4.18.31

  • Fix legacy render lifecycle order to match marko-widgets@6. #1472

4.18.30

  • Fix regression with browser remap for legacy widgets. #1471

4.18.29

  • Fixed regression which was causing getTemplateData to be serialized.
  • Refactor helpers, fix circular deps, improve code splitting #1468
  • Remove unused deps, update package-lock #1469
  • Fixed typo in example output #1463

4.18.28

  • Allow support for <state> tag and calling setState on null state #1460

4.18.27

  • Allow empty <@catch> in <await> #1456

4.18.26

  • Improve errors emitted from AsyncWriter

4.18.25

  • Better async stack traces in dev #1453

4.18.24

  • Remove circular dep for dom weakmaps. #1449
  • Fix invalid deprecation message for core-tags on windows. #1448

4.18.23

  • Allow <macro> nested under <if>. #1445

4.18.22

  • Improve legacy compatibilty layer by exposing widgetProps on the data object. #1443
  • Improve getComponentByEl lookup to prefer owner components. #1444

4.18.21

  • Fix issue where duplicated attributes were not being included properly in compiled templates. #1442

4.18.20

  • Fix initialization edge-case for top-level async components. #1441

4.18.19

  • Deprecate $global.widgetIdPrefix (should use $global.componentIdPrefix instead). #1439
  • Improve support for rollup by removing usage of require.resolve. #1440
  • Update minimum version of htmljs-parser to bring in patch release for parsing css calc values.

4.18.18

  • Adds a missing method used by part of the legacy compatibility layer.

4.18.17

  • Fix issue with async out of order components initializing in the wrong order #1436
  • Improvements to the legacy compatibility layer #1437

4.18.16

  • Fix top-level components throwing error on hydrate #1428
  • Ensure scripts only have one text node as a child #1429

4.18.15

  • Improve support for conditional comments spanning multiple comments. #1427
  • Add a check for loading precompiled templates. #1426

4.18.14

  • Improve support for running multiple versions of Marko on the page. #1418
  • Add migration for component.elId when used in a place where :scoped is recommended. #1413
  • Fix issue where static regexps in the template would output differently than dynamic ones. #1412
  • Improve marko.json definitions for core/html tags #1411

4.18.13

  • Improve support for consuming v3 components via webpack. #1410

4.18.12

  • Improve autocompletion for core tags. #1405
  • Fix issue when using getComponentForEl with split components. #1400

4.18.11

  • Fix server-rendered conditional widgets in the compatibility layer. #1395
  • Deprecate the partial dynamic tag. #1397

4.18.10

  • Improve migration for getInitialState with legacy widgets. #1385

4.18.9

  • Legacy compat fixes #1383
    • Temporary fix to ensure getComponents doesn't return null entries - these should really be removed from the lookup instead
    • Use a for...in loop to extend the BaseComponent (doesn't support getters properly) to maintain the same behavior as marko-widgets
    • Ensure that the original input for a widget is what gets serialized, not the result of getTemplateData (which is called again when hydrating)

4.18.8

  • Fixes an issue where require("marko/components").getComponentForEl could return undefined when a component exists, or the wrong component, when nested fragments are present. #1382

4.18.7

  • Fixes a regression from 4.18.6 that could cause some body content to be omitted from the output #1380
  • Adds deprecated string dynamic attributes to the vdom runtime for improved legacy compatibility #1378

4.18.6

  • Migration does not add id:scoped when migrating a repeated w-id #1377
  • Fixes an issue diffing the selected option within an optgroup #1376
  • Fixes component tracking for client-reorder #1375
  • Improve the migration for legacy <for> syntax #1374
  • Add migration for named classes in the template #1372

4.18.5

  • Fix issue with invoke tag migration when a inline control flow is used #1366

4.18.4

  • Lazily evaluate attributes for dynamic tags #1365

4.18.3

  • Fix registerTaglib: use correct function call #1363
  • Fix tryonline: correct paths and no taglibImports #1360
  • Migration fix: #1364
  • Migration improvement: deprecation warnings that are automatically migratable now have a MIGRATION heading #1364 (also included test improvements)
  • Migration improvement: remove empty <layout-put> tags #1355

4.18.2

  • Fixes an issue where fragments could remove nodes from their siblings #1359

4.18.1

  • Fixes a regression with body-only-if and a legacy control flow attribute #1356

4.18.0

  • Added dynamic tags to act like body-only-if. If dynamic tags are null then the outer tag will not be rendered. However, the body will be rendered. Deprecated body-only-if #1332

4.17.x

4.17.5

  • Fix issue where setting the value attribute of a textarea to false caused the string "false" to be used in the vdom. #1348

4.17.4

  • Updates htmljs-parser to fix an issue with comments inside inline scriptlets.
  • Fix some issues with for loop auto keying. #1346
  • Fix error when using a non string as a key (now logs a deprecation). #1344

4.17.3

  • Fix issue were getEls would not work with repeated keys for split components. #1343

4.17.2

  • Fix regression with namespaces in nested fragments. #1340

4.17.1

  • Allow emitting events while the parent is mounting. #1336
  • Fix issue where component.el and component.getEl could return a marker node. #1339

4.17.0

  • Element namespaces are now calculated at runtime, fixes some edge cases with the dynamic tag. #1333

4.16.x

4.16.15

  • Fix an issue where nodes may be preserved if another node with the same key was rendered as preserved. #1334
  • Improve the ignoreUnrecognizedTags compiler option to ignored nested @tags on unrecognized tags (removes the need for the escapeAtTags option). #1335

4.16.14

  • Prevent treating macro usage with parameters as a component. #1326

4.16.13

  • Fixes a regression with printing nested unary expressions (eg typeof). #1323

4.16.12

  • fix destorying a component that has already removed some top-level nodes #1321
  • fix components runtime path after refactor released in 4.16.11 #1322

4.16.11

  • Fixes a regression (syntax) in IE 11 introduced in 4.16.10

4.16.10

  • Hydrating components now consistently render from the top down. #1317

4.16.9

  • Fixes an issue where legacy widgets could loose a reference to their parent components. #1311

4.16.8

  • Fixes an issue with hot-reload. #1282
  • If the require hook is enabled, all templates loaded by marko will now use the require hook, including hot-reloaded templates and tags loaded from compiled templates. #1310

4.16.7

  • Improve parsing of tag arguments (allows for <${input.renderBody}(...spread)/>). #1308

4.16.6

  • Fix issue with hydrating legacy Marko 3 widgets from the server. #1306

4.16.5

  • Fix regression with legacy dynamic attributes when a string without whitespace is used. #1304
  • The disabled property on buttons is now properly synced with the template. #1303

4.16.4

  • Fix regression with migrating legacy <macro> syntax with a magic renderBody variable. #1300

4.16.3

  • Fix issue with migrating <var> and <assign> with widget properties. #1298

4.16.2

  • Fix issue with nested fragments (often as dynamic tags) that were adjacent in the DOM not hydrating properly. #1294
  • Remove redundant portion of keys for <macro> tags within <for> loops. #1295

4.16.1

  • Fix regression for :no-update on dynamic tag html attributes. #1292

4.16.0

  • Add <marko deprecated-no-create-or-input-for-top-level-hydrate /> option to revert to pre 4.9.0 hydrate behavior. #1289

4.15.x

4.15.6

  • Fix regression in older browsers caused by using string.startsWith in the runtime code.

4.15.5

  • Allow syntax that Marko does not understand (but esprima does) to pass through in the arguments syntax. #1286
  • Fix issue with <title> inside of an <svg> using the wrong namespace. #1284

4.15.4

  • Forward errors from <await client-reorder> to the parent out to prevent potential unhandled rejections. #1275

4.15.3

  • Fix false positive deprecation message for legacy nested tag syntax. #1271

4.15.2

  • Improve the webpack server-bundling experience by guarding a legacy (lasso-specific) api that uses a dynamic require and causes a warning to be emitted. #1267

4.15.1

  • Improve support for using raw functions as event handlers by not outputing data-marko content for components that will rerender in the browser. #1262

4.15.0

The most notable change here is to the <for>, <macro> and <await> core tags. These tags previously each relied on custom syntax to implement an API that was not possible to do in userland when they were introduced. Generic solutions for these problems has arrived in the form of attribute tags and tag parameters.

With these new features in place and currently available in userland we set out to normalize these existing tags, hopefully making the learning process for Marko a little easier, and also promoting the use of these new features. We've also spent time formalizing some best practices, and highlighting this new syntax in the documentation on the markojs.com website.

The existing syntax will continue to be supported until Marko 5 and will currently log a deprecation warning. For these deprecations and most others you can automatically migrate existing code using the marko migrate cli tool.

  • Updated documentation with guides and changes to syntax/core tags. #1260
  • Modernize the <for> tag. #1238
  • Modernize the <await> tag. #1244
  • Modernize the <macro> tag. #1227
  • Deprecated legacy top level imports (jquery/ready) and compiler option tags (recommended to use marko.json instead). #1258
  • Modern arguments support for the dynamic tag. #1259
  • Improves parsing inside of the <html-comment> tag to support the same style of content as actual html comments. #1261
  • Ignore only whitespace content inside of concise mode tags (including class and style) which would previously error. #1256
  • Fixes a regression with passing a string literal as a ${dynamic} attribute and add a deprecation warning. #1257

4.14.x

4.14.25

  • Fix regression with non standard template literals ("stuff ${placeholder}") that have escaped content such as newlines #1254

4.14.24

  • Fix regression in <await> that caused flushing to not occur in all cases #1252

4.14.23

  • Fix warning that "marko" was using deprecated features. #1250
  • Improve code optimization for conditional @nested tags. #1249

4.14.22

  • Fix issue with no-update not moving preserved items #1247.
  • Fix regression with include tag migration where <include(data())> has side effects. #1246
  • Treat importing tags the same as using them in the template (uses load api instead of require when configured). #1245
  • Gracefully handle async client-reorder when nodes are missing during hydrate. #1243

4.14.21

4.14.20

  • Add new <tag|params|> support and migrator for old syntax/flag #1236
  • Remove unneeded deprecation warning when using component within a template #1235

4.14.19

  • Fixes walking into some AST nodes which was causing some migrations to not be as effective #1233

4.14.18

  • Fixes #1230 - regression with include tag migration outputing invalid identifiers #1231
  • Add migration for legacy nested tag syntax #1129

4.14.17

  • Fixes #1219 - transitive widget getEl and events #1225
  • Importing a marko template adds it to tags meta (fixes regression with <include> tag) #1226

4.14.16

  • Add migration for non-standard template literals. #1224
  • Fix regression with dynamic attribute migration. #1223

4.14.15

  • Improve migrating widget references to component in attributes. #1220

4.14.14

  • Fix regression with evaling class names in debug mode. #1218

4.14.13

  • Support file name migrations with Marko migrate. #1216
  • Skip id:scoped when migrating w-id for custom tags. #1217

4.14.12

  • Add migrator for w-config attribute. #1214
  • Add migrator for and deprecate unless tag/directive. #1210

4.14.11

  • Fix regression with w-body tag. #1213

4.14.10

  • Add migrator for ref attribute. #1207
  • Fix regression with var tag and w-body/include tags. #1212

4.14.9

  • Add migrator for layout tags and include tag/directive. #1206 & #1204
  • Add migrator for <script template-helpers> and <script marko-init>. #1209

4.14.8

  • Add migrator from w-body to dynamic tag. #1199
  • Add migrator from dynamic attributes to spread attributes. #1202

4.14.7

  • Fix regression for widget.elId migration. #1198

4.14.6

  • Add a whitelist of files to publish to NPM. #1197

4.14.5

  • Add getTemplateData migrator. #1195
  • Add migrators for most of the w-* attributes. #1190
  • Add basic legacy widget migration. #1192

4.14.4

  • Fix regression with setProps on legacy compatibility layer. #1193

4.14.3

  • Move w-on compatibility to the migrate stage. #1186
  • Legacy compatibility (v3) improvements. #1189
  • Specially handle template literals in templates. #1188

4.14.2

  • Convert the <async-fragment> transformer into a migrator. #1185

4.14.1

  • Fix regression causing some parsed javascript nodes to be omitted from output. #1184

4.14.0

  • Add migration stage, deprecate rendering with out, deprecate control-flow directive as attributes. #1180
  • parse = parseRaw + normalize #1179
  • parse nonstandard string with placeholder to TemplateLiteral node, transpile template literals. #1179
  • add new parse api

4.13.x

4.13.13

  • Fix regression: parsing of if statements without braces (in scriptlets & otherwise). #1175
  • Fix regression: <var> and <assign> tags with non-standard placeholders in normal string attributes. #1176

4.13.12

  • <invoke> tag translates to modern Marko scriptlet (or dynamic tag). #1165
  • <assign> tag translates to modern Marko scriptlet. #1158
  • Imperative rendering in scriptlets translates to modern Marko dynamic tag. #1174

4.13.11

  • Add spread attribute optimization, fix issue with spreading non objects. #1171
  • Move # to the start of :scoped attributes (allows for href:scoped="#name"). #1172

4.13.10

4.13.9

  • Improve support for arc by normalizing file system names with square brackets. #1166

4.13.8

  • Quick patch for 4.13.7 that removes a let assignment. #1153

4.13.7

  • Prevent treating components with tag params being treated as implicit components. #1149

4.13.6

  • Prevent mutating component input when using a single spread attribute with repeated @tags. #1142
  • Fix for include tag hydration when transcluded. #1143

4.13.5

  • Add additional reference to fragment nodes which resolves an issue with IE. #1130

4.13.4

  • Remove Object.assign calls in the browser. #1120

4.13.3

  • Propagate errors to express automatically with the res.marko api. #1119
  • Support multi line import statments. #1118

4.13.2

  • Allow discovering tags where the template name matches the directory name #1117:
components/
  tag-name/
    tag-name.marko
    tag-name.style.css

4.13.1

  • Remove es2015 features from runtime. #1115

4.13.0

PR #1094

Introducing HTMLFragment

  • Updates the diffing algorithm to use an HTMLFragment node as an abstraction rather than keeping track of startNode and endNode all throughout the diffing algorithm.
  • Uses the HTMLFragment for the <${dynamic}> tag and <include> tags to preserve server-rendered content for which the renderBody is not available in the browser.

Changes to keys

  • Component ids are based on the resulting parent tree (not the owner tree). This means we cannot rely on the ids in the global lookup, so component key/refs are now also stored on the component instance.
  • Autokeyed elements are now stored on the parent rather than the owner. User assigned key/refs are still stored on the owner component. Because of this, user assigned keys are now prefixed to differentiate them from autokeys. This also has the benefit that assigning numeric keys can no longer conflict with the autokeys.
  • Static node trees are now only auto assigned a key for the top-level node (instead of all nodes). This is because:
    • When updating, only the top-level node is considered.
    • When static nodes are hoisted out of the render method, they are not associated with the owner component

Changes to Hydration

  • Server comment starting markers now have the component's key serialized so the component can be attached to its owner
  • Server comment markers no longer have the id on the closing marker, it is stack based.
  • Normalize differences between hydration and client-rendering, so post mount the DOM looks the same regardless of whether a component was server or client rendered.

4.12.x

4.12.4

  • Don't render invalid attribute names on the server #1103

4.12.3

  • Removes extra parentheses in output javascript for expressions that Marko does not understand.

4.12.2

  • Fixes automatic keying of elements/components in for() attribute loops

4.12.1

  • Fix #1022 - transcluded keys don't match, stateful component not preserved #1086

4.12.0

  • Tag params #1076
  • Style arrays #1082
  • Fix #1075 - cannot compile dynamic tag at root with user key #1081
  • Fix #1078 - mutating spread attributes #1080

4.11.x

4.11.5

  • Add fallback location for compile-time deprecation warnings

4.11.4

  • Fixes an issue with scoped attributes automatically setting keys in a problematic way #1069
  • Fixes #1059 and #1052 - Cannot read property 'nextSibling' of null

4.11.3

  • Fixes #952
  • Fixes automatic keying of elements/components in <for> loops

4.11.2

  • Fixes another regression in the <${dynamic}> tag where dashed-case attributes were being converted to camelCase when rendering html elements.

4.11.1

  • Fixes a regression in <${dynamic}> tags for object/array class/style attributes:
    $ const style = { color:'blue' };
    <${tagName} style=style/>
    
  • Allows dynamic attributes defined using ...spread to include object/array class/style #933:
    $ const attrs = { style:{ color:'blue' } };
    <tag ...attrs/>
    
  • Fixes issue where object/array class/style attributes could not be used with ...spread #1007:
    $ const attrs = {};
    <tag class=["oops"] ...attrs/>
    

4.11.0

  • Implement #880: <${dynamic}> tag
  • <include> should be considered deprecated. Formal deprecation warning to come.

4.10.x

4.10.1

  • Fix issue with calling require('marko/components').init(components) multiple times.

4.10.0

  • Fix #1049 Fix documentation urls on the website.

4.9.x

4.9.7

  • Fix #1038 Legacy compatibility dirty check returning false positives.

4.9.6

  • Fix #1008 Spread attribute now supports functions (..attrs()) #1029

4.9.5

  • Fix onBeforeUpdate timing for legacy component layer #1027

4.9.4

  • Fix breaking older browsers with es6 object shorthand notation bc0e91d5

4.9.3

  • Fix import-var compilation when there are no explicit attributes #1002

4.9.2

  • Fixes collisions with multiple Marko runtimes on the same page. #1019
  • Switch to using prettier and eslint. #1016

4.9.1

  • Fixes an issue with keyed elements not getting properly removed. #1013

4.9.0

  • Fixes related to hydration, split components, and the legacy compatibility layer #1010

  • Fix paths for vdom dependencies #1011

4.8.x

4.8.0

  • Add once-[event] directive #990

  • Improve testing setup #989

4.7.x

4.7.5

  • Update docs for advanced attribute definition #968

  • Improve error message for async rendering #958

4.7.4

  • Make jQuery optional for legacy components #951

4.7.3

  • Prevent onRender running on the server for legacy widgets

4.7.2

  • Fixes #946 - don't put legacy init code in a separate lasso bundle

  • Fixes allowing conditionally binding to different roots in a legacy widget #944

4.7.1

  • Fix issue with multiple top level elements being removed twice. #940

4.7.0

  • Add jQuery legacy compatibility layer support #937

  • Reorganize Marko tests #934

  • Switch to using jsdom in test suite #935

  • Decouple component hydration from Lasso #929

4.6.x

4.6.0

  • Fixes #914 and #920 - Resolves top-level component bugs

  • Setup marko.load() to prefer precompiled templates from marko-cli

  • Various compiler changes to improve marko-migrate

  • Fixes #916 - Add Marko debug mode. Adds babel plugin to remove and statically evaluate 'MARKO_DEBUG' literals for adding deprecation warnings and hints for the runtime without a performance penalty for production builds.

4.5.x

4.5.6

  • Fixes #909 - Fix condition preventing bubbling DOM events from properly being attached to a component.

4.5.5

  • Add 10 Awesome Marko Features article to documentation

4.5.4

  • Fixes #904 - The loop status variable is not compiling when the equal sign is padded in spacing

4.5.3

  • Fixes #903 - Special unicode chars (\u2028 and \u2029) need to be escaped if within script tag

4.5.2

  • Fixes #899 - Keyed element could be incorrectly removed after DOM diffing/patching in case of HTML element mismatch for elements with the same key. PR #900

4.5.1

  • Fixes #893 - Keyed element could be incorrectly removed after DOM diffing/patching in case of HTML element mismatch for elements with the same key. PR #894 by @westtrade

4.5.0

Summary of changes across all beta releases for the 4.5.0 release:

  • Fixes #886 - Write component initialization code when async out and all of its nested async outs finish
  • Fixes #854 - Make every .marko file a UI component (PR #855)
  • Added support for the :scoped modifier on attributes and deprecated :key:
<label for:scoped="name">Name</label>
<input id:scoped="name" value="Frank"/>
  • Fixes #817 - Support dynamic root elements
  • Marko no longer attaches id attributes to elements for purposes of keyed matching
    • Keyed elements are maintained in an internal, per-component lookup
  • Keys are now assigned to all custom tags and HTML elements at compile-time to improve reliability and performance of DOM diffing
  • Optimized internal bookkeeping required during rendering a UI component tree (no more UI component stack)
  • DOM diffing/patching changes:
    • Significant performance improvements
    • morphdom is now UI component-aware

4.5.0-beta.3

  • Fixes #854 - Make every .marko file a UI component (PR #855)

4.5.0-beta.2

  • Add ids for any key when component.elId/getElId is used as an attribute value
  • Use indexOf instead of includes to support Node 4
  • [docs] Fixes #841 - docs/components.md refers to deprecated "data" variable #842

4.5.0-beta.1

  • Add back (legacy) support for component.elId + key in template
  • Fixes #837 - Update esprima to the latest to support async/await and ES2017 inside of components. (PR #839)
  • Fixes key/scope for attributes that have dashes in the name

4.5.0-beta.0

  • Fixes #817 - Support dynamic root elements
  • Marko no longer attaches id attributes to elements for purposes of keyed matching
    • Keyed elements are maintained in an internal, per-component lookup
  • Keys are now assigned to all custom tags and HTML elements at compile-time to improve reliability and performance of DOM diffing
  • Optimized internal bookkeeping required during rendering a UI component tree (no more UI component stack)
  • DOM diffing/patching changes:
    • Significant performance improvements
    • morphdom is now UI component-aware

4.4.x

4.4.28

  • fix undefined reference error in Component.js
  • Increase mocha timeout to avoid CI build's failing #821

4.4.27

  • Add ability to update globals by setting new input.
  • [docs] Remove unneeded command from installation docs
  • [docs] Update installing.md

4.4.26

  • Add better interop for importing modules with default exports #803

4.4.25

  • Fixes #778 - Fix Marko compiler generating incorrect path for requires on Windows.

4.4.24

  • [docs] Update installing.md

4.4.23

  • Fixes #796 - Fix events for event targets that are SVGElementInstance types in IE11.
  • Used shortcut for escapeAtTags;
  • Added escapeAtTags options in order to render <@tags> as they are;
  • simplify a condition judgement in components-jquery
  • Fixes #790 - Class tag should not allow nested body content.
  • Update compile/index.js test description
  • Update handleRootNodes.js #747
  • [docs] Fix reference to lifecycle section in docs.

4.4.22

  • Fixes #784 - Fix compiled preserve-attrs path.
  • [testing] Fix express tests #779
  • [docs] Update webpack.md

4.4.21

  • Updated description in package.json

4.4.20

  • update bindComponentVar to use dynamic location
  • updating location of bindComponent helper

4.4.19

  • [testing] Fix key suffix test assertions.
  • Address key suffix feedback. Additional tests.
  • [morphdom] Removed bad and unhelpful optimization to avoid infinite loops
  • [morphdom] Ensure onBeforeNodeDiscarded is only called once by looking to see if the node is still attached.
  • [morphdom] Infinite loop fix in morphdom
  • Fixes #761 - component.elId() does not work on the server
  • Fixes #755 - Allow diffing of HTML, head, and body. #756
  • [docs] Updated component docs
  • [docs] Use relative link for image
  • [testing] User default npm version for each Node.js version

4.4.18

  • Fixes #749 #690 - Do not rely on root node having an ID on rerender and properly handle style root nodes.

4.4.17

  • Put package (browser.json) deps before others and parent deps before child deps #750
  • [docs] Fix typo in redux.md
  • [docs] Add redux document to structure.json
  • [docs] Add doc describing how to use Redux with Marko.

4.4.16

  • Fix duplicate body variable

4.4.15

  • Fixes #739 - Should not attempt to check instanceof of type Map if it does not exist in the browser.
  • Added build scripts

4.4.14

  • Fixes issue with renderToString not rendering text nodes

4.4.13

  • Fixes #721 - Add a Code of Conduct
  • Fixes #655 - Implement renderToString in the browser.

4.4.12

  • Fixes #695 - Always ignore unrecognized tags for XML files when using the compiler.
  • Fixes #705 - Throw error when the root HTML element is a component and has a dynamic id attribute.
  • [testing] Additional test for root node with dynamic id of a component with a component.js file.

4.4.11

  • Fixes #728 - Do not use module keyword because webpack compiles it to a custom object.
  • Fixes #719 - Support Express 4 and Express 5.
  • fixes #658 by removing empty style blocks #715
  • fixes #688 - add reference to browser.json in meta dependencies
  • [docs] Fix broken link
  • [docs] Fix Marko syntax in docs causing compilation errors on the website.
  • [docs] Change pixels to percent in doc images.
  • [testing] Purge express cache so that express tests both use correct module versions.

4.4.9

  • Revert "Fixes #705 - Throw error when the root HTML element has a dynamic id …"
  • [testing] Only run Node 4, 6, & 8 in travis

4.4.8

  • [docs] Clean up why-is-marko-fast.md
  • [docs] Clean up marko-vs-react.md

4.4.7

  • Add silent option to browser-refresh and hot-reload
  • Check id attribute for Literal. Update error message to include error page.
  • Fixes #705 - Throw error when the root HTML element has a dynamic id attribute.
  • [docs] Clean up components.md
  • [docs] Fix typo in webpack.md
  • [testing] give extra time for test timing out in travis
  • [testing] run tests on node 8
  • [testing] ignore test-dist from coverage

4.4.6

  • Fixes #693 - [SSR] Improved handling of top-level UI components with renderBody func
  • Switching to using prepublish with npm@5

4.4.3

  • Use parent module to require express patch #701
  • [docs] Reference app should point to "marko-lasso" because "ui-components-playground" does not contain lasso
  • [docs] Add articles section to docs.

4.4.2

  • Build fixes related to compiler

4.4.0

  • Improve no-update-if condition check
  • Compatibility improvements for Try Online
  • Code size reduction
  • Introduced src/ and dist/ folders for optimized production builds
  • Fixes #695 - Default to ignoring unrecognized tags for XML files.

4.3.x

4.3.1

  • Add basic test for ensuring that res.marko returns a promise.
  • enable res.marko can catch a error safe

4.3.0

  • [compiler] Added more control over how attributes are targeted to props
  • Don't add root markers to tags that don't produce output
  • [docs] Added docs for Marko + Huncwot integration
  • [AST] Added node.removeChildren()
  • Extend marko globals with defaults

4.3.0-beta.4

  • Fixes #673 - Circular dependency is causing problems with Webpack

4.3.0-beta.3

  • Changes related to #670 - Globals must be serialized earlier to allow early mount of UI components in
  • [docs] Improved docs for SSR

4.3.0-beta.2

  • Fixes for #670 - Add support for serialized globals and retain globals on re-render

4.2.x

4.2.8

  • Bug: Fixes #661 - Component initialization code may end up in the wrong place
  • Bug: Fixes #668 - Declarative event listeners are now allowed on the <include> tag

4.2.7

  • Bug: Fixes #650 - The tag "await" does not support attribute "unless"
  • Improvements to legacy state

4.2.6

  • Bug: Fixes #654 - Bug: components implementing a key attribute break in Marko v4
  • Improvements to legacy compatibility layer

4.2.5

  • Improved support for UI components implemented using native JavaScript class in a separate file
  • Improved how legacy layout tags are handled by Marko v4

4.2.4

  • Bug: Fixes #653 - Event handlers are no longer bound in edge case

4.2.3

  • Bug: Fixes #649 - New line always added to textarea and other elements for single line/delimited HTML blocks

4.2.2

  • Bug: Fixes #648 - Style attribute object and lengths not handled properly

4.2.1

  • Bug: Fixed #644 - Attribute not rendered by Marko is not preserved if component first rendered on the server
  • [Performance] Escaping is not needed for the data-marko attribute

4.2.0

  • Bug: Fixed #629 - VDOM: Rendering unescaped HTML produces non-functioning HTML input controls
  • Bug: Fixed #634 - writeInitComponentsCode is not a function
  • Enhancement: Added support to allow improved precompiling of templates
  • Enhancement: Fixed #636 - Add error when macro with duplicate name is found
  • Performance: Optimized diffing/patching to avoid indexing entire tree to find keyed elements
  • Performance: Optimized how event handlers are attached to VDOM nodes (separated from attributes)

4.1.x

4.1.3

  • Bug: Fixed losing cursor position in Edge (see morphdom PR #100 by @zastavnitskiy)
  • Bug: Ignore xmlns attributes when virtualizing real DOM nodes (needed when inserting an HTML string when rendering to a VDOM)

4.1.2

  • Bug: Fixed #623 - Uncaught TypeError: toEl.$__hasAttribute is not a function
  • Bug: Fixed #619 - Deprecated constructor() for UI component classes

4.1.1

  • Added "use strict"; to restore Node.js compatibility for Node.js v4 and v5

4.1.0

  • Bug: Fixes #611 - Component IDs are not being assigned correctly when intermediate non-component is rendered
  • Performance: SVG namespaced elements are now resolved determined at compile-time
  • Performance: Merged in morphdom and optimized for Marko
  • Performance: Optimized diffing/patching of elements with only simple attributes in the following set: class, id and style

4.0.x

4.0.1

  • Bug: Fixes #612 - Compile error when class method has empty return
  • Bug: Fixes #604 - no-update attributes error when first rendered on the server
  • Bug: Fixes #608 - Component losing renderBody input on a particular redraw
  • Enhancement: Fixes #606 - named single-file component doesn't work

4.0.0

3.x

3.13.x

3.13.2

  • Fixed [#478](TagLookup fails when merging taglibs) - TagLookup fails when merging taglibs

3.13.1

3.13.0

3.12.x

3.12.0

3.11.x

3.11.8

  • Fixes #382 - Local variable for tag should have prefix or suffix to avoid conflict

3.11.7

  • Fixes #381 - $global broken when using template.stream()

3.11.6

  • Internal change: AsyncWriterAsyncStream

3.11.5

  • (no changes)

3.11.4

  • Update to async-writer@2

3.11.3

  • Silently ignore errors when parsing tag definition code inlined in JavaScript

3.11.2

  • Fixed #318 - Use compiler options passed to require hook to configure marko globally
require("marko/node-require").install({
  compilerOptions: {
    writeToDisk: false,
  },
});

3.11.1

  • Fixed #370 - HTML characters in loop separator string should not be escaped

3.11.0

  • Introduced the <include-html(path)> tag for including static HTML:
<include-html('./foo.html')>

3.10.x

3.10.1

  • Fixed #44 - Webpack compatibility fixes. Also see marko-loader (A marko loader for webpack)

3.10.0

  • Fixed #357 - Deprecate empty/notEmpty in Marko v3

3.9.x

3.9.4

  • Fixed #355 - status-var/separator options not handled when looping over properties
  • Fixed #354 - regular expressions used in attribute values are not being handled correctly
  • Fixed #353 - body-only-if attribute does not work with custom tags (only HTML tags)

3.9.3

  • Upgraded to raptor-util@^2

3.9.2

3.9.1

  • Fixed #348 - exclude all *.orig and other files from published npm package

3.9.0

  • Fixed #231 - Allow <assign count++>
  • Fixed #345 - Whitespace preservation now applies to all deeply nested text nodes
  • Fixed #344 - Introduced defineRenderer for Marko
  • Docs: Added docs for excluding directories from taglib discovery (@mlrawlings)
  • Docs: Added docs for component autodiscovery (@mlrawlings)
  • Docs: Added docs for passing a data object to a custom tag

3.8.x

3.8.1

  • Fixed #342 - await:finish event not emitted for async fragments with client reorder and that complete synchronously

3.8.0

3.7.x

3.7.4

  • Fixed #339 - Tag transformers are not being applied to tags with a dynamic tag name (fixes #146 for Marko Components)

3.7.3

  • Fixed #332 and #333 - Correct values for literalUndefined and literalFalse in the Builder API @bkuri
  • Fixed #336 - Upgraded to latest version of minimatch

3.7.2

  • Fixed #328 - Improve error reporting when taglib/tag definition fails to load
  • Additional change to disable escaping for dynamic Text nodes added to body of <script> tag to fix issue #326

3.7.1

  • Improved escaping within the <script> tag to fix issue #322. Special HTML characters will no longer be escaped within the context of the <script> tag since browsers do not decode HTML entities within the <script> tag. Instead, only the ending </script> tag sequence is escaped using JavaScript string escaping sequences.

3.7.0

  • Made change to make configuration a true singleton shared across all instances of marko loaded at runtime (commit)

3.6.x

3.6.2

3.6.1

  • Fixed a bug that was causing transforms to be run on detached nodes. This was manifesting itself in the <async-fragment> to <await> transform if an if() attribute was present (or other core attributes that end up wrapping the tag it is defined on).

3.6.0

  • Introduced a new and simpler <await> tag that should be used instead of the now deprecated <async-fragment> tag (see deprecation details below) (Pull Request #312 by @mlrawlings)

Deprecations

  • Deprecated the <async-fragment var="<var>" data-provider=<data-provider>> tag in favor of the <await(<var> from <data-provider>)> tag:

OLD:

<async-fragment var="userInfo" data-provider=data.userInfoPromise>
    Hello ${userInfo.name}!
</async-fragment>

NEW:

<await(userInfo from data.userInfoPromise)>
    Hello ${userInfo.name}!
</await>

The <await> tag supports all of the attributes of the previous <async-fragment> tag except for var and data-provider:

<await(userInfo from data.userInfoPromise) name="userInfo" timeout=10000 client-reorder>
    Hello ${userInfo.name}!
</await>

Finally, the nested tags for providing content for the placeholder, error and timeout messages have been renamed accordingly:

<await(userInfo from data.userInfoPromise) client-reorder>
    <await-placeholder>
        This is alternate content while the async fragment is loading.
    </await-placeholder>
    <await-timeout>
        A timeout has occurred!
    </await-timeout>
    <await-error>
        A error has occurred!
    </await-error>

    Hello ${userInfo.name}!
</await>

3.5.x

3.5.1

  • Fixes #316 - Autocomplete for tags is not updated when tag files updated despite clearing cache. This improves the autocomplete-marko plugin for Atom.
  • Fixes #314 - Remove hyphens from include props
  • Deprecated:
    • Properties passed in using the <include> tag should not be access using hyphens.

For example, given the following template:

<include("./include-target.marko") first-name='Jane'/>

The first-name data should be accessed using the firstName property:

var firstName = input.firstName;
// NOT: var firstName = input['first-name'];

3.5.0

3.4.x

3.4.9

3.4.8

  • Added support for an "enum" attribute value

3.4.7

  • Async fragment improvements (Pull Request #305 by @mlrawlings)
    • Adds additional event info (finished/timedout) to the data emitted from tags.
    • Ensures that renderBody() is not called again if the fragment has already finished (timed out).
    • Fixes npm run test-async
    • Removes a redundant async-fragment timeout related test

3.4.6

  • Updated autocomplete information

3.4.5

  • Fixes #304 - async-fragment-tag-transformer.js being loaded by PhantomJS
  • Updated taglibs with additional information to support tooling
  • Added Michael Rawlings as a maintainer

3.4.4

  • Fixes #303 - addStaticVar is not generating unique variable names correctly

3.4.3

3.4.2

  • Improved error reporting in cases when code generation fails (@mlrawlings)

3.4.1

  • Additional tweaks for #298 - Always emit correct events for async fragments

3.4.0

  • Fixes #298 - Always emit correct events for async fragments
  • Updated docs

3.3.x

3.3.0

  • Include async fragment name in the asyncFragmentFinish events (@kprakasam)

3.2.x

3.2.0

  • Fixes #286 - Add res.marko(templateData) for use with Express (@mlrawlings)

3.1.x

3.1.9

  • Fixes #288 - Provide API for discovering custom tags and attributes for autocomplete/tooling purposes
  • Documentation improvements

3.1.8

  • Fixes #280 - Switch from jsonminify to strip-json-comments
  • Updated docs for Koa and Hapi
  • Additional tests for Node.js v6

3.1.7

  • Fixes #274 - marko-compiler-options tag is not properly ended when using raw parsing (for prettyprint)

3.1.6

  • Fixes #268 - this.write is not a function for empty ArrayExpression

3.1.5

  • Fixes #262 - node-require module removes .marko extension from filenames in compiled code

3.1.4

  • Fixes #267 - Shorthand CSS class name cannot be combined with object/array class names

3.1.3

  • Fixed #266 - Hot reloading fails if original template is deleted

3.1.2

  • Fixed error reporting when using compiler.parseRaw()
  • Added test for #262

3.1.1

  • Improved whitespace removal for text nodes directly below the root

3.1.0

  • Fixes #254 - Allow preserve whitespace to be enabled at the global level

3.0.x

3.0.7

  • Fixes #240 - Always trim start and end of template (even if preserveWhitespace is true)
  • Fixes #260 - Circular custom tags causes infinite recursion when writeToDisk is set to false
  • Minor internal cleanup

3.0.6

  • Don't wrap exception in parseJavaScript if error object was not created by Esprima

3.0.5

  • Fixes #257 - Placeholders don't render for out-of-order async fragments

3.0.4

  • Fixes #256 - Convert attributes to title case if no attributes are declared for a custom tag
  • Use <noscript> for out-of-order async fragment placeholders

3.0.3

3.0.2

  • Store tagDef with HtmlElement node (needed for pretty printing)

3.0.1

  • Docs: Fixed minor issues in docs
  • Reintroduced support for the MARKO_CLEAN environment variable: MARK_CLEAN=true node server.js

3.0.0

2.x

2.8.x

2.8.4

  • Fixes circular dependency issue between runtime/index.js and hot-reload/index.js

2.8.3

  • Fixes circular dependency issue between runtime/index.js and hot-reload/index.js

2.8.2

  • Fixes #203 - Incorrect behavior when attrs is used on a standard HTML tag with a tag def

2.8.1

  • Fixes #202 - Pass along options to compiler when loading a template

2.8.0

  • Added support for automatically discovering taglibs from installed packages that are scoped. (PR #183 by @tropperstyle)

2.8.3

  • Fixes circular dependency issue between hot-reload/index.js and runtime/index.js

2.7.x

2.7.31

  • Fixes #167 - Nested tags only work one level deep

2.7.30

  • docs: don't exclude docs in .npmignore

2.7.29

  • Fixes #161 - Nested tags with no body content are not handled correctly

2.7.28

  • Fixes #140 - Also de-dupe cached taglibs in finder

2.7.27

  • Make loading template from String template source easier:
var template = marko.load(templatePath, "Hello $!{data.name}!");

NOTE: Loading directly from source only works on the server

See Pull Request #153

2.7.26

  • Use shorter relative paths in error messages

2.7.25

  • Fixes #150 - Provide option to prevent writing compiled templates to disk. Example usage:
require("marko/compiler").defaultOptions.writeToDisk = false;

NOTE: If you disable writing compiled templates to disk then it will be a little harder to debug errors in templates on the server since the stack trace will refer to a file that has not been written to disk.

For a more complete list of compiler options please see: http://markojs.com/docs/marko/javascript-api/#defaultoptions

2.7.24

  • Fixes #140 - De-dupe taglibs by module name
  • Documentation: Miscellaneous changes

2.7.23

  • Fixed a typo for rendererFunc in helpers.js (commit: 0205a47f04)

2.7.22

2.7.21

  • Automatically enable hot-reload and browser-refresh if launched using browser-refresh

2.7.20

  • Documentation: Miscellaneous changes

2.7.19

  • Fixes #137 - adds support for dynamic HTML tag names

2.7.18

  • Improvement: Better resolving of tag renderer
  • Compiler: Fix to make compiler work in the browser

2.7.17

  • Fixes #135 Allow "attrs" attribute on custom tags

2.7.16

  • Improved handling of imports
  • Better handling of loading taglibs with circular dependencies

2.7.15

  • Handle circular taglib imports

2.7.14

  • Fixes #131 - Recursively handle taglib imports

2.7.13

  • Added a .npmignore file
  • Fixed licensing header in source
  • Documentation: improved docs for input.renderBody()
  • Documentation: Miscellaneous changes

2.7.12

  • Fixes #122 Don't allow invalid attributes when using shorthand
  • Fixes #122 Typo in hasAttributes
  • Fixes #127 - Make sure all possible input files are accounted for when checking if a compiled template is up-to-date
  • Use browser.json files instead of optimizer.json files
  • Documentation: Improved docs for async taglib
  • Documentation: Added empty() and notEmpty() helpers to the readme
  • Added Martin Aberer as a maintainer
  • Documentation: Miscellaneous changes

2.7.11

  • New logo!

2.7.10

  • Fixes #118 Better error when parsing JSON file for tag
  • Testing: More test cases related to empty attributes
  • Documentation: Clarification for the Node.js require extension
  • Documentation: doc reference for getLength() of loop status-var
  • Documentation: Added reference to sublime-marko under the tools section.

2.7.9

  • Fixes #109 - Allow compiler.createNode('div')
  • Fixes #108 - Improve how the MARKO_CLEAN env variable is handled

2.7.8

  • Minor documentation changes

2.7.7

2.7.6

  • Make require('marko/node-require').install() a noop in the browser

2.7.5

  • Improvement: Allow template-data to be combined with other attributes on the <include> tag
  • Documentation: Fixes #98 - docs for <include template-data="...">

2.7.4

  • Fixes #96 - Allow relative, dynamic include paths

2.7.3

  • Internal change: Additional test cases added for using promises with async fragments

2.7.2

  • Fixes #73 - Prevent same taglib from being loaded multiple times

2.7.1

  • Fixes #88 - Assign global data to the correct out

2.7.0

  • Fixes #27 - IE conditional comments (e.g., <!--[if lt IE 9]><div><![endif]-->) are automatically preserved. Previously, all HTML comments were stripped out when loading a template. For example:
  • Added support for <compiler-options comments="preserve"/> to enable comments to preserved in a template. For example:
<compiler-options comments="preserve"/>
Hello
<!--This comment should be preserved-->
World

Output:

Hello
<!--This comment should be preserved-->
World

2.6.x

2.6.0

  • Performance improvements
    • 'use strict';
    • Optimized render code paths
  • Code cleanup
  • Compatibility fixes for Node.js 0.12
    • Bad: fs.readFile(path, 'utf8')
    • Good: fs.readFile(path, {encoding: 'utf8'})

2.5.x

2.5.0

  • Fixes #78 - Custom Node.js require extension for Marko template files. Example usage:
// Install the Node.js require extension in your application's main script (server-side only)
require("marko/node-require").install();

// Now you can require `*.marko` files just like any other JavaScript module
var template = require("./hello.marko");
var html = template.renderSync({ name: "Frank" });
  • Compiled templates now export a loaded Template instance. In the previous version of marko, compiled templates exported a function that could be used to create a loaded Template instance.

2.4.x

2.4.3

  • Fixes edge case: More precise regular expression for decoding HTML entities

2.4.2

  • Internal: Fixes #75 Always assign the tag property to custom tag nodes

2.4.1

  • Improvement to allow taglibs to be imported from other taglibs (commit)

2.4.0

  • Added support for short-hand tags and attributes

Old marko-taglib.json:

{
  "tags": {
    "my-hello": {
      "renderer": "./hello-renderer",
      "attributes": {
        "name": "string"
      }
    }
  }
}

Short-hand marko-taglib.json:

{
  "<my-hello>": {
    "renderer": "./hello-renderer",
    "@name": "string"
  }
}
  • Fixes #61 Simplify parent/child relationships

Marko now supports custom tags in the following format: <parent_tag.nested_tag>

Example usage:

<ui-tabs orientation="horizontal">
  <ui-tabs.tab title="Home"> Content for Home </ui-tabs.tab>
  <ui-tabs.tab title="Profile"> Content for Profile </ui-tabs.tab>
  <ui-tabs.tab title="Messages"> Content for Messages </ui-tabs.tab>
</ui-tabs>

ui-tabs/marko-tag.json

{
  "@orientation": "string",
  "@tabs <tab>[]": {
    "@title": "string"
  }
}

ui-tabs/renderer.js

var template = require("marko").load(require.resolve("./template.marko"));

exports.renderer = function (input, out) {
  var tabs = input.tabs;

  // Tabs will be in the following form:
  // [
  //     {
  //         title: 'Home',
  //         renderBody: function(out) { ... }
  //     },
  //     {
  //         title: 'Profile',
  //         renderBody: function(out) { ... }
  //     },
  //     {
  //         title: 'Messages',
  //         renderBody: function(out) { ... }
  //     }
  // ]
  console.log(tabs.length); // Output: 3

  template.render(
    {
      tabs: tabs,
    },
    out,
  );
};

ui-tabs/template.marko

<div class="tabs">
  <ul class="nav nav-tabs">
    <li class="tab" for="tab in data.tabs">
      <a href="#${tab.title}"> ${tab.title} </a>
    </li>
  </ul>
  <div class="tab-content">
    <div class="tab-pane" for="tab in data.tabs">
      <invoke function="tab.renderBody(out)" />
    </div>
  </div>
</div>

2.3.x

2.3.2

Fixes #66 - Allow circular dependencies when loading templates

2.3.1

  • Testing framework changes
  • Fixes #65 - Generated variable name is an empty string in some cases

2.3.0

  • Fixes #53 Merge c-input with attr props

2.2.x

2.2.2

Fixes #60 Don't replace special operators for body functions

2.2.1

  • Fixes #58 Added support for MARKO_CLEAN env variable (force recompile of all loaded templates). Example usage:
MARKO_CLEAN=true node run.js
  • Code formatting: add spaces in var code

2.2.0

  • Fixes #51 Allow body content to be mapped to a String input property
  • Fixes #52 Remove JavaScript comments from JSON taglib files before parsing

2.1.x

2.1.6

  • Fixes #50 Initialize the loader after the runtime is fully initialized

2.1.5

  • Fixes #50 Ensure that all instances of marko have hot-reload and browser-refresh enabled

2.1.4

  • Allowing complex var names (i.e. LHS) for the <assign> tag.

2.1.3

  • Minor change: Slight improvement to code to resolve tag handler

2.1.2

  • Minor change: Improve how renderer is resolved

2.1.1

  • Fixes #48 name in marko-tag.json should override default name given during discovery

2.1.0

  • Fixes #47 - Added support for "taglib-imports"

2.0.x

2.0.12

  • Fixes #31 - Add support for providing prefix when scanning for tags
  • Allow "code" to be a function that lazily evaluates to a code string during code generation

2.0.11

  • Added method for custom node compilers to get access to the escapeXml function at runtime

2.0.10

  • Fixes #39 - Added missing return when using hot-reload

2.0.9

  • Fixed bad publish

2.0.8

  • Better merging of tags when loading and merging taglibs

2.0.7

  • Changes to avoid problems associated with the same taglib being found multiple times in the search path

2.0.6

  • renderBody function is only added if tag has children

2.0.5

  • Fixed #36 - Don't use invokeBody() in the cache taglib

2.0.4

  • Fixed #36 - Deprecated - When using <include> with body content, nested body content is now passed in as String property named body. Old behavior: nested content would be passed in as a Function property named invokeBody that would return the String value of the nested content. invokeBody() has been deprecated.

2.0.3

  • Fixed #36 - Don't use invokeBody() in test code and the HTML comments tag

2.0.2

  • Fixed #36 - Deprecated input.invokeBody() in favor of input.renderBody(out)
  • Fixed #37 - Duplicate input property for custom tag renderers

2.0.1

  • Fixed #35 - Added support for <compiler-options>. Example:
<compiler-options whitespace="preserve" /> A B C

2.0.0

  • Dynamic attributes for scanned tags without a tag will have dashes removed by default.
    • When using tags-dir to discover tags that do not have a marko-tag.json, the previous behavior was to allow all attributes and to use the actual attribute name as the input property name. For example, when using <hello first-name="John">, first name would need to be read in as input['first-name']. This was changed such that the first name property should now be read in as input.firstName (dashes removed and converted to camel case)
  • Changes to allow UI component to be put into a single JS file:
    • Updated taglib directory scanner to use index.js if found. New search order:
      1. renderer.js (use renderer.js if it exists)
      2. index.js (use index.js if it exists and assume it exports a renderer or render property)
      3. template.marko (use the template as the renderer if no renderer.js or index.js)
    • Changes to the taglib directory scanner could break existing code. Specifically, if a UI component directory had an index.js file and a template.marko file then in in marko@<2 the template.marko file would have been selected as the renderer. In marko@2.x, the index.js will be selected as the tag renderer.
  • Removed support for mapping a tag renderer to a module with a process method
  • Removed sub-module marko/renderer that exports raptor-renderer

1.x

1.6.x

1.6.1

  • Added back code to allow the new marko runtime to load templates compiled by an earlier compiler that used module.exports

1.6.0

  • Fixed #32. Switched from module.exports = function create(__helpers) { ... } to exports.create = function(__helpers) { ... } to avoid circular dependency problems

1.5.x

1.5.8

  • Added support for adding "static" code to the top of a compiled template (helpful for initializing variables or running code once).

1.5.7

1.5.6

  • Changes to avoid unoptimized code in V8

1.5.5

  • Handle case where template was loaded before hot-reload was enabled

1.5.4

  • Added support for $global in renderSync