ultimate-jekyll-manager 0.0.131 → 0.0.133

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.
Files changed (38) hide show
  1. package/CLAUDE.md +19 -0
  2. package/README.md +17 -0
  3. package/dist/assets/js/libs/auth.js +23 -5
  4. package/dist/assets/js/libs/form-manager.js +6 -0
  5. package/dist/assets/themes/classy/css/layout/_navigation.scss +2 -1
  6. package/dist/commands/migrate.js +62 -4
  7. package/dist/config/_config_default.yml +1 -1
  8. package/dist/config/_config_development.yml +3 -2
  9. package/dist/defaults/dist/_includes/core/foot.html +1 -1
  10. package/dist/defaults/dist/_includes/themes/classy/frontend/sections/nav.html +5 -5
  11. package/dist/defaults/dist/_layouts/core/root.html +5 -0
  12. package/dist/defaults/dist/_layouts/modules/utilities/redirect.html +1 -1
  13. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/account/index.html +6 -6
  14. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/reset.html +1 -1
  15. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signin.html +2 -2
  16. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/auth/signup.html +2 -2
  17. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/index.html +1 -1
  18. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/pricing.html +4 -3
  19. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/team/index.html +8 -26
  20. package/dist/defaults/dist/_layouts/themes/classy/frontend/pages/team/member.html +3 -1
  21. package/dist/defaults/dist/_team/alex-raeburn.md +11 -5
  22. package/dist/defaults/dist/_team/alfred-caufy.md +11 -6
  23. package/dist/defaults/dist/_team/christina-hill.md +41 -0
  24. package/dist/defaults/dist/_team/ian-wiedenman.md +15 -5
  25. package/dist/defaults/dist/_team/james-oconnor.md +2 -2
  26. package/dist/defaults/dist/_team/marcus-johnson.md +4 -4
  27. package/dist/defaults/dist/_team/priya-sharma.md +3 -3
  28. package/dist/defaults/dist/_team/rare-ivy.md +5 -5
  29. package/dist/defaults/dist/_team/sarah-rodriguez.md +6 -3
  30. package/dist/defaults/dist/pages/test/libraries/form-manager.html +23 -23
  31. package/dist/defaults/src/assets/images/team/alex-raeburn/profile.jpg +0 -0
  32. package/dist/defaults/src/assets/images/team/alfred-caufy/profile.jpg +0 -0
  33. package/dist/defaults/src/assets/images/team/christina-hill/profile.jpg +0 -0
  34. package/dist/gulp/tasks/jekyll.js +2 -0
  35. package/dist/gulp/tasks/serve.js +56 -1
  36. package/firebase-debug.log +462 -0
  37. package/package.json +2 -2
  38. package/dist/defaults/src/assets/images/.gitkeep +0 -0
@@ -0,0 +1,41 @@
1
+ ---
2
+ ### ALL PAGES ###
3
+ layout: blueprint/team/member
4
+ sitemap:
5
+ include: true
6
+
7
+ ### TEAM MEMBER PAGES ###
8
+ member:
9
+ id: christina-hill
10
+ name: "Christina Hill"
11
+ position: "Community Manager"
12
+ description: "Christina builds and nurtures our user community, fostering meaningful connections and conversations."
13
+ location: "Seattle, WA"
14
+ skills:
15
+ - "Community Building"
16
+ - "Content Writing"
17
+ - "Event Planning"
18
+ - "User Engagement"
19
+ hobbies:
20
+ - "Reading"
21
+ - "Hiking"
22
+ - "Board Games"
23
+ joined: 2021-08-15
24
+ links:
25
+ - id: "linkedin"
26
+ title: "LinkedIn"
27
+ url: "https://www.linkedin.com/in/christina-hill"
28
+ - id: "twitter"
29
+ title: "Twitter"
30
+ url: "https://twitter.com/christina-hill"
31
+ ---
32
+
33
+ Hey there, I'm Christina!
34
+
35
+ I'm passionate about bringing people together and creating spaces where our users can connect, learn, and grow. There's nothing quite like seeing a community member help another one out - that's when you know you've built something special.
36
+
37
+ Before joining the team, I managed online communities for a gaming company and a nonprofit organization. Those experiences taught me that every community is unique, and the best ones are built on genuine relationships rather than metrics.
38
+
39
+ My role spans everything from moderating discussions and organizing virtual events to writing blog posts and gathering feedback from our users. I love being the bridge between our community and the rest of the team - making sure user voices are heard and celebrated.
40
+
41
+ When I'm not online engaging with our community, you'll find me curled up with a good book, exploring the Pacific Northwest trails, or hosting board game nights with friends. I firmly believe that the best ideas come from diverse perspectives coming together.
@@ -16,6 +16,7 @@ member:
16
16
  - "Business Management"
17
17
  hobbies:
18
18
  - "Music"
19
+ - "DJing"
19
20
  joined: 2017-04-20
20
21
  links:
21
22
  - id: "website"
@@ -23,14 +24,23 @@ member:
23
24
  url: "https://ianwiedenman.com"
24
25
  - id: "linkedin"
25
26
  title: "LinkedIn"
26
- url: "https://www.linkedin.com/in/ianwiedenman"
27
+ url: "https://www.linkedin.com/in/ian-wiedenman"
28
+ - id: "github"
29
+ title: "GitHub"
30
+ url: "https://github.com/ianwieds"
27
31
  - id: "instagram"
28
32
  title: "Instagram"
29
- url: "https://www.instagram.com/ianwiedenman"
33
+ url: "https://www.instagram.com/kiruemusic"
30
34
  ---
31
35
 
32
- Hey everyone, I'm Ian.
36
+ Hey everyone, I'm Ian!
33
37
 
34
- I'm an innovative business owner and electronic music artist from Los Angeles, CA.
38
+ I'm an innovative business owner and electronic music artist from Los Angeles, CA. Technology and creativity have always driven me - whether I'm building software or producing electronic beats.
35
39
 
36
- I quit the corporate 9-5 lifestyle in 2017 to embark on my risky yet rewarding entrepreneurial journey. Today, I work for myself building projects I'm passionate about. I'm proud to say that millions of people now use my creations to enhance their productivity and innovation.
40
+ I quit the corporate 9-5 lifestyle in 2017 to embark on my risky yet rewarding entrepreneurial journey. After years of working in traditional tech roles, I realized I wanted to create things that truly mattered to me. Taking that leap was terrifying, but it turned out to be the best decision I ever made.
41
+
42
+ Today, I work for myself building projects I'm passionate about. I'm proud to say that millions of people now use my creations to enhance their productivity and innovation. From browser extensions to web applications, I love solving problems that make people's lives a little easier.
43
+
44
+ When I'm not coding, you'll find me in my home studio producing electronic music under my artist name. Music has been a lifelong passion - it's the perfect creative outlet that balances the logical side of software development. There's something magical about crafting sounds and melodies that move people.
45
+
46
+ I believe in building things that last and treating users with respect. No dark patterns, no shady practices - just honest products that deliver real value. That philosophy has guided every project I've built, and I'm excited to continue this journey.
@@ -9,7 +9,7 @@ member:
9
9
  id: james-oconnor
10
10
  name: "James O'Connor"
11
11
  position: "Sales Lead"
12
- description: "James leads our sales efforts with enthusiasm and a consultative approach. He's helped build our sales playbook from scratch and is passionate about understanding customer needs."
12
+ description: "James leads our sales efforts with enthusiasm and a consultative approach to understanding customer needs."
13
13
  location: "Boston, MA"
14
14
  skills:
15
15
  - "B2B Sales"
@@ -25,7 +25,7 @@ member:
25
25
  links:
26
26
  - id: "linkedin"
27
27
  title: "LinkedIn"
28
- url: "https://www.linkedin.com/in/jamesoconnor"
28
+ url: "https://www.linkedin.com/in/james-oconnor"
29
29
  ---
30
30
 
31
31
  Hey! I'm James.
@@ -9,7 +9,7 @@ member:
9
9
  id: marcus-johnson
10
10
  name: "Marcus Johnson"
11
11
  position: "Product Designer"
12
- description: "Marcus is our lead Product Designer with a background in cognitive psychology and human-computer interaction. He crafts intuitive user experiences that delight our customers."
12
+ description: "Marcus is our lead Product Designer who crafts intuitive user experiences that delight our customers."
13
13
  location: "Austin, TX"
14
14
  skills:
15
15
  - "UI/UX Design"
@@ -25,13 +25,13 @@ member:
25
25
  links:
26
26
  - id: "linkedin"
27
27
  title: "LinkedIn"
28
- url: "https://www.linkedin.com/in/marcusjohnson"
28
+ url: "https://www.linkedin.com/in/marcus-johnson"
29
29
  - id: "dribbble"
30
30
  title: "Dribbble"
31
- url: "https://dribbble.com/marcusjohnson"
31
+ url: "https://dribbble.com/marcus-johnson"
32
32
  - id: "instagram"
33
33
  title: "Instagram"
34
- url: "https://www.instagram.com/marcusjohnson"
34
+ url: "https://www.instagram.com/marcus-johnson"
35
35
  ---
36
36
 
37
37
  Hey there, I'm Marcus!
@@ -9,7 +9,7 @@ member:
9
9
  id: priya-sharma
10
10
  name: "Priya Sharma"
11
11
  position: "Customer Success Manager"
12
- description: "Priya ensures our customers get maximum value from our products. With her background in consulting and customer advocacy, she bridges the gap between user needs and product development."
12
+ description: "Priya ensures our customers get maximum value from our products and bridges the gap between user needs and product development."
13
13
  location: "Chicago, IL"
14
14
  skills:
15
15
  - "Customer Relations"
@@ -25,10 +25,10 @@ member:
25
25
  links:
26
26
  - id: "linkedin"
27
27
  title: "LinkedIn"
28
- url: "https://www.linkedin.com/in/priyasharma"
28
+ url: "https://www.linkedin.com/in/priya-sharma"
29
29
  - id: "twitter"
30
30
  title: "Twitter"
31
- url: "https://twitter.com/priyasharma"
31
+ url: "https://twitter.com/priya-sharma"
32
32
  ---
33
33
 
34
34
  Hi there, I'm Priya!
@@ -9,7 +9,7 @@ member:
9
9
  id: rare-ivy
10
10
  name: "Rare Ivy"
11
11
  position: "Content Creator"
12
- description: "Ivy is our in-house content creator, producing engaging videos, graphics, and social content that brings our brand to life. Her creative vision and storytelling abilities captivate audiences across all platforms."
12
+ description: "Rare is our in-house content creator, producing engaging videos, graphics, and social content that brings our brand to life."
13
13
  location: "Brooklyn, NY"
14
14
  skills:
15
15
  - "Video Production"
@@ -25,19 +25,19 @@ member:
25
25
  links:
26
26
  - id: "linkedin"
27
27
  title: "LinkedIn"
28
- url: "https://www.linkedin.com/in/rareivy"
28
+ url: "https://www.linkedin.com/in/rare-ivy"
29
29
  - id: "instagram"
30
30
  title: "Instagram"
31
- url: "https://www.instagram.com/rareivy"
31
+ url: "https://www.instagram.com/rare.ivyyy"
32
32
  - id: "tiktok"
33
33
  title: "TikTok"
34
- url: "https://www.tiktok.com/@rareivy"
34
+ url: "https://www.tiktok.com/@rare.ivy"
35
35
  - id: "youtube"
36
36
  title: "YouTube"
37
37
  url: "https://www.youtube.com/@rareivy"
38
38
  ---
39
39
 
40
- Hey, I'm Ivy!
40
+ Hey, I'm Rare!
41
41
 
42
42
  I'm a multi-disciplinary content creator with a passion for visual storytelling. From short-form TikToks to long-form YouTube videos, I love crafting content that connects with people on an emotional level.
43
43
 
@@ -9,7 +9,7 @@ member:
9
9
  id: sarah-rodriguez
10
10
  name: "Sarah Rodriguez"
11
11
  position: "Marketing Director"
12
- description: "Sarah leads our marketing efforts with a data-driven approach and creative flair. She has scaled multiple startups from seed to Series B through innovative growth strategies."
12
+ description: "Sarah leads our marketing efforts with a data-driven approach and creative flair."
13
13
  location: "Miami, FL"
14
14
  skills:
15
15
  - "Growth Marketing"
@@ -25,10 +25,13 @@ member:
25
25
  links:
26
26
  - id: "linkedin"
27
27
  title: "LinkedIn"
28
- url: "https://www.linkedin.com/in/sarahrodriguez"
28
+ url: "https://www.linkedin.com/in/sarah-rodriguez"
29
29
  - id: "twitter"
30
30
  title: "Twitter"
31
- url: "https://twitter.com/sarahrodriguez"
31
+ url: "https://twitter.com/sarah-rodriguez"
32
+ - id: "instagram"
33
+ title: "Instagram"
34
+ url: "https://www.instagram.com/sarahrodriguez"
32
35
  ---
33
36
 
34
37
  Hola! I'm Sarah.
@@ -24,21 +24,21 @@ sitemap: false
24
24
  <div class="col-md-6">
25
25
  <div class="mb-3">
26
26
  <label for="main-name" class="form-label">user.name</label>
27
- <input type="text" class="form-control" id="main-name" name="user.name" value="Ian">
27
+ <input type="text" class="form-control" id="main-name" name="user.name" value="Ian" disabled autofocus>
28
28
  </div>
29
29
  <div class="mb-3">
30
30
  <label for="main-email" class="form-label">user.email</label>
31
- <input type="email" class="form-control" id="main-email" name="user.email" value="ian@example.com">
31
+ <input type="email" class="form-control" id="main-email" name="user.email" value="ian@example.com" disabled>
32
32
  </div>
33
33
  <div class="mb-3">
34
34
  <label for="main-city" class="form-label">user.address.city</label>
35
- <input type="text" class="form-control" id="main-city" name="user.address.city" value="NYC">
35
+ <input type="text" class="form-control" id="main-city" name="user.address.city" value="NYC" disabled>
36
36
  </div>
37
37
  </div>
38
38
  <div class="col-md-6">
39
39
  <div class="mb-3">
40
40
  <label for="main-outcome" class="form-label">Simulate Outcome</label>
41
- <select class="form-select" id="main-outcome" name="settings.outcome">
41
+ <select class="form-select" id="main-outcome" name="settings.outcome" disabled>
42
42
  <option value="success">Success</option>
43
43
  <option value="error">Error (throw Error)</option>
44
44
  </select>
@@ -46,43 +46,43 @@ sitemap: false
46
46
  <div class="mb-3">
47
47
  <label class="form-label d-block">preferences.notifications (radio group)</label>
48
48
  <div class="form-check form-check-inline">
49
- <input type="radio" class="form-check-input" id="notif-all" name="preferences.notifications" value="all" checked>
49
+ <input type="radio" class="form-check-input" id="notif-all" name="preferences.notifications" value="all" checked disabled>
50
50
  <label class="form-check-label" for="notif-all">All</label>
51
51
  </div>
52
52
  <div class="form-check form-check-inline">
53
- <input type="radio" class="form-check-input" id="notif-important" name="preferences.notifications" value="important">
53
+ <input type="radio" class="form-check-input" id="notif-important" name="preferences.notifications" value="important" disabled>
54
54
  <label class="form-check-label" for="notif-important">Important</label>
55
55
  </div>
56
56
  <div class="form-check form-check-inline">
57
- <input type="radio" class="form-check-input" id="notif-none" name="preferences.notifications" value="none">
57
+ <input type="radio" class="form-check-input" id="notif-none" name="preferences.notifications" value="none" disabled>
58
58
  <label class="form-check-label" for="notif-none">None</label>
59
59
  </div>
60
60
  </div>
61
61
  <div class="mb-3">
62
62
  <label class="form-label d-block">preferences.features (checkbox group)</label>
63
63
  <div class="form-check">
64
- <input type="checkbox" class="form-check-input" id="feat-darkmode" name="preferences.features" value="darkmode">
64
+ <input type="checkbox" class="form-check-input" id="feat-darkmode" name="preferences.features" value="darkmode" disabled>
65
65
  <label class="form-check-label" for="feat-darkmode">Dark Mode</label>
66
66
  </div>
67
67
  <div class="form-check">
68
- <input type="checkbox" class="form-check-input" id="feat-analytics" name="preferences.features" value="analytics">
68
+ <input type="checkbox" class="form-check-input" id="feat-analytics" name="preferences.features" value="analytics" disabled>
69
69
  <label class="form-check-label" for="feat-analytics">Analytics</label>
70
70
  </div>
71
71
  <div class="form-check">
72
- <input type="checkbox" class="form-check-input" id="feat-beta" name="preferences.features" value="beta">
72
+ <input type="checkbox" class="form-check-input" id="feat-beta" name="preferences.features" value="beta" disabled>
73
73
  <label class="form-check-label" for="feat-beta">Beta Features</label>
74
74
  </div>
75
75
  </div>
76
76
  <div class="mb-3 form-check">
77
- <input type="checkbox" class="form-check-input" id="main-subscribe" name="settings.subscribe">
77
+ <input type="checkbox" class="form-check-input" id="main-subscribe" name="settings.subscribe" disabled>
78
78
  <label class="form-check-label" for="main-subscribe">settings.subscribe (single checkbox)</label>
79
79
  </div>
80
80
  </div>
81
81
  </div>
82
82
  <div class="d-flex gap-2">
83
- <button type="submit" data-action="save" class="btn btn-primary">Save</button>
84
- <button type="submit" data-action="draft" class="btn btn-outline-secondary">Save as Draft</button>
85
- <button type="button" id="main-set-data" class="btn btn-outline-info">Set Data</button>
83
+ <button type="submit" data-action="save" class="btn btn-primary" disabled>Save</button>
84
+ <button type="submit" data-action="draft" class="btn btn-outline-secondary" disabled>Save as Draft</button>
85
+ <button type="button" id="main-set-data" class="btn btn-outline-info" disabled>Set Data</button>
86
86
  </div>
87
87
  </form>
88
88
  <div class="mt-3 d-flex gap-3">
@@ -110,21 +110,21 @@ sitemap: false
110
110
  <form id="test-form-validation">
111
111
  <div class="mb-3">
112
112
  <label for="validation-name" class="form-label">Name (required)</label>
113
- <input type="text" class="form-control" id="validation-name" name="name" required>
113
+ <input type="text" class="form-control" id="validation-name" name="name" required disabled>
114
114
  </div>
115
115
  <div class="mb-3">
116
116
  <label for="validation-email" class="form-label">Email (required, valid format)</label>
117
- <input type="email" class="form-control" id="validation-email" name="email" required>
117
+ <input type="email" class="form-control" id="validation-email" name="email" required disabled>
118
118
  </div>
119
119
  <div class="mb-3">
120
120
  <label for="validation-age" class="form-label">Age (required, must be 18+)</label>
121
- <input type="number" class="form-control" id="validation-age" name="age" required min="1">
121
+ <input type="number" class="form-control" id="validation-age" name="age" required min="1" disabled>
122
122
  </div>
123
123
  <div class="mb-3 form-check">
124
- <input type="checkbox" class="form-check-input" id="validation-terms" name="terms" required>
124
+ <input type="checkbox" class="form-check-input" id="validation-terms" name="terms" required disabled>
125
125
  <label class="form-check-label" for="validation-terms">I agree to the terms (required)</label>
126
126
  </div>
127
- <button type="submit" class="btn btn-primary">Submit</button>
127
+ <button type="submit" class="btn btn-primary" disabled>Submit</button>
128
128
  </form>
129
129
  <div class="mt-2">
130
130
  <small class="text-muted" id="validation-status">Status: ready</small>
@@ -144,9 +144,9 @@ sitemap: false
144
144
  <form id="test-form-contact">
145
145
  <div class="mb-3">
146
146
  <label for="contact-message" class="form-label">Message</label>
147
- <textarea class="form-control" id="contact-message" name="message" rows="2">Hello!</textarea>
147
+ <textarea class="form-control" id="contact-message" name="message" rows="2" disabled>Hello!</textarea>
148
148
  </div>
149
- <button type="submit" class="btn btn-primary">Send Message</button>
149
+ <button type="submit" class="btn btn-primary" disabled>Send Message</button>
150
150
  </form>
151
151
  <div class="mt-2">
152
152
  <small class="text-muted" id="contact-status">Status: ready</small>
@@ -166,9 +166,9 @@ sitemap: false
166
166
  <form id="test-form-manual">
167
167
  <div class="mb-3">
168
168
  <label for="manual-data" class="form-label">Data</label>
169
- <input type="text" class="form-control" id="manual-data" name="data">
169
+ <input type="text" class="form-control" id="manual-data" name="data" disabled>
170
170
  </div>
171
- <button type="submit" class="btn btn-primary">Submit</button>
171
+ <button type="submit" class="btn btn-primary" disabled>Submit</button>
172
172
  </form>
173
173
  <div class="mt-2">
174
174
  <small class="text-muted" id="manual-status">Status: initializing</small>
@@ -81,6 +81,8 @@ async function jekyll(complete) {
81
81
 
82
82
  // Build Jekyll
83
83
  const command = [
84
+ // Set JEKYLL_ENV to production when in build mode
85
+ Manager.isBuildMode() ? 'JEKYLL_ENV=production' : '',
84
86
  // Jekyll command
85
87
  'bundle exec jekyll build',
86
88
  '--source dist',
@@ -33,12 +33,15 @@ module.exports = async function serve(complete) {
33
33
  https: await getHttpsConfig(), // Enable HTTPS with mkcert or self-signed certificates
34
34
  server: {
35
35
  baseDir: '_site',
36
+ routes: {
37
+ '/src': 'src' // Allow serving from src/ for media fallback
38
+ },
36
39
  middleware: [
37
40
  // require('compression')({
38
41
  // threshold: 0, // Compress all files regardless of size
39
42
  // level: 9 // Maximum compression (1-9)
40
43
  // }),
41
- processRequestMiddleware
44
+ processRequestMiddleware,
42
45
  ],
43
46
  },
44
47
  }
@@ -216,6 +219,58 @@ async function processRequestMiddleware(req, res, next) {
216
219
  logger.log(`Serving ${pathname}`);
217
220
  }
218
221
 
222
+ // Fallback for media files: serve from src/ if not in _site/
223
+ // This handles cases where imagemin hasn't run and optimized variants don't exist
224
+ const isMedia = pathname.startsWith('/assets/images/') || pathname.startsWith('/assets/videos/');
225
+ if (isMedia) {
226
+ const startTime = Date.now();
227
+ const cleanPath = pathname.split('?')[0];
228
+ const siteFilePath = path.join(rootPathProject, '_site', cleanPath);
229
+
230
+ // If file exists in _site, serve normally
231
+ if (jetpack.exists(siteFilePath)) {
232
+ logger.log(`[media] Found in _site: ${cleanPath} (${Date.now() - startTime}ms)`);
233
+ return next();
234
+ }
235
+
236
+ // Try to find the original file in src/
237
+ // First, try the exact path
238
+ let srcFilePath = path.join(rootPathProject, 'src', cleanPath);
239
+
240
+ // If not found, try stripping imagemin suffixes (-320px, -640px, -1024px) and .webp extension
241
+ if (!jetpack.exists(srcFilePath)) {
242
+ let originalPath = cleanPath;
243
+
244
+ // Remove size suffix (e.g., -320px, -640px, -1024px)
245
+ originalPath = originalPath.replace(/-\d+px(\.[^.]+)$/, '$1');
246
+
247
+ // If it's a .webp, try original extensions
248
+ if (originalPath.endsWith('.webp')) {
249
+ const basePath = originalPath.replace(/\.webp$/, '');
250
+ const possibleExts = ['.jpg', '.jpeg', '.png', '.gif'];
251
+
252
+ for (const ext of possibleExts) {
253
+ const testPath = path.join(rootPathProject, 'src', basePath + ext);
254
+ if (jetpack.exists(testPath)) {
255
+ srcFilePath = testPath;
256
+ break;
257
+ }
258
+ }
259
+ } else {
260
+ srcFilePath = path.join(rootPathProject, 'src', originalPath);
261
+ }
262
+ }
263
+
264
+ // Serve from src if found
265
+ if (jetpack.exists(srcFilePath)) {
266
+ const relativeSrcPath = path.relative(rootPathProject, srcFilePath);
267
+ logger.log(`[media] Serving from src: ${cleanPath} -> ${relativeSrcPath} (${Date.now() - startTime}ms)`);
268
+ req.url = '/' + relativeSrcPath;
269
+ } else {
270
+ logger.log(`[media] Not found: ${cleanPath} (${Date.now() - startTime}ms)`);
271
+ }
272
+ }
273
+
219
274
  // Run middleware:request hook to allow custom URL rewriting
220
275
  await hook('middleware:request', { req, res, pathname });
221
276