ultimate-jekyll-manager 0.0.126 → 0.0.127

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.
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Sale Name Helper
3
+ * Determines the best sale/promotion name based on the current date
4
+ *
5
+ * Holiday precedence rules:
6
+ * - Each holiday has a "core" date (the actual holiday)
7
+ * - Promo window extends 1 week before and 3 days after the core date
8
+ * - A new holiday only takes precedence AFTER the previous holiday's core date has passed
9
+ * - Example: Black Friday promo runs until Black Friday ends, then Cyber Monday takes over
10
+ */
11
+
12
+ // Configuration
13
+ const DAYS_BEFORE = 7;
14
+ const DAYS_AFTER = 3;
15
+
16
+ /**
17
+ * Holiday definitions
18
+ * Each holiday defines how to calculate its core date for a given year
19
+ */
20
+ const HOLIDAYS = [
21
+ {
22
+ name: 'Black Friday',
23
+ getCoreDate: (year) => {
24
+ // 4th Thursday of November + 1 day (Friday)
25
+ const thanksgiving = getNthWeekdayOfMonth(year, 10, 4, 4);
26
+ const blackFriday = new Date(thanksgiving);
27
+ blackFriday.setDate(blackFriday.getDate() + 1);
28
+ return blackFriday;
29
+ }
30
+ },
31
+ {
32
+ name: 'Cyber Monday',
33
+ getCoreDate: (year) => {
34
+ // Monday after Thanksgiving (4 days after Thursday)
35
+ const thanksgiving = getNthWeekdayOfMonth(year, 10, 4, 4);
36
+ const cyberMonday = new Date(thanksgiving);
37
+ cyberMonday.setDate(cyberMonday.getDate() + 4);
38
+ return cyberMonday;
39
+ }
40
+ },
41
+ {
42
+ name: 'Christmas',
43
+ getCoreDate: (year) => new Date(year, 11, 25)
44
+ },
45
+ {
46
+ name: 'Easter',
47
+ getCoreDate: (year) => calculateEaster(year)
48
+ }
49
+ ];
50
+
51
+ // Season definitions
52
+ const SEASONS = [
53
+ { name: 'Winter', months: [11, 0, 1], endMonth: 1, endDay: 28 },
54
+ { name: 'Spring', months: [2, 3, 4], endMonth: 4, endDay: 31 },
55
+ { name: 'Summer', months: [5, 6, 7], endMonth: 7, endDay: 31 },
56
+ { name: 'Fall', months: [8, 9, 10], endMonth: 10, endDay: 30 }
57
+ ];
58
+
59
+ /**
60
+ * Get the nth occurrence of a weekday in a month
61
+ * @param {number} year - Year
62
+ * @param {number} month - Month (0-indexed)
63
+ * @param {number} n - Which occurrence (1-5)
64
+ * @param {number} weekday - Day of week (0=Sunday, 4=Thursday)
65
+ * @returns {Date}
66
+ */
67
+ function getNthWeekdayOfMonth(year, month, n, weekday) {
68
+ const firstDay = new Date(year, month, 1);
69
+ const firstWeekday = firstDay.getDay();
70
+ let dayOffset = weekday - firstWeekday;
71
+
72
+ if (dayOffset < 0) {
73
+ dayOffset += 7;
74
+ }
75
+
76
+ const nthDay = 1 + dayOffset + (n - 1) * 7;
77
+ return new Date(year, month, nthDay);
78
+ }
79
+
80
+ /**
81
+ * Calculate Easter Sunday for a given year (Anonymous Gregorian algorithm)
82
+ * @param {number} year
83
+ * @returns {Date}
84
+ */
85
+ function calculateEaster(year) {
86
+ const a = year % 19;
87
+ const b = Math.floor(year / 100);
88
+ const c = year % 100;
89
+ const d = Math.floor(b / 4);
90
+ const e = b % 4;
91
+ const f = Math.floor((b + 8) / 25);
92
+ const g = Math.floor((b - f + 1) / 3);
93
+ const h = (19 * a + b - d - g + 15) % 30;
94
+ const i = Math.floor(c / 4);
95
+ const k = c % 4;
96
+ const l = (32 + 2 * e + 2 * i - h - k) % 7;
97
+ const m = Math.floor((a + 11 * h + 22 * l) / 451);
98
+ const month = Math.floor((h + l - 7 * m + 114) / 31) - 1;
99
+ const day = ((h + l - 7 * m + 114) % 31) + 1;
100
+
101
+ return new Date(year, month, day);
102
+ }
103
+
104
+ /**
105
+ * Get the promo window for a holiday
106
+ * @param {Date} coreDate - The actual holiday date
107
+ * @returns {object} Object with promoStart, coreDate, and promoEnd
108
+ */
109
+ function getHolidayWindow(coreDate) {
110
+ const promoStart = new Date(coreDate);
111
+ promoStart.setDate(promoStart.getDate() - DAYS_BEFORE);
112
+ promoStart.setHours(0, 0, 0, 0);
113
+
114
+ const promoEnd = new Date(coreDate);
115
+ promoEnd.setDate(promoEnd.getDate() + DAYS_AFTER);
116
+ promoEnd.setHours(23, 59, 59, 999);
117
+
118
+ // Core date end of day
119
+ const coreDateEnd = new Date(coreDate);
120
+ coreDateEnd.setHours(23, 59, 59, 999);
121
+
122
+ return {
123
+ promoStart,
124
+ coreDate: new Date(coreDate),
125
+ coreDateEnd,
126
+ promoEnd
127
+ };
128
+ }
129
+
130
+ /**
131
+ * Get all holidays with their windows for the relevant years
132
+ * @param {Date} date
133
+ * @returns {Array} Sorted array of holiday objects with windows
134
+ */
135
+ function getHolidaysWithWindows(date) {
136
+ const year = date.getFullYear();
137
+ const yearsToCheck = [year - 1, year, year + 1];
138
+ const holidays = [];
139
+
140
+ for (const checkYear of yearsToCheck) {
141
+ for (const holiday of HOLIDAYS) {
142
+ const coreDate = holiday.getCoreDate(checkYear);
143
+ const window = getHolidayWindow(coreDate);
144
+
145
+ holidays.push({
146
+ name: holiday.name,
147
+ ...window
148
+ });
149
+ }
150
+ }
151
+
152
+ // Sort by core date
153
+ return holidays.sort((a, b) => a.coreDate - b.coreDate);
154
+ }
155
+
156
+ /**
157
+ * Get the current season based on date
158
+ * @param {Date} date
159
+ * @returns {object|null} Season object with name, progress, and isEndOfSeason
160
+ */
161
+ function getCurrentSeason(date) {
162
+ const month = date.getMonth();
163
+ const season = SEASONS.find(s => s.months.includes(month));
164
+
165
+ if (!season) {
166
+ return null;
167
+ }
168
+
169
+ const year = date.getFullYear();
170
+
171
+ // Handle winter spanning year boundary
172
+ let startYear = year;
173
+ if (season.name === 'Winter' && month <= 1) {
174
+ startYear = year - 1;
175
+ }
176
+
177
+ const seasonStartDate = new Date(startYear, season.months[0], 1);
178
+
179
+ // For winter end date, use next year if starting month is December
180
+ let endYear = year;
181
+ if (season.name === 'Winter' && season.months[0] === 11) {
182
+ endYear = year + 1;
183
+ }
184
+
185
+ const seasonEndDate = new Date(endYear, season.endMonth, season.endDay, 23, 59, 59);
186
+ const seasonDuration = seasonEndDate - seasonStartDate;
187
+ const progress = (date - seasonStartDate) / seasonDuration;
188
+ const isEndOfSeason = progress >= 0.7;
189
+
190
+ return {
191
+ name: season.name,
192
+ progress,
193
+ isEndOfSeason,
194
+ startDate: seasonStartDate,
195
+ endDate: seasonEndDate
196
+ };
197
+ }
198
+
199
+ /**
200
+ * Get the best sale name for a given date
201
+ *
202
+ * Logic:
203
+ * 1. Find all holidays where we're in their promo window (1 week before to 3 days after)
204
+ * 2. If multiple holidays overlap, the one whose core date has NOT yet passed takes precedence
205
+ * 3. Once a holiday's core date passes, the next holiday can take over
206
+ *
207
+ * @param {Date} [date=new Date()] - Date to check (defaults to now)
208
+ * @returns {object} Object with saleName, endDate, and type
209
+ */
210
+ export function getSaleName(date = new Date()) {
211
+ const holidays = getHolidaysWithWindows(date);
212
+
213
+ // Find all holidays where we're in their promo window
214
+ const activeHolidays = holidays.filter(h =>
215
+ date >= h.promoStart && date <= h.promoEnd
216
+ );
217
+
218
+ if (activeHolidays.length > 0) {
219
+ // Find the best holiday to show
220
+ // Priority: The holiday whose core date hasn't passed yet, or if all have passed, the most recent one
221
+ let bestHoliday = null;
222
+
223
+ // First, try to find a holiday whose core date hasn't passed
224
+ for (const holiday of activeHolidays) {
225
+ if (date <= holiday.coreDateEnd) {
226
+ bestHoliday = holiday;
227
+ break;
228
+ }
229
+ }
230
+
231
+ // If all core dates have passed, use the one with the latest core date
232
+ // (we're in the "3 days after" window of the most recent holiday)
233
+ if (!bestHoliday) {
234
+ bestHoliday = activeHolidays[activeHolidays.length - 1];
235
+ }
236
+
237
+ return {
238
+ saleName: `${bestHoliday.name} Sale`,
239
+ endDate: bestHoliday.promoEnd,
240
+ coreDate: bestHoliday.coreDate,
241
+ type: 'holiday'
242
+ };
243
+ }
244
+
245
+ // Fall back to season
246
+ const season = getCurrentSeason(date);
247
+
248
+ if (!season) {
249
+ return {
250
+ saleName: 'Sale',
251
+ endDate: null,
252
+ type: 'generic'
253
+ };
254
+ }
255
+
256
+ const saleName = season.isEndOfSeason
257
+ ? `End of ${season.name} Sale`
258
+ : `${season.name} Sale`;
259
+
260
+ return {
261
+ saleName,
262
+ endDate: season.endDate,
263
+ type: 'season'
264
+ };
265
+ }
266
+
267
+ /**
268
+ * Get all upcoming sales/holidays within a date range
269
+ * @param {Date} startDate
270
+ * @param {Date} endDate
271
+ * @returns {Array} Array of sale objects sorted by start date
272
+ */
273
+ export function getUpcomingSales(startDate = new Date(), endDate = null) {
274
+ if (!endDate) {
275
+ endDate = new Date(startDate);
276
+ endDate.setFullYear(endDate.getFullYear() + 1);
277
+ }
278
+
279
+ const holidays = getHolidaysWithWindows(startDate);
280
+
281
+ return holidays
282
+ .filter(h => h.promoStart >= startDate && h.promoStart <= endDate)
283
+ .map(h => ({
284
+ saleName: `${h.name} Sale`,
285
+ startDate: h.promoStart,
286
+ coreDate: h.coreDate,
287
+ endDate: h.promoEnd,
288
+ type: 'holiday'
289
+ }));
290
+ }
291
+
292
+ export default {
293
+ getSaleName,
294
+ getUpcomingSales
295
+ };
@@ -1,4 +1,6 @@
1
1
  // Libraries
2
+ import { getSaleName } from '__main_assets__/js/libs/sale-name.js';
3
+
2
4
  let webManager = null;
3
5
 
4
6
  // Module
@@ -287,34 +289,12 @@ function setupPromoCountdown() {
287
289
  return;
288
290
  }
289
291
 
290
- const now = new Date();
291
- const month = now.getMonth();
292
-
293
- const seasons = [
294
- { name: 'Winter', months: [11, 0, 1], endMonth: 1, endDay: 28 },
295
- { name: 'Spring', months: [2, 3, 4], endMonth: 4, endDay: 31 },
296
- { name: 'Summer', months: [5, 6, 7], endMonth: 7, endDay: 31 },
297
- { name: 'Fall', months: [8, 9, 10], endMonth: 10, endDay: 30 }
298
- ];
299
-
300
- const currentSeason = seasons.find(s => s.months.includes(month));
301
-
302
- if (!currentSeason) {
303
- return;
304
- }
305
-
306
- const seasonStartDate = new Date(now.getFullYear(), currentSeason.months[0], 1);
307
- const seasonEndDate = new Date(now.getFullYear(), currentSeason.endMonth, currentSeason.endDay, 23, 59, 59);
308
- const seasonDuration = seasonEndDate - seasonStartDate;
309
- const seasonProgress = (now - seasonStartDate) / seasonDuration;
310
-
311
- const isEndOfSeason = seasonProgress >= 0.7;
312
- const saleName = isEndOfSeason ? `End of ${currentSeason.name} Sale` : `${currentSeason.name} Sale`;
292
+ const { saleName } = getSaleName();
313
293
 
314
294
  $promoTextEl.textContent = saleName;
315
295
 
316
296
  const twoDaysInMs = 2 * 24 * 60 * 60 * 1000;
317
- const cycleStart = Math.floor(now.getTime() / twoDaysInMs) * twoDaysInMs;
297
+ const cycleStart = Math.floor(Date.now() / twoDaysInMs) * twoDaysInMs;
318
298
  const cycleEnd = cycleStart + twoDaysInMs;
319
299
 
320
300
  function updateCountdown() {
@@ -1,5 +1,5 @@
1
1
  // Libraries
2
- import authPages from '__main_assets__/js/libs/auth/pages.js';
2
+ import authPages from '__main_assets__/js/libs/auth.js';
3
3
 
4
4
  // Module
5
5
  export default (Manager, options) => {
@@ -1,5 +1,5 @@
1
1
  // Libraries
2
- import authPages from '__main_assets__/js/libs/auth/pages.js';
2
+ import authPages from '__main_assets__/js/libs/auth.js';
3
3
 
4
4
  // Module
5
5
  export default (Manager, options) => {
@@ -1,5 +1,5 @@
1
1
  // Libraries
2
- import authPages from '__main_assets__/js/libs/auth/pages.js';
2
+ import authPages from '__main_assets__/js/libs/auth.js';
3
3
 
4
4
  // Module
5
5
  export default (Manager, options) => {
@@ -7,7 +7,7 @@ layout: themes/[ site.theme.id ]/frontend/core/base
7
7
  hero:
8
8
  headline: "Get in"
9
9
  headline_accent: "touch"
10
- subheadline: "Have questions about {{ site.brand.name }}? Our support team is here to help you."
10
+ subheadline: "Have questions about {{ site.brand.name }}? Our support team is here to help you"
11
11
 
12
12
  # Contact Methods Section
13
13
  contact_methods:
@@ -13,7 +13,7 @@ hero:
13
13
  tagline: "Introducing {{ site.brand.name }}"
14
14
  headline: "The #1 platform <br> for business"
15
15
  headline_accent: "success"
16
- description: "AI automation for modern businesses made simple."
16
+ description: "AI automation for modern businesses made simple"
17
17
  primary_button:
18
18
  text: "Get Started Free"
19
19
  icon: "rocket"
@@ -216,7 +216,7 @@ faqs:
216
216
  Flash Sale
217
217
  </span>
218
218
  <span class="text-white-50">
219
- ending in <span id="pricing-promo-countdown" class="fw-semibold text-white">--</span>
219
+ Ending in <span id="pricing-promo-countdown" class="fw-semibold text-white">--</span>
220
220
  </span>
221
221
  <span class="text-white-50">
222
222
  Use code <span id="pricing-promo-code" class="badge bg-white bg-opacity-25 px-2 py-1 fs-6">WELCOME15</span>
@@ -347,27 +347,27 @@ faqs:
347
347
  </p>
348
348
  {% endif %}
349
349
 
350
- <!-- Price per unit or placeholder text -->
350
+ <!-- Price per unit (only shown when enabled) -->
351
351
  {% if page.resolved.pricing.price_per_unit.enabled %}
352
- {% if plan.pricing.monthly > 0 %}
353
- {% for feature in plan.features %}
354
- {% if feature.id == page.resolved.pricing.price_per_unit.feature_id %}
355
- {% assign monthly_price_per_unit = plan.pricing.monthly | times: 1.0 | divided_by: feature.value | round: 2 %}
356
- {% assign annual_monthly_price = plan.pricing.annually | divided_by: 12.0 %}
357
- {% assign annual_price_per_unit = annual_monthly_price | divided_by: feature.value | round: 2 %}
358
- <p class="text-muted small mb-4">
352
+ <p class="text-muted small mb-4">
353
+ {% if plan.pricing.monthly > 0 %}
354
+ {% for feature in plan.features %}
355
+ {% if feature.id == page.resolved.pricing.price_per_unit.feature_id %}
356
+ {% assign monthly_price_per_unit = plan.pricing.monthly | times: 1.0 | divided_by: feature.value | round: 2 %}
357
+ {% assign annual_monthly_price = plan.pricing.annually | divided_by: 12.0 %}
358
+ {% assign annual_price_per_unit = annual_monthly_price | divided_by: feature.value | round: 2 %}
359
359
  <span class="price-per-unit" data-monthly="${{ monthly_price_per_unit }}" data-annually="${{ annual_price_per_unit }}">${{ annual_price_per_unit }}</span> per {{ page.resolved.pricing.price_per_unit.label }}
360
- </p>
361
- {% endif %}
362
- {% endfor %}
363
- {% else %}
364
- <!-- Placeholder text for free plan to maintain consistent height -->
365
- <p class="text-muted small mb-4">Perfect for trying out</p>
366
- {% endif %}
360
+ {% endif %}
361
+ {% endfor %}
362
+ {% else %}
363
+ <!-- Placeholder text for free plan to maintain consistent height -->
364
+ Perfect for trying out
365
+ {% endif %}
366
+ </p>
367
367
  {% endif %}
368
368
 
369
369
  <!-- Button -->
370
- <div class="d-grid mb-3">
370
+ <div class="d-grid mb-3 {% unless page.resolved.pricing.price_per_unit.enabled %}mt-3{% endunless %}">
371
371
  {% if plan.popular %}
372
372
  {% assign btn_style = "btn-gradient-rainbow gradient-animated" %}
373
373
  {% else %}
@@ -1570,3 +1570,59 @@
1570
1570
  [debug] [2025-12-03T01:51:35.575Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1571
1571
  [debug] [2025-12-03T01:51:35.576Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1572
1572
  [debug] [2025-12-03T01:51:35.576Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1573
+ [debug] [2025-12-03T03:24:09.539Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1574
+ [debug] [2025-12-03T03:24:09.541Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1575
+ [debug] [2025-12-03T03:24:09.541Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1576
+ [debug] [2025-12-03T03:24:09.541Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1577
+ [debug] [2025-12-03T03:24:09.553Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1578
+ [debug] [2025-12-03T03:24:09.553Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1579
+ [debug] [2025-12-03T03:24:09.806Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1580
+ [debug] [2025-12-03T03:24:09.806Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1581
+ [debug] [2025-12-03T03:24:09.807Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1582
+ [debug] [2025-12-03T03:24:09.807Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1583
+ [debug] [2025-12-03T03:24:09.812Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1584
+ [debug] [2025-12-03T03:24:09.812Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1585
+ [debug] [2025-12-03T03:24:09.814Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1586
+ [debug] [2025-12-03T03:24:09.814Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1587
+ [debug] [2025-12-03T03:24:12.483Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1588
+ [debug] [2025-12-03T03:24:12.485Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1589
+ [debug] [2025-12-03T03:24:12.486Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1590
+ [debug] [2025-12-03T03:24:12.486Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1591
+ [debug] [2025-12-03T03:24:12.497Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1592
+ [debug] [2025-12-03T03:24:12.497Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1593
+ [debug] [2025-12-03T03:24:12.611Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1594
+ [debug] [2025-12-03T03:24:12.611Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1595
+ [debug] [2025-12-03T03:24:12.612Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1596
+ [debug] [2025-12-03T03:24:12.612Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1597
+ [debug] [2025-12-03T03:24:12.613Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1598
+ [debug] [2025-12-03T03:24:12.613Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1599
+ [debug] [2025-12-03T03:24:12.614Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1600
+ [debug] [2025-12-03T03:24:12.614Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1601
+ [debug] [2025-12-03T03:49:02.765Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1602
+ [debug] [2025-12-03T03:49:02.765Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1603
+ [debug] [2025-12-03T03:49:02.767Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1604
+ [debug] [2025-12-03T03:49:02.768Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1605
+ [debug] [2025-12-03T03:49:02.768Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1606
+ [debug] [2025-12-03T03:49:02.776Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1607
+ [debug] [2025-12-03T03:49:02.777Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1608
+ [debug] [2025-12-03T03:49:02.767Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1609
+ [debug] [2025-12-03T03:49:02.768Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1610
+ [debug] [2025-12-03T03:49:02.768Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1611
+ [debug] [2025-12-03T03:49:02.776Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1612
+ [debug] [2025-12-03T03:49:02.777Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1613
+ [debug] [2025-12-03T03:49:02.912Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1614
+ [debug] [2025-12-03T03:49:02.913Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1615
+ [debug] [2025-12-03T03:49:02.912Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1616
+ [debug] [2025-12-03T03:49:02.913Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1617
+ [debug] [2025-12-03T03:49:02.913Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1618
+ [debug] [2025-12-03T03:49:02.913Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1619
+ [debug] [2025-12-03T03:49:02.914Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1620
+ [debug] [2025-12-03T03:49:02.914Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1621
+ [debug] [2025-12-03T03:49:02.914Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1622
+ [debug] [2025-12-03T03:49:02.914Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1623
+ [debug] [2025-12-03T03:49:02.915Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1624
+ [debug] [2025-12-03T03:49:02.915Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1625
+ [debug] [2025-12-03T03:49:02.915Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1626
+ [debug] [2025-12-03T03:49:02.916Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
1627
+ [debug] [2025-12-03T03:49:02.916Z] > command requires scopes: ["email","openid","https://www.googleapis.com/auth/cloudplatformprojects.readonly","https://www.googleapis.com/auth/firebase","https://www.googleapis.com/auth/cloud-platform"]
1628
+ [debug] [2025-12-03T03:49:02.916Z] > authorizing via signed-in user (ian.wiedenman@gmail.com)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultimate-jekyll-manager",
3
- "version": "0.0.126",
3
+ "version": "0.0.127",
4
4
  "description": "Ultimate Jekyll dependency manager",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
File without changes