opal

Ruby ♥︎ JavaScript

MIT License

Downloads
203
Stars
4.8K
Committers
128

Bot releases are hidden (Show)

opal -

Published by elia about 6 years ago

Changed

  • Strip Regexp flags that are unsupported by browsers (backport), previously they were ignored, lately most of them now raise an error for unknown flags.

Fixed

  • Fixed a constant reference to Sprockets::FileNotFound that previously pointed to Opal::Sprockets instead of ::Sprockets.
opal -

Published by elia about 6 years ago

Added

  • Added support for a static folder in the "server" CLI runner via the OPAL_CLI_RUNNERS_SERVER_STATIC_FOLDER env var
  • Added ability to pass the port to the "server" CLI runner using the OPAL_CLI_RUNNERS_SERVER_PORT (explicit option passed via CLI is still working but deprecated)
  • Added a new Opal::Config.missing_require_severity option and relative --missing-require CLI flag. This option will command how the builder will behave when a required file is missing. Previously the behavior was undefined and partly controlled by dynamic_require_severity. Not to be confused with the runtime config option Opal.config.missing_require_severity; which controls the runtime behavior.
  • At run-time LoadError wasn't being raised even with Opal.config.missing_require_severity; set to 'error'.
opal -

Published by elia about 6 years ago

Fixed

  • Remove symlink that caused problems on Windows
opal -

Published by elia about 6 years ago

Fixed

  • Fixed Array#dup when method_missing support was disabled
opal - v0.11.0

Published by elia over 6 years ago

Added

  • Added support for complex (0b1110i) and rational (0b1111r) number literals. (#1487)
  • Added 2.3.0 methods:
    • Array#bsearch_index
    • Array#dig
    • Enumerable#chunk_while
    • Enumerable#grep_v
    • Enumerable#slice_after
    • Enumerable#slice_when
    • Hash#>
    • Hash#<
    • Hash#>=
    • Hash#>=
    • Hash#dig
    • Hash#fetch_values
    • Hash#to_proc
    • Struct#dig
    • Kernel#itself
  • Added safe navigator (&.) support. (#1532)
  • Added Random class with seed support. The following methods were reworked to use it:
    • Kernel.rand
    • Kernel.srand
    • Array#shuffle
    • Array#shuffle!
    • Array#sample
  • Added rudimental history support to opal-repl, just create the history file (~/.opal-repl-history) and it record the last 1000 lines
  • Added JS::Error error class that can be used to catch any JS error.
  • Added Method#source_location and Method#comments.
  • Added a deprecation API that can be set to raise on deprecation with: Opal.raise_on_deprecation = true
  • Added Opal::SimpleServer as the quickest way to get up and running with Opal: rackup -ropal -ropal/simple_server -b 'Opal.append_path("app"); run Opal::SimpleServer.new'
  • Added String#ascii_only? (#1592)
  • Added StringScanner#matched_size (#1595)
  • Added Hash#compare_by_identity (#1657)

Removed

  • Dropped support for IE8 and below, and restricted Safari and Opera support to the last two versions
  • Dropped support for PhantomJS as it was abandoned.

Changed

  • Removed self-written lexer/parser. Now uses parser/ast gems to convert source code to AST. (#1465)
  • Migrated parser to 2.3. Bump RUBY_VERSION to 2.3.0.
  • Changed to be 2.3 compliant:
    • Enumerable#chunk (to take only a a block)
    • Enumerable#slice_before (to raise proper argument errors)
    • Number#positive? (to return false for 0)
  • Use meaningful names for temporary variables in compiled JavaScript (e.g. for def foo was TMP_123, now TMP_foo_123)
  • Dynamic require severity now defaults to :ignore meaning that by default a LoadError will be raised at runtime instead of compile time.

Deprecated

  • require 'opal/server and Opal::Server are deprecated in favor of require 'opal/sprockets/server' and Opal::Sprockets::Server (now part of the opal-sprockets gem).

Removed

  • Removed yaml from stdlib, the older implementation was only available for NodeJS and not tested. Replace with require 'nodejs/yaml'
  • Extracted sprockets support to opal-sprockets which should allow for wider support and less coupling (e.g. the opal gem will now be able to improve the compiler without worrying about sprockets updates). All the old behavior is preserved except for Opal::Server that has become Opal::Sprockets::Server (see Deprecated section above).

Changed

  • Strip Regexp flags that are unsupported by browsers (backport), previously they were ignored, lately most of them now raise an error for unknown flags.

Fixed

  • Newly compliant with the Ruby Spec Suite:

    • Module#class_variables
    • Module#class_variable_get
    • Module#class_variable_set
    • Module#remove_class_variable
    • Module#include?
    • Numeric#step (#1512)
  • Improvements for Range class (#1486)

    • Moved private/tainted/untrusted specs to not supported
    • Conforming Range#to_s and Range#inspect
    • Starting Range#bsearch implementation
    • Simple Range#step implementation
    • Fixing Range#min for empty Ranges
    • Fixing Range#last(n) Range#first(n) and one edge case of Range#each
    • Fixing some Range#step issues on String ranges
    • Simple Range#bsearch implementation, passes about half the specs
    • Minor styling improvements. Fixed size of Range#step.
    • Compile complex ranges to "Range.new" so there will be a check for begin and end to be comparable.
  • Fixed defined? for methods raising exceptions

  • Fixed Kernel#loop (to catch StopIteration error)

  • Fixed inheritance from the Module class.

  • Fixed using --preload along with --no-opal for CLI

  • Fixed Integer("0") raising ArgumentError instead of parsing as 0

  • Fixed JSON#parse to raise JSON::ParserError for invalid input

  • Module#append_features now detects cyclic includes

  • Process.clock_gettime(Process::CLOCK_MONOTONIC) will now return true monotonic values or raise Errno::EINVAL if no monotonic clock is available

  • Opal::Builder no longer always raises an error when a dependency isn't found and instead respects dynamic_require_severity value

  • Fixed a constant reference to Sprockets::FileNotFound that previously pointed to Opal::Sprockets instead of ::Sprockets.

opal -

Published by elia over 7 years ago

opal -

Published by elia over 7 years ago

Added

  • Pathname#relative_path_from
  • Source maps now include method names
  • Module#included_modules works
  • Internal runtime cleanup (#1241)
  • Make it easier to add custom runners for the CLI (#1261)
  • Add Rack v2 compatibility (#1260)
  • Newly compliant with the Ruby Spec Suite:
    • Array#slice!
    • Array#repeated_combination
    • Array#repeated_permutation
    • Array#sort_by!
    • Enumerable#sort
    • Enumerable#max
    • Enumerable#each_entry (#1303)
    • Module#const_set
    • Module#module_eval with a string
  • Add -L / --library option to compile only the code of the library (#1281)
  • Implement Kernel.open method (#1218)
  • Generate meaningful names for functions representing Ruby methods
  • Implement Pathname#join and Pathname#+ methods (#1301)
  • Added support for begin;rescue;else;end.
  • Implement File.extname method (#1219)
  • Added support for keyword arguments as lambda parameters.
  • Super works with define_method blocks
  • Added support for kwsplats.
  • Added support for squiggly heredoc.
  • Implement Method#parameters and Proc#parameters.
  • Implement File.new("path").mtime, File.mtime("path"), File.stat("path").mtime.
  • if-conditions now support null and undefined as falsy values (#867)
  • Implement IO.read method for Node.js (#1332)
  • Implement IO.each_line method for Node.js (#1221)
  • Generate opal-builder.js to ease the compilation of Ruby library from JavaScript (#1290)

Changed

  • Remove deprecation of Opal::Environment after popular request
  • Setting Opal::Config.dynamic_require_severity will no longer affect Opal.dynamic_require_severity which now needs to be explicitly set if it differs from the default value of "warning" (See also the Opal.dynamic_require_severity rename below).
  • The new default for Opal::Config.dynamic_require_severity is now :warning
  • Opal.dynamic_require_severity and OPAL_CONFIG are now merged into Opal.config.missing_require_severity (defaults to error, the expected ruby behavior) and Opal.config.unsupported_features_severity (defaults to warning, e.g. a one-time heads up that freezing isn't supported). Added variable __OPAL_COMPILER_CONFIG__ that contains compiler options that may be used in runtime.
  • Hash instances should now list the string map ($$smap) as the first key, making debugging easier (most hashes will just have keys there).
  • Handle Pathname object in Pathname constructor

Deprecated

  • Opal::Processor.stubbed_files and Opal::Processor.stub_file in favor of Opal::Config.stubbed_files

Removed

  • Removed the previously deprecated Opal::Fragment#to_code
  • Removed the previously deprecated Opal::Processor.load_asset_code
  • Removed the previously deprecated acceptance of a boolean as single argument to Opal::Server.new

Fixed

  • Module#ancestors and shared code like ==== and is_a? deal with singleton class modules better (#1449)
  • Class#to_s now shows correct names for singleton classes
  • Pathname#absolute? and Pathname#relative? now work properly
  • File::dirname and File::basename are now Rubyspec compliant
  • SourceMap::VLQ patch (#1075)
  • Regexp::new no longer throws error when the expression ends in \\
  • super works properly with overwritten alias methods (#1384)
  • NoMethodError does not need a name to be instantiated
  • method_added fix for singleton class cases
  • Super now works properly with blocks (#1237)
  • Fix using more than two rescue in sequence (#1269)
  • Fixed inheritance for Array subclasses.
  • Always populate all stub_subscribers with all method stubs, as a side effect of this now method_missing on bridged classes now works reliably (#1273)
  • Fix Hash#instance_variables to not return #default and #default_proc (#1258)
  • Fix Module#name when constant was created using Opal.cdecl (constant declare) like ChildClass = Class.new(BaseClass) (#1259)
  • Fix issue with JavaScript nil return paths being treated as true (#1274)
  • Fix Array#to_n, Hash#to_n, Struct#to_n when the object contains native objects (#1249, #1256)
  • break semantics are now correct, except for the case in which a lambda containing a break is passed to a yield (#1250)
  • Avoid double "/" when Opal::Sprockets.javascript_include_tag receives a prefix with a trailing slash.
  • Fixed context of evaluation for Kernel#eval and BasicObject#instance_eval
  • Fix Module#=== to use all ancestors of the passed object (#1284)
  • Fix Struct.new to be almost compatible with Rubyspec (#1251)
  • Fix Enumerator#with_index to return the result of the previously called method.
  • Improved Date.parse to cover most date formatting cases.
  • Fixed Module#const_get for dynamically created constants.
  • Fixed File.dirname to return joined String instead of Array.
  • Fixed multiple assignment for constants, i.e., allowing A, B = 1, 2.
  • Fixed Number#[] with negative number. Now (-1)[1] returns 1.
  • Fixed parsing of pre-defined $-? global variables.
  • Fixed parsing of unicode constants.
  • Fixed parsing of quoted heredoc identifier.
  • Fixed parsing of mass assignment of method call without parentheses.
  • Fixed parsing of %I{} lists.
  • Fixed parsing of %{} lists when list item contains same brackets.
  • Fixed an issue with "-" inside the second arg of String#tr
  • Fixed Base64 and enabled specs
  • Fixed method definition in method body.
  • Partially implemented Marshal.load/Marshal.dump. In order to use it require opal/full.
  • Fixed docs for Compiled Ruby - Native section. Rename opal variable to win since window was causing error
  • Fixed the --map option, now correclty outputs the sourcemap as json

Removed

  • Remove support for configuring Opal via Opal::Processor, the correct place is Opal::Config
  • Remove Opal.process which used to be an alias to Sprockets::Environment#[]
opal -

Published by elia over 7 years ago

Fixed

  • Fixed -L option for compiling requires as modules (#1510)
opal -

Published by elia over 7 years ago

Changed

  • Avoid special utf-8 chars in method names, now they start with $$
opal -

Published by elia over 7 years ago

Fixed

  • Fixed inheritance from the Module class (#1476)
  • Fixed source map server with url-encoded paths
  • Silence Sprockets 3.7 deprecations, full support for Sprockets 4 will be available in Opal 0.11
  • Don't print the full stack trace with deprecation messages
opal -

Published by elia over 7 years ago

Changed

  • Better Opal::Config options documentation and organization
  • Always cache source-maps at build-time so they're available once enabled
opal -

Published by elia over 7 years ago

Fixed

  • Fix Time#zone for zones expressed numerically
opal -

Published by elia about 9 years ago

  • Stop keyword-arg variable names leaking to global javascript scope

  • Class#native_class now also exposes MyClass.new (Ruby) as Opal.global.MyClass.new() (JS)

  • Add CRuby (MRI) tests harness to start checking Opal against them too.

  • Add Minitest to the stdlib.

  • Add Date#<=> with specs.

  • Show extended info and context upon parsing, compiling and building errors.

  • Support keyword arguments in method calls and definitions.

  • Fix begin/rescue blocks to evaluate to last expression.

  • Add support for RUBY_ENGINE/RUBY_PLATFORM != "opal" pre-processor directives.

      if RUBY_ENGINE != "opal"
        # this code never compiles
      end
    
  • Fix donating methods defined in modules. This ensures that if a class includes more than one module, then the methods defined on the class respect the order in which the modules are included.

  • Improved support for recursive Hash for both #inspect and #hash.

  • Optimized Hash implementation for String and Symbol, they have a separate hash-table in which they're used as both keys and hashes.

  • Added real #hash / eql? support, previously was relying on .toString().

  • String#to_proc now uses __send__ instead of send for calling
    methods on receivers.

  • Deprecated Opal::Sprockets::Environment. It can easily be replaced by Opal::Server or by appending Opal.paths to a Sprockets::Environment:

      Sprockets::Environment.new.tap { |e| Opal.paths.each {|p| e.append_path(p)} }
    
  • Add Set methods #classify, #collect!, #map!, #subtract #replace,
    #difference and #eql?

  • Support module_function without args to toggle module functions.

  • Fix bug where command calls with no space and sym arg were incorrectly parsed.

  • Add some StringScanner methods.

  • Add Date#<< and Date#>> implementations.

  • Support nested directories using require_tree directive.

  • Fix bug where Exception subclasses could not have methods defined on them.

  • Fix symbols with interpolations :"#{foo}"

  • Implement $1..N matchers and rewrite support for $~, $', $& and $`.

  • Implement Regexp.last_match.

  • Fixed -@ unary op. precedence with a numeric and followed by a method call (e.g. -1.foo was parsed as -(1.foo))

  • require_relative (with strings) is now preprocessed, expanded and added to Compiler#requires

  • Rewritten the require system to respect requires position (previously all the requires were stacked up at the top of the file)

  • Implement for-loop syntax

  • Add Array#|

  • Fix Range.new to raise ArgumentError on contructor values that cannot
    be compared

  • Fix compiler bug where Contiguous strings were not getting concatenated.

  • Cleanup generated code for constant access. All constant lookups now go through $scope.get('CONST_NAME') to produce cleaner code and a unified place for const missing dispatch.

  • Remove const_missing option from compiler. All constant lookups are now strict.

  • Add initial support for Module#autoload.

  • Fix Enumerator#with_index, Numeric#round.

opal -

Published by elia about 9 years ago

  • CLI options -d and -v now set respectively $DEBUG and $VERBOSE
  • Fixed a bug that would make the -v CLI option wait for STDIN input
  • Add the -E / --no-exit CLI option to skip implicit Kernel#exit call
  • Now the CLI implicitly calls Kernel#exit at the end of the script, thus making at_exit blocks be respected.
opal -

Published by elia about 9 years ago

  • Remove Sprockets 3.0 support (focus moved to upcoming 0.8)
  • Fix version number consistency.
opal -

Published by elia about 9 years ago

Added

  • Hash[] implementation fully compliant with rubyspec

  • Newly compliant with the Ruby Spec Suite:

    • Array#bsearch
    • Array#combination
    • Array#permutation
    • Array#product
    • Array#rotate!
    • Array#rotate
    • Array#sample
    • Array#to_h
    • Array#values_at
    • Array#zip
    • Enumerator#with_index
    • Kernel#===
    • Kernel#Array
    • Kernel#Float
    • Kernel#Hash
    • Kernel#Integer
    • Kernel#String
    • Kernel#format
    • Kernel#sprintf
    • MatchData#==
    • MatchData#eql?
    • MatchData#values_at
    • Module#instance_methods
    • Regexp#match
    • String#%
    • String#===
    • String#==
    • String#[]
    • String#each_line
    • String#eql?
    • String#index
    • String#inspect
    • String#lines
    • String#match
    • String#next
    • String#oct
    • String#scan
    • String#slice
    • String#split
    • String#succ
    • String#to_i
    • String#try_convert

Changed

  • Updated to Sprockets v3.0.
  • Enable operator inlining by default in the compiler.

Removed

  • Removed minitest from stdlib. It's not part of MRI and it never belonged there, checkout the opal-minitest gem instead.

Fixed

  • Delegate dependency management directly to Sprockets (when used) making sourcemaps swift again.
    This means code generated by sprockets will always need to be bootstrapped via Opal.load or Opal.require.
    Luckily Opal::Processor.load_asset_code(sprockets, name) does just that in the right way.
  • Fix Promise#always.
  • Fix String#split when no match is found and a limit is provided
  • Fix require_tree(".") when used from file at the root of the assets paths
  • Parser: Allow trailing comma in paren arglists, after normal args as well as assoc args.
  • Parser: Fix parsing of parens following divide operator without a space.
  • Parser: Fix bug where keyword arguments could not be parsed if method definition did not have parens around arguments.
  • Module#const_get now accepts a scoped constant name
  • Regexp#=== sets global match data vars
opal -

Published by elia about 9 years ago

Removed

  • Use official Sprockets processor cache keys API:
    The old cache key hack has been removed.
    Add Opal::Processor.cache_key and Opal::Processor.reset_cache_key! to
    reset it as it’s cached but should change whenever Opal::Config changes.

Fixed

  • Fix an issue for which a Pathname was passed instead of a String to Sprockets.
opal - v0.6.2

Published by elia over 10 years ago

  • Added Range#size

  • opal executable now reads STDIN when no file or -e are passed

  • opal executable doesn't exit after showing version on -v if other options are passed

  • (Internal) improved the mspec runner

opal - v0.6.0

Published by elia over 10 years ago

  • Fix parsing of escapes in single-strings ('foo\n'). Only ' and
    characters now get escaped in single quoted strings. Also, more escape
    sequences in double-quoted strings are now supported: \a, \v, \f,
    \e, \s, octal (\314), hex (\xff) and unicode (\u1234).

  • Sourcemaps revamp. Lexer now tracks column and line info for every token to
    produce much more accurate sourcemaps. All method calls are now located on
    the correct source line, and multi-line xstrings are now split to generate
    a map line-to-line for long inline javascript parts.

  • Merged sprockets support from opal-sprockets directly into Opal. For the
    next release, the exernal opal-sprockets gem is no longer needed. This
    commit adds Opal::Processor, Opal::Server and Opal::Environment.

  • Introduce pre-processed if directives to hide code from Opal. Two special
    constant checks now take place in the compiler. Either RUBY_ENGINE or
    RUBY_PLATFORM when == "opal". Both if and unless statements can pick
    up these logic checks:

      if RUBY_ENGINE == "opal"
        # this code compiles
      else
        # this code never compiles
      end
    

    Unless:

      unless RUBY_ENGINE == "opal"
        # this code never compiles
      end
    

    This is particularly useful for avoiding require() statements being
    picked up, which are included at compile time.

  • Add special debugger method to compiler. Compiles down to javascript
    debugger keyword to start in-browser debug console.

  • Add missing string escapes to read_escape in lexer. Now most ruby escape
    sequences are properly detected and handled in string parsing.

  • Disable escapes inside x-strings. This means no more double escaping all
    characters in x-strings and backticks. (\n => \n).

  • Add time.rb to stdlib and moved Time.parse() and Time.iso8601()
    methods there.

  • ! is now treated as an unary method call on the object. Opal now parsed
    ! as a def method name, and implements the method on BasicObject,
    NilClass and Boolean.

  • Fixed bug where true/false as object literals from javascript were not
    correctly being detected as truthy/falsy respectively. This is due to the
    javascript "feature" where new Boolean(false) !== false.

  • Moved native.rb to stdlib. Native support must now be explicitly required
    into Opal. Native is also now a module, instead of a top level class.
    Also added Native::Object#respond_to?.

  • Remove all core #as_json() methods from json.rb. Added them externally
    to opal-activesupport.

  • Kernel#respond_to? now calls #respond_to_missing? for compliance.

  • Fix various String methods and add relevant rubyspecs for them. #chars,
    #to_f, #clone, #split.

  • Fix Array method compliance: #first, #fetch, #insert, #delete_at,
    #last, #splice, .try_convert.

  • Fix compliance of Kernel#extend and ensure it calls #extended() hook.

  • Fix bug where sometimes the wrong regexp flags would be generated in the
    output javascript.

  • Support parsing __END__ constructs in ruby code, inside the lexer. The
    content is gathered up by use of the parser. The special constant DATA
    is then available inside the ruby code to read the content.

  • Support single character strings (using ? prefix) with escaped characters.

  • Fix lexer to detect dereferencing on local variables even when whitespace
    is present (a = 0; a [0] parses as a deference on a).

  • Fix various Struct methods. Fixed #each and #each_pair to return
    self. Add Struct.[] as synonym for Struct.new.

  • Implemented some Enumerable methods: #collect_concat, #flat_map,
    #reject, #reverse_each, #partition and #zip.

  • Support any Tilt template for index_path in Opal::Server. All index
    files are now run through Tilt (now supports haml etc).

  • Fix code generation of op_asgn_1 calls (foo[val] += 10).

  • Add base64 to stdlib.

  • Add promises implementation to stdlib.

  • Add Math module to corelib.

  • Use //# instead of //@ deprecated syntax for sourceMappingURL.

  • Implicitly require erb from stdlib when including erb templates.

  • Fix Regexp.escape to also escape '(' character.

  • Support '<' and '>' as matching pairs in string boundrys %q<hi>.

  • Opal::Server no longer searches for an index file if not specified.

  • Move Math and Encoding to stdlib. Can be required using
    require 'math', etc.

  • Fix some stdlib Date methods.

  • Fix Regexp.escape to properly escape \n, \t, \r, \f characters.

  • Add Regexp.quote as an alias of escape.

opal - v0.6.1

Published by elia over 10 years ago

  • Updated RubySpec to master and added rubysl-* specs. Thanks to Mike Owens (@mieko)

  • Added Kernel#require_remote(url) in opal-parser that requires files with basic synchronous ajax
    GET requests. It is used to load <scripts type="text/ruby" src="…url…">.

  • Various parsing fixes (Hash parsing, def returns method name, cleanup core/util, Enumerator fixes)

  • Added #native_reader, #native_writer and #native_accessoras class methods
    donated by include Native

  • Added specs for Sprockets' processors (both .js.rb and .opalerb), backported from opal-rails

  • Set 2.1.1 as RUBY_VERSION

  • Add opal-build command utility to easily build libraries to js

  • Add opal-repl to gemspec executables,
    previously was only available by using Opal from source

  • Fix parsing => in hash literals where it would sometimes incorrectly
    parse as a key name.