bridgetown-core 2.0.0.beta2 → 2.0.0.beta3
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/.rubocop.yml +3 -0
- data/bridgetown-core.gemspec +1 -1
- data/lib/bridgetown-core/cache.rb +3 -19
- data/lib/bridgetown-core/cleaner.rb +17 -19
- data/lib/bridgetown-core/collection.rb +1 -1
- data/lib/bridgetown-core/commands/build.rb +6 -17
- data/lib/bridgetown-core/commands/concerns/actions.rb +4 -0
- data/lib/bridgetown-core/commands/esbuild/esbuild.config.js +7 -6
- data/lib/bridgetown-core/commands/esbuild/esbuild.defaults.js.erb +14 -13
- data/lib/bridgetown-core/commands/esbuild/migrate-from-webpack.rb +1 -1
- data/lib/bridgetown-core/commands/esbuild/update.rb +17 -3
- data/lib/bridgetown-core/commands/esbuild.rb +1 -1
- data/lib/bridgetown-core/component.rb +1 -1
- data/lib/bridgetown-core/concerns/layout_placeable.rb +1 -1
- data/lib/bridgetown-core/concerns/publishable.rb +2 -0
- data/lib/bridgetown-core/concerns/site/content.rb +4 -1
- data/lib/bridgetown-core/concerns/site/extensible.rb +6 -1
- data/lib/bridgetown-core/concerns/site/fast_refreshable.rb +20 -13
- data/lib/bridgetown-core/concerns/site/localizable.rb +2 -0
- data/lib/bridgetown-core/concerns/site/processable.rb +2 -0
- data/lib/bridgetown-core/concerns/site/renderable.rb +3 -0
- data/lib/bridgetown-core/concerns/site/ssr.rb +0 -1
- data/lib/bridgetown-core/configuration.rb +8 -14
- data/lib/bridgetown-core/converter.rb +2 -7
- data/lib/bridgetown-core/converters/identity.rb +3 -11
- data/lib/bridgetown-core/converters/liquid_templates.rb +3 -5
- data/lib/bridgetown-core/converters/markdown/kramdown_parser.rb +1 -1
- data/lib/bridgetown-core/converters/markdown.rb +11 -14
- data/lib/bridgetown-core/converters/serbea_templates.rb +3 -4
- data/lib/bridgetown-core/drops/drop.rb +29 -42
- data/lib/bridgetown-core/drops/resource_drop.rb +3 -12
- data/lib/bridgetown-core/errors.rb +2 -8
- data/lib/bridgetown-core/filters/condition_helpers.rb +6 -9
- data/lib/bridgetown-core/filters/date_filters.rb +22 -35
- data/lib/bridgetown-core/filters/grouping_filters.rb +11 -11
- data/lib/bridgetown-core/filters.rb +53 -72
- data/lib/bridgetown-core/front_matter/defaults.rb +8 -13
- data/lib/bridgetown-core/generated_page.rb +6 -6
- data/lib/bridgetown-core/generators/prototype_generator.rb +0 -2
- data/lib/bridgetown-core/hooks.rb +0 -1
- data/lib/bridgetown-core/layout.rb +3 -4
- data/lib/bridgetown-core/liquid_extensions.rb +3 -5
- data/lib/bridgetown-core/log_adapter.rb +37 -56
- data/lib/bridgetown-core/plugin_manager.rb +7 -3
- data/lib/bridgetown-core/rack/logger.rb +0 -2
- data/lib/bridgetown-core/resource/base.rb +8 -8
- data/lib/bridgetown-core/resource/permalink_processor.rb +1 -1
- data/lib/bridgetown-core/ruby_template_view.rb +0 -1
- data/lib/bridgetown-core/static_file.rb +15 -20
- data/lib/bridgetown-core/tags/class_map.rb +1 -1
- data/lib/bridgetown-core/tags/post_url.rb +2 -32
- data/lib/bridgetown-core/utils/require_gems.rb +1 -3
- data/lib/bridgetown-core/utils.rb +41 -44
- data/lib/bridgetown-core/watcher.rb +2 -3
- data/lib/bridgetown-core.rb +1 -2
- data/lib/roda/plugins/bridgetown_server.rb +2 -3
- data/lib/site_template/package.json.erb +1 -0
- data/lib/site_template/postcss.config.js.erb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f521946dedcb0f22d30ef1ca8be0aa3c2f1eb967dfc629f0da7c1640ddfba1e
|
4
|
+
data.tar.gz: 2f6479875ecc1f3271d20e4b1626c8bff8e305f8e5cb82fa49d6676b786b4495
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4036965b0db3c36e648dd4e80cd2656d4aeb03619a37530e6145bf84dbcd6f46eda5ccbaa051f3c605922b72618a4ebdd2de6e2d14962f441afad0ed6bb40a8d
|
7
|
+
data.tar.gz: 86b1e921da1dbaf594760f5269d47517ff54498bba74ff721f82d0963308f694a0452715a5b875da963fc29e9074a4221b84e4887aaa36dd6847491d9df0e501
|
data/.rubocop.yml
CHANGED
data/bridgetown-core.gemspec
CHANGED
@@ -52,7 +52,7 @@ Gem::Specification.new do |s|
|
|
52
52
|
s.add_runtime_dependency("rouge", [">= 3.0", "< 5.0"])
|
53
53
|
s.add_runtime_dependency("serbea", "~> 2.1")
|
54
54
|
s.add_runtime_dependency("signalize", "~> 1.3")
|
55
|
-
s.add_runtime_dependency("streamlined", ">= 0.
|
55
|
+
s.add_runtime_dependency("streamlined", ">= 0.6.0")
|
56
56
|
s.add_runtime_dependency("thor", "~> 1.1")
|
57
57
|
s.add_runtime_dependency("tilt", "~> 2.0")
|
58
58
|
s.add_runtime_dependency("zeitwerk", "~> 2.5")
|
@@ -33,8 +33,6 @@ module Bridgetown
|
|
33
33
|
|
34
34
|
# Compare the current config to the cached config
|
35
35
|
# If they are different, clear all caches
|
36
|
-
#
|
37
|
-
# Returns nothing.
|
38
36
|
def clear_if_config_changed(config)
|
39
37
|
config = config.inspect
|
40
38
|
cache = Bridgetown::Cache.new "Bridgetown::Cache"
|
@@ -49,8 +47,6 @@ module Bridgetown
|
|
49
47
|
private
|
50
48
|
|
51
49
|
# Delete all cached items from all caches
|
52
|
-
#
|
53
|
-
# Returns nothing.
|
54
50
|
def delete_cache_files
|
55
51
|
FileUtils.rm_rf(@cache_dir) if disk_cache_enabled
|
56
52
|
end
|
@@ -60,9 +56,7 @@ module Bridgetown
|
|
60
56
|
|
61
57
|
# Get an existing named cache, or create a new one if none exists
|
62
58
|
#
|
63
|
-
# name
|
64
|
-
#
|
65
|
-
# Returns nothing.
|
59
|
+
# @param name [String] name of the cache
|
66
60
|
def initialize(name)
|
67
61
|
@cache = Bridgetown::Cache.base_cache[name] ||= {}
|
68
62
|
@name = name.gsub(%r![^\w\s-]!, "-")
|
@@ -77,7 +71,7 @@ module Bridgetown
|
|
77
71
|
# Retrieve a cached item
|
78
72
|
# Raises if key does not exist in cache
|
79
73
|
#
|
80
|
-
#
|
74
|
+
# @return [Object] cached value
|
81
75
|
def [](key)
|
82
76
|
return @cache[key] if @cache.key?(key)
|
83
77
|
|
@@ -88,8 +82,6 @@ module Bridgetown
|
|
88
82
|
end
|
89
83
|
|
90
84
|
# Add an item to cache
|
91
|
-
#
|
92
|
-
# Returns nothing.
|
93
85
|
def []=(key, value)
|
94
86
|
@cache[key] = value
|
95
87
|
return unless disk_cache_enabled?
|
@@ -112,8 +104,6 @@ module Bridgetown
|
|
112
104
|
end
|
113
105
|
|
114
106
|
# Remove one particular item from the cache
|
115
|
-
#
|
116
|
-
# Returns nothing.
|
117
107
|
def delete(key)
|
118
108
|
@cache.delete(key)
|
119
109
|
File.delete(path_to(hash(key))) if disk_cache_enabled?
|
@@ -121,7 +111,7 @@ module Bridgetown
|
|
121
111
|
|
122
112
|
# Check if `key` already exists in this cache
|
123
113
|
#
|
124
|
-
#
|
114
|
+
# @return [Boolean] true if key exists in the cache, false otherwise
|
125
115
|
def key?(key)
|
126
116
|
# First, check if item is already cached in memory
|
127
117
|
return true if @cache.key?(key)
|
@@ -153,14 +143,11 @@ module Bridgetown
|
|
153
143
|
end
|
154
144
|
|
155
145
|
# Remove all this caches items from disk
|
156
|
-
#
|
157
|
-
# Returns nothing.
|
158
146
|
def delete_cache_files
|
159
147
|
FileUtils.rm_rf(path_to) if disk_cache_enabled?
|
160
148
|
end
|
161
149
|
|
162
150
|
# Load `path` from disk and return the result.
|
163
|
-
# This MUST NEVER be called in Safe Mode
|
164
151
|
# rubocop:disable Security/MarshalLoad
|
165
152
|
def load(path)
|
166
153
|
raise unless disk_cache_enabled?
|
@@ -173,9 +160,6 @@ module Bridgetown
|
|
173
160
|
# rubocop:enable Security/MarshalLoad
|
174
161
|
|
175
162
|
# Given a path and a value, save value to disk at path.
|
176
|
-
# This should NEVER be called in Safe Mode
|
177
|
-
#
|
178
|
-
# Returns nothing.
|
179
163
|
def dump(path, value)
|
180
164
|
return unless disk_cache_enabled?
|
181
165
|
|
@@ -17,9 +17,9 @@ module Bridgetown
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
-
#
|
20
|
+
# The list of files and directories to be deleted during cleanup process
|
21
21
|
#
|
22
|
-
#
|
22
|
+
# @return [Array<String>] file and directory paths
|
23
23
|
def obsolete_files
|
24
24
|
out = (existing_files - new_files - new_dirs + replaced_files).to_a
|
25
25
|
Bridgetown::Hooks.trigger :clean, :on_obsolete, out
|
@@ -27,10 +27,9 @@ module Bridgetown
|
|
27
27
|
out
|
28
28
|
end
|
29
29
|
|
30
|
-
#
|
31
|
-
# keep_files and hidden files.
|
30
|
+
# The list of existing files, apart from those included in keep_files and hidden files
|
32
31
|
#
|
33
|
-
#
|
32
|
+
# @return [Set<String>] file paths
|
34
33
|
def existing_files
|
35
34
|
files = Set.new
|
36
35
|
regex = keep_file_regex
|
@@ -45,9 +44,9 @@ module Bridgetown
|
|
45
44
|
files
|
46
45
|
end
|
47
46
|
|
48
|
-
#
|
47
|
+
# The list of files to be created when site is built.
|
49
48
|
#
|
50
|
-
#
|
49
|
+
# @return [Set<String>] file paths
|
51
50
|
def new_files
|
52
51
|
@new_files ||= Set.new.tap do |files|
|
53
52
|
site.each_site_file do |item|
|
@@ -60,17 +59,17 @@ module Bridgetown
|
|
60
59
|
end
|
61
60
|
end
|
62
61
|
|
63
|
-
#
|
62
|
+
# The list of directories to be created when site is built.
|
64
63
|
# These are the parent directories of the files in #new_files.
|
65
64
|
#
|
66
|
-
#
|
65
|
+
# @return [Set<String>] directory paths
|
67
66
|
def new_dirs
|
68
67
|
@new_dirs ||= new_files.flat_map { |file| parent_dirs(file) }.to_set
|
69
68
|
end
|
70
69
|
|
71
|
-
#
|
70
|
+
# The list of parent directories of a given file
|
72
71
|
#
|
73
|
-
#
|
72
|
+
# @return [Array<String>] directory paths
|
74
73
|
def parent_dirs(file)
|
75
74
|
parent_dir = File.dirname(file)
|
76
75
|
if parent_dir == site.dest
|
@@ -80,29 +79,28 @@ module Bridgetown
|
|
80
79
|
end
|
81
80
|
end
|
82
81
|
|
83
|
-
#
|
84
|
-
# during build
|
82
|
+
# The list of existing files that will be replaced by a directory during build
|
85
83
|
#
|
86
|
-
#
|
84
|
+
# @return [Set<String>] file paths
|
87
85
|
def replaced_files
|
88
86
|
new_dirs.select { |dir| File.file?(dir) }.to_set
|
89
87
|
end
|
90
88
|
|
91
|
-
#
|
89
|
+
# The list of directories that need to be kept because they are
|
92
90
|
# parent directories of files specified in keep_files
|
93
91
|
#
|
94
|
-
#
|
92
|
+
# @return [Set<String>] directory paths
|
95
93
|
def keep_dirs
|
96
94
|
site.config.keep_files.flat_map { |file| parent_dirs(site.in_dest_dir(file)) }.to_set
|
97
95
|
end
|
98
96
|
|
99
|
-
#
|
97
|
+
# Creates a regular expression from the config's keep_files array
|
100
98
|
#
|
101
|
-
#
|
99
|
+
# @example
|
102
100
|
# ['.git','.svn'] with site.dest "/myblog/_site" creates
|
103
101
|
# the following regex: /\A\/myblog\/_site\/(\.git|\/.svn)/
|
104
102
|
#
|
105
|
-
#
|
103
|
+
# @return [Regexp]
|
106
104
|
def keep_file_regex
|
107
105
|
%r!\A#{Regexp.quote(site.dest)}/(#{Regexp.union(site.config.keep_files).source})!
|
108
106
|
end
|
@@ -400,7 +400,7 @@ module Bridgetown
|
|
400
400
|
|
401
401
|
def model_id_from_relative_path(model_relative_path, manifest: nil)
|
402
402
|
scheme = manifest ? "plugin" : "repo"
|
403
|
-
id =
|
403
|
+
id = "#{scheme}://#{label}.collection/"
|
404
404
|
id += "#{manifest.origin}/" if manifest
|
405
405
|
id += Addressable::URI.escape(model_relative_path).gsub("#", "%23")
|
406
406
|
id
|
@@ -66,11 +66,7 @@ module Bridgetown
|
|
66
66
|
build_site(config_options)
|
67
67
|
end
|
68
68
|
|
69
|
-
|
70
|
-
if config_options.fetch("detach", false)
|
71
|
-
Bridgetown.logger.info "Auto-regeneration:",
|
72
|
-
"disabled when running server detached."
|
73
|
-
elsif config_options.fetch("watch", false)
|
69
|
+
if config_options.fetch("watch", false)
|
74
70
|
watch_site(config_options)
|
75
71
|
else
|
76
72
|
Bridgetown.logger.info "Auto-regeneration:", "disabled. Use --watch to enable."
|
@@ -79,11 +75,9 @@ module Bridgetown
|
|
79
75
|
|
80
76
|
protected
|
81
77
|
|
82
|
-
# Build your Bridgetown site
|
78
|
+
# Build your Bridgetown site
|
83
79
|
#
|
84
|
-
# options
|
85
|
-
#
|
86
|
-
# Returns nothing.
|
80
|
+
# @param options [Bridgetown::Configuration] options loaded from config and/or CLI
|
87
81
|
def build_site(config_options)
|
88
82
|
t = Time.now
|
89
83
|
display_folder_paths(config_options)
|
@@ -97,27 +91,22 @@ module Bridgetown
|
|
97
91
|
"#{(Time.now - t).ceil(2)} seconds."
|
98
92
|
end
|
99
93
|
|
100
|
-
# Watch for file changes and rebuild the site
|
101
|
-
#
|
102
|
-
# options - A Hash of options passed to the command or loaded from config
|
94
|
+
# Watch for file changes and rebuild the site
|
103
95
|
#
|
104
|
-
#
|
96
|
+
# @param options [Bridgetown::Configuration] options loaded from config and/or CLI
|
105
97
|
def watch_site(config_options)
|
106
98
|
Bridgetown::Watcher.watch(@site, config_options)
|
107
99
|
end
|
108
100
|
|
109
101
|
# Display the source and destination folder paths
|
110
102
|
#
|
111
|
-
# options
|
112
|
-
#
|
113
|
-
# Returns nothing.
|
103
|
+
# @param options [Bridgetown::Configuration] options loaded from config and/or CLI
|
114
104
|
def display_folder_paths(config_options)
|
115
105
|
source = File.expand_path(config_options["source"])
|
116
106
|
destination = File.expand_path(config_options["destination"])
|
117
107
|
Bridgetown.logger.info "Environment:", Bridgetown.environment.cyan
|
118
108
|
Bridgetown.logger.info "Source:", source
|
119
109
|
Bridgetown.logger.info "Destination:", destination
|
120
|
-
# TODO: work with arrays
|
121
110
|
return unless config_options["plugins_dir"].is_a?(String)
|
122
111
|
|
123
112
|
plugins_dir = File.expand_path(config_options["plugins_dir"])
|
@@ -116,6 +116,10 @@ module Bridgetown
|
|
116
116
|
run "#{Bridgetown::PluginManager.package_manager} #{Bridgetown::PluginManager.package_manager_install_command} #{package_details}" # rubocop:disable Layout
|
117
117
|
end
|
118
118
|
|
119
|
+
def remove_npm_package(package_details)
|
120
|
+
run "#{Bridgetown::PluginManager.package_manager} #{Bridgetown::PluginManager.package_manager_uninstall_command} #{package_details}" # rubocop:disable Layout
|
121
|
+
end
|
122
|
+
|
119
123
|
def apply_from_url(url)
|
120
124
|
apply transform_automation_url(url.dup)
|
121
125
|
end
|
@@ -1,16 +1,17 @@
|
|
1
|
-
|
1
|
+
import build from "./config/esbuild.defaults.js"
|
2
2
|
|
3
3
|
// You can customize this as you wish, perhaps to add new esbuild plugins.
|
4
4
|
//
|
5
5
|
// ```
|
6
|
-
//
|
7
|
-
//
|
6
|
+
// import { copy } from 'esbuild-plugin-copy'
|
7
|
+
//
|
8
8
|
// const esbuildOptions = {
|
9
9
|
// plugins: [
|
10
|
-
//
|
10
|
+
// copy({
|
11
|
+
// resolveFrom: 'cwd',
|
11
12
|
// assets: {
|
12
|
-
// from: [
|
13
|
-
// to: [
|
13
|
+
// from: ['./node_modules/somepackage/files/*')],
|
14
|
+
// to: ['./output/_bridgetown/somepackage/files')],
|
14
15
|
// },
|
15
16
|
// verbose: false
|
16
17
|
// }),
|
@@ -16,19 +16,19 @@ const autogeneratedBridgetownConfig = {
|
|
16
16
|
"islandsDir": "_islands"
|
17
17
|
}
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
import path from "path"
|
20
|
+
import fsLib from "fs"
|
21
21
|
const fs = fsLib.promises
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
22
|
+
import { pathToFileURL, fileURLToPath } from "url"
|
23
|
+
import { glob } from "glob"
|
24
|
+
import postcss from "postcss"
|
25
|
+
import postCssImport from "postcss-import"
|
26
|
+
import readCache from "read-cache"
|
27
27
|
|
28
28
|
// Detect if an NPM package is available
|
29
29
|
const moduleAvailable = name => {
|
30
30
|
try {
|
31
|
-
|
31
|
+
import.meta.resolve(name)
|
32
32
|
return true
|
33
33
|
} catch (e) { }
|
34
34
|
return false
|
@@ -43,7 +43,7 @@ const generateSourceMappingURL = sourceMap => {
|
|
43
43
|
// Import Sass if available
|
44
44
|
let sass
|
45
45
|
if (moduleAvailable("sass")) {
|
46
|
-
sass =
|
46
|
+
sass = (await import("sass")).default
|
47
47
|
}
|
48
48
|
|
49
49
|
// Glob plugin derived from:
|
@@ -288,9 +288,9 @@ const bridgetownConfigured = (bridgetownConfig, outputFolder) => {
|
|
288
288
|
}
|
289
289
|
|
290
290
|
// Load the PostCSS config from postcss.config.js or whatever else is a supported location/format
|
291
|
-
const postcssrc =
|
291
|
+
const postcssrc = (await import("postcss-load-config")).default
|
292
292
|
|
293
|
-
|
293
|
+
export default async (esbuildOptions, ...args) => {
|
294
294
|
let outputFolder;
|
295
295
|
if (typeof esbuildOptions === "string") { // legacy syntax where first argument is output folder
|
296
296
|
outputFolder = esbuildOptions
|
@@ -313,11 +313,12 @@ module.exports = async (esbuildOptions, ...args) => {
|
|
313
313
|
esbuildOptions.plugins.push(bridgetownPreset(bridgetownConfig))
|
314
314
|
if (esbuildOptions.bridgetownConfig) delete esbuildOptions.bridgetownConfig
|
315
315
|
|
316
|
-
const esbuild =
|
316
|
+
const esbuild = (await import("esbuild")).default
|
317
317
|
const entryPoints = esbuildOptions.entryPoints || ["./frontend/javascript/index.js"]
|
318
318
|
if (esbuildOptions.entryPoints) delete esbuildOptions.entryPoints
|
319
319
|
|
320
320
|
const islands = glob.sync(`./${bridgetownConfig.source}/${bridgetownConfig.islandsDir}/*.{js,js.rb}`).map(item => `./${item}`)
|
321
|
+
const islandsAsObject = islands.reduce((obj, str) => obj[str] = str, {})
|
321
322
|
|
322
323
|
esbuild.context({
|
323
324
|
bundle: true,
|
@@ -339,7 +340,7 @@ module.exports = async (esbuildOptions, ...args) => {
|
|
339
340
|
minify: process.argv.includes("--minify"),
|
340
341
|
sourcemap: true,
|
341
342
|
target: "es2020",
|
342
|
-
entryPoints: [...entryPoints, ...islands],
|
343
|
+
entryPoints: Array.isArray(entryPoints) ? [...entryPoints, ...islands] : {...entryPoints, ...islandsAsObject},
|
343
344
|
entryNames: "[dir]/[name].[hash]",
|
344
345
|
outdir: path.join(process.cwd(), `${bridgetownConfig.destination}/_bridgetown/static`),
|
345
346
|
publicPath: "/_bridgetown/static",
|
@@ -25,7 +25,7 @@ unless Bridgetown.environment.test?
|
|
25
25
|
confirm = ask "\nThe following packages will be removed: \n\n#{packages_to_remove.join("\n")}\n\nWould you like to continue? [Yn]"
|
26
26
|
return unless confirm.casecmp?("Y")
|
27
27
|
|
28
|
-
|
28
|
+
remove_npm_package packages_to_remove.join(" ")
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -2,8 +2,22 @@
|
|
2
2
|
|
3
3
|
template "esbuild.defaults.js.erb", "config/esbuild.defaults.js", force: true
|
4
4
|
copy_file "jsconfig.json"
|
5
|
-
|
5
|
+
|
6
|
+
unless File.read("package.json").include?('"type": "module"')
|
7
|
+
insert_into_file "package.json",
|
8
|
+
after: '"private": true,' do
|
9
|
+
<<-JS.chomp
|
10
|
+
|
11
|
+
"type": "module",
|
12
|
+
JS
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
gsub_file "postcss.config.js", "module.exports =", "export default"
|
17
|
+
gsub_file "esbuild.config.js", 'const build = require("./config/esbuild.defaults.js")',
|
18
|
+
'import build from "./config/esbuild.defaults.js"'
|
19
|
+
add_npm_package "esbuild@latest glob@latest" unless Bridgetown.env.test?
|
20
|
+
|
21
|
+
say "\n🎉 esbuild configuration updated successfully!"
|
6
22
|
say "You may need to add `$styles/` to the front of your main CSS imports."
|
7
23
|
say "See https://www.bridgetownrb.com/docs/frontend-assets#esbuild-setup for details."
|
8
|
-
say "⚠️ Don't forget to update the esbuild version in your `package.json` file to \"^0.20.2\""
|
9
|
-
say "and run `npm install`!"
|
@@ -4,7 +4,7 @@ module Bridgetown
|
|
4
4
|
module LayoutPlaceable
|
5
5
|
# Determine whether the file should be placed into layouts.
|
6
6
|
#
|
7
|
-
#
|
7
|
+
# @return [Boolean] false if the document is an asset file or if the front matter
|
8
8
|
# specifies `layout: none`
|
9
9
|
def place_in_layout?
|
10
10
|
no_layout?.!
|
@@ -27,6 +27,7 @@ class Bridgetown::Site
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# Returns the contents of the site metadata file or a blank hash
|
30
|
+
#
|
30
31
|
# @return [HashWithDotAccess::Hash] Returns a hash of site metadata
|
31
32
|
def metadata
|
32
33
|
signals["site_metadata"] ||= HashWithDotAccess::Hash.new
|
@@ -49,7 +50,6 @@ class Bridgetown::Site
|
|
49
50
|
#
|
50
51
|
# @return [HashWithDotAccess::Hash{String, Symbol => Collection}] A Hash
|
51
52
|
# containing a collection name-to-instance pairs.
|
52
|
-
#
|
53
53
|
# @return [HashWithDotAccess::Hash] Returns a blank hash if no items found
|
54
54
|
def collections
|
55
55
|
@collections ||= collection_names.each_with_object(
|
@@ -60,6 +60,7 @@ class Bridgetown::Site
|
|
60
60
|
end
|
61
61
|
|
62
62
|
# An array of collection names.
|
63
|
+
#
|
63
64
|
# @return [Array<String>] an array of collection names from the configuration,
|
64
65
|
# or an empty array if the `config["collections"]` key is not set.
|
65
66
|
def collection_names
|
@@ -84,6 +85,7 @@ class Bridgetown::Site
|
|
84
85
|
end
|
85
86
|
|
86
87
|
# Get all loaded resources.
|
88
|
+
#
|
87
89
|
# @return [Array<Bridgetown::Resource::Base>] an array of resources
|
88
90
|
def resources
|
89
91
|
collections.each_with_object(Set.new) do |(_, collection), set|
|
@@ -112,6 +114,7 @@ class Bridgetown::Site
|
|
112
114
|
end
|
113
115
|
|
114
116
|
# Loads and memoizes the parsed frontend bundler manifest file (if available)
|
117
|
+
#
|
115
118
|
# @return [Hash]
|
116
119
|
def frontend_manifest
|
117
120
|
@frontend_manifest ||= begin
|
@@ -4,6 +4,7 @@ class Bridgetown::Site
|
|
4
4
|
module Extensible
|
5
5
|
# Load necessary libraries, plugins, converters, and generators.
|
6
6
|
# This is only ever run once for the lifecycle of the site object.
|
7
|
+
#
|
7
8
|
# @see Converter
|
8
9
|
# @see Generator
|
9
10
|
# @see PluginManager
|
@@ -16,6 +17,7 @@ class Bridgetown::Site
|
|
16
17
|
end
|
17
18
|
|
18
19
|
# Run all Generators.
|
20
|
+
#
|
19
21
|
# @see Generator
|
20
22
|
# @return [void]
|
21
23
|
def generate
|
@@ -34,6 +36,7 @@ class Bridgetown::Site
|
|
34
36
|
end
|
35
37
|
|
36
38
|
# Get the implementation for the given Converter class.
|
39
|
+
#
|
37
40
|
# @param klass [Class] The Class of the Converter to fetch.
|
38
41
|
# @return [Converter] Returns the {Converter}
|
39
42
|
# instance implementing the given `Converter` class.
|
@@ -46,7 +49,8 @@ class Bridgetown::Site
|
|
46
49
|
|
47
50
|
# Create an array of instances of the subclasses of the class
|
48
51
|
# passed in as argument.
|
49
|
-
#
|
52
|
+
#
|
53
|
+
# @param klass [Class] class which is the parent of the subclasses.
|
50
54
|
# @return [Array<Converter, Generator>] Returns an array of instances of
|
51
55
|
# subclasses of `klass`.
|
52
56
|
def instantiate_subclasses(klass)
|
@@ -56,6 +60,7 @@ class Bridgetown::Site
|
|
56
60
|
end
|
57
61
|
|
58
62
|
# Shorthand for registering a site hook via {Bridgetown::Hooks}
|
63
|
+
#
|
59
64
|
# @param event [Symbol] name of the event (`:pre_read`, `:post_render`, etc.)
|
60
65
|
# @yield the block will be called when the event is triggered
|
61
66
|
# @yieldparam site the site which triggered the event hook
|
@@ -10,15 +10,16 @@ class Bridgetown::Site
|
|
10
10
|
@fast_refresh_ordering = 0
|
11
11
|
full_abort = false
|
12
12
|
found_gen_pages = false
|
13
|
-
paths.each do |path|
|
14
|
-
|
13
|
+
paths.each do |path| # rubocop:todo Metrics
|
14
|
+
found_res = resources.select do |resource|
|
15
15
|
resource.id.start_with?("repo://") && in_source_dir(resource.relative_path) == path
|
16
16
|
end
|
17
17
|
|
18
18
|
layouts_to_reload = Set.new
|
19
|
-
locate_resource_layouts_and_partials_for_fash_refresh(path, layouts_to_reload) unless
|
19
|
+
locate_resource_layouts_and_partials_for_fash_refresh(path, layouts_to_reload) unless
|
20
|
+
found_res.any?
|
20
21
|
|
21
|
-
locate_components_for_fast_refresh(path) unless
|
22
|
+
locate_components_for_fast_refresh(path) unless found_res.any?
|
22
23
|
|
23
24
|
pages = locate_layouts_and_pages_for_fast_refresh(path, layouts_to_reload)
|
24
25
|
|
@@ -27,21 +28,22 @@ class Bridgetown::Site
|
|
27
28
|
self, layout.instance_variable_get(:@base), layout.name
|
28
29
|
)
|
29
30
|
end
|
30
|
-
|
31
|
-
next unless res || !pages.empty?
|
31
|
+
next unless found_res.any? || pages.any?
|
32
32
|
|
33
|
-
|
33
|
+
if pages.any?
|
34
34
|
found_gen_pages = true
|
35
35
|
mark_original_page_resources_for_fast_refresh(pages)
|
36
36
|
next
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
39
|
+
found_res.each do |res|
|
40
|
+
res.prepare_for_fast_refresh!.tap { full_abort = true unless _1 }
|
41
|
+
next unless res.collection.data?
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
|
43
|
+
res.collection.merge_data_resources.each do |k, v|
|
44
|
+
data[k] = v
|
45
|
+
signals[k] = v
|
46
|
+
end
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
@@ -60,6 +62,7 @@ class Bridgetown::Site
|
|
60
62
|
|
61
63
|
Bridgetown::Hooks.trigger :site, :fast_refresh, self
|
62
64
|
|
65
|
+
liquid_renderer.reset
|
63
66
|
transform_resources_for_fast_refresh(marked_resources, found_gen_pages)
|
64
67
|
transform_generated_pages_for_fast_refresh
|
65
68
|
|
@@ -134,7 +137,11 @@ class Bridgetown::Site
|
|
134
137
|
end
|
135
138
|
|
136
139
|
def transform_resources_for_fast_refresh(marked_resources, found_gen_pages)
|
137
|
-
marked_resources.each
|
140
|
+
marked_resources.each do |res|
|
141
|
+
render_with_locale(res) do
|
142
|
+
res.transform!.write
|
143
|
+
end
|
144
|
+
end
|
138
145
|
number_of_resources = marked_resources.length
|
139
146
|
number_of_resources += 1 if found_gen_pages
|
140
147
|
Bridgetown.logger.info(
|
@@ -3,6 +3,7 @@
|
|
3
3
|
class Bridgetown::Site
|
4
4
|
module Localizable
|
5
5
|
# Returns the current and/or default configured locale
|
6
|
+
#
|
6
7
|
# @return String
|
7
8
|
def locale
|
8
9
|
@locale ||= begin
|
@@ -16,6 +17,7 @@ class Bridgetown::Site
|
|
16
17
|
end
|
17
18
|
|
18
19
|
# Sets the current locale for the site
|
20
|
+
#
|
19
21
|
# @param new_locale [String] for example: "en" for English, "es" for Spanish
|
20
22
|
def locale=(new_locale)
|
21
23
|
I18n.locale = @locale = new_locale.to_sym
|
@@ -3,6 +3,7 @@
|
|
3
3
|
class Bridgetown::Site
|
4
4
|
module Processable
|
5
5
|
# Reset, Read, Generate, Render, Cleanup, Process, and Write this Site to output.
|
6
|
+
#
|
6
7
|
# @return [void]
|
7
8
|
# @see #reset
|
8
9
|
# @see #read
|
@@ -67,6 +68,7 @@ class Bridgetown::Site
|
|
67
68
|
end
|
68
69
|
|
69
70
|
# Read data from disk and load it into internal memory.
|
71
|
+
#
|
70
72
|
# @return [void]
|
71
73
|
def read
|
72
74
|
Bridgetown::Hooks.trigger :site, :pre_read, self
|