Commit 29d2950f authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Embed support of JSB files into JSDuck itself.

At the moment only treating file as JSB if it has .jsb3 extension.
I'm not sure if the format of .jsb2 or whatever might be different,
so better be safe than sorry.

At the moment this is a bit of a hidden feature, but it could be
explained in manual.
parent 0c666975
Loading
Loading
Loading
Loading
+9 −27
Original line number Diff line number Diff line
@@ -176,10 +176,9 @@ class JsDuckRunner
      "--images", "#{@sdk_dir}/platform/docs/resources",
      "--stats",
      "--warnings=-link,-link_private,-link_ambiguous,-no_doc",
      "#{@sdk_dir}/extjs/extjs.jsb3",
      "#{@sdk_dir}/extjs/examples/ux",
    ]

    @options += extract_jsb_build_files("#{@sdk_dir}/extjs/extjs.jsb3")
  end

  def add_relative_examples_path
@@ -268,10 +267,9 @@ class JsDuckRunner
      "--output", "#{@out_dir}",
      "--external=google.maps.Map,google.maps.LatLng",
      "--images", "#{@sdk_dir}/touch/doc-resources",
      "#{@sdk_dir}/touch/sencha-touch.jsb3",
      "#{@sdk_dir}/touch/resources/themes/stylesheets/sencha-touch/default",
    ]

    @options += extract_jsb_build_files("#{@sdk_dir}/touch/sencha-touch.jsb3")
  end

  def add_touch2
@@ -298,10 +296,9 @@ class JsDuckRunner
      "--eg-iframe", "opt/touch-iframe.html",
      "--warnings=-image,-link_ambiguous,-no_doc",
      # "--stats",
      "#{@sdk_dir}/touch/touch.jsb3",
      "#{@sdk_dir}/touch/resources/themes/stylesheets/sencha-touch/default",
    ]

    @options += extract_jsb_build_files("#{@sdk_dir}/touch/touch.jsb3")
  end

  def add_touch_export
@@ -309,8 +306,8 @@ class JsDuckRunner
      "--json",
      "--output", "#{@out_dir}/../export/touch1",
      "--external=google.maps.Map,google.maps.LatLng",
      "#{@sdk_dir}/touch/sencha-touch.jsb3",
    ]
    @options += extract_jsb_build_files("#{@sdk_dir}/touch/sencha-touch.jsb3")
  end

  def add_touch2_export
@@ -318,8 +315,8 @@ class JsDuckRunner
      "--json",
      "--output", "#{@out_dir}/../export/touch2",
      "--external=google.maps.Map,google.maps.LatLng",
      "#{@sdk_dir}/touch/touch.jsb3",
    ]
    @options += extract_jsb_build_files("#{@sdk_dir}/touch/touch.jsb3")
  end

  def set_touch2_src
@@ -368,10 +365,9 @@ class JsDuckRunner
      "--guides", "#{@sdk_dir}/charts/docs/guides.json",
      "--images", "#{@sdk_dir}/charts/docs/resources",
      "--local-storage-db", "touch-charts",
      "--output", "#{@out_dir}"
      "--output", "#{@out_dir}",
      "#{@sdk_dir}/charts/touch-charts.jsb3",
    ]

    @options += extract_jsb_build_files("#{@sdk_dir}/charts/touch-charts.jsb3")
  end

  def add_sencha_io
@@ -388,10 +384,9 @@ class JsDuckRunner
      "--images", "#{@sdk_dir}/../sync/docs/resources",
      "--local-storage-db", "sencha-io",
      "--ignore-global",
      "--output", "#{@out_dir}"
      "--output", "#{@out_dir}",
      "#{@sdk_dir}/../sync/sencha-io.jsb3",
    ]

    @options += extract_jsb_build_files("#{@sdk_dir}/../sync/sencha-io.jsb3")
  end

  def add_animator
@@ -412,19 +407,6 @@ class JsDuckRunner
    ]
  end

  # Extracts files of first build in jsb file
  def extract_jsb_build_files(jsb_file)
    json = JSON.parse(IO.read(jsb_file))
    basedir = File.dirname(jsb_file)

    return json["builds"][0]["packages"].map do |package_id|
      package = json["packages"].find {|p| p["id"] == package_id }
      (package ? package["files"] : []).map do |file|
        File.expand_path(basedir + "/" + file["path"] + file["name"])
      end
    end.flatten
  end

  # Returns shortened hash of naming current git revision
  def revision
    `git rev-parse HEAD`.slice(0, 7)
+15 −0
Original line number Diff line number Diff line
@@ -385,6 +385,8 @@ module JsDuck
      if File.exists?(fname)
        if File.directory?(fname)
          Dir[fname+"/**/*.{js,css,scss}"].each {|f| @input_files << f }
        elsif fname =~ /\.jsb3$/
          @input_files += extract_jsb_files(fname)
        else
          @input_files << fname
        end
@@ -393,6 +395,19 @@ module JsDuck
      end
    end

    # Extracts files of first build in jsb file
    def extract_jsb_files(jsb_file)
      json = JSON.parse(IO.read(jsb_file))
      basedir = File.dirname(jsb_file)

      return json["builds"][0]["packages"].map do |package_id|
        package = json["packages"].find {|p| p["id"] == package_id }
        (package ? package["files"] : []).map do |file|
          File.expand_path(basedir + "/" + file["path"] + file["name"])
        end
      end.flatten
    end

    # Converts relative path to full path
    #
    # Especially important for running on Windows where C:\foo\bar