@yimingliao/cms 0.0.45 → 0.0.47

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.
@@ -869,7 +869,7 @@ declare const signInValidator: (schemas: ReturnType<typeof createSchemas>) => zo
869
869
  password: zod.ZodString;
870
870
  }, zod_v4_core.$strip>;
871
871
 
872
- type SignInFormData = zod__default.infer<typeof signInValidator>;
872
+ type SignInFormData = zod__default.infer<ReturnType<typeof signInValidator>>;
873
873
  interface CreateSignInActionParams {
874
874
  executeAction: ReturnType<typeof createExecuteAction>;
875
875
  ipRateLimiter: (options: RateLimiterOptions) => Promise<void>;
@@ -913,7 +913,7 @@ declare const changePasswordValidator: (schemas: ReturnType<typeof createSchemas
913
913
  newPasswordConfirm: zod.ZodString;
914
914
  }, zod_v4_core.$strip>;
915
915
 
916
- type ChangePasswordFormData = zod__default.infer<typeof changePasswordValidator>;
916
+ type ChangePasswordFormData = zod__default.infer<ReturnType<typeof changePasswordValidator>>;
917
917
  interface CreateChangePasswordActionParams {
918
918
  executeAction: ReturnType<typeof createExecuteAction>;
919
919
  ipRateLimiter: (options: RateLimiterOptions) => Promise<void>;
@@ -930,7 +930,7 @@ declare const verifyEmailValidator: (schemas: ReturnType<typeof createSchemas>)
930
930
  emailVerificationToken: zod.ZodString;
931
931
  }, zod_v4_core.$strip>;
932
932
 
933
- type VerifyEmailFormData = zod__default.infer<typeof verifyEmailValidator>;
933
+ type VerifyEmailFormData = zod__default.infer<ReturnType<typeof verifyEmailValidator>>;
934
934
  interface CreateVerifyEmailActionParams {
935
935
  executeAction: ReturnType<typeof createExecuteAction>;
936
936
  ipRateLimiter: (options: RateLimiterOptions) => Promise<void>;
@@ -948,7 +948,7 @@ declare const emailUnverifiedValidator: (schemas: ReturnType<typeof createSchema
948
948
  email: zod.ZodEmail;
949
949
  }, zod_v4_core.$strip>;
950
950
 
951
- type EmailUnverifiedFormData = zod__default.infer<typeof emailUnverifiedValidator>;
951
+ type EmailUnverifiedFormData = zod__default.infer<ReturnType<typeof emailUnverifiedValidator>>;
952
952
  interface CreateEmailUnverifiedActionParams {
953
953
  executeAction: ReturnType<typeof createExecuteAction>;
954
954
  ipRateLimiter: (options: RateLimiterOptions) => Promise<void>;
@@ -964,7 +964,7 @@ declare const forgetPasswordValidator: (schemas: ReturnType<typeof createSchemas
964
964
  email: zod.ZodEmail;
965
965
  }, zod_v4_core.$strip>;
966
966
 
967
- type ForgotPasswordFormData = zod__default.infer<typeof forgetPasswordValidator>;
967
+ type ForgotPasswordFormData = zod__default.infer<ReturnType<typeof forgetPasswordValidator>>;
968
968
  interface CreateForgotPasswordActionParams {
969
969
  executeAction: ReturnType<typeof createExecuteAction>;
970
970
  ipRateLimiter: (options: RateLimiterOptions) => Promise<void>;
@@ -982,7 +982,7 @@ declare const resetPasswordValidator: (schemas: ReturnType<typeof createSchemas>
982
982
  newPasswordConfirm: zod.ZodString;
983
983
  }, zod_v4_core.$strip>;
984
984
 
985
- type ResetPasswordFormData = zod__default.infer<typeof resetPasswordValidator>;
985
+ type ResetPasswordFormData = zod__default.infer<ReturnType<typeof resetPasswordValidator>>;
986
986
  interface CreateResetPasswordActionParams {
987
987
  executeAction: ReturnType<typeof createExecuteAction>;
988
988
  ipRateLimiter: (options: RateLimiterOptions) => Promise<void>;
@@ -1011,4 +1011,4 @@ declare class ServerError extends Error {
1011
1011
  static internalServerError(): ServerError;
1012
1012
  }
1013
1013
 
1014
- export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, type RawCacheKey, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
1014
+ export { ADMIN_ORDER_BY, type ChangePasswordFormData, type EmailUnverifiedFormData, type ForgotPasswordFormData, ORDER_BY, POST_ORDER_BY, type RawCacheKey, type ResetPasswordFormData, ServerError, type SignInFormData, type VerifyEmailFormData, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createChangePasswordAction, createCookieService, createCryptoService, createEmailUnverifiedAction, createEmailVerificationEmail, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createForgotPasswordAction, createForgotPasswordEmail, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createRenderEmailTemplate, createResetPasswordAction, createSchemas, createSendEmail, createSeoMetadataCommandRepository, createSignInAction, createSignOutAction, createTocItemSchema, createTransporter, createUnique, createVerifyAccessToken, createVerifyAction, createVerifyEmailAction, createVerifyRefreshToken, createZod, normalizeCacheKey };
@@ -244,7 +244,7 @@ var normalizeCacheKey = (key, delimiter = CACHE_KEY_DELIMITER) => {
244
244
 
245
245
  // src/server/infrastructure/cache/create-cache-result.ts
246
246
  var DAY = 1e3 * 60 * 60 * 24;
247
- function createCacheResult(cache, logger) {
247
+ function createCacheResult(cache2, logger) {
248
248
  return async function cacheResult({
249
249
  key: rawKey,
250
250
  ttl = DAY,
@@ -259,13 +259,13 @@ function createCacheResult(cache, logger) {
259
259
  return load();
260
260
  }
261
261
  try {
262
- const cached = await cache.get(key);
262
+ const cached = await cache2.get(key);
263
263
  if (cached !== void 0) {
264
264
  return cached;
265
265
  }
266
266
  const data = await load();
267
267
  if (data !== void 0) {
268
- await cache.set(key, data, ttl);
268
+ await cache2.set(key, data, ttl);
269
269
  }
270
270
  return data;
271
271
  } catch (error) {
@@ -287,13 +287,13 @@ var lua = `
287
287
  end
288
288
  return current
289
289
  `;
290
- function createIpRateLimiter(cache, appName) {
290
+ function createIpRateLimiter(cache2, appName) {
291
291
  return async function ipRateLimiter({
292
292
  key: rawKey,
293
293
  maxAttempts = DEFAULT_MAX_ATTEMPTS,
294
294
  timeWindow = DEFAULT_TIME_WINDOW
295
295
  }) {
296
- const secondaryStore = cache.store;
296
+ const secondaryStore = cache2.store;
297
297
  const redis = await secondaryStore.getClient();
298
298
  if (!redis) return true;
299
299
  const headersStore = await headers();
@@ -643,23 +643,29 @@ function createSendEmail({
643
643
  }
644
644
  var TEMPLATE_DIR = path.resolve(process.cwd(), "emails");
645
645
  var LAYOUT_PATH = path.join(TEMPLATE_DIR, "layout.html");
646
- var templateCache = /* @__PURE__ */ new Map();
646
+ var isDev = process.env.NODE_ENV !== "production";
647
+ var cache = /* @__PURE__ */ new Map();
647
648
  async function readTemplate(filePath) {
648
- if (templateCache.has(filePath)) return templateCache.get(filePath);
649
+ if (!isDev && cache.has(filePath)) {
650
+ return cache.get(filePath);
651
+ }
649
652
  try {
650
653
  const html = await readFile(filePath, "utf8");
651
- templateCache.set(filePath, html);
654
+ if (!isDev) cache.set(filePath, html);
652
655
  return html;
653
656
  } catch (error) {
654
657
  throw new Error(`Email template file not found: ${filePath}`);
655
658
  }
656
659
  }
657
- function applyReplacements(html, replacements) {
658
- let result2 = html;
659
- for (const [key, value] of Object.entries(replacements)) {
660
- result2 = result2.replaceAll(`{{{${key}}}}`, value);
661
- }
662
- return result2;
660
+ function applyReplacements(html, replacements, logger) {
661
+ return html.replace(/\{\{\{(.*?)\}\}\}/g, (_, key) => {
662
+ const value = replacements[key];
663
+ if (value == null) {
664
+ logger?.warn({ msg: "Email template variable missing", variable: key });
665
+ return "";
666
+ }
667
+ return value;
668
+ });
663
669
  }
664
670
  function createRenderEmailTemplate({
665
671
  storageUrl,
@@ -670,17 +676,18 @@ function createRenderEmailTemplate({
670
676
  const contentPath = path.join(TEMPLATE_DIR, `${templateKey}.html`);
671
677
  const layoutHtml = await readTemplate(LAYOUT_PATH);
672
678
  let contentHtml = await readTemplate(contentPath);
673
- contentHtml = applyReplacements(contentHtml, {
674
- STORAGE_URL: storageUrl,
675
- ...replacements
676
- });
679
+ contentHtml = applyReplacements(
680
+ contentHtml,
681
+ { STORAGE_URL: storageUrl, ...replacements },
682
+ logger
683
+ );
677
684
  return layoutHtml.replaceAll("{{{content}}}", contentHtml);
678
685
  } catch (error) {
679
686
  logger.error({
680
687
  msg: "Email template render failed",
681
688
  templateKey,
682
689
  templateDir: TEMPLATE_DIR,
683
- error
690
+ error: error instanceof Error ? error.stack : error
684
691
  });
685
692
  throw new Error(`Email template error: ${templateKey}`);
686
693
  }
@@ -1853,7 +1860,7 @@ var normalizeError = (error, translator) => {
1853
1860
  function createExecuteAction({
1854
1861
  initI18n,
1855
1862
  cacheResult,
1856
- cache,
1863
+ cache: cache2,
1857
1864
  logger
1858
1865
  }) {
1859
1866
  return async function executeAction(fn, options = {}) {
@@ -1865,7 +1872,7 @@ function createExecuteAction({
1865
1872
  ...options.ttl ? { ttl: options.ttl } : {},
1866
1873
  load: async () => fn(translator)
1867
1874
  }) : await fn(translator);
1868
- if (options.type === "command") cache.clear();
1875
+ if (options.type === "command") cache2.clear();
1869
1876
  const finalMessage = i18nKey ? translator.t(i18nKey) : message;
1870
1877
  return result.success({
1871
1878
  ...finalMessage ? { message: finalMessage } : {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimingliao/cms",
3
- "version": "0.0.45",
3
+ "version": "0.0.47",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",