bridgetown-core 0.21.1 → 0.21.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3ba931e1d2393d0b13861c33e41c465a4e422baac0f9a68e39699b8159a2c5c
4
- data.tar.gz: ff03f8af4f51257689ec84b0b661b0ba22ceb16a9110c5715aab56645020219c
3
+ metadata.gz: f9369cb49650eed5ad6776258f190b8afd8afa714d6dfaa77b2c6c1c15537346
4
+ data.tar.gz: f8625881a5386a7520e4e22981254352d0040d28052e2f85c64f072884da6f05
5
5
  SHA512:
6
- metadata.gz: 82407b17c101d072436853bb2892108b544d91d2667dbdef36696d674ce3af18a123920f0e33dd3acce352bf7ad48c9df162c03aba977d7dad2a23ad1dfbc20e
7
- data.tar.gz: 6c6c47fbf536cf3e3104040ce480be88183b60df5220845fe8a163af32de700b9f358c9d2bf58d19985da42d66e4005765c3d47a5e3c29def6039f77a640447b
6
+ metadata.gz: f8d19b3e0926ed332e4030ddf4c039292d14f490b509708dd51f81b0cd4b177b22a819920d35a3e4f0a4924204893f36fdc00c388ef9bed28dbf672af590dc96
7
+ data.tar.gz: 25dc48e4587613c547cd12cb762c7a968efedda1905d3fca1814deeab3af2f70ebdb755c6572793e8db817cbef8e16a8d741e517ae1eb7c978da05d353492d39
@@ -220,5 +220,15 @@ class Bridgetown::Site
220
220
  def add_generated_page(generated_page)
221
221
  generated_pages << generated_page
222
222
  end
223
+
224
+ # Loads and memoizes the parsed Webpack manifest file (if available)
225
+ # @return [Hash]
226
+ def frontend_manifest
227
+ @frontend_manifest ||= begin
228
+ manifest_file = in_root_dir(".bridgetown-webpack", "manifest.json")
229
+
230
+ JSON.parse(File.read(manifest_file)) if File.exist?(manifest_file)
231
+ end
232
+ end
223
233
  end
224
234
  end
@@ -34,6 +34,7 @@ class Bridgetown::Site
34
34
  self.pages = []
35
35
  self.static_files = []
36
36
  self.data = HashWithDotAccess::Hash.new
37
+ @frontend_manifest = nil
37
38
  @post_attr_hash = {}
38
39
  @collections = nil
39
40
  @documents = nil
@@ -14,7 +14,5 @@ module Bridgetown
14
14
  PostURLError = Class.new(FatalException)
15
15
  InvalidURLError = Class.new(FatalException)
16
16
  InvalidConfigurationError = Class.new(FatalException)
17
-
18
- WebpackAssetError = Class.new(FatalException)
19
17
  end
20
18
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- # This class handles custom defaults for YAML frontmatter settings.
5
- # These are set in bridgetown.config.yml and apply both to internal use (e.g. layout)
6
- # and the data available to liquid.
7
- #
4
+ # This class handles custom defaults for YAML frontmatter variables.
8
5
  # It is exposed via the frontmatter_defaults method on the site class.
6
+ # TODO: needs simplification/refactoring.
9
7
  class FrontmatterDefaults
10
- # Initializes a new instance.
8
+ # @return [Bridgetown::Site]
9
+ attr_reader :site
10
+
11
11
  def initialize(site)
12
12
  @site = site
13
13
  end
@@ -45,7 +45,7 @@ module Bridgetown
45
45
  set
46
46
  end
47
47
 
48
- # Finds a default value for a given setting, filtered by path and type
48
+ # TODO: deprecated. See `all` method instead
49
49
  #
50
50
  # path - the path (relative to the source) of the page or
51
51
  # post the default is used in
@@ -96,8 +96,8 @@ module Bridgetown
96
96
  private
97
97
 
98
98
  def merge_data_cascade_for_path(path, merged_data)
99
- absolute_path = @site.in_source_dir(path)
100
- @site.defaults_reader.path_defaults
99
+ absolute_path = site.in_source_dir(path)
100
+ site.defaults_reader.path_defaults
101
101
  .select { |k, _v| absolute_path.include? k }
102
102
  .sort_by { |k, _v| k.length }
103
103
  .each do |defaults|
@@ -130,7 +130,7 @@ module Bridgetown
130
130
  end
131
131
 
132
132
  def glob_scope(sanitized_path, rel_scope_path)
133
- site_source = Pathname.new(@site.source)
133
+ site_source = Pathname.new(site.source)
134
134
  abs_scope_path = site_source.join(rel_scope_path).to_s
135
135
 
136
136
  glob_cache(abs_scope_path).each do |scope_path|
@@ -152,7 +152,7 @@ module Bridgetown
152
152
  end
153
153
 
154
154
  def strip_collections_dir(path)
155
- collections_dir = @site.config["collections_dir"]
155
+ collections_dir = site.config["collections_dir"]
156
156
  slashed_coll_dir = collections_dir.empty? ? "/" : "#{collections_dir}/"
157
157
  return path if collections_dir.empty? || !path.to_s.start_with?(slashed_coll_dir)
158
158
 
@@ -226,7 +226,7 @@ module Bridgetown
226
226
  #
227
227
  # Returns an array of hashes
228
228
  def valid_sets
229
- sets = @site.config["defaults"]
229
+ sets = site.config["defaults"]
230
230
  return [] unless sets.is_a?(Array)
231
231
 
232
232
  sets.map do |set|
@@ -79,11 +79,11 @@ module Bridgetown
79
79
  # @return [String, nil]
80
80
  def validate_search_term(prototype_page)
81
81
  # @type [String]
82
- search_term = prototype_page.data["prototype"]["term"]
83
- return nil unless search_term.is_a?(String)
82
+ search_term = prototype_page.data["prototype"]["term"].to_s
83
+ return nil unless search_term.present?
84
84
 
85
85
  if prototype_page.data["prototype"]["collection"]
86
- @configured_collection = prototype_page.data["prototype"]["collection"]
86
+ @configured_collection = prototype_page.data["prototype"]["collection"].to_s
87
87
  end
88
88
 
89
89
  unless site.collections[@configured_collection]
@@ -173,13 +173,15 @@ module Bridgetown
173
173
  # source components _before_ we load any from plugins
174
174
  site.components_load_paths.reverse_each do |load_path|
175
175
  next unless Dir.exist? load_path
176
- next if Zeitwerk::Registry.loaders.find { |loader| loader.manages?(load_path) }
177
176
 
178
- @component_loaders[load_path] = Zeitwerk::Loader.new
179
- @component_loaders[load_path].push_dir(load_path)
180
- @component_loaders[load_path].enable_reloading if load_path.start_with?(site.root_dir)
181
- @component_loaders[load_path].ignore(File.join(load_path, "**", "*.js.rb"))
182
- @component_loaders[load_path].setup
177
+ begin
178
+ @component_loaders[load_path] = Zeitwerk::Loader.new
179
+ @component_loaders[load_path].push_dir(load_path)
180
+ @component_loaders[load_path].enable_reloading if load_path.start_with?(site.root_dir)
181
+ @component_loaders[load_path].ignore(File.join(load_path, "**", "*.js.rb"))
182
+ @component_loaders[load_path].setup
183
+ rescue Zeitwerk::Error # rubocop:disable Lint/SuppressedException
184
+ end
183
185
  end
184
186
  end
185
187
  # rubocop:enable Metrics/AbcSize
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Bridgetown
4
4
  class Reader
5
+ # @return [Bridgetown::Site]
5
6
  attr_reader :site
6
7
 
7
8
  def initialize(site)
@@ -17,12 +18,13 @@ module Bridgetown
17
18
  read_directories
18
19
  read_included_excludes
19
20
  sort_files!
20
- read_collections
21
21
  site.data = if site.uses_resource?
22
+ site.collections.data.read
22
23
  site.collections.data.merge_data_resources
23
24
  else
24
25
  DataReader.new(site).read
25
26
  end
27
+ read_collections
26
28
  Bridgetown::PluginManager.source_manifests.map(&:content).compact.each do |plugin_content_dir|
27
29
  PluginContentReader.new(site, plugin_content_dir).read
28
30
  end
@@ -30,15 +32,17 @@ module Bridgetown
30
32
 
31
33
  def read_collections
32
34
  site.collections.each_value do |collection|
33
- collection.read unless !site.uses_resource? &&
34
- collection.legacy_reader?
35
+ next if site.uses_resource? && collection.data?
36
+ next if !site.uses_resource? && collection.legacy_reader?
37
+
38
+ collection.read
35
39
  end
36
40
  end
37
41
 
38
42
  # Sorts posts, pages, and static files.
39
43
  def sort_files!
40
- site.collections.each_value { |c| c.docs.sort! }
41
- site.pages.sort_by!(&:name)
44
+ site.collections.posts.docs.sort! unless site.uses_resource?
45
+ site.generated_pages.sort_by!(&:name)
42
46
  site.static_files.sort_by!(&:relative_path)
43
47
  end
44
48
 
@@ -197,6 +201,7 @@ module Bridgetown
197
201
  dir = File.dirname(entry_path).sub(site.source, "")
198
202
  file = Array(File.basename(entry_path))
199
203
  if Utils.has_yaml_header?(entry_path)
204
+ # TODO: does this need to get incorporated into the resource engine?
200
205
  site.pages.concat(PageReader.new(site, dir).read(file))
201
206
  else
202
207
  retrieve_static_files(dir, file)
@@ -30,9 +30,9 @@ module Bridgetown
30
30
  def initialize(model:)
31
31
  @model = model
32
32
  @site = model.site
33
- self.data = HashWithDotAccess::Hash.new
33
+ @data = front_matter_defaults
34
34
 
35
- trigger_hooks(:post_init)
35
+ trigger_hooks :post_init
36
36
  end
37
37
 
38
38
  # Collection associated with this resource
@@ -75,20 +75,21 @@ module Bridgetown
75
75
  @relations ||= Bridgetown::Resource::Relations.new(self)
76
76
  end
77
77
 
78
+ # Loads in any default front matter associated with the resource.
79
+ #
80
+ # @return [HashWithDotAccess::Hash]
81
+ def front_matter_defaults
82
+ site.frontmatter_defaults.all(
83
+ relative_path.to_s,
84
+ collection.label.to_sym
85
+ ).with_dot_access
86
+ end
87
+
88
+ # Merges new data into the existing data hash.
89
+ #
78
90
  # @param new_data [HashWithDotAccess::Hash]
79
91
  def data=(new_data)
80
- unless new_data.is_a?(HashWithDotAccess::Hash)
81
- raise "#{self.class} data should be of type HashWithDotAccess::Hash"
82
- end
83
-
84
- @data = new_data
85
- @data.default_proc = proc do |_, key|
86
- site.frontmatter_defaults.find(
87
- relative_path.to_s,
88
- collection.label.to_sym,
89
- key.to_s
90
- )
91
- end
92
+ @data = @data.merge(new_data)
92
93
  end
93
94
 
94
95
  # @return [Bridgetown::Resource::Base]
@@ -107,7 +108,7 @@ module Bridgetown
107
108
 
108
109
  @destination = Destination.new(self) if requires_destination?
109
110
 
110
- trigger_hooks(:post_read)
111
+ trigger_hooks :post_read
111
112
 
112
113
  self
113
114
  end
@@ -188,7 +189,7 @@ module Bridgetown
188
189
  def summary
189
190
  return summary_extension_output if respond_to?(:summary_extension_output)
190
191
 
191
- content.to_s.strip.lines.first.to_s.strip
192
+ content.to_s.strip.lines.first.to_s.strip.html_safe
192
193
  end
193
194
 
194
195
  # @return [Hash<String, Hash<String => Bridgetown::Resource::TaxonomyType,
@@ -354,28 +354,19 @@ module Bridgetown
354
354
  # @raise [WebpackAssetError] if unable to find css or js in the manifest
355
355
  # file
356
356
  def parse_webpack_manifest_file(site, asset_type)
357
- manifest_file = site.in_root_dir(".bridgetown-webpack", "manifest.json")
358
- return "MISSING_WEBPACK_MANIFEST" unless File.exist?(manifest_file)
357
+ return log_webpack_asset_error("Webpack manifest") if site.frontend_manifest.nil?
359
358
 
360
- manifest = JSON.parse(File.read(manifest_file))
359
+ asset_path = if %w(js css).include?(asset_type)
360
+ site.frontend_manifest["main.#{asset_type}"]
361
+ else
362
+ site.frontend_manifest.find do |item, _|
363
+ item.sub(%r{^../(frontend/|src/)?}, "") == asset_type
364
+ end&.last
365
+ end
361
366
 
362
- known_assets = %w(js css)
363
- asset_path = nil
364
- if known_assets.include?(asset_type)
365
- asset_path = manifest["main.#{asset_type}"]
366
- log_webpack_asset_error(asset_type) && return if asset_path.nil?
367
- else
368
- asset_path = manifest.find do |item, _|
369
- item.sub(%r{^../(frontend/|src/)?}, "") == asset_type
370
- end&.last
371
- end
367
+ return log_webpack_asset_error(asset_type) if asset_path.nil?
372
368
 
373
- if asset_path
374
- static_frontend_path(site, ["js", asset_path])
375
- else
376
- Bridgetown.logger.error("Unknown Webpack asset type", asset_type)
377
- nil
378
- end
369
+ static_frontend_path site, ["js", asset_path]
379
370
  end
380
371
 
381
372
  def static_frontend_path(site, additional_parts = [])
@@ -389,10 +380,13 @@ module Bridgetown
389
380
  end
390
381
 
391
382
  def log_webpack_asset_error(asset_type)
392
- error_message = "There was an error parsing your #{asset_type} files. \
393
- Please check your #{asset_type} for any errors."
383
+ Bridgetown.logger.warn(
384
+ "Webpack:",
385
+ "There was an error parsing your #{asset_type} file. \
386
+ Please check your #{asset_type} file for any errors."
387
+ )
394
388
 
395
- Bridgetown.logger.warn(Errors::WebpackAssetError, error_message)
389
+ "MISSING_WEBPACK_MANIFEST_FILE"
396
390
  end
397
391
 
398
392
  def default_github_branch_name(repo_url)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- VERSION = "0.21.1"
4
+ VERSION = "0.21.5"
5
5
  CODE_NAME = "Broughton Beach"
6
6
  end
@@ -1,8 +1,8 @@
1
- <% if options["use-postcss"] %>
1
+ <%- if options["use-postcss"] -%>
2
2
  import "index.css"
3
- <% else %>
3
+ <%- else -%>
4
4
  import "index.scss"
5
- <% end %>
5
+ <%- end -%>
6
6
 
7
7
  // Import all javascript files from src/_components
8
8
  const componentsContext = require.context("bridgetownComponents", true, /.js$/)
@@ -20,18 +20,21 @@
20
20
  "esbuild-loader": "^2.13.1",
21
21
  "file-loader": "^6.2.0",
22
22
  "mini-css-extract-plugin": "^1.3.1",
23
- <% if options["use-postcss"] %>
23
+ <%- if options["use-postcss"] -%>
24
24
  "postcss": "^8.3.0",
25
25
  "postcss-flexbugs-fixes": "^4.1.0",
26
26
  "postcss-loader": "^4.3.0",
27
27
  "postcss-preset-env": "^6.7.0",
28
- <% else %>
28
+ <%- else -%>
29
29
  "sass": "^1.32.8",
30
30
  "sass-loader": "^8.0.2",
31
- <% end %>
31
+ <%- end -%>
32
32
  "webpack": "^5.39.1",
33
33
  "webpack-cli": "^4.7.2",
34
- "webpack-manifest-plugin": "^3.1.1"
34
+ "webpack-manifest-plugin": "^3.1.1",
35
35
  "webpack-merge": "^5.8.0"
36
+ },
37
+ "resolutions": {
38
+ "postcss-focus-within": "^4.0.0"
36
39
  }
37
40
  }
@@ -8,9 +8,9 @@ const port = 4001
8
8
  // Concurrently
9
9
  /////////////////
10
10
  concurrently([
11
- { command: "yarn webpack-dev", name: "Webpack", prefixColor: "yellow"},
12
- { command: "sleep 4; yarn serve --port " + port, name: "Bridgetown", prefixColor: "green"},
13
- { command: "sleep 8; yarn sync", name: "Live", prefixColor: "blue"}
11
+ { command: "yarn webpack-dev", name: "Webpack", prefixColor: "yellow" },
12
+ { command: "sleep 4; yarn serve --port " + port, name: "Bridgetown", prefixColor: "green" },
13
+ { command: "sleep 8; yarn sync", name: "Live", prefixColor: "blue" }
14
14
  ], {
15
15
  restartTries: 3,
16
16
  killOthers: ['failure', 'success'],
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bridgetown-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.1
4
+ version: 0.21.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bridgetown Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-19 00:00:00.000000000 Z
11
+ date: 2021-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel