Skip to content

Releases: edge-js/edge

Woohah, tremendous improvements to the inspect helper

02 May 16:41
Compare
Choose a tag to compare

In order to print server side objects in the browser, you need to convert them to a string, since you cannot send a Javascript primitives over HTTP.

Many individuals opt for JSON.stringify(someObj) to convert an object to its string representation and then print it in the browser. In fact, many template engines provides helpers for JSON.stringify. For example: nunjucks

Problems with JSON.stringify

The stringify method cannot represent all of the Javascript data types. It includes Maps, Sets, BigInt and so on.

More importantly, the output of JSON.stringify is not a true representation of an object and can trick you many times. For example:

You have the following class

class User {
  constructor() {
    this.options = {
      timezone: 'UTC',
      theme: 'dark'
    }

    this.attributes = {
      username: 'virk',
      email: '[email protected]'
    }
  }

  toJSON() {
    return this.attributes
  }
}

If you print an instance of this class using console.log, you will get the desired outcome

console.log(new User())

// User {
//   options: {
//     ...
//   },
//   attributes: {
//    ...
//   }
// }

However, with JSON.stringify, you get the following output.

console.log(JSON.stringify(new User()))

// '{"username":"virk","email":"[email protected]"}'

Where are the attributes and options properties?

Well, the JSON.stringify method recursively calls .toJSON method on the objects you pass. So, when the user instance it passed to JSON.stringify method, it returns the output of user.toJSON.

This is not a problem with JSON.stringify, since this method is not meant to inspect native data types. It is meant to serialize/deserialize them.

The console.log method of Node.js doesn't use JSON.stringify, it uses util.inspect. The util.inspect method is great for dump the output in a terminal, but not in a browser.

Edge inspect helper

With this release, the edge inspect helper works similar to console.log/util.inpsect, but the output is tailored for browser with support for pretty printing.

Usage

Write the following code inside any template file.

{{ inspect(state) }}

Output

Screen Shot 2020-05-02 at 9 18 57 PM

Commits

  • fix(inspect): do not use JSON.stringify for inspecting objects 8fc7e95
  • improvement(inspect): handle circular references and allow custom inspection ddd5541

v3.0.2...v3.0.3

Fixing the inspect output HTML

20 Apr 07:50
Compare
Choose a tag to compare
  • fix: inspect output html do not overflow long lines 0055b81

v3.0.1...v3.0.2

Raise error when super is used outside the section tag

17 Apr 18:49
Compare
Choose a tag to compare
  • feat: add public GLOBALS helper to access Edge globals 3fb2f7c
  • improvement: raise exception when super is used outside the section tag 452e648

v3.0.0...v3.0.1

Dream Release

14 Apr 18:31
Compare
Choose a tag to compare

Edge is finally at a stage, where it is super solid and intuitive to use and hence doesn't have feature bloat.

Highlights

  • The error tracking is super solid. Compile time and runtime error will point back to the actual source code and not some compiled gibberish.
  • Almost every Javascript expression is supported inside Mustache braces.
  • Expression inside mustache can be written in multiple lines.
  • The components and slots exposes some great ways to create powerful components. Just like vue, you can pass data to slots when using them inside a component.
  • The inspect helper allows inspecting objects while pretty printing them.

Commits

  • improvement: use Jet brains mono for pretty print font fdab49e
  • feat: add truncate and excerpt tags eb3a492
  • feat: add inspect and safe global methods adb499f
  • feat: add safe and inspect globals b6d0b01
  • test: fix test helpers to address newlines issue on windows dddb219
  • fix: escape filename characters before setting it as filename inside template buffer c6c8e05
  • ci: fixing newline helpers for windows tests 9aeffe9
  • test: add a test covering \u path issue for windows 6b46aa2
  • feat: export types required for creating a tag 453c865
  • refactor: remove unused code a993a9d
  • chore: remove unused dependencies dd7d843
  • chore: update dependencies 02aacb9
  • ci: update min node version e57b21b
  • test: add more tests for edge cases 9c67e6a
  • chore: remove unwanted dependencies 4e86c7d
  • refactor: improving the way newlines are handled 86e6d4c
  • refactor: fix fixtures after lexer update e97b681
  • refactor: remove examples in favor of the new repo dc9f07b
  • refactor: remove globals, will move them to separate package 4941949
  • refactor: cleanup codebase 0644c41
  • feat: add @includeIf tag a8cd83b
  • refactor(include tag): do not wrap output inside template literals eed0249
  • refactor: finalize @component tag 02abb68
  • refactor: complete @set tag b082e67
  • refactor: complete @yield tag fb5471f
  • feat: finalize @unless tag 9fc5fe5
  • refactor: finalize @include tag 202f03b
  • refactor: complete @each tag d1a581f
  • refactor: finalize @debugger tag 95df053
  • refactor: finalize if and else tags 6879174
  • refactor: finalize CacheManager API ad4ee7e
  • refactor: finalize StringifyObject API f904d79
  • refactor: finalize Template API 62a50a6
  • refactor: finalize compiler API 46763db
  • refactor: finalize Context API 96dec74
  • refactor: finalize loader api 17747a4
  • chore: update dependencies cca6487

v2.2.0...v3.0.0

Bunch of improvements and better error tracking

12 Mar 17:11
Compare
Choose a tag to compare
  • chore: update dependencies 6af494d
  • test: add test case addressing #41 8edfcd8
  • test: write test to cover issue #64 fe0d683
  • test: add tests for issue #25 6c46e1e
  • refactor: adding new global functions 6756713
  • style: update example to use youch for rendering errors ec07c45
  • feat: runtime errors now points to the actual file and line number 2137d22
  • refactor: move extractDiskandTemplateName method to loader e93ed43
  • refactor: move sharedState to presenter from context bb4cd29
  • refactor: finalize compiler api 33b287b
  • refactor: finalize cachemanager api 21ebb45
  • feat: add fromAcornAst method to create stringified object from acorn ast expressions 06c1cd6
  • refactor: complete stringfiedObject api 689f7fa
  • style: remove @module docblock afa64d9
  • refactor: finalizing context api and implementation c054fe0
  • refactor: finalize loader api and implementation 8aabcc8
  • chore: update dependencies 6ca2aee

v2.1.0...v2.2.0

Share filename with templates runtime and inspect global method

28 Feb 03:33
Compare
Choose a tag to compare
  • test: fix breaking tests after last commit 93c6343
  • chore(package): update dependencies 40fa757
  • feat: add property to context ae5dd79
  • feat: add inspect global method 1d6aa75
  • feat: add context.safe to mark a value as safe 0ca5991
  • feat: add option to view the context state 227fb0a
  • chore(package): update dependencies d4f680c

v2.0.2...v2.1.0

Fixing the tags registration by calling the run method

23 Sep 09:08
Compare
Choose a tag to compare
  • fix: invoke Tag.run method when registering the tag 386a8a9
  • chore: update dependencies 40c03a6
  • fix(loader): handle esm default exports for Presenter b697195

v2.0.1...v2.0.2

Tightening things up

15 Sep 03:11
Compare
Choose a tag to compare
  • docs(readme): update readme template 38941ce
  • chore: fix example 3feccca
  • chore(package): update dependencies 9417b60
  • refactor: accept an object of options when instantiating edge 4041b38
  • chore: update parser c3c69e4
  • refactor: improving stack traces for included files, layouts & components 9b72583
  • fix(compiler): pass absolute filepath to parser & lexer for appropriate stack trace 4c4300c

v2.0.0...v2.0.1

Release 2.0.0

14 Sep 03:04
Compare
Choose a tag to compare

Docs will follow soon

  • chore: update package name and publish config 1a37192
  • chore(package): update depedencies bad7765
  • chore(package): update dependencies 3c80cd6
  • chore: updgrade parser and make required changes d44fb46
  • refactor: update examples code a7c798c
  • refactor: define presenter & sharedState on context contract 4530aed
  • refactor: improve edge api and cleanup utils c2ffb90
  • refactor: cleanup entire project API c2382bc
  • refactor: finalize compiler API a0d5502
  • chore: setup np for releases 5cc6452
  • refactor: cleanup and upgrade to new project style 6c0c405
  • chore(package): update dependencies and make required changes as per that 6ec2bd7
  • docs(readme): fix docs URl 35089cc
  • docs: Fix the NPM package URL d6e4307
  • style(utils): cleanup code 1c41b64
  • fix(loader): do not make abs path for pre registered templates ca780e5
  • chore(package): update dependencies e30e087
  • docs(readme): update readme file ad42d9e
  • docs(typedoc): add typedoc api docs 3ff9e8a
  • fix(edge.render): set state to empty object by default b88f9e8
  • refactor(debug): add debug statements bfa4cc4
  • feat(layout): implement layouts in the compiler 73d0b39
  • refactor(errors): use edge-error for consistent error stacks 4894f4a
  • WIP e350e47
  • chore(package): add edge-error dependency 418a918
  • feat(loader): add support for registering template as a string 761d317
  • test(each): set intermediate values inside each loop 1989461
  • feat(yield): add yield tag cc4dc87
  • test(component): add nested component test 54a5ff1
  • refactor(tags): make tags all static f074718
  • feat(unless): add unless tag 60b2c0a
  • feat(each): add runtime $loop to the each loop 41715b2
  • feat(set): add set tag 81dcae8
  • feat(debugger): add debugger tag 772cdb7
  • test(components): add more tests for components around edge cases d102d75
  • feat(components): allow slots to define the prop name themselves aace6d9
  • feat(components): components can now pass data to the slots 4edb22e
  • feat(edge): add main public interface of edge fd884ea
  • feat(loader): add support for presenter in the loader 13c9e97
  • refactor(*): cleanup api 4da7acf
  • feat(component): implement component tag 01e8e95
  • chore(package): update parser 726142a
  • feat(tag): each f8d6d02
  • feat(tags): implement include tag 79800b9
  • test(if): write tests around invalid if syntax 8b2a761
  • feat(tags): implement if,elseif and else tags f7647b5
  • feat(Template): get first version of template renderer ready e4935eb
  • feat(loader): add file system loader cc3aa63
  • chore(setup): setup mrm and run all tasks aa10de0
  • refactor(*): remove everything b92c7bf

v1.1.4...v2.0.0

Initial Release

30 Mar 17:20
Compare
Choose a tag to compare

This release contains all the core features of Edge and does not have any notable changes, since this is the 1st time the package has been released