@payloadcms/db-mongodb 4.0.0-internal.38b7f1d → 4.0.0-internal.3aa3d85

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 (83) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/connect.d.ts.map +1 -1
  3. package/dist/connect.js +1 -2
  4. package/dist/connect.js.map +1 -1
  5. package/dist/createMigration.d.ts.map +1 -1
  6. package/dist/createMigration.js +5 -44
  7. package/dist/createMigration.js.map +1 -1
  8. package/dist/deleteOne.js.map +1 -1
  9. package/dist/exports/migration-utils.d.ts +1 -0
  10. package/dist/exports/migration-utils.d.ts.map +1 -1
  11. package/dist/exports/migration-utils.js +1 -0
  12. package/dist/exports/migration-utils.js.map +1 -1
  13. package/dist/index.d.ts +1 -7
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +0 -6
  16. package/dist/index.js.map +1 -1
  17. package/dist/models/buildCollectionSchema.d.ts.map +1 -1
  18. package/dist/models/buildGlobalModel.d.ts.map +1 -1
  19. package/dist/models/buildSchema.d.ts.map +1 -1
  20. package/dist/models/buildSchema.js +15 -1
  21. package/dist/models/buildSchema.js.map +1 -1
  22. package/dist/predefinedMigrations/localize-status.d.ts +4 -0
  23. package/dist/predefinedMigrations/localize-status.d.ts.map +1 -0
  24. package/dist/predefinedMigrations/localize-status.js +9 -0
  25. package/dist/predefinedMigrations/localize-status.js.map +1 -0
  26. package/dist/predefinedMigrations/migrateLocalizeStatus.d.ts +27 -0
  27. package/dist/predefinedMigrations/migrateLocalizeStatus.d.ts.map +1 -0
  28. package/dist/predefinedMigrations/migrateLocalizeStatus.js +324 -0
  29. package/dist/predefinedMigrations/migrateLocalizeStatus.js.map +1 -0
  30. package/dist/queries/buildQuery.d.ts.map +1 -1
  31. package/dist/queries/buildSortParam.d.ts.map +1 -1
  32. package/dist/queries/getBuildQueryPlugin.d.ts.map +1 -1
  33. package/dist/queries/getLocalizedSortProperty.d.ts.map +1 -1
  34. package/dist/queries/getLocalizedSortProperty.js +1 -1
  35. package/dist/queries/getLocalizedSortProperty.js.map +1 -1
  36. package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
  37. package/dist/queries/sanitizeQueryValue.js +2 -3
  38. package/dist/queries/sanitizeQueryValue.js.map +1 -1
  39. package/dist/updateGlobal.d.ts.map +1 -1
  40. package/dist/updateGlobal.js +10 -7
  41. package/dist/updateGlobal.js.map +1 -1
  42. package/dist/updateGlobalVersion.d.ts.map +1 -1
  43. package/dist/updateGlobalVersion.js +10 -7
  44. package/dist/updateGlobalVersion.js.map +1 -1
  45. package/dist/updateJobs.d.ts.map +1 -1
  46. package/dist/updateJobs.js +11 -8
  47. package/dist/updateJobs.js.map +1 -1
  48. package/dist/updateMany.d.ts.map +1 -1
  49. package/dist/updateMany.js +11 -8
  50. package/dist/updateMany.js.map +1 -1
  51. package/dist/updateOne.d.ts.map +1 -1
  52. package/dist/updateOne.js +10 -7
  53. package/dist/updateOne.js.map +1 -1
  54. package/dist/updateVersion.d.ts.map +1 -1
  55. package/dist/updateVersion.js +10 -7
  56. package/dist/updateVersion.js.map +1 -1
  57. package/dist/utilities/aggregatePaginate.d.ts.map +1 -1
  58. package/dist/utilities/buildJoinAggregation.d.ts.map +1 -1
  59. package/dist/utilities/buildProjectionFromSelect.d.ts.map +1 -1
  60. package/dist/utilities/buildProjectionFromSelect.js +1 -1
  61. package/dist/utilities/buildProjectionFromSelect.js.map +1 -1
  62. package/dist/utilities/getDBName.d.ts.map +1 -1
  63. package/dist/utilities/getEntity.d.ts.map +1 -1
  64. package/dist/utilities/handleError.d.ts.map +1 -1
  65. package/dist/utilities/isObjectID.d.ts.map +1 -1
  66. package/dist/utilities/transform.d.ts.map +1 -1
  67. package/dist/utilities/transform.js +10 -34
  68. package/dist/utilities/transform.js.map +1 -1
  69. package/dist/utilities/transform.spec.js +3 -3
  70. package/dist/utilities/transform.spec.js.map +1 -1
  71. package/package.json +6 -6
  72. package/dist/migrateFieldDelocalized.d.ts +0 -10
  73. package/dist/migrateFieldDelocalized.d.ts.map +0 -1
  74. package/dist/migrateFieldDelocalized.js +0 -40
  75. package/dist/migrateFieldDelocalized.js.map +0 -1
  76. package/dist/migrateFieldLocalized.d.ts +0 -10
  77. package/dist/migrateFieldLocalized.d.ts.map +0 -1
  78. package/dist/migrateFieldLocalized.js +0 -43
  79. package/dist/migrateFieldLocalized.js.map +0 -1
  80. package/dist/migrateVersionsEnabled.d.ts +0 -9
  81. package/dist/migrateVersionsEnabled.d.ts.map +0 -1
  82. package/dist/migrateVersionsEnabled.js +0 -52
  83. package/dist/migrateVersionsEnabled.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/transform.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { flattenAllFields, type Field, type SanitizedConfig } from 'payload'\nimport { Types } from 'mongoose'\n\nimport { transform } from './transform.js'\nimport type { MongooseAdapter } from '../index.js'\n\nconst flattenRelationshipValues = (obj: Record<string, any>, prefix = ''): Record<string, any> => {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value && typeof value === 'object' && !(value instanceof Types.ObjectId)) {\n Object.assign(acc, flattenRelationshipValues(value, fullKey))\n // skip relationTo and blockType\n } else if (!fullKey.endsWith('relationTo') && !fullKey.endsWith('blockType')) {\n acc[fullKey] = value\n }\n\n return acc\n },\n {} as Record<string, any>,\n )\n}\n\nconst relsFields: Field[] = [\n {\n name: 'rel_1',\n type: 'relationship',\n relationTo: 'rels',\n },\n {\n name: 'rel_1_l',\n type: 'relationship',\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2',\n type: 'relationship',\n hasMany: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_3',\n type: 'relationship',\n relationTo: ['rels'],\n },\n {\n name: 'rel_3_l',\n type: 'relationship',\n localized: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4',\n type: 'relationship',\n hasMany: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: ['rels'],\n },\n]\n\nconst referenceBlockFields: Field[] = [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n]\n\nconst config = {\n blocks: [\n {\n slug: 'reference-block',\n fields: referenceBlockFields,\n flattenedFields: flattenAllFields({ fields: referenceBlockFields }),\n },\n ],\n collections: [\n {\n slug: 'docs',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n },\n {\n name: 'arrayLocalized',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n localized: true,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [\n {\n slug: 'block',\n fields: [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n name: 'blockReferences',\n type: 'blocks',\n blockReferences: ['reference-block'],\n },\n {\n name: 'group',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n {\n name: 'groupLocalized',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n localized: true,\n },\n {\n name: 'groupAndRow',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n ...relsFields,\n {\n type: 'array',\n name: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n type: 'tabs',\n tabs: [\n {\n name: 'tab',\n fields: relsFields,\n },\n {\n name: 'tabLocalized',\n fields: relsFields,\n localized: true,\n },\n {\n label: 'another',\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n name: 'nestedTab',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n slug: 'rels',\n fields: [],\n },\n ],\n localization: {\n defaultLocale: 'en',\n localeCodes: ['en', 'es'],\n locales: [\n { code: 'en', label: 'EN' },\n { code: 'es', label: 'ES' },\n ],\n },\n} as SanitizedConfig\n\nconst relsData = {\n rel_1: new Types.ObjectId().toHexString(),\n rel_1_l: {\n en: new Types.ObjectId().toHexString(),\n es: new Types.ObjectId().toHexString(),\n },\n rel_2: [new Types.ObjectId().toHexString()],\n rel_2_l: {\n en: [new Types.ObjectId().toHexString()],\n es: [new Types.ObjectId().toHexString()],\n },\n rel_3: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n rel_3_l: {\n en: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n es: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n },\n rel_4: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n rel_4_l: {\n en: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n es: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n },\n}\n\ndescribe('transform', () => {\n it('should sanitize relationships', () => {\n const data = {\n ...relsData,\n array: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n arrayLocalized: {\n en: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n es: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n },\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n array: [{ ...relsData }],\n group: { ...relsData },\n },\n ],\n blockReferences: [\n {\n blockType: 'reference-block',\n array: [{ ...relsData }],\n group: { ...relsData },\n ...relsData,\n },\n ],\n group: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupAndRow: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupLocalized: {\n en: {\n ...relsData,\n array: [{ ...relsData }],\n },\n es: {\n ...relsData,\n array: [{ ...relsData }],\n },\n },\n tab: { ...relsData },\n tabLocalized: {\n en: { ...relsData },\n es: { ...relsData },\n },\n nestedTab: { ...relsData },\n }\n const flattenValuesBefore = Object.values(flattenRelationshipValues(data))\n\n const mockAdapter = {\n payload: {\n config,\n },\n } as MongooseAdapter\n\n transform({\n adapter: mockAdapter,\n operation: 'write',\n data,\n fields: config.collections[0].fields,\n })\n if ('updatedAt' in data) {\n delete data.updatedAt\n }\n\n const flattenValuesAfter = Object.values(flattenRelationshipValues(data))\n\n flattenValuesAfter.forEach((value, i) => {\n expect(value).toBeInstanceOf(Types.ObjectId)\n expect(flattenValuesBefore[i]).toBe(value.toHexString())\n })\n })\n})\n"],"names":["describe","it","expect","flattenAllFields","Types","transform","flattenRelationshipValues","obj","prefix","Object","keys","reduce","acc","key","fullKey","value","ObjectId","assign","endsWith","relsFields","name","type","relationTo","localized","hasMany","referenceBlockFields","fields","config","blocks","slug","flattenedFields","collections","blockReferences","tabs","label","localization","defaultLocale","localeCodes","locales","code","relsData","rel_1","toHexString","rel_1_l","en","es","rel_2","rel_2_l","rel_3","rel_3_l","rel_4","rel_4_l","data","array","blockType","arrayLocalized","group","groupAndRow","groupLocalized","tab","tabLocalized","nestedTab","flattenValuesBefore","values","mockAdapter","payload","adapter","operation","updatedAt","flattenValuesAfter","forEach","i","toBeInstanceOf","toBe"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utilities/transform.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport { flattenAllFields, type Field, type SanitizedConfig } from 'payload'\nimport { Types } from 'mongoose'\n\nimport { transform } from './transform.js'\nimport type { MongooseAdapter } from '../index.js'\n\nconst flattenRelationshipValues = (obj: Record<string, any>, prefix = ''): Record<string, any> => {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value && typeof value === 'object' && !(value instanceof Types.ObjectId)) {\n Object.assign(acc, flattenRelationshipValues(value, fullKey))\n // skip relationTo and blockType\n } else if (!fullKey.endsWith('relationTo') && !fullKey.endsWith('blockType')) {\n acc[fullKey] = value\n }\n\n return acc\n },\n {} as Record<string, any>,\n )\n}\n\nconst relsFields: Field[] = [\n {\n name: 'rel_1',\n type: 'relationship',\n relationTo: 'rels',\n },\n {\n name: 'rel_1_l',\n type: 'relationship',\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2',\n type: 'relationship',\n hasMany: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_2_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: 'rels',\n },\n {\n name: 'rel_3',\n type: 'relationship',\n relationTo: ['rels'],\n },\n {\n name: 'rel_3_l',\n type: 'relationship',\n localized: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4',\n type: 'relationship',\n hasMany: true,\n relationTo: ['rels'],\n },\n {\n name: 'rel_4_l',\n type: 'relationship',\n hasMany: true,\n localized: true,\n relationTo: ['rels'],\n },\n]\n\nconst referenceBlockFields: Field[] = [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n]\n\nconst config = {\n blocks: [\n {\n slug: 'reference-block',\n fields: referenceBlockFields,\n flattenedFields: flattenAllFields({ fields: referenceBlockFields }),\n },\n ],\n collections: [\n {\n slug: 'docs',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n },\n {\n name: 'arrayLocalized',\n type: 'array',\n fields: [\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [{ slug: 'block', fields: relsFields }],\n },\n ...relsFields,\n ],\n localized: true,\n },\n {\n name: 'blocks',\n type: 'blocks',\n blocks: [\n {\n slug: 'block',\n fields: [\n ...relsFields,\n {\n name: 'group',\n type: 'group',\n fields: relsFields,\n },\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n name: 'referencedBlocks',\n type: 'blocks',\n blocks: ['reference-block'],\n },\n {\n name: 'group',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n },\n {\n name: 'groupLocalized',\n type: 'group',\n fields: [\n ...relsFields,\n {\n name: 'array',\n type: 'array',\n fields: relsFields,\n },\n ],\n localized: true,\n },\n {\n name: 'groupAndRow',\n type: 'group',\n fields: [\n {\n type: 'row',\n fields: [\n ...relsFields,\n {\n type: 'array',\n name: 'array',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n {\n type: 'tabs',\n tabs: [\n {\n name: 'tab',\n fields: relsFields,\n },\n {\n name: 'tabLocalized',\n fields: relsFields,\n localized: true,\n },\n {\n label: 'another',\n fields: [\n {\n type: 'tabs',\n tabs: [\n {\n name: 'nestedTab',\n fields: relsFields,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n slug: 'rels',\n fields: [],\n },\n ],\n localization: {\n defaultLocale: 'en',\n localeCodes: ['en', 'es'],\n locales: [\n { code: 'en', label: 'EN' },\n { code: 'es', label: 'ES' },\n ],\n },\n} as SanitizedConfig\n\nconst relsData = {\n rel_1: new Types.ObjectId().toHexString(),\n rel_1_l: {\n en: new Types.ObjectId().toHexString(),\n es: new Types.ObjectId().toHexString(),\n },\n rel_2: [new Types.ObjectId().toHexString()],\n rel_2_l: {\n en: [new Types.ObjectId().toHexString()],\n es: [new Types.ObjectId().toHexString()],\n },\n rel_3: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n rel_3_l: {\n en: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n es: {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n },\n rel_4: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n rel_4_l: {\n en: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n es: [\n {\n relationTo: 'rels',\n value: new Types.ObjectId().toHexString(),\n },\n ],\n },\n}\n\ndescribe('transform', () => {\n it('should sanitize relationships', () => {\n const data = {\n ...relsData,\n array: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n arrayLocalized: {\n en: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n es: [\n {\n ...relsData,\n array: [{ ...relsData }],\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n },\n ],\n },\n ],\n },\n blocks: [\n {\n blockType: 'block',\n ...relsData,\n array: [{ ...relsData }],\n group: { ...relsData },\n },\n ],\n referencedBlocks: [\n {\n blockType: 'reference-block',\n array: [{ ...relsData }],\n group: { ...relsData },\n ...relsData,\n },\n ],\n group: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupAndRow: {\n ...relsData,\n array: [{ ...relsData }],\n },\n groupLocalized: {\n en: {\n ...relsData,\n array: [{ ...relsData }],\n },\n es: {\n ...relsData,\n array: [{ ...relsData }],\n },\n },\n tab: { ...relsData },\n tabLocalized: {\n en: { ...relsData },\n es: { ...relsData },\n },\n nestedTab: { ...relsData },\n }\n const flattenValuesBefore = Object.values(flattenRelationshipValues(data))\n\n const mockAdapter = {\n payload: {\n config,\n },\n } as MongooseAdapter\n\n transform({\n adapter: mockAdapter,\n operation: 'write',\n data,\n fields: config.collections[0].fields,\n })\n if ('updatedAt' in data) {\n delete data.updatedAt\n }\n\n const flattenValuesAfter = Object.values(flattenRelationshipValues(data))\n\n flattenValuesAfter.forEach((value, i) => {\n expect(value).toBeInstanceOf(Types.ObjectId)\n expect(flattenValuesBefore[i]).toBe(value.toHexString())\n })\n })\n})\n"],"names":["describe","it","expect","flattenAllFields","Types","transform","flattenRelationshipValues","obj","prefix","Object","keys","reduce","acc","key","fullKey","value","ObjectId","assign","endsWith","relsFields","name","type","relationTo","localized","hasMany","referenceBlockFields","fields","config","blocks","slug","flattenedFields","collections","tabs","label","localization","defaultLocale","localeCodes","locales","code","relsData","rel_1","toHexString","rel_1_l","en","es","rel_2","rel_2_l","rel_3","rel_3_l","rel_4","rel_4_l","data","array","blockType","arrayLocalized","group","referencedBlocks","groupAndRow","groupLocalized","tab","tabLocalized","nestedTab","flattenValuesBefore","values","mockAdapter","payload","adapter","operation","updatedAt","flattenValuesAfter","forEach","i","toBeInstanceOf","toBe"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/db-mongodb",
3
- "version": "4.0.0-internal.38b7f1d",
3
+ "version": "4.0.0-internal.3aa3d85",
4
4
  "description": "The officially supported MongoDB database adapter for Payload",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -43,7 +43,7 @@
43
43
  "predefinedMigrations"
44
44
  ],
45
45
  "dependencies": {
46
- "mongoose": "8.15.1",
46
+ "mongoose": "8.22.1",
47
47
  "mongoose-paginate-v2": "1.9.4",
48
48
  "prompts": "2.4.2",
49
49
  "uuid": "14.0.0"
@@ -51,13 +51,13 @@
51
51
  "devDependencies": {
52
52
  "@types/mongoose-aggregate-paginate-v2": "1.0.12",
53
53
  "@types/prompts": "^2.4.5",
54
- "mongodb": "6.16.0",
54
+ "mongodb": "6.20.0",
55
55
  "mongodb-memory-server": "10.1.4",
56
- "@payloadcms/eslint-config": "3.28.0",
57
- "payload": "4.0.0-internal.38b7f1d"
56
+ "payload": "4.0.0-internal.3aa3d85",
57
+ "@payloadcms/eslint-config": "3.28.0"
58
58
  },
59
59
  "peerDependencies": {
60
- "payload": "4.0.0-internal.38b7f1d"
60
+ "payload": "4.0.0-internal.3aa3d85"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "pnpm build:types && pnpm build:swc",
@@ -1,10 +0,0 @@
1
- import type { PayloadRequest } from 'payload';
2
- import type { MongooseAdapter } from './index.js';
3
- export declare function migrateFieldDelocalized(this: MongooseAdapter, args: {
4
- defaultLocale: string;
5
- entity: 'collection' | 'global';
6
- fieldPath: string;
7
- req: PayloadRequest;
8
- slug: string;
9
- }): Promise<void>;
10
- //# sourceMappingURL=migrateFieldDelocalized.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrateFieldDelocalized.d.ts","sourceRoot":"","sources":["../src/migrateFieldDelocalized.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAUjD,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE;IACJ,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,GACA,OAAO,CAAC,IAAI,CAAC,CA6Cf"}
@@ -1,40 +0,0 @@
1
- import { getCollection } from './utilities/getEntity.js';
2
- function getValueAtPath(doc, path) {
3
- return path.split('.').reduce((obj, key)=>obj?.[key], doc);
4
- }
5
- const BATCH_SIZE = 1000;
6
- export async function migrateFieldDelocalized(args) {
7
- const { slug, defaultLocale, entity, fieldPath } = args;
8
- const { payload } = this;
9
- payload.logger.warn(`[config-migration] Delocalizing field "${fieldPath}" on ${entity} "${slug}" — keeping only "${defaultLocale}" value`);
10
- if (entity === 'collection') {
11
- const { Model } = getCollection({
12
- adapter: this,
13
- collectionSlug: slug
14
- });
15
- const nativeCollection = Model.collection;
16
- let page = 1;
17
- let hasMore = true;
18
- while(hasMore){
19
- const docs = await nativeCollection.find({}).skip((page - 1) * BATCH_SIZE).limit(BATCH_SIZE).toArray();
20
- for (const doc of docs){
21
- const currentValue = getValueAtPath(doc, fieldPath);
22
- if (currentValue !== null && currentValue !== undefined && typeof currentValue === 'object' && !Array.isArray(currentValue)) {
23
- const defaultValue = currentValue[defaultLocale] ?? null;
24
- const update = {};
25
- update[fieldPath] = defaultValue;
26
- await nativeCollection.updateOne({
27
- _id: doc._id
28
- }, {
29
- $set: update
30
- });
31
- }
32
- }
33
- hasMore = docs.length === BATCH_SIZE;
34
- page++;
35
- }
36
- }
37
- payload.logger.info(`[config-migration] Done delocalizing field "${fieldPath}" on ${entity} "${slug}"`);
38
- }
39
-
40
- //# sourceMappingURL=migrateFieldDelocalized.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/migrateFieldDelocalized.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { getCollection } from './utilities/getEntity.js'\n\nfunction getValueAtPath(doc: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((obj: any, key) => obj?.[key], doc)\n}\n\nconst BATCH_SIZE = 1000\n\nexport async function migrateFieldDelocalized(\n this: MongooseAdapter,\n args: {\n defaultLocale: string\n entity: 'collection' | 'global'\n fieldPath: string\n req: PayloadRequest\n slug: string\n },\n): Promise<void> {\n const { slug, defaultLocale, entity, fieldPath } = args\n const { payload } = this\n\n payload.logger.warn(\n `[config-migration] Delocalizing field \"${fieldPath}\" on ${entity} \"${slug}\" — keeping only \"${defaultLocale}\" value`,\n )\n\n if (entity === 'collection') {\n const { Model } = getCollection({ adapter: this, collectionSlug: slug })\n const nativeCollection = Model.collection\n\n let page = 1\n let hasMore = true\n\n while (hasMore) {\n const docs = await nativeCollection\n .find({})\n .skip((page - 1) * BATCH_SIZE)\n .limit(BATCH_SIZE)\n .toArray()\n\n for (const doc of docs) {\n const currentValue = getValueAtPath(doc as any, fieldPath)\n if (\n currentValue !== null &&\n currentValue !== undefined &&\n typeof currentValue === 'object' &&\n !Array.isArray(currentValue)\n ) {\n const defaultValue = (currentValue as Record<string, unknown>)[defaultLocale] ?? null\n const update: Record<string, unknown> = {}\n update[fieldPath] = defaultValue\n await nativeCollection.updateOne({ _id: doc._id }, { $set: update })\n }\n }\n\n hasMore = docs.length === BATCH_SIZE\n page++\n }\n }\n\n payload.logger.info(\n `[config-migration] Done delocalizing field \"${fieldPath}\" on ${entity} \"${slug}\"`,\n )\n}\n"],"names":["getCollection","getValueAtPath","doc","path","split","reduce","obj","key","BATCH_SIZE","migrateFieldDelocalized","args","slug","defaultLocale","entity","fieldPath","payload","logger","warn","Model","adapter","collectionSlug","nativeCollection","collection","page","hasMore","docs","find","skip","limit","toArray","currentValue","undefined","Array","isArray","defaultValue","update","updateOne","_id","$set","length","info"],"mappings":"AAIA,SAASA,aAAa,QAAQ,2BAA0B;AAExD,SAASC,eAAeC,GAA4B,EAAEC,IAAY;IAChE,OAAOA,KAAKC,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,KAAUC,MAAQD,KAAK,CAACC,IAAI,EAAEL;AAC/D;AAEA,MAAMM,aAAa;AAEnB,OAAO,eAAeC,wBAEpBC,IAMC;IAED,MAAM,EAAEC,IAAI,EAAEC,aAAa,EAAEC,MAAM,EAAEC,SAAS,EAAE,GAAGJ;IACnD,MAAM,EAAEK,OAAO,EAAE,GAAG,IAAI;IAExBA,QAAQC,MAAM,CAACC,IAAI,CACjB,CAAC,uCAAuC,EAAEH,UAAU,KAAK,EAAED,OAAO,EAAE,EAAEF,KAAK,kBAAkB,EAAEC,cAAc,OAAO,CAAC;IAGvH,IAAIC,WAAW,cAAc;QAC3B,MAAM,EAAEK,KAAK,EAAE,GAAGlB,cAAc;YAAEmB,SAAS,IAAI;YAAEC,gBAAgBT;QAAK;QACtE,MAAMU,mBAAmBH,MAAMI,UAAU;QAEzC,IAAIC,OAAO;QACX,IAAIC,UAAU;QAEd,MAAOA,QAAS;YACd,MAAMC,OAAO,MAAMJ,iBAChBK,IAAI,CAAC,CAAC,GACNC,IAAI,CAAC,AAACJ,CAAAA,OAAO,CAAA,IAAKf,YAClBoB,KAAK,CAACpB,YACNqB,OAAO;YAEV,KAAK,MAAM3B,OAAOuB,KAAM;gBACtB,MAAMK,eAAe7B,eAAeC,KAAYY;gBAChD,IACEgB,iBAAiB,QACjBA,iBAAiBC,aACjB,OAAOD,iBAAiB,YACxB,CAACE,MAAMC,OAAO,CAACH,eACf;oBACA,MAAMI,eAAe,AAACJ,YAAwC,CAAClB,cAAc,IAAI;oBACjF,MAAMuB,SAAkC,CAAC;oBACzCA,MAAM,CAACrB,UAAU,GAAGoB;oBACpB,MAAMb,iBAAiBe,SAAS,CAAC;wBAAEC,KAAKnC,IAAImC,GAAG;oBAAC,GAAG;wBAAEC,MAAMH;oBAAO;gBACpE;YACF;YAEAX,UAAUC,KAAKc,MAAM,KAAK/B;YAC1Be;QACF;IACF;IAEAR,QAAQC,MAAM,CAACwB,IAAI,CACjB,CAAC,4CAA4C,EAAE1B,UAAU,KAAK,EAAED,OAAO,EAAE,EAAEF,KAAK,CAAC,CAAC;AAEtF"}
@@ -1,10 +0,0 @@
1
- import type { PayloadRequest } from 'payload';
2
- import type { MongooseAdapter } from './index.js';
3
- export declare function migrateFieldLocalized(this: MongooseAdapter, args: {
4
- defaultLocale: string;
5
- entity: 'collection' | 'global';
6
- fieldPath: string;
7
- req: PayloadRequest;
8
- slug: string;
9
- }): Promise<void>;
10
- //# sourceMappingURL=migrateFieldLocalized.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrateFieldLocalized.d.ts","sourceRoot":"","sources":["../src/migrateFieldLocalized.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAUjD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE;IACJ,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,GACA,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
@@ -1,43 +0,0 @@
1
- import { getCollection } from './utilities/getEntity.js';
2
- function getValueAtPath(doc, path) {
3
- return path.split('.').reduce((obj, key)=>obj?.[key], doc);
4
- }
5
- const BATCH_SIZE = 1000;
6
- export async function migrateFieldLocalized(args) {
7
- const { slug, defaultLocale, entity, fieldPath } = args;
8
- const { payload } = this;
9
- payload.logger.info(`[config-migration] Localizing field "${fieldPath}" on ${entity} "${slug}" → locale "${defaultLocale}"`);
10
- if (entity === 'collection') {
11
- const { Model } = getCollection({
12
- adapter: this,
13
- collectionSlug: slug
14
- });
15
- const nativeCollection = Model.collection;
16
- let page = 1;
17
- let hasMore = true;
18
- while(hasMore){
19
- const docs = await nativeCollection.find({}).skip((page - 1) * BATCH_SIZE).limit(BATCH_SIZE).toArray();
20
- for (const doc of docs){
21
- const currentValue = getValueAtPath(doc, fieldPath);
22
- // Skip if already in localized shape
23
- if (currentValue !== null && currentValue !== undefined && typeof currentValue === 'object' && !Array.isArray(currentValue)) {
24
- continue;
25
- }
26
- const update = {};
27
- update[fieldPath] = {
28
- [defaultLocale]: currentValue
29
- };
30
- await nativeCollection.updateOne({
31
- _id: doc._id
32
- }, {
33
- $set: update
34
- });
35
- }
36
- hasMore = docs.length === BATCH_SIZE;
37
- page++;
38
- }
39
- }
40
- payload.logger.info(`[config-migration] Done localizing field "${fieldPath}" on ${entity} "${slug}"`);
41
- }
42
-
43
- //# sourceMappingURL=migrateFieldLocalized.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/migrateFieldLocalized.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport type { MongooseAdapter } from './index.js'\n\nimport { getCollection } from './utilities/getEntity.js'\n\nfunction getValueAtPath(doc: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((obj: any, key) => obj?.[key], doc)\n}\n\nconst BATCH_SIZE = 1000\n\nexport async function migrateFieldLocalized(\n this: MongooseAdapter,\n args: {\n defaultLocale: string\n entity: 'collection' | 'global'\n fieldPath: string\n req: PayloadRequest\n slug: string\n },\n): Promise<void> {\n const { slug, defaultLocale, entity, fieldPath } = args\n const { payload } = this\n\n payload.logger.info(\n `[config-migration] Localizing field \"${fieldPath}\" on ${entity} \"${slug}\" → locale \"${defaultLocale}\"`,\n )\n\n if (entity === 'collection') {\n const { Model } = getCollection({ adapter: this, collectionSlug: slug })\n const nativeCollection = Model.collection\n\n let page = 1\n let hasMore = true\n\n while (hasMore) {\n const docs = await nativeCollection\n .find({})\n .skip((page - 1) * BATCH_SIZE)\n .limit(BATCH_SIZE)\n .toArray()\n\n for (const doc of docs) {\n const currentValue = getValueAtPath(doc as any, fieldPath)\n // Skip if already in localized shape\n if (\n currentValue !== null &&\n currentValue !== undefined &&\n typeof currentValue === 'object' &&\n !Array.isArray(currentValue)\n ) {\n continue\n }\n const update: Record<string, unknown> = {}\n update[fieldPath] = { [defaultLocale]: currentValue }\n await nativeCollection.updateOne({ _id: doc._id }, { $set: update })\n }\n\n hasMore = docs.length === BATCH_SIZE\n page++\n }\n }\n\n payload.logger.info(\n `[config-migration] Done localizing field \"${fieldPath}\" on ${entity} \"${slug}\"`,\n )\n}\n"],"names":["getCollection","getValueAtPath","doc","path","split","reduce","obj","key","BATCH_SIZE","migrateFieldLocalized","args","slug","defaultLocale","entity","fieldPath","payload","logger","info","Model","adapter","collectionSlug","nativeCollection","collection","page","hasMore","docs","find","skip","limit","toArray","currentValue","undefined","Array","isArray","update","updateOne","_id","$set","length"],"mappings":"AAIA,SAASA,aAAa,QAAQ,2BAA0B;AAExD,SAASC,eAAeC,GAA4B,EAAEC,IAAY;IAChE,OAAOA,KAAKC,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,KAAUC,MAAQD,KAAK,CAACC,IAAI,EAAEL;AAC/D;AAEA,MAAMM,aAAa;AAEnB,OAAO,eAAeC,sBAEpBC,IAMC;IAED,MAAM,EAAEC,IAAI,EAAEC,aAAa,EAAEC,MAAM,EAAEC,SAAS,EAAE,GAAGJ;IACnD,MAAM,EAAEK,OAAO,EAAE,GAAG,IAAI;IAExBA,QAAQC,MAAM,CAACC,IAAI,CACjB,CAAC,qCAAqC,EAAEH,UAAU,KAAK,EAAED,OAAO,EAAE,EAAEF,KAAK,YAAY,EAAEC,cAAc,CAAC,CAAC;IAGzG,IAAIC,WAAW,cAAc;QAC3B,MAAM,EAAEK,KAAK,EAAE,GAAGlB,cAAc;YAAEmB,SAAS,IAAI;YAAEC,gBAAgBT;QAAK;QACtE,MAAMU,mBAAmBH,MAAMI,UAAU;QAEzC,IAAIC,OAAO;QACX,IAAIC,UAAU;QAEd,MAAOA,QAAS;YACd,MAAMC,OAAO,MAAMJ,iBAChBK,IAAI,CAAC,CAAC,GACNC,IAAI,CAAC,AAACJ,CAAAA,OAAO,CAAA,IAAKf,YAClBoB,KAAK,CAACpB,YACNqB,OAAO;YAEV,KAAK,MAAM3B,OAAOuB,KAAM;gBACtB,MAAMK,eAAe7B,eAAeC,KAAYY;gBAChD,qCAAqC;gBACrC,IACEgB,iBAAiB,QACjBA,iBAAiBC,aACjB,OAAOD,iBAAiB,YACxB,CAACE,MAAMC,OAAO,CAACH,eACf;oBACA;gBACF;gBACA,MAAMI,SAAkC,CAAC;gBACzCA,MAAM,CAACpB,UAAU,GAAG;oBAAE,CAACF,cAAc,EAAEkB;gBAAa;gBACpD,MAAMT,iBAAiBc,SAAS,CAAC;oBAAEC,KAAKlC,IAAIkC,GAAG;gBAAC,GAAG;oBAAEC,MAAMH;gBAAO;YACpE;YAEAV,UAAUC,KAAKa,MAAM,KAAK9B;YAC1Be;QACF;IACF;IAEAR,QAAQC,MAAM,CAACC,IAAI,CACjB,CAAC,0CAA0C,EAAEH,UAAU,KAAK,EAAED,OAAO,EAAE,EAAEF,KAAK,CAAC,CAAC;AAEpF"}
@@ -1,9 +0,0 @@
1
- import type { PayloadRequest } from 'payload';
2
- import type { MongooseAdapter } from './index.js';
3
- export declare function migrateVersionsEnabled(this: MongooseAdapter, args: {
4
- entity: 'collection' | 'global';
5
- initialStatus: 'draft' | 'published';
6
- req: PayloadRequest;
7
- slug: string;
8
- }): Promise<void>;
9
- //# sourceMappingURL=migrateVersionsEnabled.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrateVersionsEnabled.d.ts","sourceRoot":"","sources":["../src/migrateVersionsEnabled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAI7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAIjD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE;IACJ,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC/B,aAAa,EAAE,OAAO,GAAG,WAAW,CAAA;IACpC,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,GACA,OAAO,CAAC,IAAI,CAAC,CAsCf"}
@@ -1,52 +0,0 @@
1
- import { batchTransform } from 'payload/migrations';
2
- const BATCH_SIZE = 1000;
3
- export async function migrateVersionsEnabled(args) {
4
- const { slug, entity, initialStatus, req } = args;
5
- const { payload } = this;
6
- payload.logger.info(`[config-migration] MongoDB: creating version entries for ${entity} "${slug}" with _status: ${initialStatus}`);
7
- if (entity === 'collection') {
8
- await batchTransform({
9
- batchSize: BATCH_SIZE,
10
- fetcher: ({ limit, page })=>payload.db.find({
11
- collection: slug,
12
- limit,
13
- page,
14
- pagination: true,
15
- req
16
- }),
17
- transform: async (doc)=>{
18
- await payload.db.createVersion({
19
- autosave: false,
20
- collectionSlug: slug,
21
- createdAt: doc.createdAt ?? new Date().toISOString(),
22
- parent: doc.id,
23
- req,
24
- updatedAt: doc.updatedAt ?? new Date().toISOString(),
25
- versionData: {
26
- ...doc,
27
- _status: initialStatus
28
- }
29
- });
30
- }
31
- });
32
- } else {
33
- const globalDoc = await payload.db.findGlobal({
34
- slug,
35
- req
36
- });
37
- await payload.db.createGlobalVersion({
38
- autosave: false,
39
- createdAt: globalDoc.createdAt ?? new Date().toISOString(),
40
- globalSlug: slug,
41
- req,
42
- updatedAt: globalDoc.updatedAt ?? new Date().toISOString(),
43
- versionData: {
44
- ...globalDoc,
45
- _status: initialStatus
46
- }
47
- });
48
- }
49
- payload.logger.info(`[config-migration] MongoDB: done creating version entries for "${slug}"`);
50
- }
51
-
52
- //# sourceMappingURL=migrateVersionsEnabled.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/migrateVersionsEnabled.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { batchTransform } from 'payload/migrations'\n\nimport type { MongooseAdapter } from './index.js'\n\nconst BATCH_SIZE = 1000\n\nexport async function migrateVersionsEnabled(\n this: MongooseAdapter,\n args: {\n entity: 'collection' | 'global'\n initialStatus: 'draft' | 'published'\n req: PayloadRequest\n slug: string\n },\n): Promise<void> {\n const { slug, entity, initialStatus, req } = args\n const { payload } = this\n\n payload.logger.info(\n `[config-migration] MongoDB: creating version entries for ${entity} \"${slug}\" with _status: ${initialStatus}`,\n )\n\n if (entity === 'collection') {\n await batchTransform({\n batchSize: BATCH_SIZE,\n fetcher: ({ limit, page }: { limit: number; page: number }) =>\n payload.db.find({ collection: slug, limit, page, pagination: true, req }),\n transform: async (doc: any) => {\n await payload.db.createVersion({\n autosave: false,\n collectionSlug: slug as any,\n createdAt: doc.createdAt ?? new Date().toISOString(),\n parent: doc.id,\n req,\n updatedAt: doc.updatedAt ?? new Date().toISOString(),\n versionData: { ...doc, _status: initialStatus },\n })\n },\n })\n } else {\n const globalDoc = await payload.db.findGlobal({ slug, req })\n await payload.db.createGlobalVersion({\n autosave: false,\n createdAt: globalDoc.createdAt ?? new Date().toISOString(),\n globalSlug: slug as any,\n req,\n updatedAt: globalDoc.updatedAt ?? new Date().toISOString(),\n versionData: { ...globalDoc, _status: initialStatus },\n })\n }\n\n payload.logger.info(`[config-migration] MongoDB: done creating version entries for \"${slug}\"`)\n}\n"],"names":["batchTransform","BATCH_SIZE","migrateVersionsEnabled","args","slug","entity","initialStatus","req","payload","logger","info","batchSize","fetcher","limit","page","db","find","collection","pagination","transform","doc","createVersion","autosave","collectionSlug","createdAt","Date","toISOString","parent","id","updatedAt","versionData","_status","globalDoc","findGlobal","createGlobalVersion","globalSlug"],"mappings":"AAEA,SAASA,cAAc,QAAQ,qBAAoB;AAInD,MAAMC,aAAa;AAEnB,OAAO,eAAeC,uBAEpBC,IAKC;IAED,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAEC,aAAa,EAAEC,GAAG,EAAE,GAAGJ;IAC7C,MAAM,EAAEK,OAAO,EAAE,GAAG,IAAI;IAExBA,QAAQC,MAAM,CAACC,IAAI,CACjB,CAAC,yDAAyD,EAAEL,OAAO,EAAE,EAAED,KAAK,gBAAgB,EAAEE,eAAe;IAG/G,IAAID,WAAW,cAAc;QAC3B,MAAML,eAAe;YACnBW,WAAWV;YACXW,SAAS,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAmC,GACxDN,QAAQO,EAAE,CAACC,IAAI,CAAC;oBAAEC,YAAYb;oBAAMS;oBAAOC;oBAAMI,YAAY;oBAAMX;gBAAI;YACzEY,WAAW,OAAOC;gBAChB,MAAMZ,QAAQO,EAAE,CAACM,aAAa,CAAC;oBAC7BC,UAAU;oBACVC,gBAAgBnB;oBAChBoB,WAAWJ,IAAII,SAAS,IAAI,IAAIC,OAAOC,WAAW;oBAClDC,QAAQP,IAAIQ,EAAE;oBACdrB;oBACAsB,WAAWT,IAAIS,SAAS,IAAI,IAAIJ,OAAOC,WAAW;oBAClDI,aAAa;wBAAE,GAAGV,GAAG;wBAAEW,SAASzB;oBAAc;gBAChD;YACF;QACF;IACF,OAAO;QACL,MAAM0B,YAAY,MAAMxB,QAAQO,EAAE,CAACkB,UAAU,CAAC;YAAE7B;YAAMG;QAAI;QAC1D,MAAMC,QAAQO,EAAE,CAACmB,mBAAmB,CAAC;YACnCZ,UAAU;YACVE,WAAWQ,UAAUR,SAAS,IAAI,IAAIC,OAAOC,WAAW;YACxDS,YAAY/B;YACZG;YACAsB,WAAWG,UAAUH,SAAS,IAAI,IAAIJ,OAAOC,WAAW;YACxDI,aAAa;gBAAE,GAAGE,SAAS;gBAAED,SAASzB;YAAc;QACtD;IACF;IAEAE,QAAQC,MAAM,CAACC,IAAI,CAAC,CAAC,+DAA+D,EAAEN,KAAK,CAAC,CAAC;AAC/F"}