def library(domain, name=nil, opts={})

      path, key = split(domain, name)

      libs = entries('libraries', path)
      if opts[:subflows] # used by "graft"/"import"
        libs += entries('sublibraries', path)
        libs = libs.sort_by { |pa, _, _| pa.count('.') }
      end

      libs
        .each { |pa, ke, va|
          next unless ke == key
          return [ [ pa, ke ].join('.'), va ] }

      nil
    end
def library(domain, name=nil, opts={})

      path, key = split(domain, name)

      libs = entries('libraries', path)
      if opts[:subflows] # used by "graft"/"import"
        libs += entries('sublibraries', path)
        libs = libs.sort_by { |pa, _, _| pa.count('.') }
      end

      libs
        .each { |pa, ke, va|
          next unless ke == key
          return [ [ pa, ke ].join('.'), va ] }

      nil
    end
def procedures(path)

  # TODO
  # TODO work with Flor.load_procedures
end
 If found, returns [ source_path, path ]