nextly 0.0.2-alpha.8 → 0.0.2-alpha.9

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 (61) hide show
  1. package/dist/_dts-chunks/{collections-handler.d-DAGa4oyr.d.ts → collections-handler.d-B3iNFGJv.d.ts} +4 -2
  2. package/dist/_dts-chunks/{config.d-gCEU-kSb.d.ts → config.d-D8eInFE5.d.ts} +1 -1
  3. package/dist/_dts-chunks/{define-component.d-B5ffJpKw.d.ts → define-component.d-COeEsUOT.d.ts} +2 -2
  4. package/dist/_dts-chunks/{index.d-BhMtxT6M.d.ts → index.d-qjDq8N63.d.ts} +1 -1
  5. package/dist/actions/index.mjs +1 -1
  6. package/dist/api/auth-state.mjs +6 -6
  7. package/dist/api/collections-schema-detail.mjs +6 -6
  8. package/dist/api/collections-schema-export.mjs +6 -6
  9. package/dist/api/collections-schema.mjs +6 -6
  10. package/dist/api/components-detail.mjs +6 -6
  11. package/dist/api/components.mjs +6 -6
  12. package/dist/api/email-providers-default.mjs +6 -6
  13. package/dist/api/email-providers-detail.mjs +6 -6
  14. package/dist/api/email-providers-test.mjs +6 -6
  15. package/dist/api/email-providers.mjs +6 -6
  16. package/dist/api/email-send-template.mjs +7 -7
  17. package/dist/api/email-send.mjs +7 -7
  18. package/dist/api/email-templates-detail.mjs +6 -6
  19. package/dist/api/email-templates-layout.mjs +6 -6
  20. package/dist/api/email-templates-preview.mjs +6 -6
  21. package/dist/api/email-templates.mjs +6 -6
  22. package/dist/api/media-bulk.mjs +3 -3
  23. package/dist/api/media-folders.mjs +6 -6
  24. package/dist/api/media-handlers.d.ts +2 -2
  25. package/dist/api/media-handlers.mjs +6 -6
  26. package/dist/api/media.mjs +6 -6
  27. package/dist/api/singles-detail.mjs +6 -6
  28. package/dist/api/singles-schema-detail.mjs +6 -6
  29. package/dist/api/singles.mjs +6 -6
  30. package/dist/api/storage-upload-url.mjs +6 -6
  31. package/dist/api/uploads.mjs +12 -11
  32. package/dist/{boot-apply-NOFBZ5QY.mjs → boot-apply-TDOMT356.mjs} +1 -1
  33. package/dist/{chunk-NJIUNZVY.mjs → chunk-4LLOFW52.mjs} +9 -9
  34. package/dist/{chunk-QIGAYTZD.mjs → chunk-7MA6UATK.mjs} +8 -6
  35. package/dist/{chunk-7PLW6Z3L.mjs → chunk-AKK5Q5SX.mjs} +1 -1
  36. package/dist/{chunk-44JO5BSR.mjs → chunk-DWV7GUKQ.mjs} +1 -1
  37. package/dist/{chunk-7KXJ66OR.mjs → chunk-FI2Z2B2J.mjs} +1 -1
  38. package/dist/{chunk-KTGUSU23.mjs → chunk-GJIHOHY5.mjs} +2 -2
  39. package/dist/{chunk-PDMNLA74.mjs → chunk-HLTSQIP6.mjs} +5 -5
  40. package/dist/{chunk-LDUSTBVC.mjs → chunk-KLICUQPV.mjs} +1 -1
  41. package/dist/{chunk-QSE7KMHI.mjs → chunk-KPCSDPFQ.mjs} +87 -5
  42. package/dist/{chunk-XYV27NZL.mjs → chunk-OVQCDNU3.mjs} +1 -1
  43. package/dist/{chunk-3IX2NDII.mjs → chunk-TFCPZ7PG.mjs} +1 -1
  44. package/dist/{chunk-TSFCJP57.mjs → chunk-VH4BX2QH.mjs} +1 -1
  45. package/dist/cli/nextly.mjs +1 -1
  46. package/dist/cli/utils/index.d.ts +2 -2
  47. package/dist/config.d.ts +3 -3
  48. package/dist/database/index.d.ts +2 -2
  49. package/dist/database/seeders/index.mjs +4 -4
  50. package/dist/index.d.ts +16 -11
  51. package/dist/index.mjs +8 -39
  52. package/dist/{permissions-ONWRZAQO.mjs → permissions-YEODB733.mjs} +2 -2
  53. package/dist/{program-DWF3GBYR.mjs → program-TOV63II7.mjs} +5 -5
  54. package/dist/{register-CQU3Z4SW.mjs → register-O2CJDFCK.mjs} +3 -3
  55. package/dist/{reload-config-RWRAPMQG.mjs → reload-config-5P3IUF6O.mjs} +1 -1
  56. package/dist/{routeHandler-7JQSAJFL.mjs → routeHandler-P2KXM7MH.mjs} +9 -9
  57. package/dist/runtime.d.ts +2 -2
  58. package/dist/runtime.mjs +9 -9
  59. package/dist/{super-admin-ZPB2YQDQ.mjs → super-admin-6LWRM36J.mjs} +2 -2
  60. package/dist/{users-OA643XPO.mjs → users-Q773BQCU.mjs} +1 -1
  61. package/package.json +8 -8
@@ -10,22 +10,22 @@ import {
10
10
  } from "../chunk-XIKEJO27.mjs";
11
11
  import {
12
12
  getCachedNextly
13
- } from "../chunk-PDMNLA74.mjs";
14
- import "../chunk-XYV27NZL.mjs";
13
+ } from "../chunk-HLTSQIP6.mjs";
14
+ import "../chunk-OVQCDNU3.mjs";
15
15
  import "../chunk-NJ3LXLSJ.mjs";
16
- import "../chunk-7PLW6Z3L.mjs";
16
+ import "../chunk-AKK5Q5SX.mjs";
17
17
  import "../chunk-X23WKS3Z.mjs";
18
18
  import {
19
19
  getService
20
- } from "../chunk-QIGAYTZD.mjs";
21
- import "../chunk-3IX2NDII.mjs";
20
+ } from "../chunk-7MA6UATK.mjs";
21
+ import "../chunk-TFCPZ7PG.mjs";
22
22
  import "../chunk-FQULBZ53.mjs";
23
23
  import "../chunk-67GXH6PR.mjs";
24
24
  import "../chunk-2TFX4ND3.mjs";
25
25
  import "../chunk-W4MGXIRR.mjs";
26
26
  import {
27
27
  transformRichTextFields
28
- } from "../chunk-QSE7KMHI.mjs";
28
+ } from "../chunk-KPCSDPFQ.mjs";
29
29
  import "../chunk-ERJGWWPB.mjs";
30
30
  import "../chunk-AGJ6F2T3.mjs";
31
31
  import "../chunk-KIMNCZGV.mjs";
@@ -7,22 +7,22 @@ import {
7
7
  } from "../chunk-XIKEJO27.mjs";
8
8
  import {
9
9
  getCachedNextly
10
- } from "../chunk-PDMNLA74.mjs";
11
- import "../chunk-XYV27NZL.mjs";
10
+ } from "../chunk-HLTSQIP6.mjs";
11
+ import "../chunk-OVQCDNU3.mjs";
12
12
  import "../chunk-NJ3LXLSJ.mjs";
13
- import "../chunk-7PLW6Z3L.mjs";
13
+ import "../chunk-AKK5Q5SX.mjs";
14
14
  import "../chunk-X23WKS3Z.mjs";
15
15
  import {
16
16
  getService
17
- } from "../chunk-QIGAYTZD.mjs";
18
- import "../chunk-3IX2NDII.mjs";
17
+ } from "../chunk-7MA6UATK.mjs";
18
+ import "../chunk-TFCPZ7PG.mjs";
19
19
  import "../chunk-FQULBZ53.mjs";
20
20
  import "../chunk-67GXH6PR.mjs";
21
21
  import "../chunk-2TFX4ND3.mjs";
22
22
  import {
23
23
  getNextlyLogger
24
24
  } from "../chunk-W4MGXIRR.mjs";
25
- import "../chunk-QSE7KMHI.mjs";
25
+ import "../chunk-KPCSDPFQ.mjs";
26
26
  import "../chunk-ERJGWWPB.mjs";
27
27
  import "../chunk-AGJ6F2T3.mjs";
28
28
  import "../chunk-KIMNCZGV.mjs";
@@ -4,20 +4,20 @@ import {
4
4
  } from "../chunk-XIKEJO27.mjs";
5
5
  import {
6
6
  getCachedNextly
7
- } from "../chunk-PDMNLA74.mjs";
8
- import "../chunk-XYV27NZL.mjs";
7
+ } from "../chunk-HLTSQIP6.mjs";
8
+ import "../chunk-OVQCDNU3.mjs";
9
9
  import "../chunk-NJ3LXLSJ.mjs";
10
- import "../chunk-7PLW6Z3L.mjs";
10
+ import "../chunk-AKK5Q5SX.mjs";
11
11
  import "../chunk-X23WKS3Z.mjs";
12
12
  import {
13
13
  getService
14
- } from "../chunk-QIGAYTZD.mjs";
15
- import "../chunk-3IX2NDII.mjs";
14
+ } from "../chunk-7MA6UATK.mjs";
15
+ import "../chunk-TFCPZ7PG.mjs";
16
16
  import "../chunk-FQULBZ53.mjs";
17
17
  import "../chunk-67GXH6PR.mjs";
18
18
  import "../chunk-2TFX4ND3.mjs";
19
19
  import "../chunk-W4MGXIRR.mjs";
20
- import "../chunk-QSE7KMHI.mjs";
20
+ import "../chunk-KPCSDPFQ.mjs";
21
21
  import "../chunk-ERJGWWPB.mjs";
22
22
  import "../chunk-AGJ6F2T3.mjs";
23
23
  import "../chunk-KIMNCZGV.mjs";
@@ -6,18 +6,18 @@ import {
6
6
  } from "../chunk-XIKEJO27.mjs";
7
7
  import {
8
8
  getCachedNextly
9
- } from "../chunk-PDMNLA74.mjs";
10
- import "../chunk-XYV27NZL.mjs";
9
+ } from "../chunk-HLTSQIP6.mjs";
10
+ import "../chunk-OVQCDNU3.mjs";
11
11
  import "../chunk-NJ3LXLSJ.mjs";
12
- import "../chunk-7PLW6Z3L.mjs";
12
+ import "../chunk-AKK5Q5SX.mjs";
13
13
  import "../chunk-X23WKS3Z.mjs";
14
- import "../chunk-QIGAYTZD.mjs";
15
- import "../chunk-3IX2NDII.mjs";
14
+ import "../chunk-7MA6UATK.mjs";
15
+ import "../chunk-TFCPZ7PG.mjs";
16
16
  import "../chunk-FQULBZ53.mjs";
17
17
  import "../chunk-67GXH6PR.mjs";
18
18
  import "../chunk-2TFX4ND3.mjs";
19
19
  import "../chunk-W4MGXIRR.mjs";
20
- import "../chunk-QSE7KMHI.mjs";
20
+ import "../chunk-KPCSDPFQ.mjs";
21
21
  import "../chunk-ERJGWWPB.mjs";
22
22
  import "../chunk-AGJ6F2T3.mjs";
23
23
  import "../chunk-KIMNCZGV.mjs";
@@ -3,24 +3,25 @@ import {
3
3
  } from "../chunk-XIKEJO27.mjs";
4
4
  import {
5
5
  getCachedNextly
6
- } from "../chunk-PDMNLA74.mjs";
7
- import "../chunk-XYV27NZL.mjs";
6
+ } from "../chunk-HLTSQIP6.mjs";
7
+ import "../chunk-OVQCDNU3.mjs";
8
8
  import "../chunk-NJ3LXLSJ.mjs";
9
- import "../chunk-7PLW6Z3L.mjs";
9
+ import "../chunk-AKK5Q5SX.mjs";
10
10
  import "../chunk-X23WKS3Z.mjs";
11
11
  import {
12
12
  getService,
13
13
  isServicesRegistered
14
- } from "../chunk-QIGAYTZD.mjs";
15
- import "../chunk-3IX2NDII.mjs";
14
+ } from "../chunk-7MA6UATK.mjs";
15
+ import "../chunk-TFCPZ7PG.mjs";
16
16
  import "../chunk-FQULBZ53.mjs";
17
17
  import "../chunk-67GXH6PR.mjs";
18
18
  import "../chunk-2TFX4ND3.mjs";
19
19
  import "../chunk-W4MGXIRR.mjs";
20
20
  import {
21
21
  UploadService,
22
- clampLimit2 as clampLimit
23
- } from "../chunk-QSE7KMHI.mjs";
22
+ clampLimit2 as clampLimit,
23
+ toAbsoluteMediaUrl
24
+ } from "../chunk-KPCSDPFQ.mjs";
24
25
  import "../chunk-ERJGWWPB.mjs";
25
26
  import "../chunk-AGJ6F2T3.mjs";
26
27
  import "../chunk-KIMNCZGV.mjs";
@@ -269,8 +270,8 @@ var POST = withErrorHandler(
269
270
  filename: result.data?.filename,
270
271
  mimeType: result.data?.mimeType,
271
272
  filesize: result.data?.size,
272
- url: result.data?.url,
273
- thumbnailUrl: result.data?.thumbnailUrl,
273
+ url: toAbsoluteMediaUrl(result.data?.url),
274
+ thumbnailUrl: toAbsoluteMediaUrl(result.data?.thumbnailUrl),
274
275
  width: result.data?.width,
275
276
  height: result.data?.height,
276
277
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -300,8 +301,8 @@ var GET = withErrorHandler(
300
301
  filename: result.data?.filename || result.data?.originalFilename,
301
302
  mimeType: result.data?.mimeType,
302
303
  filesize: result.data?.size,
303
- url: result.data?.url,
304
- thumbnailUrl: result.data?.thumbnailUrl,
304
+ url: toAbsoluteMediaUrl(result.data?.url),
305
+ thumbnailUrl: toAbsoluteMediaUrl(result.data?.thumbnailUrl),
305
306
  width: result.data?.width,
306
307
  height: result.data?.height,
307
308
  createdAt: result.data?.createdAt,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runBootTimeApplyIfDev
3
- } from "./chunk-7PLW6Z3L.mjs";
3
+ } from "./chunk-AKK5Q5SX.mjs";
4
4
  import "./chunk-7P6ASYW6.mjs";
5
5
  export {
6
6
  runBootTimeApplyIfDev
@@ -3,13 +3,13 @@ import {
3
3
  } from "./chunk-X3OHQBMZ.mjs";
4
4
  import {
5
5
  POST
6
- } from "./chunk-7KXJ66OR.mjs";
6
+ } from "./chunk-FI2Z2B2J.mjs";
7
7
  import {
8
8
  readJsonBody
9
9
  } from "./chunk-YLRZTPSK.mjs";
10
10
  import {
11
11
  POST as POST2
12
- } from "./chunk-TSFCJP57.mjs";
12
+ } from "./chunk-VH4BX2QH.mjs";
13
13
  import {
14
14
  createJsonErrorResponse,
15
15
  isErrorResponse,
@@ -45,12 +45,12 @@ import {
45
45
  import {
46
46
  ensureHmrListener,
47
47
  getCachedNextly
48
- } from "./chunk-PDMNLA74.mjs";
48
+ } from "./chunk-HLTSQIP6.mjs";
49
49
  import {
50
50
  getService,
51
51
  isServicesRegistered,
52
52
  registerServices
53
- } from "./chunk-QIGAYTZD.mjs";
53
+ } from "./chunk-7MA6UATK.mjs";
54
54
  import {
55
55
  readOrGenerateRequestId
56
56
  } from "./chunk-67GXH6PR.mjs";
@@ -61,7 +61,7 @@ import {
61
61
  ImageSizeService,
62
62
  ServiceDispatcher,
63
63
  parseWhereQuery
64
- } from "./chunk-QSE7KMHI.mjs";
64
+ } from "./chunk-KPCSDPFQ.mjs";
65
65
  import {
66
66
  containsSuperAdminRole,
67
67
  hasSuperAdminExcluding,
@@ -2154,8 +2154,8 @@ function buildAuthRouterDeps(getService2) {
2154
2154
  }
2155
2155
  },
2156
2156
  createSuperAdmin: async (data) => {
2157
- const { seedPermissions } = await import("./permissions-ONWRZAQO.mjs");
2158
- const { seedSuperAdmin } = await import("./super-admin-ZPB2YQDQ.mjs");
2157
+ const { seedPermissions } = await import("./permissions-YEODB733.mjs");
2158
+ const { seedSuperAdmin } = await import("./super-admin-6LWRM36J.mjs");
2159
2159
  const adapter = getService2("adapter");
2160
2160
  await seedPermissions(adapter, { silent: true });
2161
2161
  const result = await seedSuperAdmin(adapter, {
@@ -2180,7 +2180,7 @@ function buildAuthRouterDeps(getService2) {
2180
2180
  };
2181
2181
  },
2182
2182
  seedPermissions: async () => {
2183
- const { seedPermissions } = await import("./permissions-ONWRZAQO.mjs");
2183
+ const { seedPermissions } = await import("./permissions-YEODB733.mjs");
2184
2184
  const adapter = getService2("adapter");
2185
2185
  await seedPermissions(adapter, { silent: true });
2186
2186
  },
@@ -2396,7 +2396,7 @@ async function ensureServicesInitialized() {
2396
2396
  } else {
2397
2397
  console.log("[Auth Handler] Services auto-initialized with defaults");
2398
2398
  }
2399
- const { runBootTimeApplyIfDev } = await import("./boot-apply-NOFBZ5QY.mjs");
2399
+ const { runBootTimeApplyIfDev } = await import("./boot-apply-TDOMT356.mjs");
2400
2400
  await runBootTimeApplyIfDev({ caller: "auth-handler" });
2401
2401
  ensureHmrListener();
2402
2402
  }
@@ -2,7 +2,7 @@ import {
2
2
  ComponentRegistryService,
3
3
  PermissionSeedService,
4
4
  SingleRegistryService
5
- } from "./chunk-3IX2NDII.mjs";
5
+ } from "./chunk-TFCPZ7PG.mjs";
6
6
  import {
7
7
  AccessControlService,
8
8
  ApiKeyService,
@@ -26,12 +26,13 @@ import {
26
26
  UserService,
27
27
  buildContext,
28
28
  consoleLogger,
29
+ getBaseUrl,
29
30
  getHookRegistry,
30
31
  keysToCamelCase,
31
32
  keysToSnakeCase,
32
33
  resolveStatusFilter,
33
34
  sanitizeEntryData
34
- } from "./chunk-QSE7KMHI.mjs";
35
+ } from "./chunk-KPCSDPFQ.mjs";
35
36
  import {
36
37
  CollectionRegistryService
37
38
  } from "./chunk-ERJGWWPB.mjs";
@@ -3772,12 +3773,13 @@ var EmailService = class extends BaseService {
3772
3773
  // Private: Helpers
3773
3774
  // ============================================================
3774
3775
  /**
3775
- * Get the base URL for email links.
3776
- * Priority: emailConfig.baseUrl > NEXT_PUBLIC_APP_URL > localhost
3776
+ * Get the base URL for email links. Delegates to the shared `getBaseUrl`
3777
+ * helper so email templates and absolutized media URLs resolve through
3778
+ * the same priority chain (emailConfig.baseUrl > NEXT_PUBLIC_APP_URL >
3779
+ * localhost).
3777
3780
  */
3778
3781
  getBaseUrl() {
3779
- const url = this.emailConfig?.baseUrl ?? env.NEXT_PUBLIC_APP_URL ?? "http://localhost:3000";
3780
- return url.replace(/\/$/, "");
3782
+ return getBaseUrl(this.emailConfig?.baseUrl);
3781
3783
  }
3782
3784
  /**
3783
3785
  * Get the application name for email templates.
@@ -5,7 +5,7 @@ async function runBootTimeApplyIfDev(opts) {
5
5
  if (process.env.NEXTLY_DISABLE_BOOT_APPLY === "1") return;
6
6
  const label = callerLabel(opts?.caller);
7
7
  try {
8
- const { reloadNextlyConfig } = await import("./reload-config-RWRAPMQG.mjs");
8
+ const { reloadNextlyConfig } = await import("./reload-config-5P3IUF6O.mjs");
9
9
  await reloadNextlyConfig();
10
10
  } catch (err) {
11
11
  const msg = err instanceof Error ? err.message : String(err);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ServiceContainer
3
- } from "./chunk-QSE7KMHI.mjs";
3
+ } from "./chunk-KPCSDPFQ.mjs";
4
4
 
5
5
  // src/database/seeders/super-admin.ts
6
6
  var DEFAULT_SUPER_ADMIN = {
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-XIKEJO27.mjs";
12
12
  import {
13
13
  getCachedNextly
14
- } from "./chunk-PDMNLA74.mjs";
14
+ } from "./chunk-HLTSQIP6.mjs";
15
15
  import {
16
16
  respondAction
17
17
  } from "./chunk-IUDOC7N7.mjs";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  seedPermissions
3
- } from "./chunk-LDUSTBVC.mjs";
3
+ } from "./chunk-KLICUQPV.mjs";
4
4
  import {
5
5
  seedSuperAdmin
6
- } from "./chunk-44JO5BSR.mjs";
6
+ } from "./chunk-DWV7GUKQ.mjs";
7
7
 
8
8
  // src/database/seeders/index.ts
9
9
  async function seedAll(adapter, options) {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  reloadNextlyConfig,
3
3
  resolveCollectionTableName
4
- } from "./chunk-XYV27NZL.mjs";
4
+ } from "./chunk-OVQCDNU3.mjs";
5
5
  import {
6
6
  runBootTimeApplyIfDev
7
- } from "./chunk-7PLW6Z3L.mjs";
7
+ } from "./chunk-AKK5Q5SX.mjs";
8
8
  import {
9
9
  buildClaims,
10
10
  signAccessToken
@@ -14,7 +14,7 @@ import {
14
14
  isServicesRegistered,
15
15
  registerServices,
16
16
  shutdownServices
17
- } from "./chunk-QIGAYTZD.mjs";
17
+ } from "./chunk-7MA6UATK.mjs";
18
18
  import {
19
19
  AuthService,
20
20
  PermissionService,
@@ -22,7 +22,7 @@ import {
22
22
  RoleService,
23
23
  UserAccountService,
24
24
  transformRichTextFields
25
- } from "./chunk-QSE7KMHI.mjs";
25
+ } from "./chunk-KPCSDPFQ.mjs";
26
26
  import {
27
27
  env
28
28
  } from "./chunk-HREB7UR4.mjs";
@@ -2369,7 +2369,7 @@ var debounceCache = globalThis;
2369
2369
  var _reloaderFn = null;
2370
2370
  async function getReloader() {
2371
2371
  if (_reloaderFn) return _reloaderFn;
2372
- const { reloadNextlyConfig: reloadNextlyConfig2 } = await import("./reload-config-RWRAPMQG.mjs");
2372
+ const { reloadNextlyConfig: reloadNextlyConfig2 } = await import("./reload-config-5P3IUF6O.mjs");
2373
2373
  return reloadNextlyConfig2;
2374
2374
  }
2375
2375
  function scheduleReload() {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CreatePermissionSchema,
3
3
  ServiceContainer
4
- } from "./chunk-QSE7KMHI.mjs";
4
+ } from "./chunk-KPCSDPFQ.mjs";
5
5
 
6
6
  // src/database/seeders/permissions.ts
7
7
  var RESOURCES = ["users", "roles", "permissions"];
@@ -288,7 +288,7 @@ var AuthService = class extends BaseService {
288
288
  }
289
289
  let newUser;
290
290
  try {
291
- const userService = new (await import("./users-OA643XPO.mjs")).UsersService(this.adapter, this.logger);
291
+ const userService = new (await import("./users-Q773BQCU.mjs")).UsersService(this.adapter, this.logger);
292
292
  newUser = await userService.createLocalUser({
293
293
  email: userData.email,
294
294
  name: userData.name ?? "User",
@@ -14452,6 +14452,81 @@ var CollectionEntryService = class extends BaseService {
14452
14452
 
14453
14453
  // src/domains/collections/services/collection-relationship-service.ts
14454
14454
  import { eq as eq11, inArray as inArray6, sql as sql5 } from "drizzle-orm";
14455
+
14456
+ // src/shared/lib/get-base-url.ts
14457
+ function getBaseUrl(override) {
14458
+ const raw = override?.trim() || env.NEXT_PUBLIC_APP_URL?.trim();
14459
+ const url = raw || "http://localhost:3000";
14460
+ return url.replace(/\/+$/, "");
14461
+ }
14462
+
14463
+ // src/lib/media-variant.ts
14464
+ function getMediaVariant(media, name, options = {}) {
14465
+ if (!media) return void 0;
14466
+ const { fallback, preferThumbnail = true } = options;
14467
+ const sizes = media.sizes ?? null;
14468
+ if (sizes) {
14469
+ const direct = sizes[name];
14470
+ if (direct?.url) return direct.url;
14471
+ if (fallback) {
14472
+ const fb = sizes[fallback];
14473
+ if (fb?.url) return fb.url;
14474
+ }
14475
+ }
14476
+ if (preferThumbnail && media.thumbnailUrl) return media.thumbnailUrl;
14477
+ return media.url;
14478
+ }
14479
+ function getSmallestMediaVariant(media) {
14480
+ if (!media) return void 0;
14481
+ const sizes = media.sizes ?? null;
14482
+ if (sizes) {
14483
+ const entries = Object.values(sizes).filter(
14484
+ (v) => v?.url && v.width && v.height
14485
+ );
14486
+ if (entries.length > 0) {
14487
+ const smallest = entries.reduce(
14488
+ (acc, cur) => (cur.width ?? 0) * (cur.height ?? 0) < (acc.width ?? 0) * (acc.height ?? 0) ? cur : acc
14489
+ );
14490
+ return smallest.url;
14491
+ }
14492
+ }
14493
+ return media.thumbnailUrl ?? media.url;
14494
+ }
14495
+ function getMediaBaseUrl() {
14496
+ return getBaseUrl();
14497
+ }
14498
+ function isAbsoluteUrl(url) {
14499
+ return /^(?:[a-z][a-z0-9+.-]*:)?\/\//i.test(url);
14500
+ }
14501
+ function toAbsoluteMediaUrl(url, baseUrl = getMediaBaseUrl()) {
14502
+ if (!url) return url;
14503
+ if (isAbsoluteUrl(url)) return url;
14504
+ const path3 = url.startsWith("/") ? url : `/${url}`;
14505
+ return `${baseUrl}${path3}`;
14506
+ }
14507
+ function absolutizeMediaUrls(row, baseUrl = getMediaBaseUrl()) {
14508
+ const sizes = row.sizes;
14509
+ let absolutizedSizes = sizes ?? null;
14510
+ if (sizes && typeof sizes === "object") {
14511
+ absolutizedSizes = Object.fromEntries(
14512
+ Object.entries(sizes).map(([name, variant]) => [
14513
+ name,
14514
+ variant && typeof variant === "object" ? {
14515
+ ...variant,
14516
+ url: toAbsoluteMediaUrl(variant.url ?? null, baseUrl)
14517
+ } : variant
14518
+ ])
14519
+ );
14520
+ }
14521
+ return {
14522
+ ...row,
14523
+ url: toAbsoluteMediaUrl(row.url ?? null, baseUrl),
14524
+ thumbnailUrl: toAbsoluteMediaUrl(row.thumbnailUrl ?? null, baseUrl),
14525
+ ...sizes !== void 0 ? { sizes: absolutizedSizes } : {}
14526
+ };
14527
+ }
14528
+
14529
+ // src/domains/collections/services/collection-relationship-service.ts
14455
14530
  var DEFAULT_RELATIONSHIP_DEPTH = 2;
14456
14531
  var MAX_RELATIONSHIP_DEPTH = 5;
14457
14532
  function isRelationshipField3(field) {
@@ -15377,7 +15452,10 @@ var CollectionRelationshipService = class extends BaseService {
15377
15452
  return [];
15378
15453
  }
15379
15454
  const rows = await this.db.select().from(mediaTable).where(inArray6(mediaTable.id, ids));
15380
- return rows.map((row) => keysToCamelCase(row));
15455
+ return rows.map((row) => {
15456
+ const camel = keysToCamelCase(row);
15457
+ return absolutizeMediaUrls(camel);
15458
+ });
15381
15459
  } catch (error) {
15382
15460
  console.error("Failed to fetch media by IDs:", error);
15383
15461
  return [];
@@ -18434,8 +18512,8 @@ var MediaService2 = class {
18434
18512
  width: data.width,
18435
18513
  height: data.height,
18436
18514
  duration: data.duration,
18437
- url: data.url,
18438
- thumbnailUrl: data.thumbnailUrl,
18515
+ url: toAbsoluteMediaUrl(data.url),
18516
+ thumbnailUrl: toAbsoluteMediaUrl(data.thumbnailUrl),
18439
18517
  altText: data.altText,
18440
18518
  caption: data.caption,
18441
18519
  tags: data.tags,
@@ -20205,7 +20283,7 @@ var COLLECTIONS_METHODS = {
20205
20283
  );
20206
20284
  }
20207
20285
  try {
20208
- const { bumpSchemaVersion } = await import("./routeHandler-7JQSAJFL.mjs");
20286
+ const { bumpSchemaVersion } = await import("./routeHandler-P2KXM7MH.mjs");
20209
20287
  bumpSchemaVersion();
20210
20288
  } catch {
20211
20289
  }
@@ -25436,6 +25514,10 @@ export {
25436
25514
  transformRichTextFields,
25437
25515
  resolveStatusFilter,
25438
25516
  CollectionEntryService,
25517
+ getBaseUrl,
25518
+ getMediaVariant,
25519
+ getSmallestMediaVariant,
25520
+ toAbsoluteMediaUrl,
25439
25521
  CollectionRelationshipService,
25440
25522
  clampLimit2,
25441
25523
  parseWhereQuery,
@@ -35,7 +35,7 @@ function resolveCollectionTableName(slug, dbName) {
35
35
 
36
36
  // src/init/reload-config.ts
37
37
  async function defaultResolver(name) {
38
- const { getService } = await import("./register-CQU3Z4SW.mjs");
38
+ const { getService } = await import("./register-O2CJDFCK.mjs");
39
39
  return getService(name);
40
40
  }
41
41
  async function reloadNextlyConfig(opts) {
@@ -5,7 +5,7 @@ import {
5
5
  PermissionService,
6
6
  RolePermissionService,
7
7
  SYSTEM_RESOURCES
8
- } from "./chunk-QSE7KMHI.mjs";
8
+ } from "./chunk-KPCSDPFQ.mjs";
9
9
  import {
10
10
  BaseRegistryService,
11
11
  assertGlobalResourceSlugAvailable
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-XIKEJO27.mjs";
12
12
  import {
13
13
  getCachedNextly
14
- } from "./chunk-PDMNLA74.mjs";
14
+ } from "./chunk-HLTSQIP6.mjs";
15
15
  import {
16
16
  respondAction
17
17
  } from "./chunk-IUDOC7N7.mjs";
@@ -9,7 +9,7 @@ if (existsSync(envPath)) {
9
9
  config({ path: envPath });
10
10
  }
11
11
  async function main() {
12
- const { createProgram } = await import("../program-DWF3GBYR.mjs");
12
+ const { createProgram } = await import("../program-TOV63II7.mjs");
13
13
  const { createLogger } = await import("../logger-NU46DXNY.mjs");
14
14
  const { NextlyError } = await import("../errors/index.mjs");
15
15
  const telemetry = await import("../dist-M2NOU37V.mjs");
@@ -1,5 +1,5 @@
1
- import { S as SanitizedNextlyConfig } from '../../_dts-chunks/config.d-gCEU-kSb.d.ts';
2
- import '../../_dts-chunks/collections-handler.d-DAGa4oyr.d.ts';
1
+ import { S as SanitizedNextlyConfig } from '../../_dts-chunks/config.d-D8eInFE5.d.ts';
2
+ import '../../_dts-chunks/collections-handler.d-B3iNFGJv.d.ts';
3
3
  import '@nextlyhq/adapter-drizzle';
4
4
  import '@nextlyhq/adapter-drizzle/types';
5
5
  import 'drizzle-orm/pg-core';
package/dist/config.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { A as ALL_FIELD_TYPES, a as AccessFunction, B as BaseFieldConfig, C as CellComponentProps, b as CheckboxFieldAdminOptions, c as CheckboxFieldConfig, d as CheckboxFieldValue, e as ChipsFieldAdminOptions, f as ChipsFieldConfig, g as ChipsFieldValue, h as CodeEditorOptions, i as CodeFieldAdminOptions, j as CodeFieldConfig, k as CodeFieldValue, l as CodeLanguage, m as CollectionAccessControl, n as CollectionAdminOptions, o as CollectionConfig, p as CollectionHooks, q as CollectionLabels, r as CollectionPagination, s as ComponentAdminOptions, t as ComponentConfig, u as ComponentFieldConfig, v as ComponentLabel, w as CustomEndpoint, D as DATA_FIELD_TYPES, x as DataFieldConfig, y as DataFieldType, z as DateFieldAdminOptions, E as DateFieldConfig, F as DateFieldValue, G as DatePickerAppearance, H as DatePickerOptions, I as EmailFieldAdminOptions, J as EmailFieldConfig, K as EmailFieldValue, L as FieldAccess, M as FieldAdminOptions, N as FieldComponentProps, O as FieldCondition, P as FieldConfig, Q as FieldHooks, R as FieldType, S as FieldValidation, T as FilterComponentProps, U as FilterOptionsArgs, V as FilterOptionsFunction, W as GroupFieldAdminOptions, X as GroupFieldConfig, Y as GroupFieldConfig_FieldConfig, Z as GroupFieldValue, _ as HookContext, $ as HookHandler, a0 as HttpMethod, a1 as JSONEditorOptions, a2 as JSONFieldAdminOptions, a3 as JSONFieldConfig, a4 as JSONFieldValue, a5 as JSONSchemaDefinition, a6 as JSONSchemaProperty, a7 as JSONSchemaType, a8 as JoinFieldAdminOptions, a9 as JoinFieldConfig, aa as JoinFieldWhere, ab as NumberFieldAdminOptions, ac as NumberFieldConfig, ad as NumberFieldValue, ae as NumberFilterOperator, af as PasswordFieldAdminOptions, ag as PasswordFieldConfig, ah as PasswordFieldValue, ai as RadioFieldAdminOptions, aj as RadioFieldConfig, ak as RadioFieldValue, al as RadioLayout, am as RelationshipAppearance, an as RelationshipFieldAdminOptions, ao as RelationshipFieldConfig, ap as RelationshipFieldValue, aq as RelationshipFilterOptions, ar as RelationshipFilterOptionsArgs, as as RelationshipFilterOptionsFunction, at as RelationshipFilterQuery, au as RelationshipPolymorphicValue, av as RelationshipSingleValue, aw as RelationshipSortOptions, ax as RepeaterFieldAdminOptions, ay as RepeaterFieldConfig, az as RepeaterFieldLabels, aA as RepeaterFieldValue, aB as RepeaterRowLabelProps, aC as RepeaterRowValue, aD as RequestContext, aE as RichTextFeature, aF as RichTextFieldAdminOptions, aG as RichTextFieldConfig, aH as RichTextFieldValue, aI as RichTextNode, aJ as RichTextValue, aK as SelectFieldAdminOptions, aL as SelectFieldConfig, aM as SelectFieldValue, aN as SelectOption, aO as SingleAccessControl, aP as SingleAdminOptions, aQ as SingleConfig, aR as SingleHooks, aS as SingleLabel, aT as StringFilterOperator, aU as TextFieldAdminOptions, aV as TextFieldConfig, aW as TextFieldValue, aX as TextareaFieldAdminOptions, aY as TextareaFieldConfig, aZ as TextareaFieldValue, a_ as UploadFieldAdminOptions, a$ as UploadFieldConfig, b0 as UploadFieldValue, b1 as UploadFilterOptions, b2 as UploadFilterOptionsArgs, b3 as UploadFilterOptionsFunction, b4 as UploadFilterQuery, b5 as UploadPolymorphicValue, b6 as UploadSingleValue, b7 as VIRTUAL_FIELD_TYPES, b8 as VirtualFieldConfig, b9 as VirtualFieldType, ba as defineCollection } from './_dts-chunks/collections-handler.d-DAGa4oyr.d.ts';
2
- export { a as array, c as checkbox, b as chips, d as code, e as component, f as date, g as defineComponent, h as defineConfig, i as defineSingle, j as email, k as group, l as hasNestedFields, m as isCheckboxField, n as isChipsField, o as isCodeField, p as isComponentField, q as isDataField, r as isDateField, s as isEmailField, t as isGroupField, u as isJSONField, v as isNumberField, w as isPasswordField, x as isRadioField, y as isRelationalField, z as isRelationshipField, A as isRepeaterField, B as isRichTextField, C as isSelectField, D as isTextField, E as isTextareaField, F as isUploadField, G as json, H as number, I as option, J as password, K as radio, L as relationship, M as repeater, N as richText, O as select, P as text, Q as textarea, R as upload } from './_dts-chunks/define-component.d-B5ffJpKw.d.ts';
1
+ export { A as ALL_FIELD_TYPES, a as AccessFunction, B as BaseFieldConfig, C as CellComponentProps, b as CheckboxFieldAdminOptions, c as CheckboxFieldConfig, d as CheckboxFieldValue, e as ChipsFieldAdminOptions, f as ChipsFieldConfig, g as ChipsFieldValue, h as CodeEditorOptions, i as CodeFieldAdminOptions, j as CodeFieldConfig, k as CodeFieldValue, l as CodeLanguage, m as CollectionAccessControl, n as CollectionAdminOptions, o as CollectionConfig, p as CollectionHooks, q as CollectionLabels, r as CollectionPagination, s as ComponentAdminOptions, t as ComponentConfig, u as ComponentFieldConfig, v as ComponentLabel, w as CustomEndpoint, D as DATA_FIELD_TYPES, x as DataFieldConfig, y as DataFieldType, z as DateFieldAdminOptions, E as DateFieldConfig, F as DateFieldValue, G as DatePickerAppearance, H as DatePickerOptions, I as EmailFieldAdminOptions, J as EmailFieldConfig, K as EmailFieldValue, L as FieldAccess, M as FieldAdminOptions, N as FieldComponentProps, O as FieldCondition, P as FieldConfig, Q as FieldHooks, R as FieldType, S as FieldValidation, T as FilterComponentProps, U as FilterOptionsArgs, V as FilterOptionsFunction, W as GroupFieldAdminOptions, X as GroupFieldConfig, Y as GroupFieldConfig_FieldConfig, Z as GroupFieldValue, _ as HookContext, $ as HookHandler, a0 as HttpMethod, a1 as JSONEditorOptions, a2 as JSONFieldAdminOptions, a3 as JSONFieldConfig, a4 as JSONFieldValue, a5 as JSONSchemaDefinition, a6 as JSONSchemaProperty, a7 as JSONSchemaType, a8 as JoinFieldAdminOptions, a9 as JoinFieldConfig, aa as JoinFieldWhere, ab as NumberFieldAdminOptions, ac as NumberFieldConfig, ad as NumberFieldValue, ae as NumberFilterOperator, af as PasswordFieldAdminOptions, ag as PasswordFieldConfig, ah as PasswordFieldValue, ai as RadioFieldAdminOptions, aj as RadioFieldConfig, ak as RadioFieldValue, al as RadioLayout, am as RelationshipAppearance, an as RelationshipFieldAdminOptions, ao as RelationshipFieldConfig, ap as RelationshipFieldValue, aq as RelationshipFilterOptions, ar as RelationshipFilterOptionsArgs, as as RelationshipFilterOptionsFunction, at as RelationshipFilterQuery, au as RelationshipPolymorphicValue, av as RelationshipSingleValue, aw as RelationshipSortOptions, ax as RepeaterFieldAdminOptions, ay as RepeaterFieldConfig, az as RepeaterFieldLabels, aA as RepeaterFieldValue, aB as RepeaterRowLabelProps, aC as RepeaterRowValue, aD as RequestContext, aE as RichTextFeature, aF as RichTextFieldAdminOptions, aG as RichTextFieldConfig, aH as RichTextFieldValue, aI as RichTextNode, aJ as RichTextValue, aK as SelectFieldAdminOptions, aL as SelectFieldConfig, aM as SelectFieldValue, aN as SelectOption, aO as SingleAccessControl, aP as SingleAdminOptions, aQ as SingleConfig, aR as SingleHooks, aS as SingleLabel, aT as StringFilterOperator, aU as TextFieldAdminOptions, aV as TextFieldConfig, aW as TextFieldValue, aX as TextareaFieldAdminOptions, aY as TextareaFieldConfig, aZ as TextareaFieldValue, a_ as UploadFieldAdminOptions, a$ as UploadFieldConfig, b0 as UploadFieldValue, b1 as UploadFilterOptions, b2 as UploadFilterOptionsArgs, b3 as UploadFilterOptionsFunction, b4 as UploadFilterQuery, b5 as UploadPolymorphicValue, b6 as UploadSingleValue, b7 as VIRTUAL_FIELD_TYPES, b8 as VirtualFieldConfig, b9 as VirtualFieldType, ba as defineCollection } from './_dts-chunks/collections-handler.d-B3iNFGJv.d.ts';
2
+ export { a as array, c as checkbox, b as chips, d as code, e as component, f as date, g as defineComponent, h as defineConfig, i as defineSingle, j as email, k as group, l as hasNestedFields, m as isCheckboxField, n as isChipsField, o as isCodeField, p as isComponentField, q as isDataField, r as isDateField, s as isEmailField, t as isGroupField, u as isJSONField, v as isNumberField, w as isPasswordField, x as isRadioField, y as isRelationalField, z as isRelationshipField, A as isRepeaterField, B as isRichTextField, C as isSelectField, D as isTextField, E as isTextareaField, F as isUploadField, G as json, H as number, I as option, J as password, K as radio, L as relationship, M as repeater, N as richText, O as select, P as text, Q as textarea, R as upload } from './_dts-chunks/define-component.d-COeEsUOT.d.ts';
3
3
  export { C as CollectionStorageConfig, a as CollectionStorageMap, S as StoragePlugin, b as StoragePluginConfig } from './_dts-chunks/image-processor.d-OO1PmMrv.d.ts';
4
- export { D as DatabaseConfig, N as NextlyConfig, R as RateLimitRecord, a as RateLimitStore, b as RateLimitingConfig, S as SanitizedNextlyConfig, c as SanitizedRateLimitingConfig, T as TypeScriptConfig, s as sanitizeConfig } from './_dts-chunks/config.d-gCEU-kSb.d.ts';
4
+ export { D as DatabaseConfig, N as NextlyConfig, R as RateLimitRecord, a as RateLimitStore, b as RateLimitingConfig, S as SanitizedNextlyConfig, c as SanitizedRateLimitingConfig, T as TypeScriptConfig, s as sanitizeConfig } from './_dts-chunks/config.d-D8eInFE5.d.ts';
5
5
  import '@nextlyhq/adapter-drizzle';
6
6
  import '@nextlyhq/adapter-drizzle/types';
7
7
  import 'drizzle-orm/pg-core';
@@ -1,7 +1,7 @@
1
- export { A as AdapterConfig, a as AdapterType, D as DbError, b as DbErrorKind, H as HealthCheckResult, i as checkAdapterHealth, j as createAdapter, k as createAdapterFromEnv, o as env, p as getDialectTables, q as healthCheck, r as isDbError, s as schema, t as toDbError, v as validateDatabaseEnv, w as withDbErrors } from '../_dts-chunks/index.d-BhMtxT6M.d.ts';
1
+ export { A as AdapterConfig, a as AdapterType, D as DbError, b as DbErrorKind, H as HealthCheckResult, i as checkAdapterHealth, j as createAdapter, k as createAdapterFromEnv, o as env, p as getDialectTables, q as healthCheck, r as isDbError, s as schema, t as toDbError, v as validateDatabaseEnv, w as withDbErrors } from '../_dts-chunks/index.d-qjDq8N63.d.ts';
2
2
  import 'drizzle-orm';
3
3
  import 'drizzle-orm/pg-core';
4
- import '../_dts-chunks/collections-handler.d-DAGa4oyr.d.ts';
4
+ import '../_dts-chunks/collections-handler.d-B3iNFGJv.d.ts';
5
5
  import '@nextlyhq/adapter-drizzle';
6
6
  import '@nextlyhq/adapter-drizzle/types';
7
7
  import 'react';
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  seedAll
3
- } from "../../chunk-KTGUSU23.mjs";
3
+ } from "../../chunk-GJIHOHY5.mjs";
4
4
  import {
5
5
  seedPermissions
6
- } from "../../chunk-LDUSTBVC.mjs";
6
+ } from "../../chunk-KLICUQPV.mjs";
7
7
  import {
8
8
  seedSuperAdmin
9
- } from "../../chunk-44JO5BSR.mjs";
10
- import "../../chunk-QSE7KMHI.mjs";
9
+ } from "../../chunk-DWV7GUKQ.mjs";
10
+ import "../../chunk-KPCSDPFQ.mjs";
11
11
  import "../../chunk-ERJGWWPB.mjs";
12
12
  import "../../chunk-AGJ6F2T3.mjs";
13
13
  import "../../chunk-KIMNCZGV.mjs";