From 7c8ba73fd878540752bde5952a38c10b60d98ade Mon Sep 17 00:00:00 2001 From: Curt Howard Date: Mon, 16 Sep 2019 09:59:43 -0700 Subject: [PATCH 1/2] Update Bundler dependency version --- middleman-search.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/middleman-search.gemspec b/middleman-search.gemspec index 8ca4dd9..a872a5b 100644 --- a/middleman-search.gemspec +++ b/middleman-search.gemspec @@ -22,6 +22,6 @@ Gem::Specification.new do |spec| spec.add_dependency "therubyracer", ["~> 0.12.2"] spec.add_dependency "nokogiri", ["~> 1.6"] - spec.add_development_dependency "bundler", "~> 1.5" + spec.add_development_dependency "bundler", ">= 1.5" spec.add_development_dependency "rake" end From 673d09182b2dfc03f9daa541fc84bf5e6533b59e Mon Sep 17 00:00:00 2001 From: Curt Howard Date: Mon, 16 Sep 2019 10:51:30 -0700 Subject: [PATCH 2/2] Replace The Ruby Racer with Mini Racer This work drops the dependency on The Ruby Racer by using the version of `SearchIndexResource#build_index` from the `middleman-search-gds` fork. --- lib/middleman-search/search-index-resource.rb | 57 +++++++++---------- middleman-search.gemspec | 2 +- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/lib/middleman-search/search-index-resource.rb b/lib/middleman-search/search-index-resource.rb index 54e8258..daae8d5 100644 --- a/lib/middleman-search/search-index-resource.rb +++ b/lib/middleman-search/search-index-resource.rb @@ -32,46 +32,42 @@ def render(opts={}, locs={}) def build_index # Build js context - context = V8::Context.new - context.load(lunr_resource('lunr.js')) - + libs = [] + libs << lunr_resource('lunr.js') if @language != 'en' # English is the default - context.load(lunr_resource("lunr.stemmer.support.js")) - context.load(lunr_resource("lunr.#{@language}.js")) - lunr_lang = context.eval("lunr.#{@language}") + libs << lunr_resource("lunr.stemmer.support.js") + libs << lunr_resource("lunr.#{@language}.js") end - context.eval('lunr.Index.prototype.indexJson = function () {return JSON.stringify(this.toJSON());}') + source = libs.map { |lib| File.read(lib, mode: "rb:UTF-8") } + source << "lunr.Index.prototype.indexJson = function () {return JSON.stringify(this.toJSON());};" - # Register pipeline functions - pipeline = context.eval('lunr.Pipeline') @pipeline.each do |name, function| - context[name] = context.eval("(#{function})") - pipeline.registerFunction(context[name], name) + source << "lunr.Pipeline.registerFunction((#{function}), '#{name}');" end # Build lunr based on config - lunr = context.eval('lunr') - lunr_conf = proc do |this| + source << "lunr.middlemanSearchIndex = lunr(function () {" - # Use autogenerated id field as reference - this.ref('id') + # Use autogenerated id field as reference + source << "this.ref('id');" - # Add functions to pipeline (just registering them isn't enough) - @pipeline.each do |name, function| - this.pipeline.add(context[name]) - end + # Add functions to pipeline (just registering them isn't enough) + @pipeline.each do |name, function| + source << "this.pipeline.add(lunr.Pipeline.registeredFunctions.#{name});" + end - # Define fields with boost - this.use(lunr_lang) if @language != 'en' - @fields.each do |field, opts| - next if opts[:index] == false - this.field(field, {:boost => opts[:boost]}) - end + # Use language if set + source << "this.use(lunr.#{@language});" if @language != 'en' + + # Define fields with boost + @fields.each do |field, opts| + next if opts[:index] == false + source << "this.field('#{field}', { boost: #{opts[:boost]}});" end - # Get lunr index - index = lunr.call(lunr_conf) + source << "});" + # Ref to resource map store = Hash.new @@ -95,7 +91,8 @@ def build_index @callback.call(to_index, to_store, resource) if @callback - index.add(to_index.merge(id: id)) + source << "lunr.middlemanSearchIndex.add(#{to_index.merge(id: id).to_json});" + store[id] = to_store end rescue => ex @@ -104,7 +101,9 @@ def build_index end # Generate JSON output - "{\"index\": #{index.indexJson()}, \"docs\": #{store.to_json}}" + context = ExecJS.compile(source.join("\n")) + json = context.eval('lunr.middlemanSearchIndex.indexJson()') + "{\"index\": #{json}, \"docs\": #{store.to_json}}" end def binary? diff --git a/middleman-search.gemspec b/middleman-search.gemspec index a872a5b..2092d28 100644 --- a/middleman-search.gemspec +++ b/middleman-search.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |spec| spec.require_paths = ["lib"] spec.add_dependency "middleman-core", [">= 3.2"] - spec.add_dependency "therubyracer", ["~> 0.12.2"] + spec.add_dependency "mini_racer", ["~> 0.2.6"] spec.add_dependency "nokogiri", ["~> 1.6"] spec.add_development_dependency "bundler", ">= 1.5"