payload 3.0.0-alpha.65 → 3.0.0-alpha.67

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 (207) hide show
  1. package/dist/admin/RichText.d.ts +3 -0
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/elements/Tab.d.ts +3 -0
  5. package/dist/admin/elements/Tab.d.ts.map +1 -1
  6. package/dist/admin/elements/Tab.js.map +1 -1
  7. package/dist/admin/types.d.ts +1 -1
  8. package/dist/admin/types.d.ts.map +1 -1
  9. package/dist/admin/types.js.map +1 -1
  10. package/dist/auth/getAccessResults.js +1 -1
  11. package/dist/auth/getAccessResults.js.map +1 -1
  12. package/dist/auth/operations/forgotPassword.js +3 -2
  13. package/dist/auth/operations/forgotPassword.js.map +1 -1
  14. package/dist/auth/operations/login.d.ts.map +1 -1
  15. package/dist/auth/operations/login.js +3 -0
  16. package/dist/auth/operations/login.js.map +1 -1
  17. package/dist/auth/sendVerificationEmail.js +3 -2
  18. package/dist/auth/sendVerificationEmail.js.map +1 -1
  19. package/dist/bin/loader/index.d.ts.map +1 -1
  20. package/dist/bin/loader/index.js +2 -1
  21. package/dist/bin/loader/index.js.map +1 -1
  22. package/dist/bin/loader/resolveOriginalPath.d.ts +10 -0
  23. package/dist/bin/loader/resolveOriginalPath.d.ts.map +1 -0
  24. package/dist/bin/loader/resolveOriginalPath.js +32 -0
  25. package/dist/bin/loader/resolveOriginalPath.js.map +1 -0
  26. package/dist/collections/config/sanitize.d.ts +2 -3
  27. package/dist/collections/config/sanitize.d.ts.map +1 -1
  28. package/dist/collections/config/sanitize.js +7 -4
  29. package/dist/collections/config/sanitize.js.map +1 -1
  30. package/dist/collections/config/schema.d.ts.map +1 -1
  31. package/dist/collections/config/schema.js +1 -0
  32. package/dist/collections/config/schema.js.map +1 -1
  33. package/dist/config/build.d.ts.map +1 -1
  34. package/dist/config/build.js +3 -4
  35. package/dist/config/build.js.map +1 -1
  36. package/dist/config/sanitize.d.ts +1 -1
  37. package/dist/config/sanitize.d.ts.map +1 -1
  38. package/dist/config/sanitize.js +28 -7
  39. package/dist/config/sanitize.js.map +1 -1
  40. package/dist/config/schema.js +1 -1
  41. package/dist/config/schema.js.map +1 -1
  42. package/dist/config/types.d.ts +11 -2
  43. package/dist/config/types.d.ts.map +1 -1
  44. package/dist/config/types.js.map +1 -1
  45. package/dist/database/queryValidation/validateQueryPaths.js +1 -1
  46. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  47. package/dist/email/consoleEmailAdapter.d.ts.map +1 -1
  48. package/dist/email/consoleEmailAdapter.js +1 -0
  49. package/dist/email/consoleEmailAdapter.js.map +1 -1
  50. package/dist/email/types.d.ts +1 -0
  51. package/dist/email/types.d.ts.map +1 -1
  52. package/dist/email/types.js.map +1 -1
  53. package/dist/errors/APIError.d.ts +2 -2
  54. package/dist/errors/APIError.d.ts.map +1 -1
  55. package/dist/errors/APIError.js +1 -2
  56. package/dist/errors/APIError.js.map +1 -1
  57. package/dist/errors/AuthenticationError.d.ts +2 -3
  58. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  59. package/dist/errors/AuthenticationError.js +2 -3
  60. package/dist/errors/AuthenticationError.js.map +1 -1
  61. package/dist/errors/DuplicateCollection.d.ts +2 -3
  62. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  63. package/dist/errors/DuplicateCollection.js +2 -3
  64. package/dist/errors/DuplicateCollection.js.map +1 -1
  65. package/dist/errors/DuplicateFieldName.d.ts +2 -3
  66. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  67. package/dist/errors/DuplicateFieldName.js +2 -3
  68. package/dist/errors/DuplicateFieldName.js.map +1 -1
  69. package/dist/errors/DuplicateGlobal.d.ts +2 -3
  70. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  71. package/dist/errors/DuplicateGlobal.js +2 -3
  72. package/dist/errors/DuplicateGlobal.js.map +1 -1
  73. package/dist/errors/ErrorDeletingFile.d.ts +2 -3
  74. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  75. package/dist/errors/ErrorDeletingFile.js +2 -3
  76. package/dist/errors/ErrorDeletingFile.js.map +1 -1
  77. package/dist/errors/FileRetrievalError.d.ts +6 -0
  78. package/dist/errors/FileRetrievalError.d.ts.map +1 -0
  79. package/dist/errors/FileRetrievalError.js +13 -0
  80. package/dist/errors/FileRetrievalError.js.map +1 -0
  81. package/dist/errors/FileUploadError.d.ts +2 -3
  82. package/dist/errors/FileUploadError.d.ts.map +1 -1
  83. package/dist/errors/FileUploadError.js +2 -3
  84. package/dist/errors/FileUploadError.js.map +1 -1
  85. package/dist/errors/Forbidden.d.ts +2 -3
  86. package/dist/errors/Forbidden.d.ts.map +1 -1
  87. package/dist/errors/Forbidden.js +2 -3
  88. package/dist/errors/Forbidden.js.map +1 -1
  89. package/dist/errors/InvalidConfiguration.d.ts +2 -3
  90. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  91. package/dist/errors/InvalidConfiguration.js +2 -3
  92. package/dist/errors/InvalidConfiguration.js.map +1 -1
  93. package/dist/errors/InvalidFieldName.d.ts +2 -3
  94. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  95. package/dist/errors/InvalidFieldName.js +2 -3
  96. package/dist/errors/InvalidFieldName.js.map +1 -1
  97. package/dist/errors/InvalidFieldRelationship.d.ts +2 -3
  98. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  99. package/dist/errors/InvalidFieldRelationship.js +2 -3
  100. package/dist/errors/InvalidFieldRelationship.js.map +1 -1
  101. package/dist/errors/InvalidSchema.d.ts +2 -3
  102. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  103. package/dist/errors/InvalidSchema.js +2 -3
  104. package/dist/errors/InvalidSchema.js.map +1 -1
  105. package/dist/errors/LockedAuth.d.ts +2 -3
  106. package/dist/errors/LockedAuth.d.ts.map +1 -1
  107. package/dist/errors/LockedAuth.js +2 -3
  108. package/dist/errors/LockedAuth.js.map +1 -1
  109. package/dist/errors/MissingCollectionLabel.d.ts +2 -3
  110. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  111. package/dist/errors/MissingCollectionLabel.js +2 -3
  112. package/dist/errors/MissingCollectionLabel.js.map +1 -1
  113. package/dist/errors/MissingEditorProp.d.ts +2 -3
  114. package/dist/errors/MissingEditorProp.d.ts.map +1 -1
  115. package/dist/errors/MissingEditorProp.js +2 -3
  116. package/dist/errors/MissingEditorProp.js.map +1 -1
  117. package/dist/errors/MissingFieldInputOptions.d.ts +2 -3
  118. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  119. package/dist/errors/MissingFieldInputOptions.js +2 -3
  120. package/dist/errors/MissingFieldInputOptions.js.map +1 -1
  121. package/dist/errors/MissingFieldType.d.ts +2 -3
  122. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  123. package/dist/errors/MissingFieldType.js +2 -3
  124. package/dist/errors/MissingFieldType.js.map +1 -1
  125. package/dist/errors/MissingFile.d.ts +2 -3
  126. package/dist/errors/MissingFile.d.ts.map +1 -1
  127. package/dist/errors/MissingFile.js +2 -3
  128. package/dist/errors/MissingFile.js.map +1 -1
  129. package/dist/errors/NotFound.d.ts +2 -3
  130. package/dist/errors/NotFound.d.ts.map +1 -1
  131. package/dist/errors/NotFound.js +2 -3
  132. package/dist/errors/NotFound.js.map +1 -1
  133. package/dist/errors/QueryError.d.ts +2 -3
  134. package/dist/errors/QueryError.d.ts.map +1 -1
  135. package/dist/errors/QueryError.js +2 -3
  136. package/dist/errors/QueryError.js.map +1 -1
  137. package/dist/errors/TimestampsRequired.d.ts +2 -3
  138. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  139. package/dist/errors/TimestampsRequired.js +2 -3
  140. package/dist/errors/TimestampsRequired.js.map +1 -1
  141. package/dist/errors/UnathorizedError.d.ts +2 -3
  142. package/dist/errors/UnathorizedError.d.ts.map +1 -1
  143. package/dist/errors/UnathorizedError.js +2 -3
  144. package/dist/errors/UnathorizedError.js.map +1 -1
  145. package/dist/errors/ValidationError.d.ts +2 -3
  146. package/dist/errors/ValidationError.d.ts.map +1 -1
  147. package/dist/errors/ValidationError.js +2 -3
  148. package/dist/errors/ValidationError.js.map +1 -1
  149. package/dist/errors/index.d.ts +20 -19
  150. package/dist/errors/index.d.ts.map +1 -1
  151. package/dist/errors/index.js +20 -19
  152. package/dist/errors/index.js.map +1 -1
  153. package/dist/exports/i18n.d.ts +2 -0
  154. package/dist/exports/i18n.d.ts.map +1 -0
  155. package/dist/exports/i18n.js +3 -0
  156. package/dist/exports/i18n.js.map +1 -0
  157. package/dist/fields/config/client.d.ts +1 -1
  158. package/dist/fields/config/sanitize.d.ts +7 -2
  159. package/dist/fields/config/sanitize.d.ts.map +1 -1
  160. package/dist/fields/config/sanitize.js +56 -45
  161. package/dist/fields/config/sanitize.js.map +1 -1
  162. package/dist/fields/config/sanitize.spec.js +76 -85
  163. package/dist/fields/config/sanitize.spec.js.map +1 -1
  164. package/dist/fields/config/types.d.ts +4 -3
  165. package/dist/fields/config/types.d.ts.map +1 -1
  166. package/dist/fields/config/types.js.map +1 -1
  167. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  168. package/dist/fields/hooks/afterRead/promise.js +3 -0
  169. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  170. package/dist/fields/validations.d.ts.map +1 -1
  171. package/dist/fields/validations.js +3 -0
  172. package/dist/fields/validations.js.map +1 -1
  173. package/dist/globals/config/sanitize.d.ts +2 -3
  174. package/dist/globals/config/sanitize.d.ts.map +1 -1
  175. package/dist/globals/config/sanitize.js +36 -35
  176. package/dist/globals/config/sanitize.js.map +1 -1
  177. package/dist/preferences/operations/delete.js +2 -2
  178. package/dist/preferences/operations/delete.js.map +1 -1
  179. package/dist/preferences/operations/update.js +1 -1
  180. package/dist/preferences/operations/update.js.map +1 -1
  181. package/dist/uploads/generateFileData.js +2 -2
  182. package/dist/uploads/generateFileData.js.map +1 -1
  183. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  184. package/dist/uploads/getExternalFile.js +5 -2
  185. package/dist/uploads/getExternalFile.js.map +1 -1
  186. package/dist/uploads/types.d.ts +4 -0
  187. package/dist/uploads/types.d.ts.map +1 -1
  188. package/dist/uploads/types.js.map +1 -1
  189. package/dist/utilities/checkDuplicateCollections.js +1 -1
  190. package/dist/utilities/checkDuplicateCollections.js.map +1 -1
  191. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  192. package/dist/utilities/configToJSONSchema.js +3 -0
  193. package/dist/utilities/configToJSONSchema.js.map +1 -1
  194. package/dist/utilities/configToJSONSchema.spec.js +2 -2
  195. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  196. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  197. package/dist/utilities/createLocalReq.js +4 -2
  198. package/dist/utilities/createLocalReq.js.map +1 -1
  199. package/dist/utilities/importWithoutClientFiles.js +1 -1
  200. package/dist/utilities/importWithoutClientFiles.js.map +1 -1
  201. package/dist/utilities/parseCookies.js +1 -1
  202. package/dist/utilities/parseCookies.js.map +1 -1
  203. package/dist/utilities/telemetry/index.d.ts +7 -1
  204. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  205. package/dist/utilities/telemetry/index.js +41 -19
  206. package/dist/utilities/telemetry/index.js.map +1 -1
  207. package/package.json +67 -70
@@ -59,5 +59,8 @@ export type RichTextAdapter<Value extends object = object, AdapterProps = any, E
59
59
  CellComponent: React.FC<any>;
60
60
  FieldComponent: React.FC<RichTextFieldProps<Value, AdapterProps, ExtraFieldProperties>>;
61
61
  };
62
+ export type RichTextAdapterProvider<Value extends object = object, AdapterProps = any, ExtraFieldProperties = {}> = ({ config, }: {
63
+ config: SanitizedConfig;
64
+ }) => Promise<RichTextAdapter<Value, AdapterProps, ExtraFieldProperties>> | RichTextAdapter<Value, AdapterProps, ExtraFieldProperties>;
62
65
  export {};
63
66
  //# sourceMappingURL=RichText.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RichText.d.ts","sourceRoot":"","sources":["../../src/admin/RichText.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RichText.d.ts","sourceRoot":"","sources":["../../src/admin/RichText.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/admin/RichText.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { JSONSchema4 } from 'json-schema'\n\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { Field, FieldBase, RichTextField, Validate } from '../fields/config/types.js'\nimport type { PayloadRequestWithData, RequestContext } from '../types/index.js'\nimport type { WithServerSideProps } from './elements/WithServerSideProps.js'\n\nexport type RichTextFieldProps<\n Value extends object,\n AdapterProps,\n ExtraFieldProperties = {},\n> = Omit<RichTextField<Value, AdapterProps, ExtraFieldProperties>, 'type'> & {\n path?: string\n}\n\ntype RichTextAdapterBase<\n Value extends object = object,\n AdapterProps = any,\n ExtraFieldProperties = {},\n> = {\n generateComponentMap: (args: {\n WithServerSideProps: WithServerSideProps\n config: SanitizedConfig\n i18n: I18n\n schemaPath: string\n }) => Map<string, React.ReactNode>\n generateSchemaMap?: (args: {\n config: SanitizedConfig\n i18n: I18n\n schemaMap: Map<string, Field[]>\n schemaPath: string\n }) => Map<string, Field[]>\n hooks?: FieldBase['hooks']\n outputSchema?: ({\n collectionIDFieldTypes,\n config,\n field,\n interfaceNameDefinitions,\n isRequired,\n }: {\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config?: SanitizedConfig\n field: RichTextField<Value, AdapterProps, ExtraFieldProperties>\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>\n isRequired: boolean\n }) => JSONSchema4\n /**\n * Like an afterRead hook, but runs for both afterRead AND in the GraphQL resolver. For populating data, this should be used.\n *\n * To populate stuff / resolve field hooks, mutate the incoming populationPromises or fieldPromises array. They will then be awaited in the correct order within payload itself.\n * @param data\n */\n populationPromises?: (data: {\n context: RequestContext\n currentDepth?: number\n depth: number\n field: RichTextField<Value, AdapterProps, ExtraFieldProperties>\n fieldPromises: Promise<void>[]\n findMany: boolean\n flattenLocales: boolean\n overrideAccess?: boolean\n populationPromises: Promise<void>[]\n req: PayloadRequestWithData\n showHiddenFields: boolean\n siblingDoc: Record<string, unknown>\n }) => void\n validate: Validate<\n Value,\n Value,\n unknown,\n RichTextField<Value, AdapterProps, ExtraFieldProperties>\n >\n}\n\nexport type RichTextAdapter<\n Value extends object = object,\n AdapterProps = any,\n ExtraFieldProperties = {},\n> = RichTextAdapterBase<Value, AdapterProps, ExtraFieldProperties> & {\n CellComponent: React.FC<any>\n FieldComponent: React.FC<RichTextFieldProps<Value, AdapterProps, ExtraFieldProperties>>\n}\n"],"names":[],"rangeMappings":"","mappings":"AA8EA,WAOC"}
1
+ {"version":3,"sources":["../../src/admin/RichText.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { JSONSchema4 } from 'json-schema'\n\nimport type { Config, SanitizedConfig } from '../config/types.js'\nimport type { Field, FieldBase, RichTextField, Validate } from '../fields/config/types.js'\nimport type { PayloadRequestWithData, RequestContext } from '../types/index.js'\nimport type { WithServerSideProps } from './elements/WithServerSideProps.js'\n\nexport type RichTextFieldProps<\n Value extends object,\n AdapterProps,\n ExtraFieldProperties = {},\n> = Omit<RichTextField<Value, AdapterProps, ExtraFieldProperties>, 'type'> & {\n path?: string\n}\n\ntype RichTextAdapterBase<\n Value extends object = object,\n AdapterProps = any,\n ExtraFieldProperties = {},\n> = {\n generateComponentMap: (args: {\n WithServerSideProps: WithServerSideProps\n config: SanitizedConfig\n i18n: I18n\n schemaPath: string\n }) => Map<string, React.ReactNode>\n generateSchemaMap?: (args: {\n config: SanitizedConfig\n i18n: I18n\n schemaMap: Map<string, Field[]>\n schemaPath: string\n }) => Map<string, Field[]>\n hooks?: FieldBase['hooks']\n outputSchema?: ({\n collectionIDFieldTypes,\n config,\n field,\n interfaceNameDefinitions,\n isRequired,\n }: {\n collectionIDFieldTypes: { [key: string]: 'number' | 'string' }\n config?: SanitizedConfig\n field: RichTextField<Value, AdapterProps, ExtraFieldProperties>\n /**\n * Allows you to define new top-level interfaces that can be re-used in the output schema.\n */\n interfaceNameDefinitions: Map<string, JSONSchema4>\n isRequired: boolean\n }) => JSONSchema4\n /**\n * Like an afterRead hook, but runs for both afterRead AND in the GraphQL resolver. For populating data, this should be used.\n *\n * To populate stuff / resolve field hooks, mutate the incoming populationPromises or fieldPromises array. They will then be awaited in the correct order within payload itself.\n * @param data\n */\n populationPromises?: (data: {\n context: RequestContext\n currentDepth?: number\n depth: number\n field: RichTextField<Value, AdapterProps, ExtraFieldProperties>\n fieldPromises: Promise<void>[]\n findMany: boolean\n flattenLocales: boolean\n overrideAccess?: boolean\n populationPromises: Promise<void>[]\n req: PayloadRequestWithData\n showHiddenFields: boolean\n siblingDoc: Record<string, unknown>\n }) => void\n validate: Validate<\n Value,\n Value,\n unknown,\n RichTextField<Value, AdapterProps, ExtraFieldProperties>\n >\n}\n\nexport type RichTextAdapter<\n Value extends object = object,\n AdapterProps = any,\n ExtraFieldProperties = {},\n> = RichTextAdapterBase<Value, AdapterProps, ExtraFieldProperties> & {\n CellComponent: React.FC<any>\n FieldComponent: React.FC<RichTextFieldProps<Value, AdapterProps, ExtraFieldProperties>>\n}\n\nexport type RichTextAdapterProvider<\n Value extends object = object,\n AdapterProps = any,\n ExtraFieldProperties = {},\n> = ({\n config,\n}: {\n config: SanitizedConfig\n}) =>\n | Promise<RichTextAdapter<Value, AdapterProps, ExtraFieldProperties>>\n | RichTextAdapter<Value, AdapterProps, ExtraFieldProperties>\n"],"names":[],"rangeMappings":"","mappings":"AAuFA,WAU8D"}
@@ -1,4 +1,5 @@
1
1
  import type { I18n } from '@payloadcms/translations';
2
+ import type { Permissions } from '../../auth/types.js';
2
3
  import type { SanitizedCollectionConfig } from '../../collections/config/types.js';
3
4
  import type { SanitizedConfig } from '../../config/types.js';
4
5
  import type { SanitizedGlobalConfig } from '../../globals/config/types.js';
@@ -8,11 +9,13 @@ export type DocumentTabProps = {
8
9
  config: SanitizedConfig;
9
10
  globalConfig?: SanitizedGlobalConfig;
10
11
  i18n: I18n;
12
+ permissions: Permissions;
11
13
  };
12
14
  export type DocumentTabCondition = (args: {
13
15
  collectionConfig: SanitizedCollectionConfig;
14
16
  config: SanitizedConfig;
15
17
  globalConfig: SanitizedGlobalConfig;
18
+ permissions: Permissions;
16
19
  }) => boolean;
17
20
  export type DocumentTabConfig = {
18
21
  Pill?: React.ComponentType;
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/admin/elements/Tab.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAE1E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE;IACxC,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,qBAAqB,CAAA;CACpC,KAAK,OAAO,CAAA;AAIb,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC1B,SAAS,CAAC,EAAE,oBAAoB,CAAA;IAChC,IAAI,CAAC,EACD,CAAC,CAAC,IAAI,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,yBAAyB,CAAA;QACrC,MAAM,EAAE,qBAAqB,CAAA;QAC7B,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;KAClC,KAAK,MAAM,CAAC,GACb,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,OAAO,CAAA;IAC1D,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;QAAE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,GAAG,MAAM,CAAA;IACnE,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC;IACrD,IAAI,EAAE,MAAM,CAAA;CACb,CAAC,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG,iBAAiB,CAAA"}
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/admin/elements/Tab.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAE1E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,WAAW,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE;IACxC,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,qBAAqB,CAAA;IACnC,WAAW,EAAE,WAAW,CAAA;CACzB,KAAK,OAAO,CAAA;AAIb,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC1B,SAAS,CAAC,EAAE,oBAAoB,CAAA;IAChC,IAAI,CAAC,EACD,CAAC,CAAC,IAAI,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,yBAAyB,CAAA;QACrC,MAAM,EAAE,qBAAqB,CAAA;QAC7B,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;KAClC,KAAK,MAAM,CAAC,GACb,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,OAAO,CAAA;IAC1D,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;QAAE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,GAAG,MAAM,CAAA;IACnE,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC;IACrD,IAAI,EAAE,MAAM,CAAA;CACb,CAAC,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG,iBAAiB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/admin/elements/Tab.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\n\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { SanitizedConfig } from '../../config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\n\nexport type DocumentTabProps = {\n apiURL?: string\n collectionConfig?: SanitizedCollectionConfig\n config: SanitizedConfig\n globalConfig?: SanitizedGlobalConfig\n i18n: I18n\n}\n\nexport type DocumentTabCondition = (args: {\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n globalConfig: SanitizedGlobalConfig\n}) => boolean\n\n// Everything is optional because we merge in the defaults\n// i.e. the config may override the `Default` view with a `label` but not an `href`\nexport type DocumentTabConfig = {\n Pill?: React.ComponentType\n condition?: DocumentTabCondition\n href?:\n | ((args: {\n apiURL: string\n collection: SanitizedCollectionConfig\n global: SanitizedGlobalConfig\n id?: string\n routes: SanitizedConfig['routes']\n }) => string)\n | string\n isActive?: ((args: { href: string }) => boolean) | boolean\n label?: ((args: { t: (key: string) => string }) => string) | string\n newTab?: boolean\n}\n\nexport type DocumentTabComponent = React.ComponentType<{\n path: string\n}>\n\nexport type DocumentTab = DocumentTabComponent | DocumentTabConfig\n"],"names":[],"rangeMappings":"","mappings":"AA2CA,WAAkE"}
1
+ {"version":3,"sources":["../../../src/admin/elements/Tab.ts"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\n\nimport type { Permissions } from '../../auth/types.js'\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { SanitizedConfig } from '../../config/types.js'\nimport type { SanitizedGlobalConfig } from '../../globals/config/types.js'\n\nexport type DocumentTabProps = {\n apiURL?: string\n collectionConfig?: SanitizedCollectionConfig\n config: SanitizedConfig\n globalConfig?: SanitizedGlobalConfig\n i18n: I18n\n permissions: Permissions\n}\n\nexport type DocumentTabCondition = (args: {\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n globalConfig: SanitizedGlobalConfig\n permissions: Permissions\n}) => boolean\n\n// Everything is optional because we merge in the defaults\n// i.e. the config may override the `Default` view with a `label` but not an `href`\nexport type DocumentTabConfig = {\n Pill?: React.ComponentType\n condition?: DocumentTabCondition\n href?:\n | ((args: {\n apiURL: string\n collection: SanitizedCollectionConfig\n global: SanitizedGlobalConfig\n id?: string\n routes: SanitizedConfig['routes']\n }) => string)\n | string\n isActive?: ((args: { href: string }) => boolean) | boolean\n label?: ((args: { t: (key: string) => string }) => string) | string\n newTab?: boolean\n}\n\nexport type DocumentTabComponent = React.ComponentType<{\n path: string\n}>\n\nexport type DocumentTab = DocumentTabComponent | DocumentTabConfig\n"],"names":[],"rangeMappings":"","mappings":"AA8CA,WAAkE"}
@@ -1,4 +1,4 @@
1
- export type { RichTextAdapter, RichTextFieldProps } from './RichText.js';
1
+ export type { RichTextAdapter, RichTextAdapterProvider, RichTextFieldProps } from './RichText.js';
2
2
  export type { CellComponentProps, DefaultCellComponentProps } from './elements/Cell.js';
3
3
  export type { ConditionalDateProps } from './elements/DatePicker.js';
4
4
  export type { DayPickerProps, SharedProps, TimePickerProps } from './elements/DatePicker.js';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACxE,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AACvF,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AACpE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC5F,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAC5E,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AACpC,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAC3F,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEtE,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,eAAe,GAChB,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACjG,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AACvF,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AACpE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC5F,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAC5E,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AACpC,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAC3F,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEtE,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,eAAe,GAChB,MAAM,kBAAkB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/admin/types.ts"],"sourcesContent":["export type { RichTextAdapter, RichTextFieldProps } from './RichText.js'\nexport type { CellComponentProps, DefaultCellComponentProps } from './elements/Cell.js'\nexport type { ConditionalDateProps } from './elements/DatePicker.js'\nexport type { DayPickerProps, SharedProps, TimePickerProps } from './elements/DatePicker.js'\nexport type { CustomPreviewButton } from './elements/PreviewButton.js'\nexport type { CustomPublishButton } from './elements/PublishButton.js'\nexport type { CustomSaveButton } from './elements/SaveButton.js'\nexport type { CustomSaveDraftButton } from './elements/SaveDraftButton.js'\nexport type {\n DocumentTab,\n DocumentTabComponent,\n DocumentTabCondition,\n DocumentTabConfig,\n DocumentTabProps,\n} from './elements/Tab.js'\nexport type { WithServerSideProps } from './elements/WithServerSideProps.js'\nexport type { ErrorProps } from './forms/Error.js'\nexport type {\n Description,\n DescriptionComponent,\n DescriptionFunction,\n FieldDescriptionProps,\n} from './forms/FieldDescription.js'\nexport type { Data, FilterOptionsResult, FormField, FormState, Row } from './forms/Form.js'\nexport type { LabelProps } from './forms/Label.js'\nexport type { RowLabel, RowLabelComponent } from './forms/RowLabel.js'\n\nexport type {\n AdminViewComponent,\n AdminViewProps,\n EditViewProps,\n InitPageResult,\n ServerSideEditViewProps,\n VisibleEntities,\n} from './views/types.js'\n"],"names":[],"rangeMappings":"","mappings":"AA2BA,WAOyB"}
1
+ {"version":3,"sources":["../../src/admin/types.ts"],"sourcesContent":["export type { RichTextAdapter, RichTextAdapterProvider, RichTextFieldProps } from './RichText.js'\nexport type { CellComponentProps, DefaultCellComponentProps } from './elements/Cell.js'\nexport type { ConditionalDateProps } from './elements/DatePicker.js'\nexport type { DayPickerProps, SharedProps, TimePickerProps } from './elements/DatePicker.js'\nexport type { CustomPreviewButton } from './elements/PreviewButton.js'\nexport type { CustomPublishButton } from './elements/PublishButton.js'\nexport type { CustomSaveButton } from './elements/SaveButton.js'\nexport type { CustomSaveDraftButton } from './elements/SaveDraftButton.js'\nexport type {\n DocumentTab,\n DocumentTabComponent,\n DocumentTabCondition,\n DocumentTabConfig,\n DocumentTabProps,\n} from './elements/Tab.js'\nexport type { WithServerSideProps } from './elements/WithServerSideProps.js'\nexport type { ErrorProps } from './forms/Error.js'\nexport type {\n Description,\n DescriptionComponent,\n DescriptionFunction,\n FieldDescriptionProps,\n} from './forms/FieldDescription.js'\nexport type { Data, FilterOptionsResult, FormField, FormState, Row } from './forms/Form.js'\nexport type { LabelProps } from './forms/Label.js'\nexport type { RowLabel, RowLabelComponent } from './forms/RowLabel.js'\n\nexport type {\n AdminViewComponent,\n AdminViewProps,\n EditViewProps,\n InitPageResult,\n ServerSideEditViewProps,\n VisibleEntities,\n} from './views/types.js'\n"],"names":[],"rangeMappings":"","mappings":"AA2BA,WAOyB"}
@@ -5,7 +5,7 @@ export async function getAccessResults({ req }) {
5
5
  const { payload, user } = req;
6
6
  const isLoggedIn = !!user;
7
7
  const userCollectionConfig = user && user.collection ? payload.config.collections.find((collection)=>collection.slug === user.collection) : null;
8
- if (userCollectionConfig) {
8
+ if (userCollectionConfig && payload.config.admin.user === user.collection) {
9
9
  results.canAccessAdmin = userCollectionConfig.access.admin ? await userCollectionConfig.access.admin({
10
10
  req
11
11
  }) : isLoggedIn;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/getAccessResults.ts"],"sourcesContent":["import type { AllOperations, PayloadRequestWithData } from '../types/index.js'\nimport type { Permissions } from './types.js'\n\nimport { getEntityPolicies } from '../utilities/getEntityPolicies.js'\nimport isolateObjectProperty from '../utilities/isolateObjectProperty.js'\n\ntype GetAccessResultsArgs = {\n req: PayloadRequestWithData\n}\nexport async function getAccessResults({ req }: GetAccessResultsArgs): Promise<Permissions> {\n const results = {} as Permissions\n const { payload, user } = req\n\n const isLoggedIn = !!user\n const userCollectionConfig =\n user && user.collection\n ? payload.config.collections.find((collection) => collection.slug === user.collection)\n : null\n\n if (userCollectionConfig) {\n results.canAccessAdmin = userCollectionConfig.access.admin\n ? await userCollectionConfig.access.admin({ req })\n : isLoggedIn\n } else {\n results.canAccessAdmin = false\n }\n\n await Promise.all(\n payload.config.collections.map(async (collection) => {\n const collectionOperations: AllOperations[] = ['create', 'read', 'update', 'delete']\n\n if (\n collection.auth &&\n typeof collection.auth.maxLoginAttempts !== 'undefined' &&\n collection.auth.maxLoginAttempts !== 0\n ) {\n collectionOperations.push('unlock')\n }\n\n if (collection.versions) {\n collectionOperations.push('readVersions')\n }\n\n const collectionPolicy = await getEntityPolicies({\n type: 'collection',\n entity: collection,\n operations: collectionOperations,\n // Do not re-use our existing req object, as we need a new req.transactionID. Cannot re-use our existing one, as this is run in parallel (Promise.all above) which is\n // not supported on the same transaction ID. Not passing a transaction ID here creates a new transaction ID.\n req: isolateObjectProperty(req, 'transactionID'),\n })\n results.collections = {\n ...results.collections,\n [collection.slug]: collectionPolicy,\n }\n }),\n )\n\n await Promise.all(\n payload.config.globals.map(async (global) => {\n const globalOperations: AllOperations[] = ['read', 'update']\n\n if (global.versions) {\n globalOperations.push('readVersions')\n }\n\n const globalPolicy = await getEntityPolicies({\n type: 'global',\n entity: global,\n operations: globalOperations,\n // Do not re-use our existing req object, as we need a new req.transactionID. Cannot re-use our existing one, as this is run in parallel (Promise.all above) which is\n // not supported on the same transaction ID. Not passing a transaction ID here creates a new transaction ID.\n req: isolateObjectProperty(req, 'transactionID'),\n })\n results.globals = {\n ...results.globals,\n [global.slug]: globalPolicy,\n }\n }),\n )\n\n return results\n}\n"],"names":["getEntityPolicies","isolateObjectProperty","getAccessResults","req","results","payload","user","isLoggedIn","userCollectionConfig","collection","config","collections","find","slug","canAccessAdmin","access","admin","Promise","all","map","collectionOperations","auth","maxLoginAttempts","push","versions","collectionPolicy","type","entity","operations","globals","global","globalOperations","globalPolicy"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAGA,SAASA,iBAAiB,QAAQ,oCAAmC;AACrE,OAAOC,2BAA2B,wCAAuC;AAKzE,OAAO,eAAeC,iBAAiB,EAAEC,GAAG,EAAwB;IAClE,MAAMC,UAAU,CAAC;IACjB,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGH;IAE1B,MAAMI,aAAa,CAAC,CAACD;IACrB,MAAME,uBACJF,QAAQA,KAAKG,UAAU,GACnBJ,QAAQK,MAAM,CAACC,WAAW,CAACC,IAAI,CAAC,CAACH,aAAeA,WAAWI,IAAI,KAAKP,KAAKG,UAAU,IACnF;IAEN,IAAID,sBAAsB;QACxBJ,QAAQU,cAAc,GAAGN,qBAAqBO,MAAM,CAACC,KAAK,GACtD,MAAMR,qBAAqBO,MAAM,CAACC,KAAK,CAAC;YAAEb;QAAI,KAC9CI;IACN,OAAO;QACLH,QAAQU,cAAc,GAAG;IAC3B;IAEA,MAAMG,QAAQC,GAAG,CACfb,QAAQK,MAAM,CAACC,WAAW,CAACQ,GAAG,CAAC,OAAOV;QACpC,MAAMW,uBAAwC;YAAC;YAAU;YAAQ;YAAU;SAAS;QAEpF,IACEX,WAAWY,IAAI,IACf,OAAOZ,WAAWY,IAAI,CAACC,gBAAgB,KAAK,eAC5Cb,WAAWY,IAAI,CAACC,gBAAgB,KAAK,GACrC;YACAF,qBAAqBG,IAAI,CAAC;QAC5B;QAEA,IAAId,WAAWe,QAAQ,EAAE;YACvBJ,qBAAqBG,IAAI,CAAC;QAC5B;QAEA,MAAME,mBAAmB,MAAMzB,kBAAkB;YAC/C0B,MAAM;YACNC,QAAQlB;YACRmB,YAAYR;YACZ,qKAAqK;YACrK,4GAA4G;YAC5GjB,KAAKF,sBAAsBE,KAAK;QAClC;QACAC,QAAQO,WAAW,GAAG;YACpB,GAAGP,QAAQO,WAAW;YACtB,CAACF,WAAWI,IAAI,CAAC,EAAEY;QACrB;IACF;IAGF,MAAMR,QAAQC,GAAG,CACfb,QAAQK,MAAM,CAACmB,OAAO,CAACV,GAAG,CAAC,OAAOW;QAChC,MAAMC,mBAAoC;YAAC;YAAQ;SAAS;QAE5D,IAAID,OAAON,QAAQ,EAAE;YACnBO,iBAAiBR,IAAI,CAAC;QACxB;QAEA,MAAMS,eAAe,MAAMhC,kBAAkB;YAC3C0B,MAAM;YACNC,QAAQG;YACRF,YAAYG;YACZ,qKAAqK;YACrK,4GAA4G;YAC5G5B,KAAKF,sBAAsBE,KAAK;QAClC;QACAC,QAAQyB,OAAO,GAAG;YAChB,GAAGzB,QAAQyB,OAAO;YAClB,CAACC,OAAOjB,IAAI,CAAC,EAAEmB;QACjB;IACF;IAGF,OAAO5B;AACT"}
1
+ {"version":3,"sources":["../../src/auth/getAccessResults.ts"],"sourcesContent":["import type { AllOperations, PayloadRequestWithData } from '../types/index.js'\nimport type { Permissions } from './types.js'\n\nimport { getEntityPolicies } from '../utilities/getEntityPolicies.js'\nimport isolateObjectProperty from '../utilities/isolateObjectProperty.js'\n\ntype GetAccessResultsArgs = {\n req: PayloadRequestWithData\n}\nexport async function getAccessResults({ req }: GetAccessResultsArgs): Promise<Permissions> {\n const results = {} as Permissions\n const { payload, user } = req\n\n const isLoggedIn = !!user\n const userCollectionConfig =\n user && user.collection\n ? payload.config.collections.find((collection) => collection.slug === user.collection)\n : null\n\n if (userCollectionConfig && payload.config.admin.user === user.collection) {\n results.canAccessAdmin = userCollectionConfig.access.admin\n ? await userCollectionConfig.access.admin({ req })\n : isLoggedIn\n } else {\n results.canAccessAdmin = false\n }\n\n await Promise.all(\n payload.config.collections.map(async (collection) => {\n const collectionOperations: AllOperations[] = ['create', 'read', 'update', 'delete']\n\n if (\n collection.auth &&\n typeof collection.auth.maxLoginAttempts !== 'undefined' &&\n collection.auth.maxLoginAttempts !== 0\n ) {\n collectionOperations.push('unlock')\n }\n\n if (collection.versions) {\n collectionOperations.push('readVersions')\n }\n\n const collectionPolicy = await getEntityPolicies({\n type: 'collection',\n entity: collection,\n operations: collectionOperations,\n // Do not re-use our existing req object, as we need a new req.transactionID. Cannot re-use our existing one, as this is run in parallel (Promise.all above) which is\n // not supported on the same transaction ID. Not passing a transaction ID here creates a new transaction ID.\n req: isolateObjectProperty(req, 'transactionID'),\n })\n results.collections = {\n ...results.collections,\n [collection.slug]: collectionPolicy,\n }\n }),\n )\n\n await Promise.all(\n payload.config.globals.map(async (global) => {\n const globalOperations: AllOperations[] = ['read', 'update']\n\n if (global.versions) {\n globalOperations.push('readVersions')\n }\n\n const globalPolicy = await getEntityPolicies({\n type: 'global',\n entity: global,\n operations: globalOperations,\n // Do not re-use our existing req object, as we need a new req.transactionID. Cannot re-use our existing one, as this is run in parallel (Promise.all above) which is\n // not supported on the same transaction ID. Not passing a transaction ID here creates a new transaction ID.\n req: isolateObjectProperty(req, 'transactionID'),\n })\n results.globals = {\n ...results.globals,\n [global.slug]: globalPolicy,\n }\n }),\n )\n\n return results\n}\n"],"names":["getEntityPolicies","isolateObjectProperty","getAccessResults","req","results","payload","user","isLoggedIn","userCollectionConfig","collection","config","collections","find","slug","admin","canAccessAdmin","access","Promise","all","map","collectionOperations","auth","maxLoginAttempts","push","versions","collectionPolicy","type","entity","operations","globals","global","globalOperations","globalPolicy"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAGA,SAASA,iBAAiB,QAAQ,oCAAmC;AACrE,OAAOC,2BAA2B,wCAAuC;AAKzE,OAAO,eAAeC,iBAAiB,EAAEC,GAAG,EAAwB;IAClE,MAAMC,UAAU,CAAC;IACjB,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAE,GAAGH;IAE1B,MAAMI,aAAa,CAAC,CAACD;IACrB,MAAME,uBACJF,QAAQA,KAAKG,UAAU,GACnBJ,QAAQK,MAAM,CAACC,WAAW,CAACC,IAAI,CAAC,CAACH,aAAeA,WAAWI,IAAI,KAAKP,KAAKG,UAAU,IACnF;IAEN,IAAID,wBAAwBH,QAAQK,MAAM,CAACI,KAAK,CAACR,IAAI,KAAKA,KAAKG,UAAU,EAAE;QACzEL,QAAQW,cAAc,GAAGP,qBAAqBQ,MAAM,CAACF,KAAK,GACtD,MAAMN,qBAAqBQ,MAAM,CAACF,KAAK,CAAC;YAAEX;QAAI,KAC9CI;IACN,OAAO;QACLH,QAAQW,cAAc,GAAG;IAC3B;IAEA,MAAME,QAAQC,GAAG,CACfb,QAAQK,MAAM,CAACC,WAAW,CAACQ,GAAG,CAAC,OAAOV;QACpC,MAAMW,uBAAwC;YAAC;YAAU;YAAQ;YAAU;SAAS;QAEpF,IACEX,WAAWY,IAAI,IACf,OAAOZ,WAAWY,IAAI,CAACC,gBAAgB,KAAK,eAC5Cb,WAAWY,IAAI,CAACC,gBAAgB,KAAK,GACrC;YACAF,qBAAqBG,IAAI,CAAC;QAC5B;QAEA,IAAId,WAAWe,QAAQ,EAAE;YACvBJ,qBAAqBG,IAAI,CAAC;QAC5B;QAEA,MAAME,mBAAmB,MAAMzB,kBAAkB;YAC/C0B,MAAM;YACNC,QAAQlB;YACRmB,YAAYR;YACZ,qKAAqK;YACrK,4GAA4G;YAC5GjB,KAAKF,sBAAsBE,KAAK;QAClC;QACAC,QAAQO,WAAW,GAAG;YACpB,GAAGP,QAAQO,WAAW;YACtB,CAACF,WAAWI,IAAI,CAAC,EAAEY;QACrB;IACF;IAGF,MAAMR,QAAQC,GAAG,CACfb,QAAQK,MAAM,CAACmB,OAAO,CAACV,GAAG,CAAC,OAAOW;QAChC,MAAMC,mBAAoC;YAAC;YAAQ;SAAS;QAE5D,IAAID,OAAON,QAAQ,EAAE;YACnBO,iBAAiBR,IAAI,CAAC;QACxB;QAEA,MAAMS,eAAe,MAAMhC,kBAAkB;YAC3C0B,MAAM;YACNC,QAAQG;YACRF,YAAYG;YACZ,qKAAqK;YACrK,4GAA4G;YAC5G5B,KAAKF,sBAAsBE,KAAK;QAClC;QACAC,QAAQyB,OAAO,GAAG;YAChB,GAAGzB,QAAQyB,OAAO;YAClB,CAACC,OAAOjB,IAAI,CAAC,EAAEmB;QACjB;IACF;IAGF,OAAO5B;AACT"}
@@ -57,8 +57,9 @@ export const forgotPasswordOperation = async (incomingArgs)=>{
57
57
  req
58
58
  });
59
59
  if (!disableEmail) {
60
- const protocol = new URL(req.url).protocol;
61
- const serverURL = config.serverURL !== null && config.serverURL !== '' ? config.serverURL : `${protocol}://${req.headers.get('host')}`;
60
+ const protocol = new URL(req.url).protocol // includes the final :
61
+ ;
62
+ const serverURL = config.serverURL !== null && config.serverURL !== '' ? config.serverURL : `${protocol}//${req.headers.get('host')}`;
62
63
  let html = `${req.t('authentication:youAreReceivingResetPassword')}
63
64
  <a href="${serverURL}${config.routes.admin}/reset/${token}">
64
65
  ${serverURL}${config.routes.admin}/reset/${token}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/forgotPassword.ts"],"sourcesContent":["import crypto from 'crypto'\nimport httpStatus from 'http-status'\nimport { URL } from 'url'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { PayloadRequestWithData } from '../../types/index.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { APIError } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\n\nexport type Arguments = {\n collection: Collection\n data: {\n [key: string]: unknown\n email: string\n }\n disableEmail?: boolean\n expiration?: number\n req: PayloadRequestWithData\n}\n\nexport type Result = string\n\nexport const forgotPasswordOperation = async (incomingArgs: Arguments): Promise<null | string> => {\n if (!Object.prototype.hasOwnProperty.call(incomingArgs.data, 'email')) {\n throw new APIError('Missing email.', httpStatus.BAD_REQUEST)\n }\n\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'forgotPassword',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n data,\n disableEmail,\n expiration,\n req: {\n payload: { config, email },\n payload,\n },\n req,\n } = args\n\n // /////////////////////////////////////\n // Forget password\n // /////////////////////////////////////\n\n let token: string = crypto.randomBytes(20).toString('hex')\n\n type UserDoc = {\n id: number | string\n resetPasswordExpiration?: string\n resetPasswordToken?: string\n }\n\n if (!data.email) {\n throw new APIError('Missing email.', httpStatus.BAD_REQUEST)\n }\n\n let user = await payload.db.findOne<UserDoc>({\n collection: collectionConfig.slug,\n req,\n where: { email: { equals: data.email.toLowerCase() } },\n })\n\n // We don't want to indicate specifically that an email was not found,\n // as doing so could lead to the exposure of registered emails.\n // Therefore, we prefer to fail silently.\n if (!user) return null\n\n user.resetPasswordToken = token\n user.resetPasswordExpiration = new Date(expiration || Date.now() + 3600000).toISOString() // 1 hour\n\n user = await payload.update({\n id: user.id,\n collection: collectionConfig.slug,\n data: user,\n req,\n })\n\n if (!disableEmail) {\n const protocol = new URL(req.url).protocol\n const serverURL =\n config.serverURL !== null && config.serverURL !== ''\n ? config.serverURL\n : `${protocol}://${req.headers.get('host')}`\n\n let html = `${req.t('authentication:youAreReceivingResetPassword')}\n <a href=\"${serverURL}${config.routes.admin}/reset/${token}\">\n ${serverURL}${config.routes.admin}/reset/${token}\n </a>\n ${req.t('authentication:youDidNotRequestPassword')}`\n\n if (typeof collectionConfig.auth.forgotPassword.generateEmailHTML === 'function') {\n html = await collectionConfig.auth.forgotPassword.generateEmailHTML({\n req,\n token,\n user,\n })\n }\n\n let subject = req.t('authentication:resetYourPassword')\n\n if (typeof collectionConfig.auth.forgotPassword.generateEmailSubject === 'function') {\n subject = await collectionConfig.auth.forgotPassword.generateEmailSubject({\n req,\n token,\n user,\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n email.sendEmail({\n from: `\"${email.defaultFromName}\" <${email.defaultFromAddress}>`,\n html,\n subject,\n to: data.email,\n })\n }\n\n // /////////////////////////////////////\n // afterForgotPassword - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterForgotPassword.reduce(async (priorHook, hook) => {\n await priorHook\n await hook({ args, collection: args.collection?.config, context: req.context })\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n token = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'forgotPassword',\n result: token,\n })\n\n if (shouldCommit) await commitTransaction(req)\n\n return token\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["crypto","httpStatus","URL","buildAfterOperation","APIError","commitTransaction","initTransaction","killTransaction","forgotPasswordOperation","incomingArgs","Object","prototype","hasOwnProperty","call","data","BAD_REQUEST","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","disableEmail","expiration","payload","email","token","randomBytes","toString","user","db","findOne","slug","where","equals","toLowerCase","resetPasswordToken","resetPasswordExpiration","Date","now","toISOString","update","id","protocol","url","serverURL","headers","get","html","t","routes","admin","auth","forgotPassword","generateEmailHTML","subject","generateEmailSubject","sendEmail","from","defaultFromName","defaultFromAddress","to","afterForgotPassword","result","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/auth/operations/forgotPassword.ts"],"sourcesContent":["import crypto from 'crypto'\nimport httpStatus from 'http-status'\nimport { URL } from 'url'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { PayloadRequestWithData } from '../../types/index.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { APIError } from '../../errors/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\n\nexport type Arguments = {\n collection: Collection\n data: {\n [key: string]: unknown\n email: string\n }\n disableEmail?: boolean\n expiration?: number\n req: PayloadRequestWithData\n}\n\nexport type Result = string\n\nexport const forgotPasswordOperation = async (incomingArgs: Arguments): Promise<null | string> => {\n if (!Object.prototype.hasOwnProperty.call(incomingArgs.data, 'email')) {\n throw new APIError('Missing email.', httpStatus.BAD_REQUEST)\n }\n\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'forgotPassword',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n data,\n disableEmail,\n expiration,\n req: {\n payload: { config, email },\n payload,\n },\n req,\n } = args\n\n // /////////////////////////////////////\n // Forget password\n // /////////////////////////////////////\n\n let token: string = crypto.randomBytes(20).toString('hex')\n\n type UserDoc = {\n id: number | string\n resetPasswordExpiration?: string\n resetPasswordToken?: string\n }\n\n if (!data.email) {\n throw new APIError('Missing email.', httpStatus.BAD_REQUEST)\n }\n\n let user = await payload.db.findOne<UserDoc>({\n collection: collectionConfig.slug,\n req,\n where: { email: { equals: data.email.toLowerCase() } },\n })\n\n // We don't want to indicate specifically that an email was not found,\n // as doing so could lead to the exposure of registered emails.\n // Therefore, we prefer to fail silently.\n if (!user) return null\n\n user.resetPasswordToken = token\n user.resetPasswordExpiration = new Date(expiration || Date.now() + 3600000).toISOString() // 1 hour\n\n user = await payload.update({\n id: user.id,\n collection: collectionConfig.slug,\n data: user,\n req,\n })\n\n if (!disableEmail) {\n const protocol = new URL(req.url).protocol // includes the final :\n const serverURL =\n config.serverURL !== null && config.serverURL !== ''\n ? config.serverURL\n : `${protocol}//${req.headers.get('host')}`\n\n let html = `${req.t('authentication:youAreReceivingResetPassword')}\n <a href=\"${serverURL}${config.routes.admin}/reset/${token}\">\n ${serverURL}${config.routes.admin}/reset/${token}\n </a>\n ${req.t('authentication:youDidNotRequestPassword')}`\n\n if (typeof collectionConfig.auth.forgotPassword.generateEmailHTML === 'function') {\n html = await collectionConfig.auth.forgotPassword.generateEmailHTML({\n req,\n token,\n user,\n })\n }\n\n let subject = req.t('authentication:resetYourPassword')\n\n if (typeof collectionConfig.auth.forgotPassword.generateEmailSubject === 'function') {\n subject = await collectionConfig.auth.forgotPassword.generateEmailSubject({\n req,\n token,\n user,\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n email.sendEmail({\n from: `\"${email.defaultFromName}\" <${email.defaultFromAddress}>`,\n html,\n subject,\n to: data.email,\n })\n }\n\n // /////////////////////////////////////\n // afterForgotPassword - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterForgotPassword.reduce(async (priorHook, hook) => {\n await priorHook\n await hook({ args, collection: args.collection?.config, context: req.context })\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n token = await buildAfterOperation({\n args,\n collection: args.collection?.config,\n operation: 'forgotPassword',\n result: token,\n })\n\n if (shouldCommit) await commitTransaction(req)\n\n return token\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["crypto","httpStatus","URL","buildAfterOperation","APIError","commitTransaction","initTransaction","killTransaction","forgotPasswordOperation","incomingArgs","Object","prototype","hasOwnProperty","call","data","BAD_REQUEST","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","disableEmail","expiration","payload","email","token","randomBytes","toString","user","db","findOne","slug","where","equals","toLowerCase","resetPasswordToken","resetPasswordExpiration","Date","now","toISOString","update","id","protocol","url","serverURL","headers","get","html","t","routes","admin","auth","forgotPassword","generateEmailHTML","subject","generateEmailSubject","sendEmail","from","defaultFromName","defaultFromAddress","to","afterForgotPassword","result","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAevC,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,sBAAsB,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,cAAc,yDACX,SAAS,KACtB,QAAQ,MAAM,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAA;CAAE,CAuNjE,CAAA"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/auth/operations/login.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAevC,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,EAAE,sBAAsB,CAAA;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,cAAc,yDACX,SAAS,KACtB,QAAQ,MAAM,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAA;CAAE,CA2NjE,CAAA"}
@@ -96,6 +96,9 @@ export const loginOperation = async (incomingArgs)=>{
96
96
  email,
97
97
  user
98
98
  });
99
+ // /////////////////////////////////////
100
+ // beforeLogin - Collection
101
+ // /////////////////////////////////////
99
102
  await collectionConfig.hooks.beforeLogin.reduce(async (priorHook, hook)=>{
100
103
  await priorHook;
101
104
  user = await hook({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth/operations/login.ts"],"sourcesContent":["import jwt from 'jsonwebtoken'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { GeneratedTypes } from '../../index.js'\nimport type { PayloadRequestWithData } from '../../types/index.js'\nimport type { User } from '../types.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { AuthenticationError, LockedAuth, ValidationError } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport isLocked from '../isLocked.js'\nimport { authenticateLocalStrategy } from '../strategies/local/authenticate.js'\nimport { incrementLoginAttempts } from '../strategies/local/incrementLoginAttempts.js'\nimport { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js'\n\nexport type Result = {\n exp?: number\n token?: string\n user?: User\n}\n\nexport type Arguments = {\n collection: Collection\n data: {\n email: string\n password: string\n }\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequestWithData\n showHiddenFields?: boolean\n}\n\nexport const loginOperation = async <TSlug extends keyof GeneratedTypes['collections']>(\n incomingArgs: Arguments,\n): Promise<Result & { user: GeneratedTypes['collections'][TSlug] }> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'login',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n data,\n depth,\n overrideAccess,\n req,\n req: {\n fallbackLocale,\n locale,\n payload,\n payload: { secret },\n },\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Login\n // /////////////////////////////////////\n\n const { email: unsanitizedEmail, password } = data\n\n if (typeof unsanitizedEmail !== 'string' || unsanitizedEmail.trim() === '') {\n throw new ValidationError([{ field: 'email', message: req.i18n.t('validation:required') }])\n }\n if (typeof password !== 'string' || password.trim() === '') {\n throw new ValidationError([{ field: 'password', message: req.i18n.t('validation:required') }])\n }\n\n const email = unsanitizedEmail ? unsanitizedEmail.toLowerCase().trim() : null\n\n let user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: { email: { equals: email.toLowerCase() } },\n })\n\n if (!user || (args.collection.config.auth.verify && user._verified === false)) {\n throw new AuthenticationError(req.t)\n }\n\n if (user && isLocked(user.lockUntil)) {\n throw new LockedAuth(req.t)\n }\n\n const authResult = await authenticateLocalStrategy({ doc: user, password })\n\n user = sanitizeInternalFields(user)\n\n const maxLoginAttemptsEnabled = args.collection.config.auth.maxLoginAttempts > 0\n\n if (!authResult) {\n if (maxLoginAttemptsEnabled) {\n await incrementLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n if (shouldCommit) await commitTransaction(req)\n\n throw new AuthenticationError(req.t)\n }\n\n if (maxLoginAttemptsEnabled) {\n await resetLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email,\n user,\n })\n\n await collectionConfig.hooks.beforeLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n user,\n })) || user\n }, Promise.resolve())\n\n const token = jwt.sign(fieldsToSign, secret, {\n expiresIn: collectionConfig.auth.tokenExpiration,\n })\n\n req.user = user\n\n // /////////////////////////////////////\n // afterLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n token,\n user,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n user = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: user,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n let result: Result & { user: GeneratedTypes['collections'][TSlug] } = {\n exp: (jwt.decode(token) as jwt.JwtPayload).exp,\n token,\n user,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation<GeneratedTypes['collections'][TSlug]>({\n args,\n collection: args.collection?.config,\n operation: 'login',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) await commitTransaction(req)\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["jwt","buildAfterOperation","AuthenticationError","LockedAuth","ValidationError","afterRead","commitTransaction","initTransaction","killTransaction","sanitizeInternalFields","getFieldsToSign","isLocked","authenticateLocalStrategy","incrementLoginAttempts","resetLoginAttempts","loginOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","data","depth","overrideAccess","fallbackLocale","locale","payload","secret","showHiddenFields","email","unsanitizedEmail","password","trim","field","message","i18n","t","toLowerCase","user","db","findOne","slug","where","equals","auth","verify","_verified","lockUntil","authResult","doc","maxLoginAttemptsEnabled","maxLoginAttempts","fieldsToSign","beforeLogin","token","sign","expiresIn","tokenExpiration","afterLogin","global","result","exp","decode","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/auth/operations/login.ts"],"sourcesContent":["import jwt from 'jsonwebtoken'\n\nimport type { Collection } from '../../collections/config/types.js'\nimport type { GeneratedTypes } from '../../index.js'\nimport type { PayloadRequestWithData } from '../../types/index.js'\nimport type { User } from '../types.js'\n\nimport { buildAfterOperation } from '../../collections/operations/utils.js'\nimport { AuthenticationError, LockedAuth, ValidationError } from '../../errors/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport sanitizeInternalFields from '../../utilities/sanitizeInternalFields.js'\nimport { getFieldsToSign } from '../getFieldsToSign.js'\nimport isLocked from '../isLocked.js'\nimport { authenticateLocalStrategy } from '../strategies/local/authenticate.js'\nimport { incrementLoginAttempts } from '../strategies/local/incrementLoginAttempts.js'\nimport { resetLoginAttempts } from '../strategies/local/resetLoginAttempts.js'\n\nexport type Result = {\n exp?: number\n token?: string\n user?: User\n}\n\nexport type Arguments = {\n collection: Collection\n data: {\n email: string\n password: string\n }\n depth?: number\n overrideAccess?: boolean\n req: PayloadRequestWithData\n showHiddenFields?: boolean\n}\n\nexport const loginOperation = async <TSlug extends keyof GeneratedTypes['collections']>(\n incomingArgs: Arguments,\n): Promise<Result & { user: GeneratedTypes['collections'][TSlug] }> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = await initTransaction(args.req)\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection?.config,\n context: args.req.context,\n operation: 'login',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n data,\n depth,\n overrideAccess,\n req,\n req: {\n fallbackLocale,\n locale,\n payload,\n payload: { secret },\n },\n showHiddenFields,\n } = args\n\n // /////////////////////////////////////\n // Login\n // /////////////////////////////////////\n\n const { email: unsanitizedEmail, password } = data\n\n if (typeof unsanitizedEmail !== 'string' || unsanitizedEmail.trim() === '') {\n throw new ValidationError([{ field: 'email', message: req.i18n.t('validation:required') }])\n }\n if (typeof password !== 'string' || password.trim() === '') {\n throw new ValidationError([{ field: 'password', message: req.i18n.t('validation:required') }])\n }\n\n const email = unsanitizedEmail ? unsanitizedEmail.toLowerCase().trim() : null\n\n let user = await payload.db.findOne<any>({\n collection: collectionConfig.slug,\n req,\n where: { email: { equals: email.toLowerCase() } },\n })\n\n if (!user || (args.collection.config.auth.verify && user._verified === false)) {\n throw new AuthenticationError(req.t)\n }\n\n if (user && isLocked(user.lockUntil)) {\n throw new LockedAuth(req.t)\n }\n\n const authResult = await authenticateLocalStrategy({ doc: user, password })\n\n user = sanitizeInternalFields(user)\n\n const maxLoginAttemptsEnabled = args.collection.config.auth.maxLoginAttempts > 0\n\n if (!authResult) {\n if (maxLoginAttemptsEnabled) {\n await incrementLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n if (shouldCommit) await commitTransaction(req)\n\n throw new AuthenticationError(req.t)\n }\n\n if (maxLoginAttemptsEnabled) {\n await resetLoginAttempts({\n collection: collectionConfig,\n doc: user,\n payload: req.payload,\n req,\n })\n }\n\n const fieldsToSign = getFieldsToSign({\n collectionConfig,\n email,\n user,\n })\n\n // /////////////////////////////////////\n // beforeLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n user,\n })) || user\n }, Promise.resolve())\n\n const token = jwt.sign(fieldsToSign, secret, {\n expiresIn: collectionConfig.auth.tokenExpiration,\n })\n\n req.user = user\n\n // /////////////////////////////////////\n // afterLogin - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterLogin.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: args.req.context,\n req: args.req,\n token,\n user,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n user = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: user,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n user =\n (await hook({\n collection: args.collection?.config,\n context: req.context,\n doc: user,\n req,\n })) || user\n }, Promise.resolve())\n\n let result: Result & { user: GeneratedTypes['collections'][TSlug] } = {\n exp: (jwt.decode(token) as jwt.JwtPayload).exp,\n token,\n user,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation<GeneratedTypes['collections'][TSlug]>({\n args,\n collection: args.collection?.config,\n operation: 'login',\n result,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) await commitTransaction(req)\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["jwt","buildAfterOperation","AuthenticationError","LockedAuth","ValidationError","afterRead","commitTransaction","initTransaction","killTransaction","sanitizeInternalFields","getFieldsToSign","isLocked","authenticateLocalStrategy","incrementLoginAttempts","resetLoginAttempts","loginOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","data","depth","overrideAccess","fallbackLocale","locale","payload","secret","showHiddenFields","email","unsanitizedEmail","password","trim","field","message","i18n","t","toLowerCase","user","db","findOne","slug","where","equals","auth","verify","_verified","lockUntil","authResult","doc","maxLoginAttemptsEnabled","maxLoginAttempts","fieldsToSign","beforeLogin","token","sign","expiresIn","tokenExpiration","afterLogin","global","result","exp","decode","error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -3,8 +3,9 @@ export async function sendVerificationEmail(args) {
3
3
  // Verify token from e-mail
4
4
  const { collection: { config: collectionConfig }, config, disableEmail, email, req, token, user } = args;
5
5
  if (!disableEmail) {
6
- const protocol = new URL(req.url).protocol;
7
- const serverURL = config.serverURL !== null && config.serverURL !== '' ? config.serverURL : `${protocol}://${req.headers.get('host')}`;
6
+ const protocol = new URL(req.url).protocol // includes the final :
7
+ ;
8
+ const serverURL = config.serverURL !== null && config.serverURL !== '' ? config.serverURL : `${protocol}//${req.headers.get('host')}`;
8
9
  const verificationURL = `${serverURL}${config.routes.admin}/${collectionConfig.slug}/verify/${token}`;
9
10
  let html = `${req.t('authentication:newAccountCreated', {
10
11
  serverURL: config.serverURL,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/auth/sendVerificationEmail.ts"],"sourcesContent":["import { URL } from 'url'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { InitializedEmailAdapter } from '../email/types.js'\nimport type { PayloadRequestWithData } from '../types/index.js'\nimport type { User, VerifyConfig } from './types.js'\n\ntype Args = {\n collection: Collection\n config: SanitizedConfig\n disableEmail: boolean\n email: InitializedEmailAdapter\n req: PayloadRequestWithData\n token: string\n user: User\n}\n\nexport async function sendVerificationEmail(args: Args): Promise<void> {\n // Verify token from e-mail\n const {\n collection: { config: collectionConfig },\n config,\n disableEmail,\n email,\n req,\n token,\n user,\n } = args\n\n if (!disableEmail) {\n const protocol = new URL(req.url).protocol\n const serverURL =\n config.serverURL !== null && config.serverURL !== ''\n ? config.serverURL\n : `${protocol}://${req.headers.get('host')}`\n\n const verificationURL = `${serverURL}${config.routes.admin}/${collectionConfig.slug}/verify/${token}`\n\n let html = `${req.t('authentication:newAccountCreated', {\n serverURL: config.serverURL,\n verificationURL,\n })}`\n\n const verify = collectionConfig.auth.verify as VerifyConfig\n\n // Allow config to override email content\n if (typeof verify.generateEmailHTML === 'function') {\n html = await verify.generateEmailHTML({\n req,\n token,\n user,\n })\n }\n\n let subject = req.t('authentication:verifyYourEmail')\n\n // Allow config to override email subject\n if (typeof verify.generateEmailSubject === 'function') {\n subject = await verify.generateEmailSubject({\n req,\n token,\n user,\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n email.sendEmail({\n from: `\"${email.defaultFromName}\" <${email.defaultFromName}>`,\n html,\n subject,\n to: user.email,\n })\n }\n}\n"],"names":["URL","sendVerificationEmail","args","collection","config","collectionConfig","disableEmail","email","req","token","user","protocol","url","serverURL","headers","get","verificationURL","routes","admin","slug","html","t","verify","auth","generateEmailHTML","subject","generateEmailSubject","sendEmail","from","defaultFromName","to"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,GAAG,QAAQ,MAAK;AAkBzB,OAAO,eAAeC,sBAAsBC,IAAU;IACpD,2BAA2B;IAC3B,MAAM,EACJC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCD,MAAM,EACNE,YAAY,EACZC,KAAK,EACLC,GAAG,EACHC,KAAK,EACLC,IAAI,EACL,GAAGR;IAEJ,IAAI,CAACI,cAAc;QACjB,MAAMK,WAAW,IAAIX,IAAIQ,IAAII,GAAG,EAAED,QAAQ;QAC1C,MAAME,YACJT,OAAOS,SAAS,KAAK,QAAQT,OAAOS,SAAS,KAAK,KAC9CT,OAAOS,SAAS,GAChB,CAAC,EAAEF,SAAS,GAAG,EAAEH,IAAIM,OAAO,CAACC,GAAG,CAAC,QAAQ,CAAC;QAEhD,MAAMC,kBAAkB,CAAC,EAAEH,UAAU,EAAET,OAAOa,MAAM,CAACC,KAAK,CAAC,CAAC,EAAEb,iBAAiBc,IAAI,CAAC,QAAQ,EAAEV,MAAM,CAAC;QAErG,IAAIW,OAAO,CAAC,EAAEZ,IAAIa,CAAC,CAAC,oCAAoC;YACtDR,WAAWT,OAAOS,SAAS;YAC3BG;QACF,GAAG,CAAC;QAEJ,MAAMM,SAASjB,iBAAiBkB,IAAI,CAACD,MAAM;QAE3C,yCAAyC;QACzC,IAAI,OAAOA,OAAOE,iBAAiB,KAAK,YAAY;YAClDJ,OAAO,MAAME,OAAOE,iBAAiB,CAAC;gBACpChB;gBACAC;gBACAC;YACF;QACF;QAEA,IAAIe,UAAUjB,IAAIa,CAAC,CAAC;QAEpB,yCAAyC;QACzC,IAAI,OAAOC,OAAOI,oBAAoB,KAAK,YAAY;YACrDD,UAAU,MAAMH,OAAOI,oBAAoB,CAAC;gBAC1ClB;gBACAC;gBACAC;YACF;QACF;QAEA,mEAAmE;QACnEH,MAAMoB,SAAS,CAAC;YACdC,MAAM,CAAC,CAAC,EAAErB,MAAMsB,eAAe,CAAC,GAAG,EAAEtB,MAAMsB,eAAe,CAAC,CAAC,CAAC;YAC7DT;YACAK;YACAK,IAAIpB,KAAKH,KAAK;QAChB;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/auth/sendVerificationEmail.ts"],"sourcesContent":["import { URL } from 'url'\n\nimport type { Collection } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { InitializedEmailAdapter } from '../email/types.js'\nimport type { PayloadRequestWithData } from '../types/index.js'\nimport type { User, VerifyConfig } from './types.js'\n\ntype Args = {\n collection: Collection\n config: SanitizedConfig\n disableEmail: boolean\n email: InitializedEmailAdapter\n req: PayloadRequestWithData\n token: string\n user: User\n}\n\nexport async function sendVerificationEmail(args: Args): Promise<void> {\n // Verify token from e-mail\n const {\n collection: { config: collectionConfig },\n config,\n disableEmail,\n email,\n req,\n token,\n user,\n } = args\n\n if (!disableEmail) {\n const protocol = new URL(req.url).protocol // includes the final :\n const serverURL =\n config.serverURL !== null && config.serverURL !== ''\n ? config.serverURL\n : `${protocol}//${req.headers.get('host')}`\n\n const verificationURL = `${serverURL}${config.routes.admin}/${collectionConfig.slug}/verify/${token}`\n\n let html = `${req.t('authentication:newAccountCreated', {\n serverURL: config.serverURL,\n verificationURL,\n })}`\n\n const verify = collectionConfig.auth.verify as VerifyConfig\n\n // Allow config to override email content\n if (typeof verify.generateEmailHTML === 'function') {\n html = await verify.generateEmailHTML({\n req,\n token,\n user,\n })\n }\n\n let subject = req.t('authentication:verifyYourEmail')\n\n // Allow config to override email subject\n if (typeof verify.generateEmailSubject === 'function') {\n subject = await verify.generateEmailSubject({\n req,\n token,\n user,\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n email.sendEmail({\n from: `\"${email.defaultFromName}\" <${email.defaultFromName}>`,\n html,\n subject,\n to: user.email,\n })\n }\n}\n"],"names":["URL","sendVerificationEmail","args","collection","config","collectionConfig","disableEmail","email","req","token","user","protocol","url","serverURL","headers","get","verificationURL","routes","admin","slug","html","t","verify","auth","generateEmailHTML","subject","generateEmailSubject","sendEmail","from","defaultFromName","to"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,GAAG,QAAQ,MAAK;AAkBzB,OAAO,eAAeC,sBAAsBC,IAAU;IACpD,2BAA2B;IAC3B,MAAM,EACJC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCD,MAAM,EACNE,YAAY,EACZC,KAAK,EACLC,GAAG,EACHC,KAAK,EACLC,IAAI,EACL,GAAGR;IAEJ,IAAI,CAACI,cAAc;QACjB,MAAMK,WAAW,IAAIX,IAAIQ,IAAII,GAAG,EAAED,QAAQ,CAAC,uBAAuB;;QAClE,MAAME,YACJT,OAAOS,SAAS,KAAK,QAAQT,OAAOS,SAAS,KAAK,KAC9CT,OAAOS,SAAS,GAChB,CAAC,EAAEF,SAAS,EAAE,EAAEH,IAAIM,OAAO,CAACC,GAAG,CAAC,QAAQ,CAAC;QAE/C,MAAMC,kBAAkB,CAAC,EAAEH,UAAU,EAAET,OAAOa,MAAM,CAACC,KAAK,CAAC,CAAC,EAAEb,iBAAiBc,IAAI,CAAC,QAAQ,EAAEV,MAAM,CAAC;QAErG,IAAIW,OAAO,CAAC,EAAEZ,IAAIa,CAAC,CAAC,oCAAoC;YACtDR,WAAWT,OAAOS,SAAS;YAC3BG;QACF,GAAG,CAAC;QAEJ,MAAMM,SAASjB,iBAAiBkB,IAAI,CAACD,MAAM;QAE3C,yCAAyC;QACzC,IAAI,OAAOA,OAAOE,iBAAiB,KAAK,YAAY;YAClDJ,OAAO,MAAME,OAAOE,iBAAiB,CAAC;gBACpChB;gBACAC;gBACAC;YACF;QACF;QAEA,IAAIe,UAAUjB,IAAIa,CAAC,CAAC;QAEpB,yCAAyC;QACzC,IAAI,OAAOC,OAAOI,oBAAoB,KAAK,YAAY;YACrDD,UAAU,MAAMH,OAAOI,oBAAoB,CAAC;gBAC1ClB;gBACAC;gBACAC;YACF;QACF;QAEA,mEAAmE;QACnEH,MAAMoB,SAAS,CAAC;YACdC,MAAM,CAAC,CAAC,EAAErB,MAAMsB,eAAe,CAAC,GAAG,EAAEtB,MAAMsB,eAAe,CAAC,CAAC,CAAC;YAC7DT;YACAK;YACAK,IAAIpB,KAAKH,KAAK;QAChB;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bin/loader/index.ts"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B;AACD,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,MAAM,CAAA;CACZ;AACD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM;IACjB,OAAO,CAAC,EAAE,cAAc;IACxB,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC;CAC/D,CAAA;AACD,KAAK,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;AA+B3E,eAAO,MAAM,OAAO,EAAE,SAuErB,CAAA;AAED,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAA;CAClC;AACD,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAA;CAC9D;AACD,KAAK,QAAQ,GAAG;IACd,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,WAAW;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC;CACtD,CAAA;AACD,KAAK,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;AAelE,eAAO,MAAM,IAAI,EAAE,MAuBlB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bin/loader/index.ts"],"names":[],"mappings":"AAUA,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B;AACD,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,MAAM,CAAA;CACZ;AACD,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM;IACjB,OAAO,CAAC,EAAE,cAAc;IACxB,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,CAAC;CAC/D,CAAA;AACD,KAAK,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;AA+B3E,eAAO,MAAM,OAAO,EAAE,SAuErB,CAAA;AAED,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAA;CAClC;AACD,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,UAAU,GAAG,MAAM,CAAA;CAC9D;AACD,KAAK,QAAQ,GAAG;IACd,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,WAAW;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,UAAU,CAAC;CACtD,CAAA;AACD,KAAK,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;AAelE,eAAO,MAAM,IAAI,EAAE,MAuBlB,CAAA"}
@@ -4,6 +4,7 @@ import ts from 'typescript';
4
4
  import { fileURLToPath, pathToFileURL } from 'url';
5
5
  import { CLIENT_EXTENSIONS } from './clientExtensions.js';
6
6
  import { compile } from './compile.js';
7
+ import { resolveOriginalPath } from './resolveOriginalPath.js';
7
8
  const locatedConfig = getTsconfig();
8
9
  const tsconfig = locatedConfig.config.compilerOptions;
9
10
  // Ensure baseUrl is set in order to support paths
@@ -72,7 +73,7 @@ export const resolve = async (specifier, context, nextResolve)=>{
72
73
  return {
73
74
  format: resolvedIsTS ? 'ts' : undefined,
74
75
  shortCircuit: true,
75
- url: pathToFileURL(resolvedModule.resolvedFileName).href
76
+ url: pathToFileURL(await resolveOriginalPath(resolvedModule.resolvedFileName)).href
76
77
  };
77
78
  }
78
79
  // import from local project to either:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/bin/loader/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\nimport { getTsconfig } from 'get-tsconfig'\nimport path from 'path'\nimport ts from 'typescript'\nimport { fileURLToPath, pathToFileURL } from 'url'\n\nimport { CLIENT_EXTENSIONS } from './clientExtensions.js'\nimport { compile } from './compile.js'\n\ninterface ResolveContext {\n conditions: string[]\n parentURL: string | undefined\n}\ninterface ResolveResult {\n format?: string\n shortCircuit?: boolean\n url: string\n}\ntype ResolveArgs = [\n specifier: string,\n context?: ResolveContext,\n nextResolve?: (...args: ResolveArgs) => Promise<ResolveResult>,\n]\ntype ResolveFn = (...args: Required<ResolveArgs>) => Promise<ResolveResult>\n\nconst locatedConfig = getTsconfig()\nconst tsconfig = locatedConfig.config.compilerOptions as unknown as ts.CompilerOptions\n\n// Ensure baseUrl is set in order to support paths\nif (!tsconfig.baseUrl) {\n tsconfig.baseUrl = '.'\n}\n\n// Don't resolve d.ts files, because we aren't type-checking\ntsconfig.noDtsResolution = true\ntsconfig.module = ts.ModuleKind.ESNext\ntsconfig.moduleResolution = ts.ModuleResolutionKind.NodeNext\n\nconst moduleResolutionCache = ts.createModuleResolutionCache(\n ts.sys.getCurrentDirectory(),\n (x) => x,\n tsconfig,\n)\nconst host: ts.ModuleResolutionHost = {\n fileExists: ts.sys.fileExists,\n readFile: ts.sys.readFile,\n}\nconst TS_EXTENSIONS: string[] = [\n ts.Extension.Ts,\n ts.Extension.Tsx,\n ts.Extension.Dts,\n ts.Extension.Mts,\n]\n\nexport const resolve: ResolveFn = async (specifier, context, nextResolve) => {\n const isTS = TS_EXTENSIONS.some((ext) => specifier.endsWith(ext))\n const isClient = CLIENT_EXTENSIONS.some((ext) => specifier.endsWith(ext))\n\n // If a client file is resolved, we'll set `format: client`\n // and short circuit, so the load step\n // will return source code of empty object\n if (isClient) {\n const nextResult = await nextResolve(specifier, context, nextResolve)\n\n return {\n format: 'client',\n shortCircuit: true,\n url: nextResult.url,\n }\n }\n\n // entrypoint\n if (!context.parentURL) {\n return {\n format: isTS ? 'ts' : undefined,\n shortCircuit: true,\n url: specifier,\n }\n }\n\n // Try and resolve normally\n // This could fail, so we need to swallow that error\n // and keep going\n let nextResult: ResolveResult\n\n if (!isTS) {\n try {\n nextResult = await nextResolve(specifier, context, nextResolve)\n } catch (_) {\n // swallow error\n }\n }\n\n if (nextResult) {\n const nextResultIsTS = TS_EXTENSIONS.some((ext) => nextResult.url.endsWith(ext))\n\n return {\n ...nextResult,\n format: nextResultIsTS ? 'ts' : nextResult.format,\n shortCircuit: true,\n }\n }\n\n const { resolvedModule } = ts.resolveModuleName(\n specifier,\n fileURLToPath(context.parentURL),\n tsconfig,\n host,\n moduleResolutionCache,\n )\n\n if (resolvedModule) {\n const resolvedIsTS = TS_EXTENSIONS.includes(resolvedModule.extension)\n\n return {\n format: resolvedIsTS ? 'ts' : undefined,\n shortCircuit: true,\n url: pathToFileURL(resolvedModule.resolvedFileName).href,\n }\n }\n\n // import from local project to either:\n // - something TS couldn't resolve\n // - local project non-TS file\n return nextResolve(specifier, context, nextResolve)\n}\n\ninterface LoadContext {\n conditions: string[]\n format: null | string | undefined\n}\ninterface LoadResult {\n format: string\n shortCircuit?: boolean\n source: ArrayBuffer | SharedArrayBuffer | Uint8Array | string\n}\ntype LoadArgs = [\n url: string,\n context: LoadContext,\n nextLoad?: (...args: LoadArgs) => Promise<LoadResult>,\n]\ntype LoadFn = (...args: Required<LoadArgs>) => Promise<LoadResult>\n\nconst swcOptions = {\n ...tsconfig,\n baseUrl: path.resolve(''),\n paths: undefined,\n}\n\nif (tsconfig.paths) {\n swcOptions.paths = tsconfig.paths\n if (tsconfig.baseUrl) {\n swcOptions.baseUrl = path.resolve(tsconfig.baseUrl)\n }\n}\n\nexport const load: LoadFn = async (url, context, nextLoad) => {\n if (context.format === 'client') {\n const rawSource = 'export default {}'\n\n return {\n format: 'module',\n shortCircuit: true,\n source: rawSource,\n }\n }\n\n if (context.format === 'ts') {\n const { source } = await nextLoad(url, context)\n const code = typeof source === 'string' ? source : Buffer.from(source).toString()\n const compiled = await compile(code, fileURLToPath(url), swcOptions)\n return {\n format: 'module',\n shortCircuit: true,\n source: compiled,\n }\n } else {\n return nextLoad(url, context)\n }\n}\n"],"names":["getTsconfig","path","ts","fileURLToPath","pathToFileURL","CLIENT_EXTENSIONS","compile","locatedConfig","tsconfig","config","compilerOptions","baseUrl","noDtsResolution","module","ModuleKind","ESNext","moduleResolution","ModuleResolutionKind","NodeNext","moduleResolutionCache","createModuleResolutionCache","sys","getCurrentDirectory","x","host","fileExists","readFile","TS_EXTENSIONS","Extension","Ts","Tsx","Dts","Mts","resolve","specifier","context","nextResolve","isTS","some","ext","endsWith","isClient","nextResult","format","shortCircuit","url","parentURL","undefined","_","nextResultIsTS","resolvedModule","resolveModuleName","resolvedIsTS","includes","extension","resolvedFileName","href","swcOptions","paths","load","nextLoad","rawSource","source","code","Buffer","from","toString","compiled"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/bin/loader/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\nimport { getTsconfig } from 'get-tsconfig'\nimport path from 'path'\nimport ts from 'typescript'\nimport { fileURLToPath, pathToFileURL } from 'url'\n\nimport { CLIENT_EXTENSIONS } from './clientExtensions.js'\nimport { compile } from './compile.js'\nimport { resolveOriginalPath } from './resolveOriginalPath.js'\n\ninterface ResolveContext {\n conditions: string[]\n parentURL: string | undefined\n}\ninterface ResolveResult {\n format?: string\n shortCircuit?: boolean\n url: string\n}\ntype ResolveArgs = [\n specifier: string,\n context?: ResolveContext,\n nextResolve?: (...args: ResolveArgs) => Promise<ResolveResult>,\n]\ntype ResolveFn = (...args: Required<ResolveArgs>) => Promise<ResolveResult>\n\nconst locatedConfig = getTsconfig()\nconst tsconfig = locatedConfig.config.compilerOptions as unknown as ts.CompilerOptions\n\n// Ensure baseUrl is set in order to support paths\nif (!tsconfig.baseUrl) {\n tsconfig.baseUrl = '.'\n}\n\n// Don't resolve d.ts files, because we aren't type-checking\ntsconfig.noDtsResolution = true\ntsconfig.module = ts.ModuleKind.ESNext\ntsconfig.moduleResolution = ts.ModuleResolutionKind.NodeNext\n\nconst moduleResolutionCache = ts.createModuleResolutionCache(\n ts.sys.getCurrentDirectory(),\n (x) => x,\n tsconfig,\n)\nconst host: ts.ModuleResolutionHost = {\n fileExists: ts.sys.fileExists,\n readFile: ts.sys.readFile,\n}\nconst TS_EXTENSIONS: string[] = [\n ts.Extension.Ts,\n ts.Extension.Tsx,\n ts.Extension.Dts,\n ts.Extension.Mts,\n]\n\nexport const resolve: ResolveFn = async (specifier, context, nextResolve) => {\n const isTS = TS_EXTENSIONS.some((ext) => specifier.endsWith(ext))\n const isClient = CLIENT_EXTENSIONS.some((ext) => specifier.endsWith(ext))\n\n // If a client file is resolved, we'll set `format: client`\n // and short circuit, so the load step\n // will return source code of empty object\n if (isClient) {\n const nextResult = await nextResolve(specifier, context, nextResolve)\n\n return {\n format: 'client',\n shortCircuit: true,\n url: nextResult.url,\n }\n }\n\n // entrypoint\n if (!context.parentURL) {\n return {\n format: isTS ? 'ts' : undefined,\n shortCircuit: true,\n url: specifier,\n }\n }\n\n // Try and resolve normally\n // This could fail, so we need to swallow that error\n // and keep going\n let nextResult: ResolveResult\n\n if (!isTS) {\n try {\n nextResult = await nextResolve(specifier, context, nextResolve)\n } catch (_) {\n // swallow error\n }\n }\n\n if (nextResult) {\n const nextResultIsTS = TS_EXTENSIONS.some((ext) => nextResult.url.endsWith(ext))\n\n return {\n ...nextResult,\n format: nextResultIsTS ? 'ts' : nextResult.format,\n shortCircuit: true,\n }\n }\n\n const { resolvedModule } = ts.resolveModuleName(\n specifier,\n fileURLToPath(context.parentURL),\n tsconfig,\n host,\n moduleResolutionCache,\n )\n\n if (resolvedModule) {\n const resolvedIsTS = TS_EXTENSIONS.includes(resolvedModule.extension)\n\n return {\n format: resolvedIsTS ? 'ts' : undefined,\n shortCircuit: true,\n url: pathToFileURL(await resolveOriginalPath(resolvedModule.resolvedFileName)).href, // The typescript module resolver does not resolve to the original path, but to the symlinked path, if present. This can cause issues\n }\n }\n\n // import from local project to either:\n // - something TS couldn't resolve\n // - local project non-TS file\n return nextResolve(specifier, context, nextResolve)\n}\n\ninterface LoadContext {\n conditions: string[]\n format: null | string | undefined\n}\ninterface LoadResult {\n format: string\n shortCircuit?: boolean\n source: ArrayBuffer | SharedArrayBuffer | Uint8Array | string\n}\ntype LoadArgs = [\n url: string,\n context: LoadContext,\n nextLoad?: (...args: LoadArgs) => Promise<LoadResult>,\n]\ntype LoadFn = (...args: Required<LoadArgs>) => Promise<LoadResult>\n\nconst swcOptions = {\n ...tsconfig,\n baseUrl: path.resolve(''),\n paths: undefined,\n}\n\nif (tsconfig.paths) {\n swcOptions.paths = tsconfig.paths\n if (tsconfig.baseUrl) {\n swcOptions.baseUrl = path.resolve(tsconfig.baseUrl)\n }\n}\n\nexport const load: LoadFn = async (url, context, nextLoad) => {\n if (context.format === 'client') {\n const rawSource = 'export default {}'\n\n return {\n format: 'module',\n shortCircuit: true,\n source: rawSource,\n }\n }\n\n if (context.format === 'ts') {\n const { source } = await nextLoad(url, context)\n const code = typeof source === 'string' ? source : Buffer.from(source).toString()\n const compiled = await compile(code, fileURLToPath(url), swcOptions)\n return {\n format: 'module',\n shortCircuit: true,\n source: compiled,\n }\n } else {\n return nextLoad(url, context)\n }\n}\n"],"names":["getTsconfig","path","ts","fileURLToPath","pathToFileURL","CLIENT_EXTENSIONS","compile","resolveOriginalPath","locatedConfig","tsconfig","config","compilerOptions","baseUrl","noDtsResolution","module","ModuleKind","ESNext","moduleResolution","ModuleResolutionKind","NodeNext","moduleResolutionCache","createModuleResolutionCache","sys","getCurrentDirectory","x","host","fileExists","readFile","TS_EXTENSIONS","Extension","Ts","Tsx","Dts","Mts","resolve","specifier","context","nextResolve","isTS","some","ext","endsWith","isClient","nextResult","format","shortCircuit","url","parentURL","undefined","_","nextResultIsTS","resolvedModule","resolveModuleName","resolvedIsTS","includes","extension","resolvedFileName","href","swcOptions","paths","load","nextLoad","rawSource","source","code","Buffer","from","toString","compiled"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * In case any directory in the path contains symlinks, this function attempts to detect that resolves the original path.
3
+ *
4
+ * Example Input: /Users/alessio/Documents/GitHub/payload-3.0-alpha-demo/node_modules/tailwindcss/resolveConfig.js
5
+ * The "tailwindcss" in this example is a symlinked directory.
6
+ *
7
+ * Example Output: /Users/alessio/Documents/GitHub/payload-3.0-alpha-demo/node_modules/.pnpm/tailwindcss@3.4.3/node_modules/tailwindcss/resolveConfig.js
8
+ */
9
+ export declare function resolveOriginalPath(filePath: string): Promise<string>;
10
+ //# sourceMappingURL=resolveOriginalPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveOriginalPath.d.ts","sourceRoot":"","sources":["../../../src/bin/loader/resolveOriginalPath.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,mBAuBzD"}
@@ -0,0 +1,32 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ /**
4
+ * In case any directory in the path contains symlinks, this function attempts to detect that resolves the original path.
5
+ *
6
+ * Example Input: /Users/alessio/Documents/GitHub/payload-3.0-alpha-demo/node_modules/tailwindcss/resolveConfig.js
7
+ * The "tailwindcss" in this example is a symlinked directory.
8
+ *
9
+ * Example Output: /Users/alessio/Documents/GitHub/payload-3.0-alpha-demo/node_modules/.pnpm/tailwindcss@3.4.3/node_modules/tailwindcss/resolveConfig.js
10
+ */ export async function resolveOriginalPath(filePath) {
11
+ try {
12
+ // Normalize and split the path
13
+ const parts = path.resolve(filePath).split(path.sep);
14
+ let currentPath = '/';
15
+ // skip the first slash
16
+ for (const part of parts.slice(1)){
17
+ currentPath = path.join(currentPath, part);
18
+ // Check if the current path component is a symlink
19
+ const stats = await fs.lstat(currentPath);
20
+ if (stats.isSymbolicLink()) {
21
+ // Resolve the symlink
22
+ const resolvedLink = await fs.readlink(currentPath);
23
+ currentPath = path.join(path.dirname(currentPath), resolvedLink);
24
+ }
25
+ }
26
+ return currentPath;
27
+ } catch (error) {
28
+ console.error('Error resolving path:', error);
29
+ }
30
+ }
31
+
32
+ //# sourceMappingURL=resolveOriginalPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/bin/loader/resolveOriginalPath.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport path from 'path'\n\n/**\n * In case any directory in the path contains symlinks, this function attempts to detect that resolves the original path.\n *\n * Example Input: /Users/alessio/Documents/GitHub/payload-3.0-alpha-demo/node_modules/tailwindcss/resolveConfig.js\n * The \"tailwindcss\" in this example is a symlinked directory.\n *\n * Example Output: /Users/alessio/Documents/GitHub/payload-3.0-alpha-demo/node_modules/.pnpm/tailwindcss@3.4.3/node_modules/tailwindcss/resolveConfig.js\n */\nexport async function resolveOriginalPath(filePath: string) {\n try {\n // Normalize and split the path\n const parts = path.resolve(filePath).split(path.sep)\n\n let currentPath = '/'\n // skip the first slash\n for (const part of parts.slice(1)) {\n currentPath = path.join(currentPath, part)\n\n // Check if the current path component is a symlink\n const stats = await fs.lstat(currentPath)\n if (stats.isSymbolicLink()) {\n // Resolve the symlink\n const resolvedLink = await fs.readlink(currentPath)\n currentPath = path.join(path.dirname(currentPath), resolvedLink)\n }\n }\n\n return currentPath\n } catch (error) {\n console.error('Error resolving path:', error)\n }\n}\n"],"names":["fs","path","resolveOriginalPath","filePath","parts","resolve","split","sep","currentPath","part","slice","join","stats","lstat","isSymbolicLink","resolvedLink","readlink","dirname","error","console"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,QAAQ,cAAa;AAC5B,OAAOC,UAAU,OAAM;AAEvB;;;;;;;CAOC,GACD,OAAO,eAAeC,oBAAoBC,QAAgB;IACxD,IAAI;QACF,+BAA+B;QAC/B,MAAMC,QAAQH,KAAKI,OAAO,CAACF,UAAUG,KAAK,CAACL,KAAKM,GAAG;QAEnD,IAAIC,cAAc;QAClB,uBAAuB;QACvB,KAAK,MAAMC,QAAQL,MAAMM,KAAK,CAAC,GAAI;YACjCF,cAAcP,KAAKU,IAAI,CAACH,aAAaC;YAErC,mDAAmD;YACnD,MAAMG,QAAQ,MAAMZ,GAAGa,KAAK,CAACL;YAC7B,IAAII,MAAME,cAAc,IAAI;gBAC1B,sBAAsB;gBACtB,MAAMC,eAAe,MAAMf,GAAGgB,QAAQ,CAACR;gBACvCA,cAAcP,KAAKU,IAAI,CAACV,KAAKgB,OAAO,CAACT,cAAcO;YACrD;QACF;QAEA,OAAOP;IACT,EAAE,OAAOU,OAAO;QACdC,QAAQD,KAAK,CAAC,yBAAyBA;IACzC;AACF"}
@@ -1,5 +1,4 @@
1
- import type { Config } from '../../config/types.js';
1
+ import type { Config, SanitizedConfig } from '../../config/types.js';
2
2
  import type { CollectionConfig, SanitizedCollectionConfig } from './types.js';
3
- declare const sanitizeCollection: (config: Config, collection: CollectionConfig) => SanitizedCollectionConfig;
4
- export default sanitizeCollection;
3
+ export declare const sanitizeCollection: (config: Config, collection: CollectionConfig, richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>) => Promise<SanitizedCollectionConfig>;
5
4
  //# sourceMappingURL=sanitize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/collections/config/sanitize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAgB7E,QAAA,MAAM,kBAAkB,WACd,MAAM,cACF,gBAAgB,KAC3B,yBA0IF,CAAA;AAED,eAAe,kBAAkB,CAAA"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/collections/config/sanitize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAgB7E,eAAO,MAAM,kBAAkB,WACrB,MAAM,cACF,gBAAgB,iCAKG,MAAM,CAAC,MAAM,EAAE,eAAe,KAAK,QAAQ,IAAI,CAAC,CAAC,KAC/E,QAAQ,yBAAyB,CA2InC,CAAA"}
@@ -3,7 +3,7 @@ import baseAccountLockFields from '../../auth/baseFields/accountLock.js';
3
3
  import baseAPIKeyFields from '../../auth/baseFields/apiKey.js';
4
4
  import baseAuthFields from '../../auth/baseFields/auth.js';
5
5
  import baseVerificationFields from '../../auth/baseFields/verification.js';
6
- import TimestampsRequired from '../../errors/TimestampsRequired.js';
6
+ import { TimestampsRequired } from '../../errors/TimestampsRequired.js';
7
7
  import { sanitizeFields } from '../../fields/config/sanitize.js';
8
8
  import { fieldAffectsData } from '../../fields/config/types.js';
9
9
  import mergeBaseFields from '../../fields/mergeBaseFields.js';
@@ -12,7 +12,10 @@ import { formatLabels } from '../../utilities/formatLabels.js';
12
12
  import { isPlainObject } from '../../utilities/isPlainObject.js';
13
13
  import baseVersionFields from '../../versions/baseFields.js';
14
14
  import { authDefaults, defaults } from './defaults.js';
15
- const sanitizeCollection = (config, collection)=>{
15
+ export const sanitizeCollection = async (config, collection, /**
16
+ * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises
17
+ * so that you can sanitize them together, after the config has been sanitized.
18
+ */ richTextSanitizationPromises)=>{
16
19
  // /////////////////////////////////
17
20
  // Make copy of collection config
18
21
  // /////////////////////////////////
@@ -118,13 +121,13 @@ const sanitizeCollection = (config, collection)=>{
118
121
  // Sanitize fields
119
122
  // /////////////////////////////////
120
123
  const validRelationships = config.collections.map((c)=>c.slug) || [];
121
- sanitized.fields = sanitizeFields({
124
+ sanitized.fields = await sanitizeFields({
122
125
  config,
123
126
  fields: sanitized.fields,
127
+ richTextSanitizationPromises,
124
128
  validRelationships
125
129
  });
126
130
  return sanitized;
127
131
  };
128
- export default sanitizeCollection;
129
132
 
130
133
  //# sourceMappingURL=sanitize.js.map