sprockets-commoner 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/js/babel-plugin-sprockets-commoner-internal/index.js +4 -15
- data/js/babel-plugin-sprockets-commoner-internal/path-to-identifier.js +11 -0
- data/lib/sprockets/commoner.rb +1 -0
- data/lib/sprockets/commoner/bundle.rb +39 -13
- data/lib/sprockets/commoner/processor.rb +10 -10
- data/lib/sprockets/commoner/version.rb +1 -1
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b5d2ada3e40387a555b4b1be5c0284eeb8b82078
         | 
| 4 | 
            +
              data.tar.gz: 00145faf36173d45a06d3fd4e8bd840b31a80c72
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 609da3bec1c0a44a191105feafbe84e29bea5d299651c391b58b2fa8b76c867afccb1e44e4c8b7fe41d596305a6d955515a72a545d544cf313e2ae17fdec4f36
         | 
| 7 | 
            +
              data.tar.gz: a46ce177fc4f3d19aa70c1bb872526da7251dc59866df310b2ccacd7064395f938c4cb1990c3a39407d66a926c96a0b752276ee8863918c5b13119300f22186a
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
| @@ -28,6 +28,7 @@ var dirname = require('path').dirname; | |
| 28 28 | 
             
            var join = require('path').join;
         | 
| 29 29 | 
             
            var resolve = require('browser-resolve').sync;
         | 
| 30 30 | 
             
            var emptyModule = join(__dirname, 'node_modules', 'browser-resolve', 'empty.js');
         | 
| 31 | 
            +
            var pathToIdentifier = require('./path-to-identifier');
         | 
| 31 32 |  | 
| 32 33 | 
             
            module.exports = function (context) {
         | 
| 33 34 | 
             
              var t = context.types;
         | 
| @@ -106,19 +107,6 @@ module.exports = function (context) { | |
| 106 107 | 
             
                return null;
         | 
| 107 108 | 
             
              }
         | 
| 108 109 |  | 
| 109 | 
            -
             | 
| 110 | 
            -
              // Transform a path into a variable name
         | 
| 111 | 
            -
              function pathToIdentifier(path) {
         | 
| 112 | 
            -
                var escapedPath = path.replace(rootRegex, '').replace(/[^a-zA-Z0-9_]/g, function (match) {
         | 
| 113 | 
            -
                  if (match === '/') {
         | 
| 114 | 
            -
                    return '$';
         | 
| 115 | 
            -
                  } else {
         | 
| 116 | 
            -
                    return '_';
         | 
| 117 | 
            -
                  }
         | 
| 118 | 
            -
                });
         | 
| 119 | 
            -
                return '__commoner_module__' + escapedPath;
         | 
| 120 | 
            -
              }
         | 
| 121 | 
            -
             | 
| 122 110 | 
             
              function resolveTarget(file, path, ensureTargetIsProcessed) {
         | 
| 123 111 | 
             
                var name = void 0;
         | 
| 124 112 | 
             
                if (opts.globals != null && (name = opts.globals[path]) != null) {
         | 
| @@ -145,7 +133,7 @@ module.exports = function (context) { | |
| 145 133 | 
             
                      file.metadata.targetsToProcess.push(resolvedPath);
         | 
| 146 134 | 
             
                    }
         | 
| 147 135 | 
             
                    // Otherwise we just look for the module by referencing its Special Identifier™.
         | 
| 148 | 
            -
                    return pathToIdentifier(resolvedPath);
         | 
| 136 | 
            +
                    return pathToIdentifier(resolvedPath.replace(rootRegex, ''));
         | 
| 149 137 | 
             
                  }
         | 
| 150 138 | 
             
                }
         | 
| 151 139 | 
             
              }
         | 
| @@ -265,10 +253,11 @@ module.exports = function (context) { | |
| 265 253 | 
             
                      state.file.metadata.commonerEnabled = true;
         | 
| 266 254 |  | 
| 267 255 | 
             
                      var node = path.node;
         | 
| 268 | 
            -
                      var identifier = pathToIdentifier(state.file.opts.filename);
         | 
| 256 | 
            +
                      var identifier = pathToIdentifier(state.file.opts.filename.replace(rootRegex, ''));
         | 
| 269 257 | 
             
                      var expose = findExpose(node.directives);
         | 
| 270 258 | 
             
                      if (expose != null) {
         | 
| 271 259 | 
             
                        node.body.push(exposeTemplate(t.identifier(expose)));
         | 
| 260 | 
            +
                        state.file.metadata.globalIdentifier = expose;
         | 
| 272 261 | 
             
                      }
         | 
| 273 262 |  | 
| 274 263 | 
             
                      // Transform module to a variable assignment.
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            // Transform a path into a variable name
         | 
| 2 | 
            +
            module.exports = function pathToIdentifier(path) {
         | 
| 3 | 
            +
              var escapedPath = path.replace(/[^a-zA-Z0-9_]/g, function (match) {
         | 
| 4 | 
            +
                if (match === '/') {
         | 
| 5 | 
            +
                  return '$';
         | 
| 6 | 
            +
                } else {
         | 
| 7 | 
            +
                  return '_';
         | 
| 8 | 
            +
                }
         | 
| 9 | 
            +
              });
         | 
| 10 | 
            +
              return '__commoner_module__' + escapedPath;
         | 
| 11 | 
            +
            };
         | 
    
        data/lib/sprockets/commoner.rb
    CHANGED
    
    | @@ -10,6 +10,7 @@ module Sprockets | |
| 10 10 | 
             
              register_postprocessor 'application/javascript', ::Sprockets::Commoner::Processor
         | 
| 11 11 | 
             
              register_transformer 'application/json', 'application/javascript', ::Sprockets::Commoner::JSONProcessor
         | 
| 12 12 | 
             
              register_bundle_metadata_reducer 'application/javascript', :commoner_enabled, false, :|
         | 
| 13 | 
            +
              register_bundle_metadata_reducer 'application/javascript', :commoner_required, Set.new, :+
         | 
| 13 14 | 
             
              register_bundle_metadata_reducer 'application/javascript', :commoner_used_helpers, Set.new, :+
         | 
| 14 15 | 
             
              register_bundle_processor 'application/javascript', ::Sprockets::Commoner::Bundle
         | 
| 15 16 | 
             
            end
         | 
| @@ -3,20 +3,27 @@ require 'schmooze' | |
| 3 3 | 
             
            module Sprockets
         | 
| 4 4 | 
             
              module Commoner
         | 
| 5 5 | 
             
                class Bundle < Schmooze::Base
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  InaccessibleStubbedFileError = Class.new(::StandardError)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  JS_PACKAGE_PATH = File.expand_path('../../../js', __dir__)
         | 
| 10 | 
            +
             | 
| 6 11 | 
             
                  dependencies generator: 'babel-generator.default',
         | 
| 7 12 | 
             
                    babelHelpers: 'babel-helpers',
         | 
| 8 | 
            -
                    t: 'babel-types'
         | 
| 13 | 
            +
                    t: 'babel-types',
         | 
| 14 | 
            +
                    pathToIdentifier: 'babel-plugin-sprockets-commoner-internal/path-to-identifier'
         | 
| 9 15 |  | 
| 10 | 
            -
                  method : | 
| 11 | 
            -
            function(helpers) {
         | 
| 12 | 
            -
               | 
| 16 | 
            +
                  method :generate_header, <<-JS
         | 
| 17 | 
            +
            function(helpers, globalIdentifiers) {
         | 
| 18 | 
            +
              var declarators = helpers.map(function(helper) {
         | 
| 19 | 
            +
                return t.variableDeclarator(t.identifier('__commoner_helper__' + helper), babelHelpers.get(helper));
         | 
| 20 | 
            +
              }).concat(globalIdentifiers.map(function(item) {
         | 
| 21 | 
            +
                return t.variableDeclarator(t.identifier(pathToIdentifier(item[0])), t.identifier(item[1]));
         | 
| 22 | 
            +
              }));
         | 
| 23 | 
            +
              if (declarators.length === 0) {
         | 
| 13 24 | 
             
                return '';
         | 
| 14 25 | 
             
              }
         | 
| 15 | 
            -
              var declaration = t.variableDeclaration('var',
         | 
| 16 | 
            -
                helpers.map(function(helper) {
         | 
| 17 | 
            -
                  return t.variableDeclarator(t.identifier('__commoner_helper__' + helper), babelHelpers.get(helper));
         | 
| 18 | 
            -
                })
         | 
| 19 | 
            -
              );
         | 
| 26 | 
            +
              var declaration = t.variableDeclaration('var', declarators);
         | 
| 20 27 | 
             
              return generator(declaration).code;
         | 
| 21 28 | 
             
            }
         | 
| 22 29 | 
             
            JS
         | 
| @@ -34,21 +41,40 @@ JS | |
| 34 41 | 
             
                  OUTRO = <<-JS.freeze
         | 
| 35 42 | 
             
            }();
         | 
| 36 43 | 
             
            JS
         | 
| 44 | 
            +
                  def initialize(root)
         | 
| 45 | 
            +
                    super(root, 'NODE_PATH' => JS_PACKAGE_PATH)
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 37 48 | 
             
                  def self.instance(env)
         | 
| 38 49 | 
             
                    @instance ||= new(env.root)
         | 
| 39 50 | 
             
                  end
         | 
| 40 51 |  | 
| 41 52 | 
             
                  def self.call(input)
         | 
| 42 | 
            -
                     | 
| 53 | 
            +
                    env = input[:environment]
         | 
| 54 | 
            +
                    instance(env).call(input)
         | 
| 43 55 | 
             
                  end
         | 
| 44 56 |  | 
| 45 57 | 
             
                  def call(input)
         | 
| 46 58 | 
             
                    return unless input[:metadata][:commoner_enabled]
         | 
| 59 | 
            +
                    env = input[:environment]
         | 
| 60 | 
            +
                    # Get the filenames of all the assets that are included in the bundle
         | 
| 61 | 
            +
                    assets_in_bundle = Set.new(input[:metadata][:included]) { |uri| env.load(uri).filename }
         | 
| 62 | 
            +
                    # Subtract the assets in the bundle from those that are required. The missing assets were excluded through stubbing.
         | 
| 63 | 
            +
                    assets_missing = input[:metadata][:commoner_required] - assets_in_bundle
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    global_identifiers = assets_missing.map do |filename|
         | 
| 66 | 
            +
                      uri, _ = env.resolve(filename, type: input[:content_type], pipeline: :self, compat: false)
         | 
| 67 | 
            +
                      asset = env.load(uri)
         | 
| 68 | 
            +
                      # Retrieve the global variable the file is exposed through
         | 
| 69 | 
            +
                      global = asset.metadata[:commoner_global_identifier]
         | 
| 70 | 
            +
                      raise InaccessibleStubbedFileError, "#{filename} is stubbed in #{input[:filename]} but doesn't define a global. Add an 'expose' directive." if global.nil?
         | 
| 71 | 
            +
                      [filename.slice(env.root.size + 1, filename.size), global]
         | 
| 72 | 
            +
                    end
         | 
| 47 73 |  | 
| 48 | 
            -
                    used_helpers = input[:metadata][:commoner_used_helpers]
         | 
| 49 | 
            -
                     | 
| 74 | 
            +
                    used_helpers = input[:metadata][:commoner_used_helpers].to_a
         | 
| 75 | 
            +
                    header_code = generate_header(used_helpers, global_identifiers)
         | 
| 50 76 | 
             
                    {
         | 
| 51 | 
            -
                      data: "#{PRELUDE}#{ | 
| 77 | 
            +
                      data: "#{PRELUDE}#{header_code}\n#{input[:data]}#{OUTRO}"
         | 
| 52 78 | 
             
                    }
         | 
| 53 79 | 
             
                  end
         | 
| 54 80 | 
             
                end
         | 
| @@ -87,19 +87,17 @@ module Sprockets | |
| 87 87 | 
             
                    babel_config = babelrc_data(filename)
         | 
| 88 88 | 
             
                    result = transform(input[:data], options(input), commoner_options(input))
         | 
| 89 89 |  | 
| 90 | 
            -
                     | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
                        end
         | 
| 90 | 
            +
                    commoner_required = Set.new(input[:metadata][:commoner_required])
         | 
| 91 | 
            +
                    result['metadata']['targetsToProcess'].each do |t|
         | 
| 92 | 
            +
                      unless should_process?(t)
         | 
| 93 | 
            +
                        raise ExcludedFileError, "#{t} was imported from #{filename} but this file won't be processed by Sprockets::Commoner"
         | 
| 95 94 | 
             
                      end
         | 
| 95 | 
            +
                      commoner_required.add(t)
         | 
| 96 96 | 
             
                    end
         | 
| 97 97 |  | 
| 98 | 
            -
                     | 
| 99 | 
            -
                       | 
| 100 | 
            -
             | 
| 101 | 
            -
                        @required.insert(insertion_index, asset)
         | 
| 102 | 
            -
                      end
         | 
| 98 | 
            +
                    result['metadata']['required'].each do |r|
         | 
| 99 | 
            +
                      asset = resolve(r, accept: input[:content_type], pipeline: :self)
         | 
| 100 | 
            +
                      @required.insert(insertion_index, asset)
         | 
| 103 101 | 
             
                    end
         | 
| 104 102 |  | 
| 105 103 | 
             
                    {
         | 
| @@ -107,6 +105,8 @@ module Sprockets | |
| 107 105 | 
             
                      dependencies: @dependencies,
         | 
| 108 106 | 
             
                      required: Set.new(@required),
         | 
| 109 107 |  | 
| 108 | 
            +
                      commoner_global_identifier: result['metadata']['globalIdentifier'],
         | 
| 109 | 
            +
                      commoner_required: commoner_required,
         | 
| 110 110 | 
             
                      commoner_used_helpers: Set.new(input[:metadata][:commoner_used_helpers]) + result['metadata']['usedHelpers'],
         | 
| 111 111 | 
             
                      commoner_enabled: input[:metadata][:commoner_enabled] | result['metadata']['commonerEnabled'],
         | 
| 112 112 | 
             
                    }
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sprockets-commoner
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Bouke van der Bijl
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-08-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: sprockets
         | 
| @@ -153,6 +153,7 @@ files: | |
| 153 153 | 
             
            - js/babel-plugin-sprockets-commoner-internal/node_modules/resolve/lib/sync.js
         | 
| 154 154 | 
             
            - js/babel-plugin-sprockets-commoner-internal/node_modules/resolve/package.json
         | 
| 155 155 | 
             
            - js/babel-plugin-sprockets-commoner-internal/package.json
         | 
| 156 | 
            +
            - js/babel-plugin-sprockets-commoner-internal/path-to-identifier.js
         | 
| 156 157 | 
             
            - lib/sprockets/commoner.rb
         | 
| 157 158 | 
             
            - lib/sprockets/commoner/bundle.rb
         | 
| 158 159 | 
             
            - lib/sprockets/commoner/json_processor.rb
         |