nextjs-cms 0.5.56 → 0.5.58

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 (90) hide show
  1. package/dist/api/index.d.ts +82 -45
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/lib/serverActions.d.ts +68 -5
  4. package/dist/api/lib/serverActions.d.ts.map +1 -1
  5. package/dist/api/lib/serverActions.js +33 -8
  6. package/dist/api/root.d.ts +953 -44
  7. package/dist/api/root.d.ts.map +1 -1
  8. package/dist/api/root.js +2 -1
  9. package/dist/api/routers/accountSettings.d.ts +1 -3
  10. package/dist/api/routers/accountSettings.d.ts.map +1 -1
  11. package/dist/api/routers/admins.d.ts +1 -3
  12. package/dist/api/routers/admins.d.ts.map +1 -1
  13. package/dist/api/routers/admins.js +1 -1
  14. package/dist/api/routers/auth.d.ts +1 -3
  15. package/dist/api/routers/auth.d.ts.map +1 -1
  16. package/dist/api/routers/categorySection.d.ts +1 -3
  17. package/dist/api/routers/categorySection.d.ts.map +1 -1
  18. package/dist/api/routers/cmsSettings.d.ts +1 -3
  19. package/dist/api/routers/cmsSettings.d.ts.map +1 -1
  20. package/dist/api/routers/cpanel.d.ts +1 -3
  21. package/dist/api/routers/cpanel.d.ts.map +1 -1
  22. package/dist/api/routers/files.d.ts +1 -3
  23. package/dist/api/routers/files.d.ts.map +1 -1
  24. package/dist/api/routers/gallery.d.ts +1 -3
  25. package/dist/api/routers/gallery.d.ts.map +1 -1
  26. package/dist/api/routers/gallery.js +7 -6
  27. package/dist/api/routers/googleAnalytics.d.ts +1 -3
  28. package/dist/api/routers/googleAnalytics.d.ts.map +1 -1
  29. package/dist/api/routers/hasItemsSection.d.ts +49 -5
  30. package/dist/api/routers/hasItemsSection.d.ts.map +1 -1
  31. package/dist/api/routers/navigation.d.ts +1 -3
  32. package/dist/api/routers/navigation.d.ts.map +1 -1
  33. package/dist/api/routers/simpleSection.d.ts +21 -4
  34. package/dist/api/routers/simpleSection.d.ts.map +1 -1
  35. package/dist/api/trpc/query-client.d.ts +3 -0
  36. package/dist/api/trpc/query-client.d.ts.map +1 -0
  37. package/dist/api/trpc/query-client.js +23 -0
  38. package/dist/api/trpc/server.d.ts +8 -0
  39. package/dist/api/trpc/server.d.ts.map +1 -0
  40. package/dist/api/trpc/server.js +23 -0
  41. package/dist/api/trpc.d.ts +6 -17
  42. package/dist/api/trpc.d.ts.map +1 -1
  43. package/dist/api/trpc.js +6 -9
  44. package/dist/auth/react.js +1 -1
  45. package/dist/core/config/config-loader.d.ts +1 -1
  46. package/dist/core/config/config-loader.d.ts.map +1 -1
  47. package/dist/core/config/config-loader.js +9 -6
  48. package/dist/core/config/index.d.ts +1 -0
  49. package/dist/core/config/index.d.ts.map +1 -1
  50. package/dist/core/config/index.js +1 -0
  51. package/dist/core/config/loader-with-esbuild.d.ts +7 -0
  52. package/dist/core/config/loader-with-esbuild.d.ts.map +1 -0
  53. package/dist/core/config/loader-with-esbuild.js +98 -0
  54. package/dist/core/config/loader-with-jiti.d.ts +13 -0
  55. package/dist/core/config/loader-with-jiti.d.ts.map +1 -0
  56. package/dist/core/config/loader-with-jiti.js +162 -0
  57. package/dist/core/config/loader.d.ts +1 -1
  58. package/dist/core/config/loader.d.ts.map +1 -1
  59. package/dist/core/config/loader.js +1 -75
  60. package/dist/core/factories/SectionFactory.d.ts +1 -109
  61. package/dist/core/factories/SectionFactory.d.ts.map +1 -1
  62. package/dist/core/factories/SectionFactory.js +1 -452
  63. package/dist/core/factories/section-factory-with-esbuild.d.ts +110 -0
  64. package/dist/core/factories/section-factory-with-esbuild.d.ts.map +1 -0
  65. package/dist/core/factories/section-factory-with-esbuild.js +509 -0
  66. package/dist/core/factories/section-factory-with-jiti.d.ts +113 -0
  67. package/dist/core/factories/section-factory-with-jiti.d.ts.map +1 -0
  68. package/dist/core/factories/section-factory-with-jiti.js +556 -0
  69. package/dist/core/fields/document.d.ts +0 -1
  70. package/dist/core/fields/document.d.ts.map +1 -1
  71. package/dist/core/fields/document.js +5 -4
  72. package/dist/core/fields/photo.d.ts +10 -7
  73. package/dist/core/fields/photo.d.ts.map +1 -1
  74. package/dist/core/fields/photo.js +44 -17
  75. package/dist/core/fields/richText.d.ts +0 -1
  76. package/dist/core/fields/richText.d.ts.map +1 -1
  77. package/dist/core/fields/richText.js +5 -4
  78. package/dist/core/fields/video.d.ts +0 -1
  79. package/dist/core/fields/video.d.ts.map +1 -1
  80. package/dist/core/fields/video.js +5 -4
  81. package/dist/core/sections/section.d.ts +17 -15
  82. package/dist/core/sections/section.d.ts.map +1 -1
  83. package/dist/core/sections/section.js +28 -5
  84. package/dist/core/submit/submit.d.ts.map +1 -1
  85. package/dist/core/submit/submit.js +13 -12
  86. package/dist/translations/dictionaries/ar.json +1 -0
  87. package/dist/translations/dictionaries/en.json +1 -0
  88. package/dist/translations/index.d.ts.map +1 -1
  89. package/dist/translations/index.js +1 -3
  90. package/package.json +18 -9
@@ -8,7 +8,6 @@ import { customAlphabet } from 'nanoid';
8
8
  import { FileField } from './fileField.js';
9
9
  import { humanReadableFileSize } from '../../utils/index.js';
10
10
  import { getCMSConfig } from '../config/index.js';
11
- const cmsConfig = getCMSConfig();
12
11
  const sizeSchema = z.strictObject({
13
12
  width: z.number().describe('Image width in pixels'),
14
13
  height: z.number().describe('Image height in pixels'),
@@ -75,9 +74,10 @@ export class PhotoField extends FileField {
75
74
  maxFileSize;
76
75
  mimeType;
77
76
  extensions;
78
- thumbnail;
77
+ _thumbnail = undefined;
78
+ /** Thumbnail config passed via field options (may be undefined if using CMS defaults) */
79
+ _thumbnailConfig = undefined;
79
80
  removeExtension;
80
- uploadsFolder = cmsConfig.media.upload.path;
81
81
  /**
82
82
  * _file is the file object if it's present
83
83
  * Whereas the value is the path to the file
@@ -95,8 +95,8 @@ export class PhotoField extends FileField {
95
95
  this.blurPlaceholder = config.blurPlaceholder;
96
96
  this.size = config.size;
97
97
  this.maxFileSize = config.maxFileSize ?? { size: 2, unit: 'mb' };
98
- this.thumbnail = config.thumbnail ?? cmsConfig.media.images.thumbnail;
99
98
  this.removeExtension = config.removeExtension ?? true;
99
+ this._thumbnailConfig = config.thumbnail;
100
100
  this.extensions = config.fileType ?? ['jpeg'];
101
101
  /**
102
102
  * Replace 'jpg' with 'jpeg'
@@ -122,10 +122,36 @@ export class PhotoField extends FileField {
122
122
  this._allowedExtensions.push('jpg');
123
123
  }
124
124
  }
125
+ /**
126
+ * Get the thumbnail configuration.
127
+ * Uses user-provided config if available, otherwise fetches from CMS config.
128
+ * Note: getCMSConfig() handles caching with version checking internally.
129
+ */
130
+ async getThumbnail() {
131
+ // If user provided config, use it (no need to fetch CMS config)
132
+ if (this._thumbnailConfig) {
133
+ this._thumbnail = this._thumbnailConfig;
134
+ }
135
+ else {
136
+ // Always fetch fresh CMS config (getCMSConfig() is already cached with version checking)
137
+ const cmsConfig = await getCMSConfig();
138
+ this._thumbnail = cmsConfig.media.images.thumbnail;
139
+ }
140
+ return this._thumbnail;
141
+ }
142
+ async build() {
143
+ /**
144
+ * Make sure to resolve and cache the thumbnail config
145
+ */
146
+ await this.getThumbnail();
147
+ }
125
148
  exportForClient() {
149
+ if (this._thumbnail === undefined) {
150
+ throw new Error('PhotoField.build() must be called before exportForClient()');
151
+ }
126
152
  return {
127
153
  ...super.exportForClient(),
128
- thumbnail: this.thumbnail,
154
+ thumbnail: this._thumbnail,
129
155
  // watermark: this.watermark,
130
156
  // blurPlaceholder: this.blurPlaceholder,
131
157
  size: this.size,
@@ -148,8 +174,10 @@ export class PhotoField extends FileField {
148
174
  /**
149
175
  * If .photos, and 'sectionName' folders don't exist, create them
150
176
  */
151
- const photosFolder = path.join(this.uploadsFolder, '.photos', this._folder);
152
- const thumbsFolder = path.join(this.uploadsFolder, '.thumbs', this._folder);
177
+ const thumbnail = await this.getThumbnail();
178
+ const uploadsFolder = (await getCMSConfig()).media.upload.path;
179
+ const photosFolder = path.join(uploadsFolder, '.photos', this._folder);
180
+ const thumbsFolder = path.join(uploadsFolder, '.thumbs', this._folder);
153
181
  if (!fs.existsSync(photosFolder)) {
154
182
  fs.mkdirSync(photosFolder, { recursive: true });
155
183
  }
@@ -168,12 +196,10 @@ export class PhotoField extends FileField {
168
196
  fit: 'cover',
169
197
  })
170
198
  .webp()
171
- .toFile(path.join(this.uploadsFolder, '.photos', this._folder, this.value));
199
+ .toFile(path.join(uploadsFolder, '.photos', this._folder, this.value));
172
200
  }
173
201
  else {
174
- await this._sharpImage
175
- .clone()
176
- .toFile(path.join(this.uploadsFolder, '.photos', this._folder, this.value));
202
+ await this._sharpImage.clone().toFile(path.join(uploadsFolder, '.photos', this._folder, this.value));
177
203
  }
178
204
  /**
179
205
  * Also, write a thumbnail
@@ -181,14 +207,14 @@ export class PhotoField extends FileField {
181
207
  await this._sharpImage
182
208
  .clone()
183
209
  .resize({
184
- width: this.thumbnail.width,
185
- height: this.thumbnail.height,
186
- fit: this.thumbnail.crop ? 'cover' : 'contain',
210
+ width: thumbnail.width,
211
+ height: thumbnail.height,
212
+ fit: thumbnail.crop ? 'cover' : 'contain',
187
213
  })
188
214
  .webp({
189
- quality: this.thumbnail.quality || 80,
215
+ quality: thumbnail.quality ?? 80,
190
216
  })
191
- .toFile(path.join(this.uploadsFolder, '.thumbs', this._folder, this.value));
217
+ .toFile(path.join(uploadsFolder, '.thumbs', this._folder, this.value));
192
218
  }
193
219
  catch (error) {
194
220
  throw new Error(`${this.label}: Error writing file to disk ${error.message}`);
@@ -207,7 +233,8 @@ export class PhotoField extends FileField {
207
233
  throw new Error(`${this.label}: Folder is not set. Make sure to set the folder before writing the file to disk`);
208
234
  }
209
235
  try {
210
- const pathToFile = path.join(this.uploadsFolder, '.photos', this._folder, this.value);
236
+ const uploadsFolder = (await getCMSConfig()).media.upload.path;
237
+ const pathToFile = path.join(uploadsFolder, '.photos', this._folder, this.value);
211
238
  await fs.promises.unlink(pathToFile);
212
239
  }
213
240
  catch (error) {
@@ -95,7 +95,6 @@ export declare class RichTextField extends Field<'rich_text', Config> {
95
95
  readonly allowImageUploads: z.infer<typeof allowImageUploadsSchema> | false;
96
96
  readonly sanitize: boolean;
97
97
  private _inlinePhotos;
98
- readonly uploadsFolder: string;
99
98
  constructor(config: BaseFieldConfig<Config>);
100
99
  /**
101
100
  * Get the value of the field
@@ -1 +1 @@
1
- {"version":3,"file":"richText.d.ts","sourceRoot":"","sources":["../../../src/core/fields/richText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAcxB,QAAA,MAAM,uBAAuB;IACzB;;;;;OAKG;;;;;;;;;;;;;;;;;;IAgBH;;OAEG;;;;;;;;kBAGL,CAAA;AAkCF,QAAA,MAAM,YAAY;;;;;;;QA5Dd;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;kCAwCL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,aAAc,SAAQ,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IACzD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAkB;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAAG,KAAK,CAAA;IAC3E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAE1B,OAAO,CAAC,aAAa,CAIb;IAER,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAmC;gBAErD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;IAsB3C;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIF,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAY/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB,aAAa;IAWb;;OAEG;IACH,mBAAmB;IAuBb,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IA2C3D;;OAEG;IACG,oBAAoB;IA0BJ,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAYnG,yBAAyB;CA2D1C;AAED,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAWpF,QAAA,MAAM,aAAa;;;;;;;QA7Uf;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAyTL,CAAA;AAEF,QAAA,MAAM,yBAAyB;;;;;;;QAlV3B;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAoUN,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,mBAAmB,CAmBvF"}
1
+ {"version":3,"file":"richText.d.ts","sourceRoot":"","sources":["../../../src/core/fields/richText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAcxB,QAAA,MAAM,uBAAuB;IACzB;;;;;OAKG;;;;;;;;;;;;;;;;;;IAgBH;;OAEG;;;;;;;;kBAGL,CAAA;AAkCF,QAAA,MAAM,YAAY;;;;;;;QA5Dd;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;kCAwCL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,aAAc,SAAQ,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;IACzD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAkB;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAAG,KAAK,CAAA;IAC3E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAE1B,OAAO,CAAC,aAAa,CAIb;gBAEI,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;IAsB3C;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIF,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAY/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB,aAAa;IAWb;;OAEG;IACH,mBAAmB;IAuBb,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IA4C3D;;OAEG;IACG,oBAAoB;IA0BJ,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAYnG,yBAAyB;CA4D1C;AAED,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAWpF,QAAA,MAAM,aAAa;;;;;;;QA7Uf;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAyTL,CAAA;AAEF,QAAA,MAAM,yBAAyB;;;;;;;QAlV3B;;;;;WAKG;;;;;;;;;;;;;;;;;;QAgBH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAoUN,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,mBAAmB,CAmBvF"}
@@ -82,7 +82,6 @@ export class RichTextField extends Field {
82
82
  allowImageUploads;
83
83
  sanitize;
84
84
  _inlinePhotos = [];
85
- uploadsFolder = getCMSConfig().media.upload.path;
86
85
  constructor(config) {
87
86
  super(config, 'rich_text');
88
87
  this.maxLength = config.maxLength;
@@ -178,7 +177,8 @@ export class RichTextField extends Field {
178
177
  /**
179
178
  * If .photos, and 'sectionName' folders don't exist, create them
180
179
  */
181
- const photosFolder = path.join(this.uploadsFolder, '.photos', sectionName);
180
+ const uploadsFolder = (await getCMSConfig()).media.upload.path;
181
+ const photosFolder = path.join(uploadsFolder, '.photos', sectionName);
182
182
  if (!fs.existsSync(photosFolder)) {
183
183
  fs.mkdirSync(photosFolder, { recursive: true });
184
184
  }
@@ -195,7 +195,7 @@ export class RichTextField extends Field {
195
195
  const image = sharp(buffer);
196
196
  await image
197
197
  .toFormat(this.allowImageUploads.format ?? 'webp')
198
- .toFile(path.join(this.uploadsFolder, '.photos', sectionName, photo.name));
198
+ .toFile(path.join(uploadsFolder, '.photos', sectionName, photo.name));
199
199
  /**
200
200
  * Insert the image into the database
201
201
  */
@@ -285,7 +285,8 @@ export class RichTextField extends Field {
285
285
  * Delete the photo from disk
286
286
  */
287
287
  try {
288
- await fs.promises.unlink(path.join(this.uploadsFolder, '.photos', sectionName, tablePhoto.name));
288
+ const uploadsFolder = (await getCMSConfig()).media.upload.path;
289
+ await fs.promises.unlink(path.join(uploadsFolder, '.photos', sectionName, tablePhoto.name));
289
290
  }
290
291
  catch (error) {
291
292
  console.log(`${this.label}: Error deleting file from disk`);
@@ -40,7 +40,6 @@ export declare class VideoField extends FileField<'video', Config> {
40
40
  private _buffer;
41
41
  private _folder;
42
42
  private _allowedExtensions;
43
- readonly uploadsFolder: string;
44
43
  constructor(config: BaseFieldConfig<Config>, file?: File);
45
44
  exportForClient(): {
46
45
  maxFileSize: {
@@ -1 +1 @@
1
- {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/core/fields/video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAIhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,QAAA,MAAM,YAAY;IACd;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;kBAKL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,UAAW,SAAQ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACtD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAe;IAC5D,QAAQ,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAA;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;IAE7B;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAU;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAmC;gBACrD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI;IA6BxC,eAAe;;kBA1CD,MAAM;kBAAQ,IAAI,GAAG,IAAI;;;;;;;;;;;;;IAmDjD,iBAAiB,CAAC,EACpB,WAAW,EACX,MAAM,EACN,aAAiB,GACpB,EAAE;QACC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;QACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAClC,GAAG,OAAO,CAAC,UAAU,CAAC;IAevB;;OAEG;IACG,WAAW;IAiCK,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAczD;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIX,WAAW,CAAC,KAAK,EAAE,MAAM;IAIvB,QAAQ,CAAC,KAAK,EAAE,GAAG;IAQnB,OAAO,CAAC,IAAI,EAAE,IAAI;IAK3B,aAAa;IAYb;;OAEG;IACG,oBAAoB;CAoD7B;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAE9E,QAAA,MAAM,aAAa;IAxPf;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;;;;;;;;kBA8OL,CAAA;AAEF,QAAA,MAAM,sBAAsB;;;IA7PxB;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;;;;;;;;kBAoPL,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,gBAAgB,CAmBjF"}
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/core/fields/video.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAIhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,QAAA,MAAM,YAAY;IACd;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;kBAKL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,UAAW,SAAQ,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACtD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAe;IAC5D,QAAQ,CAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAA;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAA;IAE7B;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAU;gBACxB,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI;IA6BxC,eAAe;;kBAzCD,MAAM;kBAAQ,IAAI,GAAG,IAAI;;;;;;;;;;;;;IAkDjD,iBAAiB,CAAC,EACpB,WAAW,EACX,MAAM,EACN,aAAiB,GACpB,EAAE;QACC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;QACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAClC,GAAG,OAAO,CAAC,UAAU,CAAC;IAevB;;OAEG;IACG,WAAW;IA+BK,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAezD;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIX,WAAW,CAAC,KAAK,EAAE,MAAM;IAIvB,QAAQ,CAAC,KAAK,EAAE,GAAG;IAQnB,OAAO,CAAC,IAAI,EAAE,IAAI;IAK3B,aAAa;IAYb;;OAEG;IACG,oBAAoB;CAoD7B;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAE9E,QAAA,MAAM,aAAa;IAtPf;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;;;;;;;;kBA4OL,CAAA;AAEF,QAAA,MAAM,sBAAsB;;;IA3PxB;;OAEG;;;;;;;;IAQH;;;OAGG;;;;;;;;;;;;;kBAkPL,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAErE;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,gBAAgB,CAmBjF"}
@@ -39,7 +39,6 @@ export class VideoField extends FileField {
39
39
  _buffer;
40
40
  _folder;
41
41
  _allowedExtensions;
42
- uploadsFolder = getCMSConfig().media.upload.path;
43
42
  constructor(config, file) {
44
43
  super(config, 'video');
45
44
  this._file = file;
@@ -104,14 +103,15 @@ export class VideoField extends FileField {
104
103
  /**
105
104
  * If .videos, and 'sectionName' folders don't exist, create them
106
105
  */
107
- const vdieosFolder = path.join(this.uploadsFolder, '.videos', this._folder);
106
+ const uploadsFolder = (await getCMSConfig()).media.upload.path;
107
+ const vdieosFolder = path.join(uploadsFolder, '.videos', this._folder);
108
108
  if (!fs.existsSync(vdieosFolder)) {
109
109
  fs.mkdirSync(vdieosFolder, { recursive: true });
110
110
  }
111
111
  /**
112
112
  * Write the file to disk
113
113
  */
114
- await fs.promises.writeFile(path.join(this.uploadsFolder, '.videos', this._folder, this.value), this._buffer);
114
+ await fs.promises.writeFile(path.join(uploadsFolder, '.videos', this._folder, this.value), this._buffer);
115
115
  }
116
116
  catch (error) {
117
117
  throw new Error(`${this.label}: Error writing file to disk ${error.message}`);
@@ -126,7 +126,8 @@ export class VideoField extends FileField {
126
126
  throw new Error(`${this.label}: Folder is not set. Make sure to set the folder before writing the file to disk`);
127
127
  }
128
128
  try {
129
- const pathToFile = path.join(this.uploadsFolder, '.videos', this._folder, this.value);
129
+ const uploadsFolder = (await getCMSConfig()).media.upload.path;
130
+ const pathToFile = path.join(uploadsFolder, '.videos', this._folder, this.value);
130
131
  await fs.promises.unlink(pathToFile);
131
132
  }
132
133
  catch (error) {
@@ -123,21 +123,8 @@ export declare abstract class Section<TExtraSectionConfig extends object = objec
123
123
  order: number;
124
124
  icon: string | undefined;
125
125
  readonly: boolean;
126
- gallery?: {
127
- db: {
128
- tableName: string;
129
- referenceIdentifierField: string;
130
- photoNameField: string;
131
- metaField: string;
132
- };
133
- watermark?: boolean;
134
- thumbnail?: {
135
- width: number;
136
- height: number;
137
- crop: boolean;
138
- quality: number;
139
- };
140
- };
126
+ private _gallery?;
127
+ private readonly _galleryConfig?;
141
128
  private _fields;
142
129
  private readonly _fieldGroupConfigs;
143
130
  private readonly _hasFieldGroups;
@@ -183,6 +170,21 @@ export declare abstract class Section<TExtraSectionConfig extends object = objec
183
170
  * Value is cached during construction for optimal performance.
184
171
  */
185
172
  private get hasFieldGroups();
173
+ getGallery(): Promise<{
174
+ db: {
175
+ tableName: string;
176
+ referenceIdentifierField: string;
177
+ photoNameField: string;
178
+ metaField: string;
179
+ };
180
+ watermark?: boolean;
181
+ thumbnail?: {
182
+ width: number;
183
+ height: number;
184
+ crop: boolean;
185
+ quality: number;
186
+ };
187
+ } | undefined>;
186
188
  private buildFieldGroups;
187
189
  buildFields(): void;
188
190
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/core/sections/section.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/core/sections/section.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEhF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE5E,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAGxB,eAAO,MAAM,iBAAiB,uCAA0B,CAAA;AACxD,eAAO,MAAM,sBAAsB,iDAA+B,CAAA;AAIlE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmEnC,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAa1C,CAAA;AAEF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAKtE;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAChB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAClE,CAAA;AAED,8BAAsB,OAAO,CAAC,mBAAmB,SAAS,MAAM,GAAG,MAAM;IACrE,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,CAAY;IAChD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAA;IAC3D,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,QAAQ,UAAQ;IAEhB,OAAO,CAAC,QAAQ,CAAC,CAchB;IACD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAc/B;IACD,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;IAC/E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,YAAY,CAAsC;IAC1D,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,SAAS,CAAA;IAElD;;;OAGG;IACH,IAAI,YAAY,IAAI,WAAW,EAAE,CAEhC;IAED,IAAI,WAAW,IAAI,UAAU,EAAE,CAE9B;IAED,IAAI,MAAM,IAAI,KAAK,EAAE,CAYpB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAExB;IAED,QAAQ,CAAC,EAAE,EAAE;QACT,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,qBAAqB,GAAG,eAAe,CAAA;QACnD,YAAY,CAAC,EAAE,WAAW,CAAA;QAC1B,UAAU,EAAE,WAAW,EAAE,CAAA;QACzB,WAAW,CAAC,EAAE;YAAE,OAAO,EAAE,WAAW,EAAE,CAAC;YAAC,cAAc,EAAE,WAAW,EAAE,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;QACvF,QAAQ,CAAC,EAAE;YAAE,OAAO,EAAE,WAAW,EAAE,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;QACtD,KAAK,CAAC,EAAE;YAAE,OAAO,EAAE,WAAW,EAAE,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;QACnD,MAAM,EAAE;YAAE,OAAO,EAAE,WAAW,EAAE,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KACtD,CAAA;IACD,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAA;IAChC,KAAK,CAAC,EAAE,KAAK,CAAA;gBAED,MAAM,EAAE,kBAAkB,CAAC,mBAAmB,CAAC;IAmF3D;;;OAGG;IACH,OAAO,KAAK,cAAc,GAEzB;IAEY,UAAU,IAAI,OAAO,CAC5B;QACI,EAAE,EAAE;YACA,SAAS,EAAE,MAAM,CAAA;YACjB,wBAAwB,EAAE,MAAM,CAAA;YAChC,cAAc,EAAE,MAAM,CAAA;YACtB,SAAS,EAAE,MAAM,CAAA;SACpB,CAAA;QACD,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,SAAS,CAAC,EAAE;YACR,KAAK,EAAE,MAAM,CAAA;YACb,MAAM,EAAE,MAAM,CAAA;YACd,IAAI,EAAE,OAAO,CAAA;YACb,OAAO,EAAE,MAAM,CAAA;SAClB,CAAA;KACJ,GACD,SAAS,CACd;IAwBD,OAAO,CAAC,gBAAgB;IAwBjB,WAAW,IAAI,IAAI;IAyB1B;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;CAUvB;AAED,MAAM,MAAM,kBAAkB,CAAC,mBAAmB,SAAS,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,GAClH,mBAAmB,CAAA;AAEvB;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,kBAAkB,EAClE,OAAO,EAAE,CAAC,GACX,CAAC,GAAG;IAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG;QAAE,UAAU,EAAE,WAAW,CAAA;KAAE,CAAA;CAAE,CAwBnD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,kBAAkB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAmBhF;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;CAAE,GAAG;IAC7G,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,WAAW,EAAE,gBAAgB,EAAE,CAAA;CAClC,CAYA"}
@@ -3,7 +3,6 @@ import { numberField } from '../fields/index.js';
3
3
  import chalk from 'chalk';
4
4
  import * as z from 'zod';
5
5
  import { getCMSConfig } from '../config/config-loader.js';
6
- const cmsConfig = getCMSConfig();
7
6
  export const fieldConfigSchema = z.custom();
8
7
  export const FieldGroupConfigSchema = z.custom();
9
8
  const variantSchema = z.custom();
@@ -97,7 +96,8 @@ export class Section {
97
96
  order;
98
97
  icon;
99
98
  readonly = false;
100
- gallery;
99
+ _gallery;
100
+ _galleryConfig;
101
101
  _fields = undefined;
102
102
  _fieldGroupConfigs = undefined;
103
103
  _hasFieldGroups;
@@ -141,15 +141,15 @@ export class Section {
141
141
  * Resolve gallery config
142
142
  */
143
143
  if (config.gallery) {
144
- this.gallery = {
144
+ this._galleryConfig = {
145
145
  db: {
146
146
  tableName: config.gallery.db.tableName,
147
147
  referenceIdentifierField: config.gallery.db.identifierField ?? 'reference_id',
148
148
  photoNameField: config.gallery.db.photoNameField ?? 'photo',
149
149
  metaField: config.gallery.db.metaField ?? 'meta',
150
150
  },
151
- watermark: config.gallery.watermark ?? cmsConfig.media.images.watermark,
152
- thumbnail: config.gallery.thumbnail ?? cmsConfig.media.images.thumbnail,
151
+ watermark: config.gallery.watermark,
152
+ thumbnail: config.gallery.thumbnail,
153
153
  };
154
154
  }
155
155
  /**
@@ -215,6 +215,29 @@ export class Section {
215
215
  get hasFieldGroups() {
216
216
  return this._hasFieldGroups;
217
217
  }
218
+ async getGallery() {
219
+ if (!this._gallery) {
220
+ if (this._galleryConfig) {
221
+ const cmsConfig = await getCMSConfig();
222
+ this._gallery = {
223
+ db: {
224
+ tableName: this._galleryConfig.db.tableName,
225
+ referenceIdentifierField: this._galleryConfig.db.referenceIdentifierField,
226
+ photoNameField: this._galleryConfig.db.photoNameField,
227
+ metaField: this._galleryConfig.db.metaField,
228
+ },
229
+ watermark: this._galleryConfig.watermark ?? cmsConfig.media.images.watermark,
230
+ thumbnail: {
231
+ width: this._galleryConfig.thumbnail?.width ?? cmsConfig.media.images.thumbnail.width,
232
+ height: this._galleryConfig.thumbnail?.height ?? cmsConfig.media.images.thumbnail.height,
233
+ crop: this._galleryConfig.thumbnail?.crop ?? cmsConfig.media.images.thumbnail.crop,
234
+ quality: this._galleryConfig.thumbnail?.quality ?? cmsConfig.media.images.thumbnail.quality,
235
+ },
236
+ };
237
+ }
238
+ }
239
+ return this._gallery;
240
+ }
218
241
  buildFieldGroups() {
219
242
  const configs = this._fieldGroupConfigs;
220
243
  if (!configs?.length)
@@ -1 +1 @@
1
- {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../../src/core/submit/submit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAGtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAM,MAAM,YAAY,CAAA;AAG3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,KAAK,eAAe,GAAG;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,8BAAsB,MAAM;IACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,CAAW;IAC/C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IAC7B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAY;IAC1D,SAAS,CAAC,MAAM,EAAE,OAAO,CAAQ;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IACpC,OAAO,CAAC,QAAQ,CAAwB;IACxC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAA;IAC5B,SAAS,CAAC,YAAY,EAAG,OAAO,CAAA;IAChC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAQ;IACpC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAK;IACrD,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAK;IAE9B;;OAEG;gBACS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,eAAe;IAOvE;;;OAGG;cACa,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAanD;;OAEG;YACW,YAAY;IAM1B;;OAEG;IACU,UAAU,CAAC,YAAY,GAAE,GAAG,GAAG,GAAS;IAIrD;;;;;OAKG;YACW,qBAAqB;IA4BnC;;;;OAIG;YACW,UAAU;IAoDxB;;;;OAIG;cACa,kBAAkB;IAMlC;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAElD;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,GAAG,GAAG,SAAS;IAEnD;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK;IAIpC;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK;IAqBpC,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK;IAM9C,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK;IAUxC;;;;OAIG;cACa,WAAW,CAAC,KAAK,EAAE,KAAK;cAoDxB,YAAY;IAU5B;;;;OAIG;YACW,YAAY;IA6B1B;;OAEG;IACU,MAAM;YAsEL,aAAa;IAiF3B,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,OAAO,IAAI,MAAM,EAAE,GAAG,IAAI,CAE7B;IAED,OAAO,CAAC,SAAS;CAMpB"}
1
+ {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../../src/core/submit/submit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAGtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAM,MAAM,YAAY,CAAA;AAG3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,KAAK,eAAe,GAAG;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,8BAAsB,MAAM;IACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,CAAW;IAC/C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IAC7B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAY;IAC1D,SAAS,CAAC,MAAM,EAAE,OAAO,CAAQ;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAK;IACpC,OAAO,CAAC,QAAQ,CAAwB;IACxC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAA;IAC5B,SAAS,CAAC,YAAY,EAAG,OAAO,CAAA;IAChC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAQ;IACpC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAK;IACrD,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,CAAK;IAE9B;;OAEG;gBACS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,eAAe;IAOvE;;;OAGG;cACa,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAanD;;OAEG;YACW,YAAY;IAM1B;;OAEG;IACU,UAAU,CAAC,YAAY,GAAE,GAAG,GAAG,GAAS;IAIrD;;;;;OAKG;YACW,qBAAqB;IA4BnC;;;;OAIG;YACW,UAAU;IAoDxB;;;;OAIG;cACa,kBAAkB;IAMlC;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAElD;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,GAAG,GAAG,SAAS;IAEnD;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK;IAIpC;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK;IAqBpC,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK;IAM9C,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK;IAUxC;;;;OAIG;cACa,WAAW,CAAC,KAAK,EAAE,KAAK;cAoDxB,YAAY;IAU5B;;;;OAIG;YACW,YAAY;IA6B1B;;OAEG;IACU,MAAM;YAsEL,aAAa;IAkF3B,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,OAAO,IAAI,MAAM,EAAE,GAAG,IAAI,CAE7B;IAED,OAAO,CAAC,SAAS;CAMpB"}
@@ -387,21 +387,22 @@ export class Submit {
387
387
  return true;
388
388
  }
389
389
  async handleGallery() {
390
- if (!this._sectionInfo.gallery ||
391
- !this._sectionInfo.gallery.db ||
392
- !this._sectionInfo.gallery.db.tableName ||
393
- !this._sectionInfo.gallery.db.referenceIdentifierField ||
394
- !this._sectionInfo.gallery.db.metaField) {
390
+ const gallery = await this._sectionInfo.getGallery();
391
+ if (!gallery ||
392
+ !gallery.db ||
393
+ !gallery.db.tableName ||
394
+ !gallery.db.referenceIdentifierField ||
395
+ !gallery.db.metaField) {
395
396
  /**
396
397
  * The gallery table is not set up correctly, add it to the notices array
397
398
  */
398
399
  this.addNotice('Gallery table is not set up correctly, gallery photos were not saved.');
399
400
  return;
400
401
  }
401
- const columns = await MysqlTableChecker.getColumns(this._sectionInfo.gallery.db.tableName);
402
- if (!columns.includes(this._sectionInfo.gallery.db.referenceIdentifierField) ||
403
- !columns.includes(this._sectionInfo.gallery.db.metaField) ||
404
- !columns.includes(this._sectionInfo.gallery.db.photoNameField)) {
402
+ const columns = await MysqlTableChecker.getColumns(gallery.db.tableName);
403
+ if (!columns.includes(gallery.db.referenceIdentifierField) ||
404
+ !columns.includes(gallery.db.metaField) ||
405
+ !columns.includes(gallery.db.photoNameField)) {
405
406
  /**
406
407
  * The gallery table is not set up correctly, add it to the notices array
407
408
  */
@@ -425,8 +426,8 @@ export class Submit {
425
426
  required: false,
426
427
  order: 0,
427
428
  fileType: ['jpg', 'jpeg', 'png'],
428
- watermark: this._sectionInfo.gallery.watermark,
429
- thumbnail: this._sectionInfo.gallery.thumbnail,
429
+ watermark: gallery.watermark,
430
+ thumbnail: gallery.thumbnail,
430
431
  });
431
432
  /**
432
433
  * Set the value of the photo field
@@ -445,7 +446,7 @@ export class Submit {
445
446
  * Prepare the sql statement to insert the photo into the gallery table
446
447
  */
447
448
  const sqlChunks = [];
448
- sqlChunks.push(sql `INSERT INTO \`${sql.raw(this._sectionInfo.gallery.db.tableName)}\` (\`${sql.raw(this._sectionInfo.gallery.db.referenceIdentifierField)}\`, \`${sql.raw(this._sectionInfo.gallery.db.photoNameField)}\`, \`created_by\`) VALUES (${this._itemId}, ${photoField.getValue()}, ${this.user.name})`);
449
+ sqlChunks.push(sql `INSERT INTO \`${sql.raw(gallery.db.tableName)}\` (\`${sql.raw(gallery.db.referenceIdentifierField)}\`, \`${sql.raw(gallery.db.photoNameField)}\`, \`created_by\`) VALUES (${this._itemId}, ${photoField.getValue()}, ${this.user.name})`);
449
450
  const sqlQuery = sql.join(sqlChunks);
450
451
  /**
451
452
  * Execute the sql query
@@ -177,6 +177,7 @@
177
177
  "no_file_selected": "لم يتم اختيار ملف",
178
178
  "start_typing": "ابدأ الكتابة",
179
179
  "add_new": "إضافة",
180
+ "new": "إضافة",
180
181
  "approve": "الموافقة على",
181
182
  "add": "إضافة",
182
183
  "add_new_item": "إضافة عنصر جديد",
@@ -177,6 +177,7 @@
177
177
  "no_file_selected": "No file selected",
178
178
  "start_typing": "Start typing",
179
179
  "add_new": "Add New",
180
+ "new": "New",
180
181
  "approve": "Approve",
181
182
  "add": "Add",
182
183
  "add_new_item": "Add New Item",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAGA,iBAAS,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,MAAM,CAanD;AAED,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAGA,iBAAS,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,MAAM,CAWnD;AAED,eAAe,SAAS,CAAA"}
@@ -3,13 +3,11 @@ import enStrings from './dictionaries/en.json';
3
3
  function getString(key, lang = 'en') {
4
4
  const dict = lang === 'en' ? enStrings : arStrings;
5
5
  // @ts-expect-error key is string
6
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
7
6
  const text = dict[key];
8
7
  if (!text) {
9
- console.warn(`Key not found: ${key}`);
8
+ console.warn(`Translation key not found: ${key}`);
10
9
  return key;
11
10
  }
12
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
13
11
  return text;
14
12
  }
15
13
  export default getString;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nextjs-cms",
3
- "version": "0.5.56",
3
+ "version": "0.5.58",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "type": "module",
@@ -18,6 +18,10 @@
18
18
  "types": "./dist/api/lib/serverActions.d.ts",
19
19
  "default": "./dist/api/lib/serverActions.js"
20
20
  },
21
+ "./api/trpc/server": {
22
+ "types": "./dist/api/trpc/server.d.ts",
23
+ "default": "./dist/api/trpc/server.js"
24
+ },
21
25
  "./auth": {
22
26
  "types": "./dist/auth/index.d.ts",
23
27
  "default": "./dist/auth/index.js"
@@ -105,22 +109,27 @@
105
109
  "LICENSE"
106
110
  ],
107
111
  "dependencies": {
108
- "@trpc/server": "^11.4.2",
109
- "axios": "^1.8.4",
112
+ "@trpc/client": "^11.8.1",
113
+ "@trpc/next": "^11.8.1",
114
+ "@trpc/react-query": "^11.8.1",
115
+ "@trpc/server": "^11.8.1",
116
+ "axios": "^1.13.2",
110
117
  "bcrypt": "^6.0.0",
111
118
  "chalk": "^5.4.1",
112
119
  "chokidar": "3.6.0",
113
120
  "dayjs": "^1.11.19",
114
121
  "dotenv": "^17.2.3",
115
- "drizzle-orm": "^0.44.6",
122
+ "drizzle-orm": "^0.45.1",
123
+ "esbuild": "0.27.2",
116
124
  "esbuild-register": "^3.6.0",
117
- "glob": "^11.0.3",
125
+ "glob": "^10.4.5",
118
126
  "isomorphic-dompurify": "^2.21.0",
127
+ "jiti": "^2.6.1",
119
128
  "jose": "^6.0.11",
120
129
  "jsonwebtoken": "^9.0.2",
121
130
  "lodash-es": "^4.17.21",
122
131
  "mysql2": "^3.12.0",
123
- "next": "^15.5.5",
132
+ "next": "^16.1.1",
124
133
  "react": "19.0.0",
125
134
  "react-dom": "19.0.0",
126
135
  "superjson": "^2.2.2",
@@ -135,15 +144,15 @@
135
144
  "@types/react-dom": "^19.0.0",
136
145
  "@types/through2": "^2.0.41",
137
146
  "dotenv-cli": "^7.4.4",
138
- "drizzle-kit": "^0.31.5",
147
+ "drizzle-kit": "^0.31.8",
139
148
  "eslint": "^9.12.0",
140
149
  "nanoid": "^5.1.5",
141
150
  "prettier": "^3.3.3",
142
151
  "tsx": "^4.20.6",
143
152
  "typescript": "^5.9.2",
144
153
  "@lzcms/eslint-config": "0.3.0",
145
- "@lzcms/tsconfig": "0.1.0",
146
- "@lzcms/prettier-config": "0.1.0"
154
+ "@lzcms/prettier-config": "0.1.0",
155
+ "@lzcms/tsconfig": "0.1.0"
147
156
  },
148
157
  "license": "MIT",
149
158
  "keywords": [