contentfs 0.4.0 → 0.6.2
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 +30 -0
 - data/README.md +1 -1
 - data/lib/contentfs/content.rb +15 -10
 - data/lib/contentfs/database.rb +9 -8
 - data/lib/contentfs/renderers/markdown.rb +2 -27
 - data/lib/contentfs/renderers/markdown/code.rb +19 -5
 - data/lib/contentfs/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 44c0630662c386eee30711ce48061817fecc4d20b619d524b2496811472062a4
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b605d224de8a8662cedfa5df0404206b6f5b05d66616954d1e781a1c0845dec6
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f6fe40b8bbb1b4f05cd85b4bca5d5535b2cbe73886e679153e02a510a62d3bbe113ac5caa8b8c41b3f77b9c2331b2ff8f2b615a8aae507119394b9cdae3bb232
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 50fe653eb6e89011b9ce39021c04e67c26e7037043b536c9776d03f7fc1212621b93a3663785c01e06897346f7d09a67e67ef2fdd9bb043e734fca723e08cc1a
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ## [v0.6.2](https://github.com/metabahn/contentfs/releases/tag/v0.6.2)
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            *released on 2021-04-05*
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              * `fix` [#14](https://github.com/metabahn/contentfs/pull/14) Load metadata for root content ([bryanp](https://github.com/bryanp))
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            ## [v0.6.1](https://github.com/metabahn/contentfs/releases/tag/v0.6.1)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            *released on 2021-04-02*
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              * `fix` [#13](https://github.com/metabahn/contentfs/pull/13) Resolve includes after rendering ([bryanp](https://github.com/bryanp))
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            ## [v0.6.0](https://github.com/metabahn/contentfs/releases/tag/v0.6.0)
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            *released on 2021-04-02*
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              * `add` [#12](https://github.com/metabahn/contentfs/pull/12) Provide a pattern for preprocessing content ([bryanp](https://github.com/bryanp))
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            ## [v0.5.1](https://github.com/metabahn/contentfs/releases/tag/v0.5.1)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            *released on 2021-04-02*
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              * `fix` [#11](https://github.com/metabahn/contentfs/pull/11) Handle code blocks with no available lexer ([bryanp](https://github.com/bryanp))
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            ## [v0.5.0](https://github.com/metabahn/contentfs/releases/tag/v0.5.0)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            *released on 2021-04-01*
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              * `chg` [#10](https://github.com/metabahn/contentfs/pull/10) Replace redcarpet with cmark ([bryanp](https://github.com/bryanp))
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       1 
31 
     | 
    
         
             
            ## [v0.4.0](https://github.com/metabahn/contentfs/releases/tag/v0.4.0)
         
     | 
| 
       2 
32 
     | 
    
         | 
| 
       3 
33 
     | 
    
         
             
            *released on 2021-04-01*
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -40,7 +40,7 @@ The `content` name is special in that it defines content for the containing fold 
     | 
|
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
            ### Formats
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
            Markdown is supported by default. Simply add the ` 
     | 
| 
      
 43 
     | 
    
         
            +
            Markdown is supported by default. Simply add the `commonmarker` gem to your project's `Gemfile`. For automatic syntax highlighting, add the `rouge` to your `Gemfile` as well.
         
     | 
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
            Unknown formats default to plain text.
         
     | 
| 
       46 
46 
     | 
    
         | 
    
        data/lib/contentfs/content.rb
    CHANGED
    
    | 
         @@ -12,8 +12,8 @@ module ContentFS 
     | 
|
| 
       12 
12 
     | 
    
         
             
              #
         
     | 
| 
       13 
13 
     | 
    
         
             
              class Content
         
     | 
| 
       14 
14 
     | 
    
         
             
                class << self
         
     | 
| 
       15 
     | 
    
         
            -
                  def load(path, database:, metadata: {}, namespace: [])
         
     | 
| 
       16 
     | 
    
         
            -
                    new(path: path, database: database, metadata: metadata, namespace: namespace)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  def load(path, database:, metadata: {}, namespace: [], &block)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    new(path: path, database: database, metadata: metadata, namespace: namespace, &block)
         
     | 
| 
       17 
17 
     | 
    
         
             
                  end
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
         @@ -22,7 +22,7 @@ module ContentFS 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                attr_reader :format, :prefix, :slug, :metadata, :namespace
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                def initialize(path:, database:, metadata: {}, namespace: [])
         
     | 
| 
      
 25 
     | 
    
         
            +
                def initialize(path:, database:, metadata: {}, namespace: [], &block)
         
     | 
| 
       26 
26 
     | 
    
         
             
                  path = Pathname.new(path)
         
     | 
| 
       27 
27 
     | 
    
         
             
                  extname = path.extname
         
     | 
| 
       28 
28 
     | 
    
         
             
                  name = path.basename(extname)
         
     | 
| 
         @@ -34,6 +34,7 @@ module ContentFS 
     | 
|
| 
       34 
34 
     | 
    
         
             
                  @database = database
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                  content = path.read
         
     | 
| 
      
 37 
     | 
    
         
            +
                  content = block.call(content) if block
         
     | 
| 
       37 
38 
     | 
    
         
             
                  @metadata = metadata.merge(parse_metadata(content))
         
     | 
| 
       38 
39 
     | 
    
         
             
                  @content = content.gsub(FRONT_MATTER_REGEXP, "")
         
     | 
| 
       39 
40 
     | 
    
         
             
                end
         
     | 
| 
         @@ -43,19 +44,23 @@ module ContentFS 
     | 
|
| 
       43 
44 
     | 
    
         
             
                end
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
       45 
46 
     | 
    
         
             
                def render
         
     | 
| 
       46 
     | 
    
         
            -
                   
     | 
| 
      
 47 
     | 
    
         
            +
                  if @format && (renderer = Renderers.resolve(@format))
         
     | 
| 
      
 48 
     | 
    
         
            +
                    resolve_includes(renderer.render(@content))
         
     | 
| 
      
 49 
     | 
    
         
            +
                  else
         
     | 
| 
      
 50 
     | 
    
         
            +
                    resolve_includes(to_s)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
       47 
53 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
      
 54 
     | 
    
         
            +
                private def resolve_includes(content)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  working_content = content.dup
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  content.scan(INCLUDE_REGEXP) do |match|
         
     | 
| 
       49 
58 
     | 
    
         
             
                    if (include = @database.find_include(match[0]))
         
     | 
| 
       50 
59 
     | 
    
         
             
                      working_content.gsub!($~.to_s, include.render)
         
     | 
| 
       51 
60 
     | 
    
         
             
                    end
         
     | 
| 
       52 
61 
     | 
    
         
             
                  end
         
     | 
| 
       53 
62 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                   
     | 
| 
       55 
     | 
    
         
            -
                    renderer.render(working_content)
         
     | 
| 
       56 
     | 
    
         
            -
                  else
         
     | 
| 
       57 
     | 
    
         
            -
                    to_s
         
     | 
| 
       58 
     | 
    
         
            -
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                  working_content
         
     | 
| 
       59 
64 
     | 
    
         
             
                end
         
     | 
| 
       60 
65 
     | 
    
         | 
| 
       61 
66 
     | 
    
         
             
                private def parse_metadata(content)
         
     | 
    
        data/lib/contentfs/database.rb
    CHANGED
    
    | 
         @@ -11,8 +11,8 @@ module ContentFS 
     | 
|
| 
       11 
11 
     | 
    
         
             
              #
         
     | 
| 
       12 
12 
     | 
    
         
             
              class Database
         
     | 
| 
       13 
13 
     | 
    
         
             
                class << self
         
     | 
| 
       14 
     | 
    
         
            -
                  def load(path, parent: nil, namespace: [], root: true)
         
     | 
| 
       15 
     | 
    
         
            -
                    new(path: path, parent: parent, namespace: namespace, root: root)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  def load(path, parent: nil, namespace: [], root: true, &block)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    new(path: path, parent: parent, namespace: namespace, root: root, &block)
         
     | 
| 
       16 
16 
     | 
    
         
             
                  end
         
     | 
| 
       17 
17 
     | 
    
         
             
                end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
         @@ -20,7 +20,7 @@ module ContentFS 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                attr_reader :prefix, :slug, :namespace, :metadata
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                def initialize(path:, parent: nil, namespace: [], root: false)
         
     | 
| 
      
 23 
     | 
    
         
            +
                def initialize(path:, parent: nil, namespace: [], root: false, &block)
         
     | 
| 
       24 
24 
     | 
    
         
             
                  path = Pathname.new(path)
         
     | 
| 
       25 
25 
     | 
    
         
             
                  name = path.basename(path.extname)
         
     | 
| 
       26 
26 
     | 
    
         
             
                  prefix, remainder = Prefix.build(name)
         
     | 
| 
         @@ -43,8 +43,9 @@ module ContentFS 
     | 
|
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
                  content_path = path.join.glob("_content.*")[0]
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                   
     | 
| 
       47 
     | 
    
         
            -
                    Content.load(content_path, database: self, metadata: @metadata, namespace: @namespace)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  if content_path&.exist?
         
     | 
| 
      
 47 
     | 
    
         
            +
                    @content = Content.load(content_path, database: self, metadata: @metadata, namespace: @namespace, &block)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    @metadata = @content.metadata.dup
         
     | 
| 
       48 
49 
     | 
    
         
             
                  end
         
     | 
| 
       49 
50 
     | 
    
         | 
| 
       50 
51 
     | 
    
         
             
                  children, nested, includes = {}, {}, {}
         
     | 
| 
         @@ -53,14 +54,14 @@ module ContentFS 
     | 
|
| 
       53 
54 
     | 
    
         
             
                    next if underscored && path.directory?
         
     | 
| 
       54 
55 
     | 
    
         | 
| 
       55 
56 
     | 
    
         
             
                    if path.directory?
         
     | 
| 
       56 
     | 
    
         
            -
                      database = Database.load(path, parent: self, namespace: @namespace, root: false)
         
     | 
| 
      
 57 
     | 
    
         
            +
                      database = Database.load(path, parent: self, namespace: @namespace, root: false, &block)
         
     | 
| 
       57 
58 
     | 
    
         
             
                      nested[database.slug] = database
         
     | 
| 
       58 
59 
     | 
    
         
             
                    elsif underscored
         
     | 
| 
       59 
     | 
    
         
            -
                      content = Content.load(path, database: self, metadata: @metadata, namespace: @namespace)
         
     | 
| 
      
 60 
     | 
    
         
            +
                      content = Content.load(path, database: self, metadata: @metadata, namespace: @namespace, &block)
         
     | 
| 
       60 
61 
     | 
    
         | 
| 
       61 
62 
     | 
    
         
             
                      includes[content.slug.to_s[1..].to_sym] = content
         
     | 
| 
       62 
63 
     | 
    
         
             
                    else
         
     | 
| 
       63 
     | 
    
         
            -
                      content = Content.load(path, database: self, metadata: @metadata, namespace: @namespace)
         
     | 
| 
      
 64 
     | 
    
         
            +
                      content = Content.load(path, database: self, metadata: @metadata, namespace: @namespace, &block)
         
     | 
| 
       64 
65 
     | 
    
         | 
| 
       65 
66 
     | 
    
         
             
                      children[content.slug] = content
         
     | 
| 
       66 
67 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -1,39 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require " 
     | 
| 
      
 3 
     | 
    
         
            +
            require "commonmarker"
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            module ContentFS
         
     | 
| 
       6 
6 
     | 
    
         
             
              module Renderers
         
     | 
| 
       7 
7 
     | 
    
         
             
                # @api private
         
     | 
| 
       8 
8 
     | 
    
         
             
                class Markdown
         
     | 
| 
       9 
9 
     | 
    
         
             
                  class << self
         
     | 
| 
       10 
     | 
    
         
            -
                    OPTIONS = {
         
     | 
| 
       11 
     | 
    
         
            -
                      autolink: true,
         
     | 
| 
       12 
     | 
    
         
            -
                      footnotes: true,
         
     | 
| 
       13 
     | 
    
         
            -
                      fenced_code_blocks: true,
         
     | 
| 
       14 
     | 
    
         
            -
                      tables: true
         
     | 
| 
       15 
     | 
    
         
            -
                    }.freeze
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
10 
     | 
    
         
             
                    def render(content)
         
     | 
| 
       18 
     | 
    
         
            -
                       
     | 
| 
       19 
     | 
    
         
            -
                    end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                    def options
         
     | 
| 
       22 
     | 
    
         
            -
                      OPTIONS
         
     | 
| 
       23 
     | 
    
         
            -
                    end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                    private def renderer
         
     | 
| 
       26 
     | 
    
         
            -
                      @_renderer ||= Redcarpet::Markdown.new(Renderer, options)
         
     | 
| 
       27 
     | 
    
         
            -
                    end
         
     | 
| 
       28 
     | 
    
         
            -
                  end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                  class Renderer < Redcarpet::Render::HTML
         
     | 
| 
       31 
     | 
    
         
            -
                    def block_quote(quote)
         
     | 
| 
       32 
     | 
    
         
            -
                      if (match = quote.match(/<p>\[(.*)\]/))
         
     | 
| 
       33 
     | 
    
         
            -
                        %(<blockquote class="#{match[1]}">#{quote.gsub("[#{match[1]}]", "")}</blockquote>)
         
     | 
| 
       34 
     | 
    
         
            -
                      else
         
     | 
| 
       35 
     | 
    
         
            -
                        super
         
     | 
| 
       36 
     | 
    
         
            -
                      end
         
     | 
| 
      
 11 
     | 
    
         
            +
                      CommonMarker.render_html(content, [:DEFAULT, :UNSAFE])
         
     | 
| 
       37 
12 
     | 
    
         
             
                    end
         
     | 
| 
       38 
13 
     | 
    
         
             
                  end
         
     | 
| 
       39 
14 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1,7 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require "rouge"
         
     | 
| 
       4 
     | 
    
         
            -
            require "rouge/plugins/redcarpet"
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
5 
     | 
    
         
             
            require_relative "../markdown"
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
         @@ -12,16 +11,31 @@ module ContentFS 
     | 
|
| 
       12 
11 
     | 
    
         
             
                  class Code
         
     | 
| 
       13 
12 
     | 
    
         
             
                    class << self
         
     | 
| 
       14 
13 
     | 
    
         
             
                      def render(content)
         
     | 
| 
       15 
     | 
    
         
            -
                        renderer.render(content)
         
     | 
| 
      
 14 
     | 
    
         
            +
                        renderer.render(CommonMarker.render_doc(content))
         
     | 
| 
       16 
15 
     | 
    
         
             
                      end
         
     | 
| 
       17 
16 
     | 
    
         | 
| 
       18 
17 
     | 
    
         
             
                      private def renderer
         
     | 
| 
       19 
     | 
    
         
            -
                         
     | 
| 
      
 18 
     | 
    
         
            +
                        SyntaxRenderer.new(options: [:DEFAULT, :UNSAFE])
         
     | 
| 
       20 
19 
     | 
    
         
             
                      end
         
     | 
| 
       21 
20 
     | 
    
         
             
                    end
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                    class  
     | 
| 
       24 
     | 
    
         
            -
                       
     | 
| 
      
 22 
     | 
    
         
            +
                    class SyntaxRenderer < CommonMarker::HtmlRenderer
         
     | 
| 
      
 23 
     | 
    
         
            +
                      def code_block(node)
         
     | 
| 
      
 24 
     | 
    
         
            +
                        block do
         
     | 
| 
      
 25 
     | 
    
         
            +
                          language = node.fence_info.split(/\s+/)[0]
         
     | 
| 
      
 26 
     | 
    
         
            +
                          out("<div class=\"highlight\"><pre class=\"highlight #{language}\"><code>")
         
     | 
| 
      
 27 
     | 
    
         
            +
                          out(syntax_highlight(node.string_content, language))
         
     | 
| 
      
 28 
     | 
    
         
            +
                          out('</code></pre></div>')
         
     | 
| 
      
 29 
     | 
    
         
            +
                        end
         
     | 
| 
      
 30 
     | 
    
         
            +
                      end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                      private def syntax_highlight(source, language)
         
     | 
| 
      
 33 
     | 
    
         
            +
                        if (lexer = Rouge::Lexer.find(language))
         
     | 
| 
      
 34 
     | 
    
         
            +
                          Rouge::Formatters::HTML.new.format(lexer.lex(source))
         
     | 
| 
      
 35 
     | 
    
         
            +
                        else
         
     | 
| 
      
 36 
     | 
    
         
            +
                          source
         
     | 
| 
      
 37 
     | 
    
         
            +
                        end
         
     | 
| 
      
 38 
     | 
    
         
            +
                      end
         
     | 
| 
       25 
39 
     | 
    
         
             
                    end
         
     | 
| 
       26 
40 
     | 
    
         
             
                  end
         
     | 
| 
       27 
41 
     | 
    
         
             
                end
         
     | 
    
        data/lib/contentfs/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: contentfs
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Bryan Powell
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021-04- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-04-05 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       13 
13 
     | 
    
         
             
            description: A structured content file system.
         
     | 
| 
       14 
14 
     | 
    
         
             
            email: bryan@metabahn.com
         
     |