@sonicjs-cms/core 2.0.2 → 2.0.3
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.
- package/dist/{chunk-O46XKBFM.js → chunk-3LZ6TLPC.js} +14 -24
- package/dist/chunk-3LZ6TLPC.js.map +1 -0
- package/dist/{chunk-ALOS2CBJ.cjs → chunk-3SPQ3J4N.cjs} +14 -24
- package/dist/chunk-3SPQ3J4N.cjs.map +1 -0
- package/dist/{chunk-EGFHFM4N.cjs → chunk-5APKEYFK.cjs} +5 -5
- package/dist/{chunk-EGFHFM4N.cjs.map → chunk-5APKEYFK.cjs.map} +1 -1
- package/dist/{chunk-7G6XT62S.cjs → chunk-5B3VMVEX.cjs} +254 -95
- package/dist/chunk-5B3VMVEX.cjs.map +1 -0
- package/dist/{chunk-SGGHTIWV.js → chunk-PPUKPNTP.js} +186 -27
- package/dist/chunk-PPUKPNTP.js.map +1 -0
- package/dist/{chunk-P2PTTBO5.js → chunk-RYQCT2IV.js} +3 -3
- package/dist/{chunk-P2PTTBO5.js.map → chunk-RYQCT2IV.js.map} +1 -1
- package/dist/index.cjs +46 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/routes.cjs +22 -22
- package/dist/routes.js +2 -2
- package/dist/templates.cjs +18 -18
- package/dist/templates.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-7G6XT62S.cjs.map +0 -1
- package/dist/chunk-ALOS2CBJ.cjs.map +0 -1
- package/dist/chunk-O46XKBFM.js.map +0 -1
- package/dist/chunk-SGGHTIWV.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getCacheService, CACHE_CONFIGS, getLogger } from './chunk-LH4Z7QID.js';
|
|
2
|
-
import { requireAuth, isPluginActive, requireRole, AuthManager, logActivity
|
|
2
|
+
import { requireAuth, isPluginActive, requireRole, AuthManager, logActivity } from './chunk-M6FPVS7E.js';
|
|
3
3
|
import { PluginService, MigrationService } from './chunk-CDBVZEWR.js';
|
|
4
|
-
import { init_admin_layout_catalyst_template, renderDesignPage, renderCheckboxPage, renderFAQList, renderTestimonialsList, renderCodeExamplesList, renderAlert, renderTable, renderPagination, renderConfirmationDialog, getConfirmationDialogScript, renderAdminLayoutCatalyst, renderAdminLayout, adminLayoutV2, renderForm } from './chunk-
|
|
4
|
+
import { init_admin_layout_catalyst_template, renderDesignPage, renderCheckboxPage, renderFAQList, renderTestimonialsList, renderCodeExamplesList, renderAlert, renderTable, renderPagination, renderConfirmationDialog, getConfirmationDialogScript, renderAdminLayoutCatalyst, renderAdminLayout, adminLayoutV2, renderForm } from './chunk-3LZ6TLPC.js';
|
|
5
5
|
import { QueryFilterBuilder, sanitizeInput, getCoreVersion, escapeHtml } from './chunk-XJETEIRU.js';
|
|
6
6
|
import { metricsTracker } from './chunk-FICTAGD4.js';
|
|
7
7
|
import { Hono } from 'hono';
|
|
@@ -2031,9 +2031,36 @@ function renderRegisterPage(data) {
|
|
|
2031
2031
|
</html>
|
|
2032
2032
|
`;
|
|
2033
2033
|
}
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2034
|
+
var authValidationService = {
|
|
2035
|
+
/**
|
|
2036
|
+
* Build registration schema dynamically based on auth settings
|
|
2037
|
+
* For now, returns a static schema with standard fields
|
|
2038
|
+
*/
|
|
2039
|
+
async buildRegistrationSchema(_db) {
|
|
2040
|
+
return z.object({
|
|
2041
|
+
email: z.string().email("Valid email is required"),
|
|
2042
|
+
password: z.string().min(8, "Password must be at least 8 characters"),
|
|
2043
|
+
username: z.string().min(3, "Username must be at least 3 characters").optional(),
|
|
2044
|
+
firstName: z.string().min(1, "First name is required").optional(),
|
|
2045
|
+
lastName: z.string().min(1, "Last name is required").optional()
|
|
2046
|
+
});
|
|
2047
|
+
},
|
|
2048
|
+
/**
|
|
2049
|
+
* Generate default values for optional fields
|
|
2050
|
+
*/
|
|
2051
|
+
generateDefaultValue(field, data) {
|
|
2052
|
+
switch (field) {
|
|
2053
|
+
case "username":
|
|
2054
|
+
return data.email ? data.email.split("@")[0] : `user${Date.now()}`;
|
|
2055
|
+
case "firstName":
|
|
2056
|
+
return "User";
|
|
2057
|
+
case "lastName":
|
|
2058
|
+
return data.email ? data.email.split("@")[0] : "Account";
|
|
2059
|
+
default:
|
|
2060
|
+
return "";
|
|
2061
|
+
}
|
|
2062
|
+
}
|
|
2063
|
+
};
|
|
2037
2064
|
|
|
2038
2065
|
// src/routes/auth.ts
|
|
2039
2066
|
var authRoutes = new Hono();
|
|
@@ -7987,7 +8014,7 @@ userRoutes.post("/profile/password", async (c) => {
|
|
|
7987
8014
|
}));
|
|
7988
8015
|
}
|
|
7989
8016
|
});
|
|
7990
|
-
userRoutes.get("/users",
|
|
8017
|
+
userRoutes.get("/users", async (c) => {
|
|
7991
8018
|
const db = c.env.DB;
|
|
7992
8019
|
const user = c.get("user");
|
|
7993
8020
|
try {
|
|
@@ -8106,7 +8133,7 @@ userRoutes.get("/users", requirePermission("users.read"), async (c) => {
|
|
|
8106
8133
|
}), 500);
|
|
8107
8134
|
}
|
|
8108
8135
|
});
|
|
8109
|
-
userRoutes.get("/users/new",
|
|
8136
|
+
userRoutes.get("/users/new", async (c) => {
|
|
8110
8137
|
const user = c.get("user");
|
|
8111
8138
|
try {
|
|
8112
8139
|
const pageData = {
|
|
@@ -8127,7 +8154,7 @@ userRoutes.get("/users/new", requirePermission("users.create"), async (c) => {
|
|
|
8127
8154
|
}), 500);
|
|
8128
8155
|
}
|
|
8129
8156
|
});
|
|
8130
|
-
userRoutes.post("/users/new",
|
|
8157
|
+
userRoutes.post("/users/new", async (c) => {
|
|
8131
8158
|
const db = c.env.DB;
|
|
8132
8159
|
const user = c.get("user");
|
|
8133
8160
|
try {
|
|
@@ -8227,7 +8254,7 @@ userRoutes.post("/users/new", requirePermission("users.create"), async (c) => {
|
|
|
8227
8254
|
}));
|
|
8228
8255
|
}
|
|
8229
8256
|
});
|
|
8230
|
-
userRoutes.get("/users/:id",
|
|
8257
|
+
userRoutes.get("/users/:id", async (c) => {
|
|
8231
8258
|
if (c.req.path.endsWith("/edit")) {
|
|
8232
8259
|
return c.notFound();
|
|
8233
8260
|
}
|
|
@@ -8278,7 +8305,7 @@ userRoutes.get("/users/:id", requirePermission("users.read"), async (c) => {
|
|
|
8278
8305
|
return c.json({ error: "Failed to fetch user" }, 500);
|
|
8279
8306
|
}
|
|
8280
8307
|
});
|
|
8281
|
-
userRoutes.get("/users/:id/edit",
|
|
8308
|
+
userRoutes.get("/users/:id/edit", async (c) => {
|
|
8282
8309
|
const db = c.env.DB;
|
|
8283
8310
|
const user = c.get("user");
|
|
8284
8311
|
const userId = c.req.param("id");
|
|
@@ -8332,7 +8359,7 @@ userRoutes.get("/users/:id/edit", requirePermission("users.update"), async (c) =
|
|
|
8332
8359
|
}), 500);
|
|
8333
8360
|
}
|
|
8334
8361
|
});
|
|
8335
|
-
userRoutes.put("/users/:id",
|
|
8362
|
+
userRoutes.put("/users/:id", async (c) => {
|
|
8336
8363
|
const db = c.env.DB;
|
|
8337
8364
|
const user = c.get("user");
|
|
8338
8365
|
const userId = c.req.param("id");
|
|
@@ -8418,7 +8445,7 @@ userRoutes.put("/users/:id", requirePermission("users.update"), async (c) => {
|
|
|
8418
8445
|
}));
|
|
8419
8446
|
}
|
|
8420
8447
|
});
|
|
8421
|
-
userRoutes.delete("/users/:id",
|
|
8448
|
+
userRoutes.delete("/users/:id", async (c) => {
|
|
8422
8449
|
const db = c.env.DB;
|
|
8423
8450
|
const user = c.get("user");
|
|
8424
8451
|
const userId = c.req.param("id");
|
|
@@ -8479,7 +8506,7 @@ userRoutes.delete("/users/:id", requirePermission("users.delete"), async (c) =>
|
|
|
8479
8506
|
return c.json({ error: "Failed to delete user" }, 500);
|
|
8480
8507
|
}
|
|
8481
8508
|
});
|
|
8482
|
-
userRoutes.post("/invite-user",
|
|
8509
|
+
userRoutes.post("/invite-user", async (c) => {
|
|
8483
8510
|
const db = c.env.DB;
|
|
8484
8511
|
const user = c.get("user");
|
|
8485
8512
|
try {
|
|
@@ -8555,7 +8582,7 @@ userRoutes.post("/invite-user", requirePermission("users.create"), async (c) =>
|
|
|
8555
8582
|
return c.json({ error: "Failed to send user invitation" }, 500);
|
|
8556
8583
|
}
|
|
8557
8584
|
});
|
|
8558
|
-
userRoutes.post("/resend-invitation/:id",
|
|
8585
|
+
userRoutes.post("/resend-invitation/:id", async (c) => {
|
|
8559
8586
|
const db = c.env.DB;
|
|
8560
8587
|
const user = c.get("user");
|
|
8561
8588
|
const userId = c.req.param("id");
|
|
@@ -8604,7 +8631,7 @@ userRoutes.post("/resend-invitation/:id", requirePermission("users.create"), asy
|
|
|
8604
8631
|
return c.json({ error: "Failed to resend invitation" }, 500);
|
|
8605
8632
|
}
|
|
8606
8633
|
});
|
|
8607
|
-
userRoutes.delete("/cancel-invitation/:id",
|
|
8634
|
+
userRoutes.delete("/cancel-invitation/:id", async (c) => {
|
|
8608
8635
|
const db = c.env.DB;
|
|
8609
8636
|
const user = c.get("user");
|
|
8610
8637
|
const userId = c.req.param("id");
|
|
@@ -8638,7 +8665,7 @@ userRoutes.delete("/cancel-invitation/:id", requirePermission("users.delete"), a
|
|
|
8638
8665
|
return c.json({ error: "Failed to cancel invitation" }, 500);
|
|
8639
8666
|
}
|
|
8640
8667
|
});
|
|
8641
|
-
userRoutes.get("/activity-logs",
|
|
8668
|
+
userRoutes.get("/activity-logs", async (c) => {
|
|
8642
8669
|
const db = c.env.DB;
|
|
8643
8670
|
const user = c.get("user");
|
|
8644
8671
|
try {
|
|
@@ -8744,7 +8771,7 @@ userRoutes.get("/activity-logs", requirePermission("activity.read"), async (c) =
|
|
|
8744
8771
|
return c.html(renderActivityLogsPage(pageData));
|
|
8745
8772
|
}
|
|
8746
8773
|
});
|
|
8747
|
-
userRoutes.get("/activity-logs/export",
|
|
8774
|
+
userRoutes.get("/activity-logs/export", async (c) => {
|
|
8748
8775
|
const db = c.env.DB;
|
|
8749
8776
|
const user = c.get("user");
|
|
8750
8777
|
try {
|
|
@@ -18222,7 +18249,7 @@ function renderSettingsPage(data) {
|
|
|
18222
18249
|
// Migration functions
|
|
18223
18250
|
window.refreshMigrationStatus = async function() {
|
|
18224
18251
|
try {
|
|
18225
|
-
const response = await fetch('/admin/api/migrations/status');
|
|
18252
|
+
const response = await fetch('/admin/settings/api/migrations/status');
|
|
18226
18253
|
const result = await response.json();
|
|
18227
18254
|
|
|
18228
18255
|
if (result.success) {
|
|
@@ -18250,7 +18277,7 @@ function renderSettingsPage(data) {
|
|
|
18250
18277
|
btn.innerHTML = 'Running...';
|
|
18251
18278
|
|
|
18252
18279
|
try {
|
|
18253
|
-
const response = await fetch('/admin/api/migrations/run', {
|
|
18280
|
+
const response = await fetch('/admin/settings/api/migrations/run', {
|
|
18254
18281
|
method: 'POST'
|
|
18255
18282
|
});
|
|
18256
18283
|
const result = await response.json();
|
|
@@ -18271,7 +18298,7 @@ function renderSettingsPage(data) {
|
|
|
18271
18298
|
|
|
18272
18299
|
window.validateSchema = async function() {
|
|
18273
18300
|
try {
|
|
18274
|
-
const response = await fetch('/admin/api/migrations/validate');
|
|
18301
|
+
const response = await fetch('/admin/settings/api/migrations/validate');
|
|
18275
18302
|
const result = await response.json();
|
|
18276
18303
|
|
|
18277
18304
|
if (result.success) {
|
|
@@ -18349,7 +18376,7 @@ function renderSettingsPage(data) {
|
|
|
18349
18376
|
// Database Tools functions
|
|
18350
18377
|
window.refreshDatabaseStats = async function() {
|
|
18351
18378
|
try {
|
|
18352
|
-
const response = await fetch('/admin/database-tools/
|
|
18379
|
+
const response = await fetch('/admin/settings/api/database-tools/stats');
|
|
18353
18380
|
const result = await response.json();
|
|
18354
18381
|
|
|
18355
18382
|
if (result.success) {
|
|
@@ -18370,7 +18397,7 @@ function renderSettingsPage(data) {
|
|
|
18370
18397
|
btn.innerHTML = 'Creating Backup...';
|
|
18371
18398
|
|
|
18372
18399
|
try {
|
|
18373
|
-
const response = await fetch('/admin/database-tools/
|
|
18400
|
+
const response = await fetch('/admin/settings/api/database-tools/backup', {
|
|
18374
18401
|
method: 'POST'
|
|
18375
18402
|
});
|
|
18376
18403
|
const result = await response.json();
|
|
@@ -18409,7 +18436,7 @@ function renderSettingsPage(data) {
|
|
|
18409
18436
|
btn.innerHTML = 'Truncating...';
|
|
18410
18437
|
|
|
18411
18438
|
try {
|
|
18412
|
-
const response = await fetch('/admin/database-tools/
|
|
18439
|
+
const response = await fetch('/admin/settings/api/database-tools/truncate', {
|
|
18413
18440
|
method: 'POST',
|
|
18414
18441
|
headers: {
|
|
18415
18442
|
'Content-Type': 'application/json'
|
|
@@ -18440,7 +18467,7 @@ function renderSettingsPage(data) {
|
|
|
18440
18467
|
|
|
18441
18468
|
window.validateDatabase = async function() {
|
|
18442
18469
|
try {
|
|
18443
|
-
const response = await fetch('/admin/database-tools/
|
|
18470
|
+
const response = await fetch('/admin/settings/api/database-tools/validate');
|
|
18444
18471
|
const result = await response.json();
|
|
18445
18472
|
|
|
18446
18473
|
if (result.success) {
|
|
@@ -19294,7 +19321,7 @@ function renderMigrationSettings(settings) {
|
|
|
19294
19321
|
if (typeof refreshMigrationStatus === 'undefined') {
|
|
19295
19322
|
window.refreshMigrationStatus = async function() {
|
|
19296
19323
|
try {
|
|
19297
|
-
const response = await fetch('/admin/api/migrations/status');
|
|
19324
|
+
const response = await fetch('/admin/settings/api/migrations/status');
|
|
19298
19325
|
const result = await response.json();
|
|
19299
19326
|
|
|
19300
19327
|
if (result.success) {
|
|
@@ -19767,6 +19794,138 @@ adminSettingsRoutes.get("/api/migrations/validate", async (c) => {
|
|
|
19767
19794
|
}, 500);
|
|
19768
19795
|
}
|
|
19769
19796
|
});
|
|
19797
|
+
adminSettingsRoutes.get("/api/database-tools/stats", async (c) => {
|
|
19798
|
+
try {
|
|
19799
|
+
const db = c.env.DB;
|
|
19800
|
+
const tablesQuery = await db.prepare(`
|
|
19801
|
+
SELECT name FROM sqlite_master
|
|
19802
|
+
WHERE type='table'
|
|
19803
|
+
AND name NOT LIKE 'sqlite_%'
|
|
19804
|
+
AND name NOT LIKE '_cf_%'
|
|
19805
|
+
ORDER BY name
|
|
19806
|
+
`).all();
|
|
19807
|
+
const tables = tablesQuery.results || [];
|
|
19808
|
+
let totalRows = 0;
|
|
19809
|
+
const tableStats = await Promise.all(
|
|
19810
|
+
tables.map(async (table) => {
|
|
19811
|
+
try {
|
|
19812
|
+
const countResult = await db.prepare(`SELECT COUNT(*) as count FROM ${table.name}`).first();
|
|
19813
|
+
const rowCount = countResult?.count || 0;
|
|
19814
|
+
totalRows += rowCount;
|
|
19815
|
+
return {
|
|
19816
|
+
name: table.name,
|
|
19817
|
+
rowCount
|
|
19818
|
+
};
|
|
19819
|
+
} catch (error) {
|
|
19820
|
+
console.error(`Error counting rows in ${table.name}:`, error);
|
|
19821
|
+
return {
|
|
19822
|
+
name: table.name,
|
|
19823
|
+
rowCount: 0
|
|
19824
|
+
};
|
|
19825
|
+
}
|
|
19826
|
+
})
|
|
19827
|
+
);
|
|
19828
|
+
const estimatedSizeBytes = totalRows * 1024;
|
|
19829
|
+
const databaseSizeMB = (estimatedSizeBytes / (1024 * 1024)).toFixed(2);
|
|
19830
|
+
return c.json({
|
|
19831
|
+
success: true,
|
|
19832
|
+
data: {
|
|
19833
|
+
totalTables: tables.length,
|
|
19834
|
+
totalRows,
|
|
19835
|
+
databaseSize: `${databaseSizeMB} MB (estimated)`,
|
|
19836
|
+
tables: tableStats
|
|
19837
|
+
}
|
|
19838
|
+
});
|
|
19839
|
+
} catch (error) {
|
|
19840
|
+
console.error("Error fetching database stats:", error);
|
|
19841
|
+
return c.json({
|
|
19842
|
+
success: false,
|
|
19843
|
+
error: "Failed to fetch database statistics"
|
|
19844
|
+
}, 500);
|
|
19845
|
+
}
|
|
19846
|
+
});
|
|
19847
|
+
adminSettingsRoutes.get("/api/database-tools/validate", async (c) => {
|
|
19848
|
+
try {
|
|
19849
|
+
const db = c.env.DB;
|
|
19850
|
+
const integrityResult = await db.prepare("PRAGMA integrity_check").first();
|
|
19851
|
+
const isValid = integrityResult?.integrity_check === "ok";
|
|
19852
|
+
return c.json({
|
|
19853
|
+
success: true,
|
|
19854
|
+
data: {
|
|
19855
|
+
valid: isValid,
|
|
19856
|
+
message: isValid ? "Database integrity check passed" : "Database integrity check failed"
|
|
19857
|
+
}
|
|
19858
|
+
});
|
|
19859
|
+
} catch (error) {
|
|
19860
|
+
console.error("Error validating database:", error);
|
|
19861
|
+
return c.json({
|
|
19862
|
+
success: false,
|
|
19863
|
+
error: "Failed to validate database"
|
|
19864
|
+
}, 500);
|
|
19865
|
+
}
|
|
19866
|
+
});
|
|
19867
|
+
adminSettingsRoutes.post("/api/database-tools/backup", async (c) => {
|
|
19868
|
+
try {
|
|
19869
|
+
const user = c.get("user");
|
|
19870
|
+
if (!user || user.role !== "admin") {
|
|
19871
|
+
return c.json({
|
|
19872
|
+
success: false,
|
|
19873
|
+
error: "Unauthorized. Admin access required."
|
|
19874
|
+
}, 403);
|
|
19875
|
+
}
|
|
19876
|
+
return c.json({
|
|
19877
|
+
success: true,
|
|
19878
|
+
message: "Database backup feature coming soon. Use Cloudflare Dashboard for backups."
|
|
19879
|
+
});
|
|
19880
|
+
} catch (error) {
|
|
19881
|
+
console.error("Error creating backup:", error);
|
|
19882
|
+
return c.json({
|
|
19883
|
+
success: false,
|
|
19884
|
+
error: "Failed to create backup"
|
|
19885
|
+
}, 500);
|
|
19886
|
+
}
|
|
19887
|
+
});
|
|
19888
|
+
adminSettingsRoutes.post("/api/database-tools/truncate", async (c) => {
|
|
19889
|
+
try {
|
|
19890
|
+
const user = c.get("user");
|
|
19891
|
+
if (!user || user.role !== "admin") {
|
|
19892
|
+
return c.json({
|
|
19893
|
+
success: false,
|
|
19894
|
+
error: "Unauthorized. Admin access required."
|
|
19895
|
+
}, 403);
|
|
19896
|
+
}
|
|
19897
|
+
const body = await c.req.json();
|
|
19898
|
+
const tablesToTruncate = body.tables || [];
|
|
19899
|
+
if (!Array.isArray(tablesToTruncate) || tablesToTruncate.length === 0) {
|
|
19900
|
+
return c.json({
|
|
19901
|
+
success: false,
|
|
19902
|
+
error: "No tables specified for truncation"
|
|
19903
|
+
}, 400);
|
|
19904
|
+
}
|
|
19905
|
+
const db = c.env.DB;
|
|
19906
|
+
const results = [];
|
|
19907
|
+
for (const tableName of tablesToTruncate) {
|
|
19908
|
+
try {
|
|
19909
|
+
await db.prepare(`DELETE FROM ${tableName}`).run();
|
|
19910
|
+
results.push({ table: tableName, success: true });
|
|
19911
|
+
} catch (error) {
|
|
19912
|
+
console.error(`Error truncating ${tableName}:`, error);
|
|
19913
|
+
results.push({ table: tableName, success: false, error: String(error) });
|
|
19914
|
+
}
|
|
19915
|
+
}
|
|
19916
|
+
return c.json({
|
|
19917
|
+
success: true,
|
|
19918
|
+
message: `Truncated ${results.filter((r) => r.success).length} of ${tablesToTruncate.length} tables`,
|
|
19919
|
+
results
|
|
19920
|
+
});
|
|
19921
|
+
} catch (error) {
|
|
19922
|
+
console.error("Error truncating tables:", error);
|
|
19923
|
+
return c.json({
|
|
19924
|
+
success: false,
|
|
19925
|
+
error: "Failed to truncate tables"
|
|
19926
|
+
}, 500);
|
|
19927
|
+
}
|
|
19928
|
+
});
|
|
19770
19929
|
adminSettingsRoutes.post("/", async (c) => {
|
|
19771
19930
|
try {
|
|
19772
19931
|
const formData = await c.req.formData();
|
|
@@ -19819,5 +19978,5 @@ var ROUTES_INFO = {
|
|
|
19819
19978
|
};
|
|
19820
19979
|
|
|
19821
19980
|
export { ROUTES_INFO, adminCheckboxRoutes, adminCollectionsRoutes, adminDesignRoutes, adminLogsRoutes, adminMediaRoutes, adminPluginRoutes, adminSettingsRoutes, admin_api_default, admin_code_examples_default, admin_content_default, admin_faq_default, admin_testimonials_default, api_content_crud_default, api_default, api_media_default, api_system_default, auth_default, router, userRoutes };
|
|
19822
|
-
//# sourceMappingURL=chunk-
|
|
19823
|
-
//# sourceMappingURL=chunk-
|
|
19981
|
+
//# sourceMappingURL=chunk-PPUKPNTP.js.map
|
|
19982
|
+
//# sourceMappingURL=chunk-PPUKPNTP.js.map
|