bridgetown-core 1.2.0 → 1.3.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bridgetown-core.gemspec +21 -22
- data/lib/bridgetown-core/collection.rb +1 -1
- data/lib/bridgetown-core/commands/build.rb +3 -0
- data/lib/bridgetown-core/commands/console.rb +0 -1
- data/lib/bridgetown-core/commands/esbuild/esbuild.config.js +12 -2
- data/lib/bridgetown-core/commands/esbuild/esbuild.defaults.js.erb +64 -18
- data/lib/bridgetown-core/commands/esbuild/jsconfig.json +10 -0
- data/lib/bridgetown-core/commands/esbuild/setup.rb +1 -0
- data/lib/bridgetown-core/commands/esbuild/update.rb +3 -0
- data/lib/bridgetown-core/commands/new.rb +2 -0
- data/lib/bridgetown-core/configuration/configuration_dsl.rb +1 -1
- data/lib/bridgetown-core/configuration.rb +13 -12
- data/lib/bridgetown-core/configurations/is-land.rb +15 -0
- data/lib/bridgetown-core/configurations/lit/lit-components-entry.js +1 -1
- data/lib/bridgetown-core/configurations/lit.rb +9 -54
- data/lib/bridgetown-core/configurations/purgecss.rb +1 -1
- data/lib/bridgetown-core/configurations/ruby2js/ruby2js.rb +10 -0
- data/lib/bridgetown-core/configurations/ruby2js.rb +12 -40
- data/lib/bridgetown-core/configurations/turbo.rb +17 -7
- data/lib/bridgetown-core/errors.rb +10 -1
- data/lib/bridgetown-core/filters/localization_filters.rb +11 -0
- data/lib/bridgetown-core/helpers.rb +34 -0
- data/lib/bridgetown-core/plugin_manager.rb +0 -24
- data/lib/bridgetown-core/rack/boot.rb +13 -1
- data/lib/bridgetown-core/rack/routes.rb +40 -6
- data/lib/bridgetown-core/readers/layout_reader.rb +2 -2
- data/lib/bridgetown-core/tags/dsd.rb +15 -0
- data/lib/bridgetown-core/tags/l.rb +14 -0
- data/lib/bridgetown-core/utils/aux.rb +2 -0
- data/lib/bridgetown-core/utils/loaders_manager.rb +7 -0
- data/lib/bridgetown-core/utils.rb +52 -5
- data/lib/bridgetown-core/version.rb +2 -2
- data/lib/bridgetown-core/watcher.rb +15 -8
- data/lib/bridgetown-core.rb +12 -0
- data/lib/roda/plugins/bridgetown_server.rb +140 -0
- data/lib/site_template/Gemfile.erb +6 -3
- data/lib/site_template/frontend/javascript/index.js.erb +10 -1
- data/lib/site_template/package.json.erb +6 -6
- data/lib/site_template/server/roda_app.rb +4 -2
- data/lib/site_template/src/_posts/0000-00-00-welcome-to-bridgetown.md.erb +1 -1
- metadata +16 -27
- data/lib/bridgetown-core/commands/serve/servlet.rb +0 -68
- data/lib/bridgetown-core/commands/serve.rb +0 -253
- data/lib/bridgetown-core/rack/roda.rb +0 -157
- data/lib/roda/plugins/bridgetown_boot.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58cbef52cc9ace0226b8a2ba380589287678d686684bf4d81e5889a6d3ed25bc
|
4
|
+
data.tar.gz: 14a1a0f631574b0df1e9844660eeff2a6e5e50ad53b998991a3b9a636654a05f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 520791c7e08bdc24e4af37ac399bc0a2d73d939b8ea229188b162f90063b05e394e254dabfa7d529db2d41018bc2bf0fee62b5591a14961a2f88fd40d47a1ddc
|
7
|
+
data.tar.gz: d623c999cb2ceadcacbed1b1dfbdfd365dd3b705e5583037cb23398d0519301d0052e20b9005b3ab0ce75d0b8c6143abc46f352fbeec7313eef1c8864da6ec57
|
data/bridgetown-core.gemspec
CHANGED
@@ -31,26 +31,25 @@ Gem::Specification.new do |s|
|
|
31
31
|
|
32
32
|
s.required_ruby_version = ">= 2.7.0"
|
33
33
|
|
34
|
-
s.add_runtime_dependency("activemodel",
|
35
|
-
s.add_runtime_dependency("activesupport",
|
36
|
-
s.add_runtime_dependency("addressable",
|
37
|
-
s.add_runtime_dependency("amazing_print",
|
38
|
-
s.add_runtime_dependency("colorator",
|
39
|
-
s.add_runtime_dependency("erubi",
|
40
|
-
s.add_runtime_dependency("faraday",
|
41
|
-
s.add_runtime_dependency("
|
42
|
-
s.add_runtime_dependency("hash_with_dot_access",
|
43
|
-
s.add_runtime_dependency("i18n",
|
44
|
-
s.add_runtime_dependency("kramdown",
|
45
|
-
s.add_runtime_dependency("kramdown-parser-gfm",
|
46
|
-
s.add_runtime_dependency("liquid",
|
47
|
-
s.add_runtime_dependency("listen",
|
48
|
-
s.add_runtime_dependency("rake",
|
49
|
-
s.add_runtime_dependency("roda",
|
50
|
-
s.add_runtime_dependency("rouge",
|
51
|
-
s.add_runtime_dependency("serbea",
|
52
|
-
s.add_runtime_dependency("thor",
|
53
|
-
s.add_runtime_dependency("tilt",
|
54
|
-
s.add_runtime_dependency("
|
55
|
-
s.add_runtime_dependency("zeitwerk", "~> 2.5")
|
34
|
+
s.add_runtime_dependency("activemodel", [">= 6.0", "< 8.0"])
|
35
|
+
s.add_runtime_dependency("activesupport", [">= 6.0", "< 8.0"])
|
36
|
+
s.add_runtime_dependency("addressable", "~> 2.4")
|
37
|
+
s.add_runtime_dependency("amazing_print", "~> 1.2")
|
38
|
+
s.add_runtime_dependency("colorator", "~> 1.0")
|
39
|
+
s.add_runtime_dependency("erubi", "~> 1.9")
|
40
|
+
s.add_runtime_dependency("faraday", "~> 2.0")
|
41
|
+
s.add_runtime_dependency("faraday-follow_redirects", "~> 0.3")
|
42
|
+
s.add_runtime_dependency("hash_with_dot_access", "~> 1.2")
|
43
|
+
s.add_runtime_dependency("i18n", "~> 1.0")
|
44
|
+
s.add_runtime_dependency("kramdown", "~> 2.1")
|
45
|
+
s.add_runtime_dependency("kramdown-parser-gfm", "~> 1.0")
|
46
|
+
s.add_runtime_dependency("liquid", "~> 5.0")
|
47
|
+
s.add_runtime_dependency("listen", "~> 3.0")
|
48
|
+
s.add_runtime_dependency("rake", ">= 13.0")
|
49
|
+
s.add_runtime_dependency("roda", "~> 3.46")
|
50
|
+
s.add_runtime_dependency("rouge", "~> 3.0")
|
51
|
+
s.add_runtime_dependency("serbea", "~> 1.0")
|
52
|
+
s.add_runtime_dependency("thor", "~> 1.1")
|
53
|
+
s.add_runtime_dependency("tilt", "~> 2.0")
|
54
|
+
s.add_runtime_dependency("zeitwerk", "~> 2.5")
|
56
55
|
end
|
@@ -282,7 +282,7 @@ module Bridgetown
|
|
282
282
|
if model_is_multi_locale?(model, model_relative_path)
|
283
283
|
# If the model specifies a locales key, use that to determine the
|
284
284
|
# the locale of each resource, otherwise fall back to `site.config.available_locales`
|
285
|
-
locales = model.locales || site.config.available_locales
|
285
|
+
locales = model.attributes[:locales] || site.config.available_locales
|
286
286
|
|
287
287
|
locales.each do |locale|
|
288
288
|
model.locale = locale.to_sym
|
@@ -48,6 +48,9 @@ module Bridgetown
|
|
48
48
|
|
49
49
|
if !Bridgetown.env.production? &&
|
50
50
|
!config_options[:skip_frontend] && config_options["using_puma"]
|
51
|
+
if Bridgetown::Utils.frontend_bundler_type(config_options[:root_dir]) == :esbuild
|
52
|
+
Bridgetown::Utils.update_esbuild_autogenerated_config config_options
|
53
|
+
end
|
51
54
|
require "rake"
|
52
55
|
Rake.with_application do |rake|
|
53
56
|
rake.load_rakefile
|
@@ -16,7 +16,6 @@ module Bridgetown
|
|
16
16
|
I18n.reload! # make sure any locale files get read again
|
17
17
|
Bridgetown::Hooks.trigger :site, :pre_reload, site
|
18
18
|
Bridgetown::Hooks.clear_reloadable_hooks
|
19
|
-
site.plugin_manager.reload_plugin_files
|
20
19
|
site.loaders_manager.reload_loaders
|
21
20
|
Bridgetown::Hooks.trigger :site, :post_reload, site
|
22
21
|
|
@@ -24,13 +24,23 @@ const outputFolder = "output"
|
|
24
24
|
// You can also support custom base_path deployments via changing `publicPath`.
|
25
25
|
//
|
26
26
|
// ```
|
27
|
-
// const esbuildOptions = {
|
27
|
+
// const esbuildOptions = {
|
28
|
+
// publicPath: "/my_subfolder/_bridgetown/static",
|
29
|
+
// ...
|
30
|
+
// }
|
28
31
|
// ```
|
29
32
|
|
30
33
|
/**
|
31
34
|
* @typedef { import("esbuild").BuildOptions } BuildOptions
|
32
35
|
* @type {BuildOptions}
|
33
36
|
*/
|
34
|
-
const esbuildOptions = {
|
37
|
+
const esbuildOptions = {
|
38
|
+
plugins: [
|
39
|
+
// add new plugins here...
|
40
|
+
],
|
41
|
+
globOptions: {
|
42
|
+
excludeFilter: /\.(dsd|lit)\.(css|js)$/
|
43
|
+
}
|
44
|
+
}
|
35
45
|
|
36
46
|
build(outputFolder, esbuildOptions)
|
@@ -8,6 +8,14 @@
|
|
8
8
|
//
|
9
9
|
// Shipped with Bridgetown v<%= Bridgetown::VERSION %>
|
10
10
|
|
11
|
+
// DO NOT MANUALLY EDIT THIS CONFIGURATION:
|
12
|
+
const autogeneratedBridgetownConfig = {
|
13
|
+
"source": "src",
|
14
|
+
"destination": "output",
|
15
|
+
"componentsDir": "_components",
|
16
|
+
"islandsDir": "_islands"
|
17
|
+
}
|
18
|
+
|
11
19
|
const path = require("path")
|
12
20
|
const fsLib = require("fs")
|
13
21
|
const fs = fsLib.promises
|
@@ -41,7 +49,7 @@ if (moduleAvailable("sass")) {
|
|
41
49
|
// Glob plugin derived from:
|
42
50
|
// https://github.com/thomaschaaf/esbuild-plugin-import-glob
|
43
51
|
// https://github.com/xiaohui-zhangxh/jsbundling-rails/commit/b15025dcc20f664b2b0eb238915991afdbc7cb58
|
44
|
-
const importGlobPlugin = () => ({
|
52
|
+
const importGlobPlugin = (options, bridgetownConfig) => ({
|
45
53
|
name: "import-glob",
|
46
54
|
setup: (build) => {
|
47
55
|
build.onResolve({ filter: /\*/ }, async (args) => {
|
@@ -49,7 +57,9 @@ const importGlobPlugin = () => ({
|
|
49
57
|
return; // Ignore unresolvable paths
|
50
58
|
}
|
51
59
|
|
52
|
-
const adjustedPath = args.path
|
60
|
+
const adjustedPath = args.path
|
61
|
+
.replace(/^\$components\/\*\*/, `../../${bridgetownConfig.source}/${bridgetownConfig.componentsDir}/**`)
|
62
|
+
.replace(/^bridgetownComponents\//, `../../${bridgetownConfig.source}/${bridgetownConfig.componentsDir}/`) // legacy
|
53
63
|
|
54
64
|
return {
|
55
65
|
path: adjustedPath,
|
@@ -64,7 +74,11 @@ const importGlobPlugin = () => ({
|
|
64
74
|
build.onLoad({ filter: /.*/, namespace: "import-glob" }, async (args) => {
|
65
75
|
const files = glob.sync(args.pluginData.path, {
|
66
76
|
cwd: args.pluginData.resolveDir,
|
67
|
-
})
|
77
|
+
})
|
78
|
+
.filter(module => options.excludeFilter ? !options.excludeFilter.test(module) : true)
|
79
|
+
.sort()
|
80
|
+
.map(module => module.replace(`../../${bridgetownConfig.source}/${bridgetownConfig.componentsDir}/`, "$components/"))
|
81
|
+
.map(module => module.match(/^[a-zA-Z0-9]/) ? `./${module}` : module)
|
68
82
|
|
69
83
|
const importerCode = `
|
70
84
|
${files
|
@@ -72,7 +86,7 @@ const importGlobPlugin = () => ({
|
|
72
86
|
.join(';')}
|
73
87
|
const modules = {${files
|
74
88
|
.map((module, index) => `
|
75
|
-
"${module.replace("
|
89
|
+
"${module.replace("$components/", "")}": module${index},`)
|
76
90
|
.join("")}
|
77
91
|
};
|
78
92
|
export default modules;
|
@@ -187,7 +201,7 @@ const sassPlugin = (options) => ({
|
|
187
201
|
})
|
188
202
|
|
189
203
|
// Set up defaults and generate frontend bundling manifest file
|
190
|
-
const bridgetownPreset = (
|
204
|
+
const bridgetownPreset = (bridgetownConfig) => ({
|
191
205
|
name: "bridgetownPreset",
|
192
206
|
async setup(build) {
|
193
207
|
// Ensure any imports anywhere starting with `/` are left verbatim
|
@@ -210,8 +224,10 @@ const bridgetownPreset = (outputFolder) => ({
|
|
210
224
|
const manifest = {}
|
211
225
|
const entrypoints = []
|
212
226
|
|
213
|
-
//
|
214
|
-
const stripPrefix = (str) => str
|
227
|
+
// Clean up entrypoint naming
|
228
|
+
const stripPrefix = (str) => str
|
229
|
+
.replace(/^frontend\//, "")
|
230
|
+
.replace(RegExp(String.raw`^${bridgetownConfig.source}\/${bridgetownConfig.islandsDir}\/`), "islands/")
|
215
231
|
|
216
232
|
// For calculating the file size of bundle output
|
217
233
|
const fileSize = (path) => {
|
@@ -220,11 +236,12 @@ const bridgetownPreset = (outputFolder) => ({
|
|
220
236
|
return (size / Math.pow(1024, i)).toFixed(2) * 1 + ['B', 'KB', 'MB', 'GB', 'TB'][i]
|
221
237
|
}
|
222
238
|
|
239
|
+
const pathShortener = new RegExp(String.raw`^${bridgetownConfig.destination}\/_bridgetown\/static\/`, "g")
|
240
|
+
|
223
241
|
// Let's loop through all the various outputs
|
224
242
|
for (const key in result.metafile.outputs) {
|
225
243
|
const value = result.metafile.outputs[key]
|
226
244
|
const inputs = Object.keys(value.inputs)
|
227
|
-
const pathShortener = new RegExp(`^${outputFolder}\\/_bridgetown\\/static\\/`, "g")
|
228
245
|
const outputPath = key.replace(pathShortener, "")
|
229
246
|
|
230
247
|
if (value.entryPoint) {
|
@@ -256,23 +273,43 @@ const bridgetownPreset = (outputFolder) => ({
|
|
256
273
|
}
|
257
274
|
})
|
258
275
|
|
276
|
+
const bridgetownConfigured = (bridgetownConfig, outputFolder) => {
|
277
|
+
bridgetownConfig = {...autogeneratedBridgetownConfig, ...bridgetownConfig}
|
278
|
+
if (outputFolder) bridgetownConfig.destination = outputFolder
|
279
|
+
|
280
|
+
return bridgetownConfig
|
281
|
+
}
|
282
|
+
|
259
283
|
// Load the PostCSS config from postcss.config.js or whatever else is a supported location/format
|
260
284
|
const postcssrc = require("postcss-load-config")
|
261
285
|
|
262
|
-
module.exports = async (
|
286
|
+
module.exports = async (esbuildOptions) => {
|
287
|
+
let outputFolder;
|
288
|
+
if (typeof esbuildOptions === "string") { // legacy syntax where first argument is output folder
|
289
|
+
esbuildOptions = arguments[1]
|
290
|
+
outputFolder = arguments[0]
|
291
|
+
}
|
292
|
+
const bridgetownConfig = bridgetownConfigured(esbuildOptions.bridgetownConfig, outputFolder)
|
293
|
+
|
263
294
|
esbuildOptions.plugins = esbuildOptions.plugins || []
|
264
295
|
// Add the PostCSS & glob plugins to the top of the plugin stack
|
265
296
|
const postCssConfig = await postcssrc()
|
266
297
|
esbuildOptions.plugins.unshift(importPostCssPlugin(postCssConfig, esbuildOptions.postCssPluginConfig || {}))
|
267
298
|
if (esbuildOptions.postCssPluginConfig) delete esbuildOptions.postCssPluginConfig
|
268
|
-
|
299
|
+
// Add the Glob plugin
|
300
|
+
esbuildOptions.plugins.unshift(importGlobPlugin(esbuildOptions.globOptions || {}, bridgetownConfig))
|
301
|
+
if (esbuildOptions.globOptions) delete esbuildOptions.globOptions
|
269
302
|
// Add the Sass plugin
|
270
303
|
esbuildOptions.plugins.push(sassPlugin(esbuildOptions.sassOptions || {}))
|
304
|
+
if (esbuildOptions.sassOptions) delete esbuildOptions.sassOptions
|
271
305
|
// Add the Bridgetown preset
|
272
|
-
esbuildOptions.plugins.push(bridgetownPreset(
|
306
|
+
esbuildOptions.plugins.push(bridgetownPreset(bridgetownConfig))
|
307
|
+
if (esbuildOptions.bridgetownConfig) delete esbuildOptions.bridgetownConfig
|
273
308
|
|
274
|
-
|
275
|
-
|
309
|
+
const esbuild = require("esbuild")
|
310
|
+
const islands = glob.sync(`./${bridgetownConfig.source}/${bridgetownConfig.islandsDir}/*.{js,js.rb}`).map(item => `./${item}`)
|
311
|
+
|
312
|
+
esbuild.context({
|
276
313
|
bundle: true,
|
277
314
|
loader: {
|
278
315
|
".jpg": "file",
|
@@ -285,16 +322,25 @@ module.exports = async (outputFolder, esbuildOptions) => {
|
|
285
322
|
".eot": "file",
|
286
323
|
},
|
287
324
|
resolveExtensions: [".tsx", ".ts", ".jsx", ".js", ".css", ".scss", ".sass", ".json", ".js.rb"],
|
288
|
-
nodePaths: ["frontend/javascript", "frontend/styles"],
|
289
|
-
watch: process.argv.includes("--watch"),
|
290
325
|
minify: process.argv.includes("--minify"),
|
291
326
|
sourcemap: true,
|
292
|
-
target: "
|
293
|
-
entryPoints: ["./frontend/javascript/index.js"],
|
327
|
+
target: "es2020",
|
328
|
+
entryPoints: ["./frontend/javascript/index.js", ...islands],
|
294
329
|
entryNames: "[dir]/[name].[hash]",
|
295
|
-
outdir: path.join(process.cwd(), `${
|
330
|
+
outdir: path.join(process.cwd(), `${bridgetownConfig.destination}/_bridgetown/static`),
|
296
331
|
publicPath: "/_bridgetown/static",
|
297
332
|
metafile: true,
|
298
333
|
...esbuildOptions,
|
334
|
+
}).then(context => {
|
335
|
+
if (process.argv.includes("--watch")) {
|
336
|
+
// Enable watch mode
|
337
|
+
context.watch()
|
338
|
+
} else {
|
339
|
+
// Build once and exit if not in watch mode
|
340
|
+
context.rebuild().then(result => {
|
341
|
+
context.dispose()
|
342
|
+
})
|
343
|
+
}
|
344
|
+
process.on('SIGINT', () => process.exit())
|
299
345
|
}).catch(() => process.exit(1))
|
300
346
|
}
|
@@ -1,4 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
template "esbuild.defaults.js.erb", "config/esbuild.defaults.js", force: true
|
4
|
+
copy_file "jsconfig.json"
|
4
5
|
say "🎉 esbuild configuration updated successfully!"
|
6
|
+
say "You may need to add `$styles/` to the front of your main CSS imports."
|
7
|
+
say "See https://www.bridgetownrb.com/docs/frontend-assets#esbuild-setup for details."
|
@@ -80,6 +80,8 @@ module Bridgetown
|
|
80
80
|
after_install new_site_path, args.join(" "), options
|
81
81
|
rescue ArgumentError => e
|
82
82
|
say_status :alert, e.message, :red
|
83
|
+
ensure
|
84
|
+
self.class.created_site_dir = nil # reset afterwards, otherwise hanging tmp dirs in test
|
83
85
|
end
|
84
86
|
|
85
87
|
protected
|
@@ -49,7 +49,7 @@ module Bridgetown
|
|
49
49
|
priority: Bridgetown::Hooks::DEFAULT_PRIORITY,
|
50
50
|
&block
|
51
51
|
)
|
52
|
-
Bridgetown::Hooks.register_one(owner, event, priority: priority, &block)
|
52
|
+
Bridgetown::Hooks.register_one(owner, event, priority: priority, reloadable: false, &block)
|
53
53
|
end
|
54
54
|
|
55
55
|
def source_manifest(**kwargs)
|
@@ -33,8 +33,8 @@ module Bridgetown
|
|
33
33
|
"collections_dir" => "",
|
34
34
|
"cache_dir" => ".bridgetown-cache",
|
35
35
|
"layouts_dir" => "_layouts",
|
36
|
-
"data_dir" => "_data",
|
37
36
|
"components_dir" => "_components",
|
37
|
+
"islands_dir" => "_islands",
|
38
38
|
"partials_dir" => "_partials",
|
39
39
|
"collections" => {},
|
40
40
|
"taxonomies" => {
|
@@ -44,7 +44,6 @@ module Bridgetown
|
|
44
44
|
"eager_load_paths" => [],
|
45
45
|
"autoloader_collapsed_paths" => [],
|
46
46
|
"additional_watch_paths" => [],
|
47
|
-
"plugins_use_zeitwerk" => true,
|
48
47
|
|
49
48
|
# Handling Reading
|
50
49
|
"include" => [".htaccess", "_redirects", ".well-known"],
|
@@ -335,30 +334,32 @@ module Bridgetown
|
|
335
334
|
self[:source] = File.expand_path(self[:source], self[:root_dir])
|
336
335
|
self[:destination] = File.expand_path(self[:destination], self[:root_dir])
|
337
336
|
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
337
|
+
autoload_paths.unshift({
|
338
|
+
path: self[:plugins_dir],
|
339
|
+
eager: true,
|
340
|
+
})
|
341
|
+
autoload_paths.unshift({
|
342
|
+
path: File.expand_path(self[:islands_dir], self[:source]),
|
343
|
+
eager: true,
|
344
|
+
})
|
344
345
|
end
|
345
346
|
|
346
347
|
autoload_paths.map! do |load_path|
|
347
348
|
if load_path.is_a?(Hash)
|
348
|
-
expanded = File.expand_path(load_path[:path], root_dir)
|
349
|
+
expanded = File.expand_path(load_path[:path], self[:root_dir])
|
349
350
|
self[:eager_load_paths] << expanded if load_path[:eager]
|
350
351
|
next expanded
|
351
352
|
end
|
352
353
|
|
353
|
-
File.expand_path(load_path, root_dir)
|
354
|
+
File.expand_path(load_path, self[:root_dir])
|
354
355
|
end
|
355
356
|
|
356
357
|
autoloader_collapsed_paths.map! do |collapsed_path|
|
357
|
-
File.expand_path(collapsed_path, root_dir)
|
358
|
+
File.expand_path(collapsed_path, self[:root_dir])
|
358
359
|
end
|
359
360
|
|
360
361
|
additional_watch_paths.map! do |collapsed_path|
|
361
|
-
File.expand_path(collapsed_path, root_dir)
|
362
|
+
File.expand_path(collapsed_path, self[:root_dir])
|
362
363
|
end
|
363
364
|
|
364
365
|
self
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
say_status "is-land", "Installing <is-land>..."
|
4
|
+
|
5
|
+
run "yarn add @11ty/is-land"
|
6
|
+
|
7
|
+
javascript_import do
|
8
|
+
<<~JS
|
9
|
+
import "@11ty/is-land/is-land.js"
|
10
|
+
import "@11ty/is-land/is-land-autoinit.js"
|
11
|
+
JS
|
12
|
+
end
|
13
|
+
|
14
|
+
say_status "is-land", "<is-land> is now configured!"
|
15
|
+
say 'For further reading, check out "https://www.bridgetownrb.com/docs/islands"', :blue
|
@@ -1 +1 @@
|
|
1
|
-
import components from "
|
1
|
+
import components from "$components/**/*.{lit.js,lit.js.rb}"
|
@@ -11,9 +11,9 @@ end
|
|
11
11
|
|
12
12
|
say_status :lit, "Installing Lit + SSR Plugin..."
|
13
13
|
|
14
|
-
add_gem "bridgetown-lit-renderer"
|
14
|
+
add_gem "bridgetown-lit-renderer", version: "2.1.0.beta1"
|
15
15
|
|
16
|
-
run "yarn add lit esbuild-plugin-lit-css bridgetown-lit-renderer"
|
16
|
+
run "yarn add lit esbuild-plugin-lit-css bridgetown-lit-renderer@2.1.0-beta1"
|
17
17
|
|
18
18
|
copy_file in_templates_dir("lit-ssr.config.js"), "config/lit-ssr.config.js"
|
19
19
|
copy_file in_templates_dir("lit-components-entry.js"), "config/lit-components-entry.js"
|
@@ -27,45 +27,13 @@ insert_into_file "esbuild.config.js",
|
|
27
27
|
JS
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
<<~JS
|
35
|
-
const esbuildOptions = {
|
36
|
-
plugins: [...plugins],
|
37
|
-
// Uncomment the following to opt into `.global.css` & `.lit.css` nomenclature.
|
38
|
-
// Read https://www.bridgetownrb.com/docs/components/lit#sidecar-css-files for documentation.
|
39
|
-
/*
|
40
|
-
postCssPluginConfig: {
|
41
|
-
filter: /(?:index|\\.global)\\.css$/,
|
42
|
-
},
|
43
|
-
*/
|
44
|
-
}
|
30
|
+
insert_into_file "esbuild.config.js",
|
31
|
+
after: " plugins: [" do
|
32
|
+
<<-JS
|
33
|
+
plugins: [...plugins],
|
45
34
|
JS
|
46
35
|
end
|
47
36
|
|
48
|
-
unless found_match
|
49
|
-
insert_into_file "esbuild.config.js",
|
50
|
-
after: 'const { plugins } = require("./config/esbuild-plugins.js")' do
|
51
|
-
<<~JS
|
52
|
-
|
53
|
-
// TODO: You will manually need to move any plugins below you wish to share with
|
54
|
-
// Lit SSR into the `config/esbuild-plugins.js` file.
|
55
|
-
// Then add `...plugins` as an item in your plugins array.
|
56
|
-
//
|
57
|
-
// You might also want to include the following in your esbuild config to opt into
|
58
|
-
// `.global.css` & `.lit.css` nomenclature.
|
59
|
-
// Read https://www.bridgetownrb.com/docs/components/lit#sidecar-css-files for documentation.
|
60
|
-
/*
|
61
|
-
postCssPluginConfig: {
|
62
|
-
filter: /(?:index|\\.global)\\.css$/,
|
63
|
-
},
|
64
|
-
*/
|
65
|
-
JS
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
37
|
copy_file in_templates_dir("happy-days.lit.js"), "src/_components/happy-days.lit.js"
|
70
38
|
|
71
39
|
javascript_import do
|
@@ -74,24 +42,11 @@ javascript_import do
|
|
74
42
|
JS
|
75
43
|
end
|
76
44
|
|
77
|
-
insert_into_file "frontend/javascript/index.js",
|
78
|
-
before: 'import components from "bridgetownComponents/**/*.{js,jsx,js.rb,css}"' do
|
79
|
-
<<~JS
|
80
|
-
// To opt into `.global.css` & `.lit.css` nomenclature, change the `css` extension below to `global.css`.
|
81
|
-
// Read https://www.bridgetownrb.com/docs/components/lit#sidecar-css-files for documentation.
|
82
|
-
JS
|
83
|
-
end
|
84
|
-
|
85
45
|
add_initializer :"bridgetown-lit-renderer"
|
86
46
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
"The `config/esbuild-plugins.js` file will let you add full-stack plugins in future."
|
91
|
-
else
|
92
|
-
say_status :lit, "Lit is just about configured!"
|
93
|
-
say_status :lit, "You will need to edit `esbuild.config.js` to finish setting up the plugin."
|
94
|
-
end
|
47
|
+
say_status :lit, "Lit is now configured!"
|
48
|
+
say_status :lit,
|
49
|
+
"The `config/esbuild-plugins.js` file will let you add full-stack plugins in future."
|
95
50
|
|
96
51
|
say "Check out the example `happy-days.lit.js` file in `src/_components`", :blue
|
97
52
|
say 'For further reading, check out "https://www.bridgetownrb.com/docs/components/lit"', :blue
|
@@ -31,7 +31,7 @@ create_builder "purgecss.rb" do
|
|
31
31
|
manifest = JSON.parse(File.read(manifest_file))
|
32
32
|
|
33
33
|
if Bridgetown::Utils.frontend_bundler_type == :esbuild
|
34
|
-
css_file = manifest["styles/index.css"].split("/").last
|
34
|
+
css_file = (manifest["styles/index.css"] || manifest["styles/index.scss"]).split("/").last
|
35
35
|
css_path = ["output", "_bridgetown", "static", css_file].join("/")
|
36
36
|
else
|
37
37
|
css_file = manifest["main.css"].split("/").last
|
@@ -11,57 +11,29 @@ end
|
|
11
11
|
|
12
12
|
say_status :ruby2js, "Installing Ruby2JS..."
|
13
13
|
|
14
|
+
add_gem "ruby2js"
|
14
15
|
run "yarn add -D @ruby2js/esbuild-plugin"
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
found_match = true
|
19
|
-
|
17
|
+
insert_into_file "esbuild.config.js",
|
18
|
+
after: 'const build = require("./config/esbuild.defaults.js")' do
|
20
19
|
<<~JS
|
21
|
-
const ruby2js = require("@ruby2js/esbuild-plugin")
|
22
20
|
|
23
|
-
const
|
24
|
-
plugins: [
|
25
|
-
// See docs on Ruby2JS options here: https://www.ruby2js.com/docs/options
|
26
|
-
ruby2js({
|
27
|
-
eslevel: 2022,
|
28
|
-
autoexports: "default",
|
29
|
-
filters: ["camelCase", "functions", "lit", "esm", "return"]
|
30
|
-
})
|
31
|
-
]
|
32
|
-
}
|
21
|
+
const ruby2js = require("@ruby2js/esbuild-plugin")
|
33
22
|
JS
|
34
23
|
end
|
35
24
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
const ruby2js = require("@ruby2js/esbuild-plugin")
|
42
|
-
|
43
|
-
// TODO: Uncomment and move the following into your plugins array:
|
44
|
-
//
|
45
|
-
// ruby2js({
|
46
|
-
// eslevel: 2022,
|
47
|
-
// autoexports: "default",
|
48
|
-
// filters: ["camelCase", "functions", "lit", "esm", "return"]
|
49
|
-
// })
|
50
|
-
//
|
51
|
-
// See docs on Ruby2JS options here: https://www.ruby2js.com/docs/options
|
52
|
-
|
53
|
-
JS
|
54
|
-
end
|
25
|
+
insert_into_file "esbuild.config.js",
|
26
|
+
after: " plugins: [" do
|
27
|
+
<<-JS
|
28
|
+
ruby2js(),
|
29
|
+
JS
|
55
30
|
end
|
56
31
|
|
32
|
+
copy_file in_templates_dir("ruby2js.rb"), "config/ruby2js.rb"
|
57
33
|
copy_file in_templates_dir("hello_world.js.rb"), "src/_components/hello_world.js.rb"
|
58
34
|
|
59
|
-
|
60
|
-
say_status :ruby2js, "Ruby2JS is now configured!"
|
61
|
-
else
|
62
|
-
say_status :ruby2js, "Ruby2JS is just about configured!"
|
63
|
-
say_status :ruby2js, "You will need to edit `esbuild.config.js` to finish setting up the plugin."
|
64
|
-
end
|
35
|
+
say_status :ruby2js, "Ruby2JS is now configured!"
|
65
36
|
|
66
37
|
say "Check out the example `hello_world.js.rb` file in `src/_components`", :blue
|
38
|
+
say "Ruby2JS configuration options are saved in `config/ruby2js.rb`", :blue
|
67
39
|
say 'For further reading, check out "https://www.ruby2js.com"', :blue
|
@@ -3,6 +3,7 @@
|
|
3
3
|
say_status :turbo, "Installing Turbo..."
|
4
4
|
|
5
5
|
run("yarn add @hotwired/turbo")
|
6
|
+
run("yarn add turbo-shadow")
|
6
7
|
|
7
8
|
say_status :turbo, 'Adding Turbo to "frontend/javascript/index.js"...', :magenta
|
8
9
|
|
@@ -10,11 +11,17 @@ javascript_import do
|
|
10
11
|
<<~JS
|
11
12
|
import * as Turbo from "@hotwired/turbo"
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
/**
|
15
|
+
* Adds support for declarative shadow DOM. Requires your HTML <head> to include:
|
16
|
+
* `<meta name="turbo-cache-control" content="no-cache" />`
|
17
|
+
*/
|
18
|
+
import * as TurboShadow from "turbo-shadow"
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Uncomment the line below to add transition animations when Turbo navigates.
|
22
|
+
* Use data-turbo-transition="false" on your <main> element for pages where
|
23
|
+
* you don't want any transition animation.
|
24
|
+
*/
|
18
25
|
// import "./turbo_transitions.js"
|
19
26
|
JS
|
20
27
|
end
|
@@ -22,5 +29,8 @@ end
|
|
22
29
|
copy_file in_templates_dir("turbo_transitions.js"), "frontend/javascript/turbo_transitions.js"
|
23
30
|
|
24
31
|
say_status :turbo, "Turbo successfully added!", :magenta
|
25
|
-
say_status :turbo, "
|
26
|
-
say_status :turbo,
|
32
|
+
say_status :turbo, "For declarative shadow DOM support, you will need to update", :blue
|
33
|
+
say_status :turbo, "your HTML <head> to add the following code:", :blue
|
34
|
+
say %(<meta name="turbo-cache-control" content="no-cache" />)
|
35
|
+
say_status :turbo, "Check out your index.js file for optional animation setup.", :blue
|
36
|
+
say_status :turbo, 'For further reading, visit "https://turbo.hotwired.dev/"', :blue
|