bridgetown-core 1.3.0.beta1 → 1.3.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- 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 +13 -6
- 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/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/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/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/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 +3 -0
- data/lib/bridgetown-core/utils.rb +34 -5
- data/lib/bridgetown-core/version.rb +1 -1
- data/lib/bridgetown-core/watcher.rb +14 -7
- data/lib/site_template/frontend/javascript/index.js.erb +10 -1
- data/lib/site_template/package.json.erb +6 -6
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec81158ce54460fb44c4296bae6c3eb75c95c627492c6fe5891cbd853089a13c
|
4
|
+
data.tar.gz: e22e4e4cfd9b4c27a5eefefd1670e43c99badb7eb9c8be96105b47e024324543
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6130dec47320b9b66406afbb6e98e5851ceba1664292c37be8d02a800c9e95a6c9678ccbc5c822dc2f64497e0b9b0826c0956dd72ab81c2526b9fb499b3d13a5
|
7
|
+
data.tar.gz: ac1d0032d102186ae07d41997bd29541bf96eb3e7aee7aa6ca25df8da5b3cebef18ebb7cb3d51c1ef58270df68c65d126271b55bb822f8fdd046927ccfee68b5
|
@@ -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
|
|
@@ -1,8 +1,5 @@
|
|
1
1
|
const build = require("./config/esbuild.defaults.js")
|
2
2
|
|
3
|
-
// Update this if you need to configure a destination folder other than `output`
|
4
|
-
const outputFolder = "output"
|
5
|
-
|
6
3
|
// You can customize this as you wish, perhaps to add new esbuild plugins.
|
7
4
|
//
|
8
5
|
// ```
|
@@ -24,13 +21,23 @@ const outputFolder = "output"
|
|
24
21
|
// You can also support custom base_path deployments via changing `publicPath`.
|
25
22
|
//
|
26
23
|
// ```
|
27
|
-
// const esbuildOptions = {
|
24
|
+
// const esbuildOptions = {
|
25
|
+
// publicPath: "/my_subfolder/_bridgetown/static",
|
26
|
+
// ...
|
27
|
+
// }
|
28
28
|
// ```
|
29
29
|
|
30
30
|
/**
|
31
31
|
* @typedef { import("esbuild").BuildOptions } BuildOptions
|
32
32
|
* @type {BuildOptions}
|
33
33
|
*/
|
34
|
-
const esbuildOptions = {
|
34
|
+
const esbuildOptions = {
|
35
|
+
plugins: [
|
36
|
+
// add new plugins here...
|
37
|
+
],
|
38
|
+
globOptions: {
|
39
|
+
excludeFilter: /\.(dsd|lit)\.css$/
|
40
|
+
}
|
41
|
+
}
|
35
42
|
|
36
|
-
build(
|
43
|
+
build(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, ...args) => {
|
287
|
+
let outputFolder;
|
288
|
+
if (typeof esbuildOptions === "string") { // legacy syntax where first argument is output folder
|
289
|
+
outputFolder = esbuildOptions
|
290
|
+
esbuildOptions = args[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."
|
@@ -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.beta2"
|
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-beta2"
|
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,
|
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
|
@@ -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
|
@@ -135,6 +135,14 @@ module Bridgetown
|
|
135
135
|
I18n.send :t, *args, **kwargs
|
136
136
|
end
|
137
137
|
|
138
|
+
# Forward all arguments to I18n.l method
|
139
|
+
#
|
140
|
+
# @return [String] the localized string
|
141
|
+
# @see I18n
|
142
|
+
def l(*args, **kwargs)
|
143
|
+
I18n.send :l, *args, **kwargs
|
144
|
+
end
|
145
|
+
|
138
146
|
# For template contexts where ActiveSupport's output safety is loaded, we
|
139
147
|
# can ensure a string has been marked safe
|
140
148
|
#
|
@@ -221,6 +229,32 @@ module Bridgetown
|
|
221
229
|
end
|
222
230
|
end
|
223
231
|
|
232
|
+
def dsd(input = nil, &block)
|
233
|
+
tmpl_content = block.nil? ? input.to_s : view.capture(&block)
|
234
|
+
|
235
|
+
Bridgetown::Utils.dsd_tag(tmpl_content)
|
236
|
+
end
|
237
|
+
|
238
|
+
def dsd_style
|
239
|
+
tmpl_path = caller_locations(1, 2).find do |loc|
|
240
|
+
loc.label.include?("method_missing").!
|
241
|
+
end&.path
|
242
|
+
|
243
|
+
return unless tmpl_path # virtually guaranteed not to happen
|
244
|
+
|
245
|
+
tmpl_basename = File.basename(tmpl_path, ".*")
|
246
|
+
style_path = File.join(File.dirname(tmpl_path), "#{tmpl_basename}.dsd.css")
|
247
|
+
|
248
|
+
unless File.file?(style_path)
|
249
|
+
raise Bridgetown::Errors::FatalException, "Missing stylesheet at #{style_path}"
|
250
|
+
end
|
251
|
+
|
252
|
+
style_tag = site.tmp_cache["dsd_style:#{style_path}"] ||=
|
253
|
+
"<style>#{File.read(style_path)}</style>"
|
254
|
+
|
255
|
+
style_tag.html_safe
|
256
|
+
end
|
257
|
+
|
224
258
|
private
|
225
259
|
|
226
260
|
# Covert an underscored value into a dashed string.
|
@@ -206,30 +206,6 @@ module Bridgetown
|
|
206
206
|
sorted_plugin_files.each do |plugin_file|
|
207
207
|
self.class.add_registered_plugin plugin_file
|
208
208
|
end
|
209
|
-
next if site.config[:plugins_use_zeitwerk]
|
210
|
-
|
211
|
-
Deprecator.deprecation_message(
|
212
|
-
"The `plugins_use_zeitwerk' configuration option will be removed in the next version " \
|
213
|
-
"of Bridgetown (aka will be permanently set to \"true\")"
|
214
|
-
)
|
215
|
-
Bridgetown::Utils::RequireGems.require_with_graceful_fail(sorted_plugin_files)
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
# Reloads .rb plugin files via the watcher
|
220
|
-
# DEPRECATED (not necessary with Zeitwerk)
|
221
|
-
#
|
222
|
-
# @return [void]
|
223
|
-
def reload_plugin_files
|
224
|
-
return if site.config[:plugins_use_zeitwerk]
|
225
|
-
|
226
|
-
plugins_path.each do |plugin_search_path|
|
227
|
-
plugin_files = Utils.safe_glob(plugin_search_path, File.join("**", "*.rb"))
|
228
|
-
Array(plugin_files).each do |name|
|
229
|
-
Bridgetown.logger.debug "Reloading:", name.to_s
|
230
|
-
self.class.add_registered_plugin name
|
231
|
-
load name
|
232
|
-
end
|
233
209
|
end
|
234
210
|
end
|
235
211
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
module Tags
|
5
|
+
class DSDTag < Liquid::Block
|
6
|
+
def render(_context)
|
7
|
+
template_content = super
|
8
|
+
|
9
|
+
Bridgetown::Utils.dsd_tag(template_content)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Liquid::Template.register_tag("dsd", Bridgetown::Tags::DSDTag)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bridgetown
|
4
|
+
module Tags
|
5
|
+
class LocalizationTag < Liquid::Tag
|
6
|
+
def render(_context)
|
7
|
+
key = @markup.strip
|
8
|
+
I18n.l(key)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
Liquid::Template.register_tag("l", Bridgetown::Tags::LocalizationTag)
|
@@ -29,6 +29,8 @@ module Bridgetown
|
|
29
29
|
loop do
|
30
30
|
line = rd.gets
|
31
31
|
line.to_s.lines.map(&:chomp).each do |message|
|
32
|
+
next if name == "Frontend" && %r{ELIFECYCLE.*?Command failed}.match?(message)
|
33
|
+
|
32
34
|
output = +""
|
33
35
|
output << with_color(color, "[#{name}] ") if color
|
34
36
|
output << message
|
@@ -62,6 +62,9 @@ module Bridgetown
|
|
62
62
|
end
|
63
63
|
loader.enable_reloading if reloading_enabled?(load_path)
|
64
64
|
loader.ignore(File.join(load_path, "**", "*.js.rb"))
|
65
|
+
loader.ignore(
|
66
|
+
File.join(File.expand_path(config[:islands_dir], config[:source]), "routes")
|
67
|
+
)
|
65
68
|
config.autoloader_collapsed_paths.each do |collapsed_path|
|
66
69
|
next unless collapsed_path.starts_with?(load_path)
|
67
70
|
|
@@ -412,7 +412,7 @@ module Bridgetown
|
|
412
412
|
end&.last
|
413
413
|
end
|
414
414
|
|
415
|
-
return log_frontend_asset_error(site, asset_type) if asset_path.nil?
|
415
|
+
return log_frontend_asset_error(site, "`#{asset_type}' asset") if asset_path.nil?
|
416
416
|
|
417
417
|
static_frontend_path site, [asset_path]
|
418
418
|
end
|
@@ -429,14 +429,16 @@ module Bridgetown
|
|
429
429
|
|
430
430
|
def log_frontend_asset_error(site, asset_type)
|
431
431
|
site.data[:__frontend_asset_errors] ||= {}
|
432
|
-
site.data[:__frontend_asset_errors][asset_type] ||=
|
432
|
+
site.data[:__frontend_asset_errors][asset_type] ||= begin
|
433
|
+
Bridgetown.logger.warn("#{frontend_bundler_type}:", "The #{asset_type} could not be found.")
|
433
434
|
Bridgetown.logger.warn(
|
434
435
|
"#{frontend_bundler_type}:",
|
435
|
-
"
|
436
|
-
Please check your #{asset_type} file for any errors."
|
436
|
+
"Double-check your frontend config or re-run `bin/bridgetown frontend:build'"
|
437
437
|
)
|
438
|
+
true
|
439
|
+
end
|
438
440
|
|
439
|
-
"MISSING_#{frontend_bundler_type.upcase}
|
441
|
+
"MISSING_#{frontend_bundler_type.upcase}_ASSET"
|
440
442
|
end
|
441
443
|
|
442
444
|
def frontend_bundler_type(cwd = Dir.pwd)
|
@@ -449,6 +451,27 @@ module Bridgetown
|
|
449
451
|
end
|
450
452
|
end
|
451
453
|
|
454
|
+
def update_esbuild_autogenerated_config(config)
|
455
|
+
defaults_file = File.join(config[:root_dir], "config", "esbuild.defaults.js")
|
456
|
+
return unless File.exist?(defaults_file)
|
457
|
+
|
458
|
+
config_hash = {
|
459
|
+
source: Pathname.new(config[:source]).relative_path_from(config[:root_dir]),
|
460
|
+
destination: Pathname.new(config[:destination]).relative_path_from(config[:root_dir]),
|
461
|
+
componentsDir: config[:components_dir],
|
462
|
+
islandsDir: config[:islands_dir],
|
463
|
+
}
|
464
|
+
|
465
|
+
defaults_file_contents = File.read(defaults_file)
|
466
|
+
File.write(
|
467
|
+
defaults_file,
|
468
|
+
defaults_file_contents.sub(
|
469
|
+
%r{(const autogeneratedBridgetownConfig = ){\n.*?}}m,
|
470
|
+
"\\1#{JSON.pretty_generate config_hash}"
|
471
|
+
)
|
472
|
+
)
|
473
|
+
end
|
474
|
+
|
452
475
|
def default_github_branch_name(repo_url)
|
453
476
|
repo_match = Bridgetown::Commands::Actions::GITHUB_REPO_REGEX.match(repo_url)
|
454
477
|
api_endpoint = "https://api.github.com/repos/#{repo_match[1]}"
|
@@ -523,6 +546,12 @@ module Bridgetown
|
|
523
546
|
end
|
524
547
|
end
|
525
548
|
|
549
|
+
def dsd_tag(input, shadow_root_mode: :open)
|
550
|
+
raise ArgumentError unless [:open, :closed].include? shadow_root_mode
|
551
|
+
|
552
|
+
%(<template shadowrootmode="#{shadow_root_mode}">#{input}</template>).html_safe
|
553
|
+
end
|
554
|
+
|
526
555
|
private
|
527
556
|
|
528
557
|
def merge_values(target, overwrite)
|
@@ -55,7 +55,7 @@ module Bridgetown
|
|
55
55
|
# Start a listener to watch for changes and call {#reload_site}
|
56
56
|
#
|
57
57
|
# @param (see #watch)
|
58
|
-
def listen(site, options)
|
58
|
+
def listen(site, options) # rubocop:disable Metrics/MethodLength
|
59
59
|
bundling_path = site.frontend_bundling_path
|
60
60
|
FileUtils.mkdir_p(bundling_path)
|
61
61
|
Listen.to(
|
@@ -66,12 +66,17 @@ module Bridgetown
|
|
66
66
|
force_polling: options["force_polling"]
|
67
67
|
) do |modified, added, removed|
|
68
68
|
c = modified + added + removed
|
69
|
+
|
70
|
+
# NOTE: inexplicably, this matcher doesn't work with the Listen gem, so
|
71
|
+
# we have to run it here manually
|
72
|
+
c.reject! { component_frontend_matcher(options).match? _1 }
|
69
73
|
n = c.length
|
74
|
+
next if n.zero?
|
70
75
|
|
71
76
|
unless site.ssr?
|
72
77
|
Bridgetown.logger.info(
|
73
78
|
"Reloading…",
|
74
|
-
"#{n} file#{"s" if
|
79
|
+
"#{n} file#{"s" if n > 1} changed at #{Time.now.strftime("%Y-%m-%d %H:%M:%S")}"
|
75
80
|
)
|
76
81
|
c.each { |path| Bridgetown.logger.info "", "- #{path["#{site.root_dir}/".length..]}" }
|
77
82
|
end
|
@@ -93,7 +98,6 @@ module Bridgetown
|
|
93
98
|
catch :halt do
|
94
99
|
Bridgetown::Hooks.trigger :site, :pre_reload, site, paths
|
95
100
|
Bridgetown::Hooks.clear_reloadable_hooks
|
96
|
-
site.plugin_manager.reload_plugin_files
|
97
101
|
site.loaders_manager.reload_loaders
|
98
102
|
Bridgetown::Hooks.trigger :site, :post_reload, site, paths
|
99
103
|
|
@@ -124,12 +128,15 @@ module Bridgetown
|
|
124
128
|
end
|
125
129
|
|
126
130
|
def custom_excludes(options)
|
127
|
-
Array(options["exclude"]).map { |e| Bridgetown.sanitized_path(options["
|
131
|
+
Array(options["exclude"]).map { |e| Bridgetown.sanitized_path(options["root_dir"], e) }
|
128
132
|
end
|
129
133
|
|
130
|
-
|
131
|
-
|
134
|
+
# rubocop:disable Layout/LineLength
|
135
|
+
def component_frontend_matcher(options)
|
136
|
+
@fematcher ||=
|
137
|
+
%r{(#{options[:components_dir]}|#{options[:islands_dir]})/(?:[^.]+|\.(?!dsd))+(\.js|\.jsx|\.js\.rb|\.css)$}
|
132
138
|
end
|
139
|
+
# rubocop:enable Layout/LineLength
|
133
140
|
|
134
141
|
def to_exclude(options)
|
135
142
|
[
|
@@ -162,7 +169,7 @@ module Bridgetown
|
|
162
169
|
rescue ArgumentError
|
163
170
|
# Could not find a relative path
|
164
171
|
end
|
165
|
-
end
|
172
|
+
end
|
166
173
|
end
|
167
174
|
|
168
175
|
def sleep_forever
|
@@ -1,13 +1,22 @@
|
|
1
|
+
<%- if frontend_bundling_option == "esbuild" -%>
|
2
|
+
<%- if postcss_option -%>
|
3
|
+
import "$styles/index.css"
|
4
|
+
<%- else -%>
|
5
|
+
import "$styles/index.scss"
|
6
|
+
<%- end -%>
|
7
|
+
import "$styles/syntax-highlighting.css"
|
8
|
+
<%- else -%>
|
1
9
|
<%- if postcss_option -%>
|
2
10
|
import "index.css"
|
3
11
|
<%- else -%>
|
4
12
|
import "index.scss"
|
5
13
|
<%- end -%>
|
6
14
|
import "syntax-highlighting.css"
|
15
|
+
<%- end -%>
|
7
16
|
|
8
17
|
// Import all JavaScript & CSS files from src/_components
|
9
18
|
<%- if frontend_bundling_option == "esbuild" -%>
|
10
|
-
import components from "
|
19
|
+
import components from "$components/**/*.{js,jsx,js.rb,css}"
|
11
20
|
<%- else -%>
|
12
21
|
const componentsContext = require.context("bridgetownComponents", true, /\.(js|css)$/)
|
13
22
|
componentsContext.keys().forEach(componentsContext)
|
@@ -15,29 +15,29 @@
|
|
15
15
|
<%- if frontend_bundling_option == "webpack" -%>
|
16
16
|
"css-loader": "^6.7.1",
|
17
17
|
<%- end -%>
|
18
|
-
"esbuild": "^0.
|
18
|
+
"esbuild": "^0.17.19",
|
19
19
|
<%- if frontend_bundling_option == "webpack" -%>
|
20
20
|
"esbuild-loader": "^2.18.0",
|
21
21
|
"mini-css-extract-plugin": "^2.6.0",
|
22
22
|
<%- else -%>
|
23
|
-
"glob": "^
|
23
|
+
"glob": "^10.2.6",
|
24
24
|
<%- end -%>
|
25
25
|
<%- unless disable_postcss? -%>
|
26
|
-
"postcss": "^8.4.
|
26
|
+
"postcss": "^8.4.23",
|
27
27
|
"postcss-flexbugs-fixes": "^5.0.2",
|
28
28
|
<%- if frontend_bundling_option == "esbuild" -%>
|
29
|
-
"postcss-import": "^
|
29
|
+
"postcss-import": "^15.1.0",
|
30
30
|
"postcss-load-config": "^4.0.1",
|
31
31
|
<%- else -%>
|
32
32
|
"postcss-loader": "^6.2.1",
|
33
33
|
<%- end -%>
|
34
|
-
"postcss-preset-env": "^
|
34
|
+
"postcss-preset-env": "^8.4.1",
|
35
35
|
<%- if frontend_bundling_option == "esbuild" -%>
|
36
36
|
"read-cache": "^1.0.0"<%= "," unless postcss_option %>
|
37
37
|
<%- end -%>
|
38
38
|
<%- end -%>
|
39
39
|
<%- unless postcss_option -%>
|
40
|
-
"sass": "^1.
|
40
|
+
"sass": "^1.62.1",
|
41
41
|
"sass-loader": "^12.6.0"<%= "," if frontend_bundling_option == "webpack" %>
|
42
42
|
<%- end -%>
|
43
43
|
<%- if frontend_bundling_option == "webpack" -%>
|
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: 1.3.0.
|
4
|
+
version: 1.3.0.beta3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bridgetown Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -348,6 +348,7 @@ files:
|
|
348
348
|
- lib/bridgetown-core/commands/esbuild.rb
|
349
349
|
- lib/bridgetown-core/commands/esbuild/esbuild.config.js
|
350
350
|
- lib/bridgetown-core/commands/esbuild/esbuild.defaults.js.erb
|
351
|
+
- lib/bridgetown-core/commands/esbuild/jsconfig.json
|
351
352
|
- lib/bridgetown-core/commands/esbuild/migrate-from-webpack.rb
|
352
353
|
- lib/bridgetown-core/commands/esbuild/setup.rb
|
353
354
|
- lib/bridgetown-core/commands/esbuild/update.rb
|
@@ -392,6 +393,7 @@ files:
|
|
392
393
|
- lib/bridgetown-core/configurations/cypress/cypress_tasks
|
393
394
|
- lib/bridgetown-core/configurations/gh-pages.rb
|
394
395
|
- lib/bridgetown-core/configurations/gh-pages/gh-pages.yml
|
396
|
+
- lib/bridgetown-core/configurations/is-land.rb
|
395
397
|
- lib/bridgetown-core/configurations/lit.rb
|
396
398
|
- lib/bridgetown-core/configurations/lit/esbuild-plugins.js
|
397
399
|
- lib/bridgetown-core/configurations/lit/happy-days.lit.js
|
@@ -408,6 +410,7 @@ files:
|
|
408
410
|
- lib/bridgetown-core/configurations/render/render.yaml.erb
|
409
411
|
- lib/bridgetown-core/configurations/ruby2js.rb
|
410
412
|
- lib/bridgetown-core/configurations/ruby2js/hello_world.js.rb
|
413
|
+
- lib/bridgetown-core/configurations/ruby2js/ruby2js.rb
|
411
414
|
- lib/bridgetown-core/configurations/shoelace.rb
|
412
415
|
- lib/bridgetown-core/configurations/stimulus.rb
|
413
416
|
- lib/bridgetown-core/configurations/tailwindcss.rb
|
@@ -444,6 +447,7 @@ files:
|
|
444
447
|
- lib/bridgetown-core/filters/date_filters.rb
|
445
448
|
- lib/bridgetown-core/filters/from_liquid.rb
|
446
449
|
- lib/bridgetown-core/filters/grouping_filters.rb
|
450
|
+
- lib/bridgetown-core/filters/localization_filters.rb
|
447
451
|
- lib/bridgetown-core/filters/translation_filters.rb
|
448
452
|
- lib/bridgetown-core/filters/url_filters.rb
|
449
453
|
- lib/bridgetown-core/frontmatter_defaults.rb
|
@@ -490,8 +494,10 @@ files:
|
|
490
494
|
- lib/bridgetown-core/static_file.rb
|
491
495
|
- lib/bridgetown-core/tags/asset_path.rb
|
492
496
|
- lib/bridgetown-core/tags/class_map.rb
|
497
|
+
- lib/bridgetown-core/tags/dsd.rb
|
493
498
|
- lib/bridgetown-core/tags/find.rb
|
494
499
|
- lib/bridgetown-core/tags/highlight.rb
|
500
|
+
- lib/bridgetown-core/tags/l.rb
|
495
501
|
- lib/bridgetown-core/tags/link.rb
|
496
502
|
- lib/bridgetown-core/tags/live_reload_dev_js.rb
|
497
503
|
- lib/bridgetown-core/tags/post_url.rb
|