@sentry/wizard 6.12.0 → 6.13.0

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 (184) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/bin.js +16 -1
  3. package/dist/bin.js.map +1 -1
  4. package/dist/e2e-tests/tests/angular-17.test.js +3 -4
  5. package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
  6. package/dist/e2e-tests/tests/angular-19.test.js +3 -4
  7. package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
  8. package/dist/e2e-tests/tests/flutter.test.js +60 -0
  9. package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
  10. package/dist/e2e-tests/tests/help-message.test.js +8 -3
  11. package/dist/e2e-tests/tests/help-message.test.js.map +1 -1
  12. package/dist/e2e-tests/tests/nuxt-3.test.js +12 -6
  13. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  14. package/dist/e2e-tests/tests/nuxt-4.test.js +12 -6
  15. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  16. package/dist/e2e-tests/tests/pnpm-workspace.test.js +6 -3
  17. package/dist/e2e-tests/tests/pnpm-workspace.test.js.map +1 -1
  18. package/dist/e2e-tests/tests/react-router-instrumentation-api.test.js +4 -4
  19. package/dist/e2e-tests/tests/react-router-instrumentation-api.test.js.map +1 -1
  20. package/dist/e2e-tests/tests/react-router.test.js +3 -6
  21. package/dist/e2e-tests/tests/react-router.test.js.map +1 -1
  22. package/dist/e2e-tests/tests/remix.test.js +2 -4
  23. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  24. package/dist/e2e-tests/tests/sveltekit-hooks.test.js +24 -8
  25. package/dist/e2e-tests/tests/sveltekit-hooks.test.js.map +1 -1
  26. package/dist/e2e-tests/tests/sveltekit-tracing.test.js +6 -3
  27. package/dist/e2e-tests/tests/sveltekit-tracing.test.js.map +1 -1
  28. package/dist/lib/Constants.d.ts +1 -0
  29. package/dist/lib/Constants.js +5 -0
  30. package/dist/lib/Constants.js.map +1 -1
  31. package/dist/lib/Steps/Integrations/Electron.js +2 -2
  32. package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
  33. package/dist/src/android/android-wizard.js +3 -0
  34. package/dist/src/android/android-wizard.js.map +1 -1
  35. package/dist/src/angular/codemods/main.d.ts +1 -1
  36. package/dist/src/angular/codemods/main.js +0 -1
  37. package/dist/src/angular/codemods/main.js.map +1 -1
  38. package/dist/src/apple/apple-wizard.js +2 -3
  39. package/dist/src/apple/apple-wizard.js.map +1 -1
  40. package/dist/src/apple/check-installed-cli.d.ts +1 -1
  41. package/dist/src/apple/check-installed-cli.js +13 -7
  42. package/dist/src/apple/check-installed-cli.js.map +1 -1
  43. package/dist/src/apple/configure-xcode-project.js +8 -1
  44. package/dist/src/apple/configure-xcode-project.js.map +1 -1
  45. package/dist/src/apple/lookup-xcode-project.d.ts +8 -5
  46. package/dist/src/apple/lookup-xcode-project.js +22 -17
  47. package/dist/src/apple/lookup-xcode-project.js.map +1 -1
  48. package/dist/src/apple/options.d.ts +5 -0
  49. package/dist/src/apple/options.js.map +1 -1
  50. package/dist/src/apple/sentry-swift-package.d.ts +4 -0
  51. package/dist/src/apple/sentry-swift-package.js +17 -0
  52. package/dist/src/apple/sentry-swift-package.js.map +1 -0
  53. package/dist/src/apple/snapshots/apple-snapshots-wizard.d.ts +2 -0
  54. package/dist/src/apple/snapshots/apple-snapshots-wizard.js +251 -0
  55. package/dist/src/apple/snapshots/apple-snapshots-wizard.js.map +1 -0
  56. package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.d.ts +13 -0
  57. package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.js +48 -0
  58. package/dist/src/apple/snapshots/configure-snapshotpreviews-xcode-project.js.map +1 -0
  59. package/dist/src/apple/snapshots/snapshot-test-file.d.ts +18 -0
  60. package/dist/src/apple/snapshots/snapshot-test-file.js +122 -0
  61. package/dist/src/apple/snapshots/snapshot-test-file.js.map +1 -0
  62. package/dist/src/apple/snapshots/snapshot-verification-scheme.d.ts +6 -0
  63. package/dist/src/apple/snapshots/snapshot-verification-scheme.js +147 -0
  64. package/dist/src/apple/snapshots/snapshot-verification-scheme.js.map +1 -0
  65. package/dist/src/apple/snapshots/snapshotpreviews-package.d.ts +4 -0
  66. package/dist/src/apple/snapshots/snapshotpreviews-package.js +8 -0
  67. package/dist/src/apple/snapshots/snapshotpreviews-package.js.map +1 -0
  68. package/dist/src/apple/snapshots/snapshots-cli-preflight.d.ts +23 -0
  69. package/dist/src/apple/snapshots/snapshots-cli-preflight.js +136 -0
  70. package/dist/src/apple/snapshots/snapshots-cli-preflight.js.map +1 -0
  71. package/dist/src/apple/xcode-manager.d.ts +59 -1
  72. package/dist/src/apple/xcode-manager.js +507 -106
  73. package/dist/src/apple/xcode-manager.js.map +1 -1
  74. package/dist/src/flutter/flutter-wizard.js +3 -0
  75. package/dist/src/flutter/flutter-wizard.js.map +1 -1
  76. package/dist/src/nextjs/templates.js +12 -6
  77. package/dist/src/nextjs/templates.js.map +1 -1
  78. package/dist/src/nuxt/templates.js +12 -6
  79. package/dist/src/nuxt/templates.js.map +1 -1
  80. package/dist/src/react-router/codemods/client.entry.d.ts +1 -1
  81. package/dist/src/react-router/codemods/client.entry.js +93 -52
  82. package/dist/src/react-router/codemods/client.entry.js.map +1 -1
  83. package/dist/src/react-router/codemods/server-entry.js +8 -7
  84. package/dist/src/react-router/codemods/server-entry.js.map +1 -1
  85. package/dist/src/react-router/react-router-wizard.js +13 -19
  86. package/dist/src/react-router/react-router-wizard.js.map +1 -1
  87. package/dist/src/react-router/sdk-setup.d.ts +2 -2
  88. package/dist/src/react-router/sdk-setup.js +16 -15
  89. package/dist/src/react-router/sdk-setup.js.map +1 -1
  90. package/dist/src/react-router/templates.d.ts +1 -3
  91. package/dist/src/react-router/templates.js +24 -92
  92. package/dist/src/react-router/templates.js.map +1 -1
  93. package/dist/src/remix/sdk-setup.js +1 -2
  94. package/dist/src/remix/sdk-setup.js.map +1 -1
  95. package/dist/src/run.d.ts +4 -1
  96. package/dist/src/run.js +13 -0
  97. package/dist/src/run.js.map +1 -1
  98. package/dist/src/sourcemaps/tools/remix.js +4 -4
  99. package/dist/src/sourcemaps/tools/remix.js.map +1 -1
  100. package/dist/src/sveltekit/sdk-setup/setup.js +17 -4
  101. package/dist/src/sveltekit/sdk-setup/setup.js.map +1 -1
  102. package/dist/src/sveltekit/templates.js +12 -6
  103. package/dist/src/sveltekit/templates.js.map +1 -1
  104. package/dist/src/utils/clack/index.d.ts +2 -1
  105. package/dist/src/utils/clack/index.js +17 -6
  106. package/dist/src/utils/clack/index.js.map +1 -1
  107. package/dist/src/utils/files.d.ts +2 -0
  108. package/dist/src/utils/files.js +58 -0
  109. package/dist/src/utils/files.js.map +1 -0
  110. package/dist/src/utils/git.d.ts +3 -1
  111. package/dist/src/utils/git.js +2 -1
  112. package/dist/src/utils/git.js.map +1 -1
  113. package/dist/src/utils/line-endings.d.ts +1 -0
  114. package/dist/src/utils/line-endings.js +76 -0
  115. package/dist/src/utils/line-endings.js.map +1 -0
  116. package/dist/src/version.d.ts +1 -1
  117. package/dist/src/version.js +1 -1
  118. package/dist/src/version.js.map +1 -1
  119. package/dist/test/angular/angular-wizard.test.js +0 -5
  120. package/dist/test/angular/angular-wizard.test.js.map +1 -1
  121. package/dist/test/apple/lookup-xcode-project.test.js +167 -0
  122. package/dist/test/apple/lookup-xcode-project.test.js.map +1 -0
  123. package/dist/test/apple/snapshots/apple-snapshots-wizard.test.d.ts +1 -0
  124. package/dist/test/apple/snapshots/apple-snapshots-wizard.test.js +487 -0
  125. package/dist/test/apple/snapshots/apple-snapshots-wizard.test.js.map +1 -0
  126. package/dist/test/apple/snapshots/hosted-test-target-fixture.d.ts +24 -0
  127. package/dist/test/apple/snapshots/hosted-test-target-fixture.js +191 -0
  128. package/dist/test/apple/snapshots/hosted-test-target-fixture.js.map +1 -0
  129. package/dist/test/apple/snapshots/snapshot-test-file.test.d.ts +1 -0
  130. package/dist/test/apple/snapshots/snapshot-test-file.test.js +110 -0
  131. package/dist/test/apple/snapshots/snapshot-test-file.test.js.map +1 -0
  132. package/dist/test/apple/snapshots/snapshot-verification-scheme.test.d.ts +1 -0
  133. package/dist/test/apple/snapshots/snapshot-verification-scheme.test.js +146 -0
  134. package/dist/test/apple/snapshots/snapshot-verification-scheme.test.js.map +1 -0
  135. package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.d.ts +1 -0
  136. package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.js +186 -0
  137. package/dist/test/apple/snapshots/snapshotpreviews-xcode-smoke.test.js.map +1 -0
  138. package/dist/test/apple/snapshots/snapshots-cli-preflight.test.d.ts +1 -0
  139. package/dist/test/apple/snapshots/snapshots-cli-preflight.test.js +192 -0
  140. package/dist/test/apple/snapshots/snapshots-cli-preflight.test.js.map +1 -0
  141. package/dist/test/apple/snapshots/source-file-insertion.test.d.ts +1 -0
  142. package/dist/test/apple/snapshots/source-file-insertion.test.js +77 -0
  143. package/dist/test/apple/snapshots/source-file-insertion.test.js.map +1 -0
  144. package/dist/test/apple/xcode-manager.test.js +452 -43
  145. package/dist/test/apple/xcode-manager.test.js.map +1 -1
  146. package/dist/test/constants.test.d.ts +1 -0
  147. package/dist/test/constants.test.js +12 -0
  148. package/dist/test/constants.test.js.map +1 -0
  149. package/dist/test/nextjs/templates.test.js +66 -33
  150. package/dist/test/nextjs/templates.test.js.map +1 -1
  151. package/dist/test/nuxt/templates.test.js +66 -36
  152. package/dist/test/nuxt/templates.test.js.map +1 -1
  153. package/dist/test/react-router/codemods/client-entry.test.js +15 -11
  154. package/dist/test/react-router/codemods/client-entry.test.js.map +1 -1
  155. package/dist/test/react-router/codemods/server-entry.test.js +21 -8
  156. package/dist/test/react-router/codemods/server-entry.test.js.map +1 -1
  157. package/dist/test/react-router/sdk-setup.test.js +46 -10
  158. package/dist/test/react-router/sdk-setup.test.js.map +1 -1
  159. package/dist/test/react-router/templates.test.js +26 -64
  160. package/dist/test/react-router/templates.test.js.map +1 -1
  161. package/dist/test/remix/build-script.test.d.ts +1 -0
  162. package/dist/test/remix/build-script.test.js +124 -0
  163. package/dist/test/remix/build-script.test.js.map +1 -0
  164. package/dist/test/remix/client-entry.test.js +4 -10
  165. package/dist/test/remix/client-entry.test.js.map +1 -1
  166. package/dist/test/run.test.d.ts +1 -0
  167. package/dist/test/run.test.js +137 -0
  168. package/dist/test/run.test.js.map +1 -0
  169. package/dist/test/sveltekit/templates.test.js +78 -27
  170. package/dist/test/sveltekit/templates.test.js.map +1 -1
  171. package/dist/test/utils/clack/index.test.js +101 -0
  172. package/dist/test/utils/clack/index.test.js.map +1 -1
  173. package/dist/test/utils/git.test.js +10 -0
  174. package/dist/test/utils/git.test.js.map +1 -1
  175. package/dist/test/utils/line-endings.test.d.ts +1 -0
  176. package/dist/test/utils/line-endings.test.js +103 -0
  177. package/dist/test/utils/line-endings.test.js.map +1 -0
  178. package/package.json +2 -2
  179. package/dist/src/react-router/codemods/root.d.ts +0 -1
  180. package/dist/src/react-router/codemods/root.js +0 -170
  181. package/dist/src/react-router/codemods/root.js.map +0 -1
  182. package/dist/test/react-router/codemods/root.test.js +0 -182
  183. package/dist/test/react-router/codemods/root.test.js.map +0 -1
  184. /package/dist/test/{react-router/codemods/root.test.d.ts → apple/lookup-xcode-project.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"xcode-manager.test.js","sourceRoot":"","sources":["../../../test/apple/xcode-manager.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport process from 'node:process';\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport type {\n PBXNativeTarget,\n PBXShellScriptBuildPhase,\n XCBuildConfiguration,\n} from 'xcode';\nimport { getRunScriptTemplate } from '../../src/apple/templates';\nimport { XcodeProject } from '../../src/apple/xcode-manager';\nimport type { SentryProjectData } from '../../src/utils/types';\n\nvi.mock('node:fs', async () => ({\n __esModule: true,\n ...(await vi.importActual<typeof fs>('node:fs')),\n}));\n\nvi.mock('@clack/prompts', () => ({\n log: {\n info: vi.fn(),\n success: vi.fn(),\n step: vi.fn(),\n },\n}));\n\nconst appleProjectsPath = path.resolve(\n __dirname,\n '../../fixtures/test-applications/apple',\n);\nconst damagedProjectPath = path.join(\n appleProjectsPath,\n 'damaged-missing-configuration-list/Project.xcodeproj/project.pbxproj',\n);\nconst noTargetsProjectPath = path.join(\n appleProjectsPath,\n 'no-targets/Project.xcodeproj/project.pbxproj',\n);\nconst noFilesInTargetProjectPath = path.join(\n appleProjectsPath,\n 'no-files-in-target/Project.xcodeproj/project.pbxproj',\n);\nconst projectWithSynchronizedFolders = path.join(\n appleProjectsPath,\n 'project-with-synchronized-folders/Project.xcodeproj/project.pbxproj',\n);\nconst singleTargetProjectPath = path.join(\n appleProjectsPath,\n 'spm-swiftui-single-target/Project.xcodeproj/project.pbxproj',\n);\nconst multiTargetProjectPath = path.join(\n appleProjectsPath,\n 'spm-swiftui-multi-targets/Project.xcodeproj/project.pbxproj',\n);\nconst projectData: SentryProjectData = {\n id: '1234567890',\n slug: 'project',\n organization: {\n id: '1234567890',\n name: 'Sentry',\n slug: 'sentry',\n },\n keys: [{ dsn: { public: 'https://sentry.io/1234567890' } }],\n};\n\ndescribe('XcodeManager', () => {\n beforeEach(() => {\n if (process.platform !== 'darwin') {\n // The macOS system helpers are only available on macOS\n // As the test suite is also run on non-macOS platforms, we need to mock the system helpers\n\n // The path to the Xcode.app can be different on different machines, so we allow overwriting it using environment variables\n vi.mock('../../src/apple/macos-system-helper', () => ({\n MacOSSystemHelpers: {\n findSDKRootDirectoryPath: vi.fn(\n () =>\n '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',\n ),\n findDeveloperDirectoryPath: vi.fn(\n () => '/Applications/Xcode.app/Contents/Developer',\n ),\n readXcodeBuildSettings: vi.fn(() => ({\n CONFIGURATION_BUILD_DIR: path.join(\n appleProjectsPath,\n 'project-with-synchronized-folders/build/Release-unknown',\n ),\n })),\n },\n }));\n }\n });\n\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n describe('XcodeProject', () => {\n describe('getAllTargets', () => {\n describe('single target', () => {\n it('should return all targets', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n\n // -- Act --\n const targets = xcodeProject.getAllTargets();\n\n // -- Assert --\n expect(targets).toEqual(['Project']);\n });\n });\n\n describe('multiple targets', () => {\n it('should return all targets', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(multiTargetProjectPath);\n\n // -- Act --\n const targets = xcodeProject.getAllTargets();\n\n // -- Assert --\n expect(targets).toEqual(['Project1', 'Project2']);\n });\n });\n\n describe('no targets', () => {\n it('should return an empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(noTargetsProjectPath);\n\n // -- Act --\n const targets = xcodeProject.getAllTargets();\n\n // -- Assert --\n expect(targets).toEqual([]);\n });\n });\n\n describe('project with missing configuration list', () => {\n it('should return an empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(damagedProjectPath);\n\n // -- Act --\n const targets = xcodeProject.getAllTargets();\n\n // -- Assert --\n expect(targets).toEqual([]);\n });\n });\n });\n\n describe('updateXcodeProject', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'update-xcode-project'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('upload symbols script', () => {\n const scriptVariants: {\n uploadSource: boolean;\n includeHomebrewPath: boolean;\n }[] = [\n {\n uploadSource: true,\n includeHomebrewPath: true,\n },\n {\n uploadSource: true,\n includeHomebrewPath: false,\n },\n {\n uploadSource: false,\n includeHomebrewPath: true,\n },\n {\n uploadSource: false,\n includeHomebrewPath: false,\n },\n ];\n\n for (const variant of scriptVariants) {\n describe(`upload source = ${variant.uploadSource?.toString()} and include homebrew path = ${variant.includeHomebrewPath.toString()}`, () => {\n beforeEach(() => {\n vi.spyOn(fs, 'existsSync').mockReturnValue(\n variant.includeHomebrewPath,\n );\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n it('should add the upload symbols script to the target', () => {\n // -- Arrange --\n const generatedShellScript = getRunScriptTemplate(\n projectData.organization.slug,\n projectData.slug,\n variant.uploadSource,\n variant.includeHomebrewPath,\n );\n const expectedShellScript = `\"${generatedShellScript.replace(\n /\"/g,\n '\\\\\"',\n )}\"`;\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n false, // Ignore SPM reference\n variant.uploadSource,\n );\n\n // -- Assert --\n const updatedXcodeProject = new XcodeProject(tempProjectPath);\n\n // Expect the upload symbols script to be added\n const scriptObjects =\n updatedXcodeProject.objects.PBXShellScriptBuildPhase;\n expect(scriptObjects).toBeDefined();\n if (!scriptObjects) {\n throw new Error('Script objects not found');\n }\n const scriptKeys = Object.keys(scriptObjects);\n expect(scriptKeys).toHaveLength(2);\n\n // Find the script ID\n const scriptId = scriptKeys.find(\n (key) => !key.endsWith('_comment'),\n );\n expect(scriptId).toBeDefined();\n if (!scriptId) {\n throw new Error('Script ID not found');\n }\n expect(scriptId).toMatch(/^[A-F0-9]{24}$/i);\n\n // Expect the script to be added\n const script = scriptObjects[\n scriptId\n ] as PBXShellScriptBuildPhase;\n expect(script).toBeDefined();\n expect(typeof script).not.toBe('string');\n expect(script.inputPaths).toEqual([\n '\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}\"',\n ]);\n expect(script.outputPaths).toEqual([]);\n expect(script.shellPath).toBe('/bin/sh');\n expect(script.shellScript).toEqual(expectedShellScript);\n\n const commentKey = `${scriptId}_comment`;\n expect(scriptKeys).toContain(commentKey);\n expect(scriptObjects[commentKey]).toBe(\n 'Upload Debug Symbols to Sentry',\n );\n });\n });\n }\n });\n\n describe('debug information format and sandbox', () => {\n describe('upload source is false', () => {\n it('should not update the Xcode project', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n false, // Ignore SPM reference\n false,\n );\n\n // -- Assert --\n const expectedXcodeProject = new XcodeProject(sourceProjectPath);\n expect(xcodeProject.objects.XCBuildConfiguration).toEqual(\n expectedXcodeProject.objects.XCBuildConfiguration,\n );\n });\n });\n\n describe('upload source is true', () => {\n const uploadSource = true;\n\n describe('named target not found', () => {\n it('should not update the flags in the Xcode project', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Invalid Target Name',\n false, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n const originalXcodeProject = new XcodeProject(sourceProjectPath);\n expect(xcodeProject.objects.XCBuildConfiguration).toEqual(\n originalXcodeProject.objects.XCBuildConfiguration,\n );\n });\n });\n\n describe('named target found', () => {\n describe('build configurations is undefined', () => {\n it('should not update the Xcode project', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Invalid Target Name',\n false, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n const originalXcodeProject = new XcodeProject(\n sourceProjectPath,\n );\n expect(xcodeProject.objects.XCBuildConfiguration).toEqual(\n originalXcodeProject.objects.XCBuildConfiguration,\n );\n });\n });\n\n describe('no build configurations found', () => {\n it('should not update the Xcode project', () => {\n // -- Arrange --\n xcodeProject.objects.XCBuildConfiguration = {};\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Invalid Target Name',\n false, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n expect(xcodeProject.objects.XCBuildConfiguration).toEqual({});\n });\n });\n\n describe('build configurations found', () => {\n const debugProjectBuildConfigurationListId =\n 'D4E604DA2D50CEEE00CAB00F';\n const releaseProjectBuildConfigurationListId =\n 'D4E604DB2D50CEEE00CAB00F';\n const debugTargetBuildConfigurationListId =\n 'D4E604DD2D50CEEE00CAB00F';\n const releaseTargetBuildConfigurationListId =\n 'D4E604DE2D50CEEE00CAB00F';\n\n it('should update the target configuration lists', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n false, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n expect(xcodeProject.objects.XCBuildConfiguration).toBeDefined();\n // Both Debug and Release are configured equally\n const expectedConfigKeys = [\n debugTargetBuildConfigurationListId, // Debug\n releaseTargetBuildConfigurationListId, // Release\n ];\n for (const key of expectedConfigKeys) {\n const buildConfiguration = xcodeProject.objects\n .XCBuildConfiguration?.[key] as XCBuildConfiguration;\n expect(buildConfiguration).toBeDefined();\n expect(typeof buildConfiguration).not.toBe('string');\n const buildSettings = buildConfiguration.buildSettings ?? {};\n expect(buildSettings.DEBUG_INFORMATION_FORMAT).toBe(\n '\"dwarf-with-dsym\"',\n );\n expect(buildSettings.ENABLE_USER_SCRIPT_SANDBOXING).toBe(\n '\"NO\"',\n );\n }\n });\n\n it('should not update the project configuration lists', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n false, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n expect(xcodeProject.objects.XCBuildConfiguration).toBeDefined();\n\n // Check project build configurations 'Debug'\n const debugBuildConfiguration = xcodeProject.objects\n .XCBuildConfiguration?.[\n debugProjectBuildConfigurationListId\n ] as XCBuildConfiguration;\n expect(debugBuildConfiguration).toBeDefined();\n expect(typeof debugBuildConfiguration).not.toBe('string');\n expect(\n debugBuildConfiguration.buildSettings\n ?.DEBUG_INFORMATION_FORMAT,\n ).toBe('dwarf');\n expect(\n debugBuildConfiguration.buildSettings\n ?.ENABLE_USER_SCRIPT_SANDBOXING,\n ).toBe('YES');\n\n // Check project build configurations 'Release'\n const releaseBuildConfiguration = xcodeProject.objects\n .XCBuildConfiguration?.[\n releaseProjectBuildConfigurationListId\n ] as XCBuildConfiguration;\n expect(releaseBuildConfiguration).toBeDefined();\n expect(typeof releaseBuildConfiguration).not.toBe('string');\n expect(\n releaseBuildConfiguration.buildSettings\n ?.DEBUG_INFORMATION_FORMAT,\n ).toBe('\"dwarf-with-dsym\"');\n expect(\n releaseBuildConfiguration.buildSettings\n ?.ENABLE_USER_SCRIPT_SANDBOXING,\n ).toBe('YES');\n });\n });\n });\n });\n });\n\n describe('add SPM reference', () => {\n const addSPMReference = true;\n\n describe('framework build phase already contains Sentry', () => {\n it('should not update the Xcode project', () => {\n // -- Arrange --\n xcodeProject.objects.PBXFrameworksBuildPhase = {\n 'framework-id': {\n isa: 'PBXFrameworksBuildPhase',\n files: [\n {\n value: '123',\n comment: 'Sentry in Frameworks',\n },\n ],\n },\n };\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n addSPMReference,\n );\n\n // -- Assert --\n const expectedXcodeProject = new XcodeProject(sourceProjectPath);\n expectedXcodeProject.objects.PBXFrameworksBuildPhase = {\n 'framework-id': {\n isa: 'PBXFrameworksBuildPhase',\n files: [\n {\n value: '123',\n comment: 'Sentry in Frameworks',\n },\n ],\n },\n };\n expect(xcodeProject.objects.PBXFrameworksBuildPhase).toEqual(\n expectedXcodeProject.objects.PBXFrameworksBuildPhase,\n );\n expect(xcodeProject.objects.XCRemoteSwiftPackageReference).toEqual(\n expectedXcodeProject.objects.XCRemoteSwiftPackageReference,\n );\n expect(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ).toEqual(\n expectedXcodeProject.objects.XCSwiftPackageProductDependency,\n );\n });\n });\n\n it('should add the SPM reference to the target', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n addSPMReference,\n );\n\n // -- Assert --\n // Get the target\n const target = xcodeProject.objects.PBXNativeTarget?.[\n 'D4E604CC2D50CEEC00CAB00F'\n ] as PBXNativeTarget;\n expect(target).toBeDefined();\n if (!target) {\n throw new Error('Target is undefined');\n }\n\n // Check the SPM dependency is added to the target\n expect(target.packageProductDependencies).toEqual([\n expect.objectContaining({\n value: expect.any(String) as string,\n comment: 'Sentry',\n }),\n ]);\n\n // Check the SPM package reference object is added to the project\n const remoteSwiftPackageReferences =\n xcodeProject.objects.XCRemoteSwiftPackageReference;\n expect(remoteSwiftPackageReferences).toBeDefined();\n if (!remoteSwiftPackageReferences) {\n throw new Error('XCRemoteSwiftPackageReference is undefined');\n }\n const rspRefKeys = Object.keys(remoteSwiftPackageReferences);\n expect(rspRefKeys).toHaveLength(2);\n // First key is expected to be the UUID of the SPM package reference\n expect(rspRefKeys[0]).toMatch(/^[A-F0-9]{24}$/i);\n // Second key is expected to be the UUID of the SPM package reference with _comment suffix\n expect(rspRefKeys[1]).toMatch(/^[A-F0-9]{24}_comment$/i);\n\n expect(remoteSwiftPackageReferences?.[rspRefKeys[0]]).toEqual({\n isa: 'XCRemoteSwiftPackageReference',\n repositoryURL: '\"https://github.com/getsentry/sentry-cocoa/\"',\n requirement: {\n kind: 'upToNextMajorVersion',\n minimumVersion: '8.0.0',\n },\n });\n expect(remoteSwiftPackageReferences?.[rspRefKeys[1]]).toBe(\n 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n );\n\n // Check the SPM package is a dependency of the target\n const packageProductDependencies =\n xcodeProject.objects.XCSwiftPackageProductDependency;\n expect(packageProductDependencies).toBeDefined();\n if (!packageProductDependencies) {\n throw new Error('XCSwiftPackageProductDependency is undefined');\n }\n const ppDepKeys = Object.keys(packageProductDependencies);\n expect(ppDepKeys).toHaveLength(2);\n // First key is expected to be the UUID of the SPM package dependency\n expect(ppDepKeys[0]).toMatch(/^[A-F0-9]{24}$/i);\n // Second key is expected to be the UUID of the SPM package dependency with _comment suffix\n expect(ppDepKeys[1]).toMatch(/^[A-F0-9]{24}_comment$/i);\n expect(packageProductDependencies?.[ppDepKeys[0]]).toEqual({\n isa: 'XCSwiftPackageProductDependency',\n package: rspRefKeys[0],\n package_comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n productName: 'Sentry',\n });\n });\n\n it('should initialize packageProductDependencies if not present', () => {\n // -- Arrange --\n // Ensure the target exists but has no packageProductDependencies initially\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n const target = xcodeProject.objects.PBXNativeTarget?.[\n targetKey\n ] as PBXNativeTarget;\n if (target) {\n // Remove packageProductDependencies to test initialization\n delete target.packageProductDependencies;\n }\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n addSPMReference,\n );\n\n // -- Assert --\n const updatedTarget = xcodeProject.objects.PBXNativeTarget?.[\n targetKey\n ] as PBXNativeTarget;\n expect(updatedTarget.packageProductDependencies).toBeDefined();\n expect(updatedTarget.packageProductDependencies).toEqual([\n expect.objectContaining({\n value: expect.any(String) as string,\n comment: 'Sentry',\n }),\n ]);\n });\n });\n });\n\n describe('getSourceFilesForTarget', () => {\n describe('targets are undefined', () => {\n it('should return undefined', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = undefined;\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toBeUndefined();\n });\n });\n\n describe('target not found', () => {\n it('should return undefined', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n\n // -- Act --\n const files =\n xcodeProject.getSourceFilesForTarget('NonExistentTarget');\n\n // -- Assert --\n expect(files).toBeUndefined();\n });\n });\n\n describe('target build phases are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n Project: {\n isa: 'PBXNativeTarget',\n name: 'Project',\n buildPhases: undefined,\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phases are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n Project: {\n isa: 'PBXNativeTarget',\n name: 'Project',\n buildPhases: undefined,\n },\n };\n xcodeProject.objects.PBXSourcesBuildPhase = undefined;\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('referenced build phase is undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n Project: {\n isa: 'PBXNativeTarget',\n name: 'Project',\n buildPhases: [\n {\n value: 'random-build-phase',\n },\n ],\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase files are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n Project: {\n isa: 'PBXNativeTarget',\n name: 'Project',\n buildPhases: [\n {\n value: 'build-phase-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: undefined,\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase has no files', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(noFilesInTargetProjectPath);\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase with files', () => {\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n buildPhases: [\n {\n value: 'build-phase-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [\n {\n value: 'file-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n fileRef: 'file-ref-key',\n },\n };\n });\n\n describe('build file objects are not defined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXBuildFile = undefined;\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build file object is not found', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXBuildFile = {};\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build file object is invalid', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': 'invalid-object',\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('file reference is missing', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('file reference is invalid', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': 'invalid-object',\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('file reference path is missing', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': {\n isa: 'PBXFileReference',\n path: undefined as unknown as string,\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('valid file reference', () => {\n it('should return array with file path', () => {\n // -- Arrange --\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': {\n isa: 'PBXFileReference',\n path: 'test.swift',\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([\n path.join(xcodeProject.baseDir, 'test.swift'),\n ]);\n });\n });\n });\n\n describe('synchronized root groups', () => {\n it('should handle missing fileSystemSynchronizedGroups', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n\n it('should handle empty fileSystemSynchronizedGroups', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n fileSystemSynchronizedGroups: [],\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n\n it('should handle invalid synchronized root group', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n fileSystemSynchronizedGroups: [\n {\n value: 'invalid-group',\n },\n ],\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n\n it('should handle synchronized root group with missing path', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n fileSystemSynchronizedGroups: [\n {\n value: 'group-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXFileSystemSynchronizedRootGroup = {\n 'group-key': {\n isa: 'PBXFileSystemSynchronizedRootGroup',\n path: undefined as unknown as string,\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n\n it('should exclude files in membership exceptions', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n\n // The subfolder 1-1-1 is a synchronized root group containing two files:\n // - File-1-1-1-1.swift\n // - File-1-1-1-2.swift\n //\n // The membership exceptions are:\n // - File-1-1-1-2.swift\n //\n // The expected result is that File-1-1-1-1.swift is excluded from the build, but\n // included due to the membership exception.\n // The File-1-1-1-2.swift is excluded from the build due to the membership exception.\n\n // Pre-condition: File-1-1-1-1.swift exists\n const file1111 = path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-1',\n 'Subfolder 1-1-1',\n 'File-1-1-1-1.swift',\n );\n expect(fs.existsSync(file1111)).toBe(true);\n\n // Pre-condition: File-1-1-1-2.swift exists\n const file1112 = path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-1',\n 'Subfolder 1-1-1',\n 'File-1-1-1-2.swift',\n );\n expect(fs.existsSync(file1112)).toBe(true);\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n // Known Issue:\n // The file `File-1-1-1-1.swift` is included in the source build phase, but not in the list of files.\n //\n // This is the group structure:\n // <main group> / Group 1 / Subgroup 1-1 / Subfolder 1-1-1 / File-1-1-1-1.swift\n //\n // - <main group> is the root group\n // - Group 1 is a group\n // - Subgroup 1-1 is a nested group\n // - Subfolder 1-1-1 is a synchronized root group\n // - File-1-1-1-1.swift is a file in the synchronized root group Subfolder 1-1-1\n //\n // For no apparent reason, Xcode is picking up the file, but Group 1 is not mentioned anywhere other then the main group.\n // This would require us to consider every root group as a potential source of files, which seems excessive if a project has multiple targets.\n\n // expect(files).toContain(file1111);\n expect(files).not.toContain(file1112);\n });\n\n it('should return synchronized files and files in main group', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n // The order is not guaranteed, so we need to check for each file individually\n // The order in this test case is the one displayed in the Xcode UI\n const group1DirPath = path.join(xcodeProject.baseDir, 'Group 1');\n const subgroup1_1DirPath = path.join(group1DirPath, 'Subgroup 1-1');\n const subgroup1_2DirPath = path.join(group1DirPath, 'Subgroup 1-2');\n const subgroup1_1_2DirPath = path.join(\n subgroup1_1DirPath,\n 'Subgroup 1-1-2',\n );\n\n const sourcesDirPath = path.join(xcodeProject.baseDir, 'Sources');\n const subfolder1DirPath = path.join(sourcesDirPath, 'Subfolder 1');\n const subfolder2DirPath = path.join(sourcesDirPath, 'Subfolder 2');\n\n const groupRef1_3DirPath = path.join(\n xcodeProject.baseDir,\n 'Group Reference 1-3',\n );\n\n expect(files).toContain(\n path.join(subgroup1_2DirPath, 'File-1-2-2.swift'),\n );\n expect(files).toContain(\n path.join(subfolder1DirPath, 'ContentView.swift'),\n );\n expect(files).toContain(\n path.join(\n subgroup1_2DirPath,\n 'File-1-2-3--relative-to-group.swift',\n ),\n );\n expect(files).toContain(path.join(sourcesDirPath, 'MainApp.swift'));\n expect(files).toContain(path.join(subfolder2DirPath, 'File.swift'));\n\n // Absolute path\n expect(files).toContain(\n '/System/Library/CoreServices/SystemVersion.plist',\n );\n // Path relative to the SDK\n expect(files).toContain(\n '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/SDKSettings.plist',\n );\n // Path relative to the developer directory\n expect(files).toContain(\n '/Applications/Xcode.app/Contents/Developer/usr/bin/git',\n );\n // Path relative to the build products directory\n // NOT SUPPORTED YET\n\n // Path relative to the project\n expect(files).toContain(\n path.join(subgroup1_2DirPath, 'File-1-2-1.swift'),\n );\n expect(files).toContain(\n path.join(groupRef1_3DirPath, 'File-1-3-1.swift'),\n );\n expect(files).toContain(\n path.join(\n subgroup1_2DirPath,\n 'File-1-2-3--relative-to-project.swift',\n ),\n );\n expect(files).toContain(\n path.join(subgroup1_1_2DirPath, 'File-1-1-2-1.swift'),\n );\n // Known Issue:\n // The file `File-1-1-1-1.swift` is included in the source build phase, but not in the list of files.\n //\n // This is the group structure:\n // <main group> / Group 1 / Subgroup 1-1 / Subfolder 1-1-1 / File-1-1-1-1.swift\n //\n // - <main group> is the root group\n // - Group 1 is a group\n // - Subgroup 1-1 is a nested group\n // - Subfolder 1-1-1 is a synchronized root group\n // - File-1-1-1-1.swift is a file in the synchronized root group Subfolder 1-1-1\n //\n // For no apparent reason, Xcode is picking up the file, but Group 1 is not mentioned anywhere other then the main group.\n // This would require us to consider every root group as a potential source of files, which seems excessive if a project has multiple targets.\n\n // expect(files).toContain(\n // path.join(\n // xcodeProject.baseDir,\n // 'Group 1',\n // 'Subgroup 1-1',\n // 'Subfolder 1-1-1',\n // 'File-1-1-1-1.swift',\n // ),\n // );\n\n // Assert that there are no other file paths in the list\n expect(files).toHaveLength(12);\n });\n });\n });\n\n describe('findFilesInSourceBuildPhase', () => {\n describe('when build phase is not found', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = undefined;\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase files are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: undefined,\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase files are empty', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [],\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase file is a comment', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': 'this is a comment',\n };\n\n // Smoke test to ensure native target is defined\n expect(nativeTarget).toBeDefined();\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase file is not found', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [],\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase file reference is a comment', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [\n {\n value: 'file-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n fileRef: 'file-ref-key',\n },\n };\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': 'this is a comment',\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase file reference has no path', () => {\n it('should be ignored', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [\n {\n value: 'file-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n fileRef: 'file-ref-key',\n },\n };\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': {\n isa: 'PBXFileReference',\n path: undefined as unknown as string,\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('when file reference path contains doublequotes', () => {\n it('should be removed', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [\n {\n value: 'file-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n fileRef: 'file-ref-key',\n },\n };\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': {\n isa: 'PBXFileReference',\n path: '\"path/with/quotes.swift\"',\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([\n path.join(xcodeProject.baseDir, 'path/with/quotes.swift'),\n ]);\n });\n });\n\n it('should return all files in build phase', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n // The list should reflect exactly the list of `files` in the `PBXSourcesBuildPhase` in the project.pbxproj file\n expect(files).toEqual([\n // Absolute paths\n '/System/Library/CoreServices/SystemVersion.plist',\n\n // Path relative to the build directory\n // NOT SUPPORTED YET\n\n // Path relative to the SDK\n '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/SDKSettings.plist',\n\n // Path relative to the developer directory\n '/Applications/Xcode.app/Contents/Developer/usr/bin/git',\n\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-2',\n 'File-1-2-2.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-2',\n 'File-1-2-3--relative-to-group.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-2',\n 'File-1-2-1.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-1',\n 'Subgroup 1-1-2',\n 'File-1-1-2-1.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group Reference 1-3',\n 'File-1-3-1.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-2',\n 'File-1-2-3--relative-to-project.swift',\n ),\n ]);\n });\n });\n\n describe('findSourceBuildPhaseInTarget', () => {\n describe('when build phases are undefined', () => {\n it('should return undefined', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = undefined;\n\n // -- Act --\n const buildPhase =\n xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);\n\n // -- Assert --\n expect(buildPhase).toBeUndefined();\n });\n });\n\n describe('when build phases are empty', () => {\n it('should return undefined', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [];\n\n // -- Act --\n const buildPhase =\n xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);\n\n // -- Assert --\n expect(buildPhase).toBeUndefined();\n });\n });\n\n describe('when referenced build phase is not found', () => {\n it('should ignore it', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {};\n\n // -- Act --\n const buildPhase =\n xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);\n\n // -- Assert --\n expect(buildPhase).toBeUndefined();\n });\n });\n\n describe('when referenced build phase is found', () => {\n it('should return the build phase', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n\n // -- Act --\n const buildPhase =\n xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);\n\n // -- Assert --\n expect(buildPhase).toEqual({\n id: 'D4E604C92D50CEEC00CAB00F',\n obj: {\n isa: 'PBXSourcesBuildPhase',\n files: [],\n buildActionMask: 2147483647,\n runOnlyForDeploymentPostprocessing: 0,\n },\n });\n });\n });\n });\n\n describe('findFilesInSynchronizedRootGroups', () => {\n describe('when synchronized root groups are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.fileSystemSynchronizedGroups = undefined;\n\n // -- Act --\n const files = xcodeProject.findFilesInSynchronizedRootGroups({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('when synchronized root groups are empty', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.fileSystemSynchronizedGroups = [];\n\n // -- Act --\n const files = xcodeProject.findFilesInSynchronizedRootGroups({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('when synchronized root groups are not found', () => {\n it('should ignore files in them', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n\n // Add an invalid group reference to the native target\n nativeTarget.fileSystemSynchronizedGroups = [\n ...(nativeTarget.fileSystemSynchronizedGroups || []),\n {\n value: 'invalid-group-key',\n },\n ];\n\n // -- Act --\n const files = xcodeProject.findFilesInSynchronizedRootGroups({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).not.toContain(\n path.join(\n xcodeProject.baseDir,\n 'Sources',\n 'Subfolder 1',\n 'Excluded-File.swift',\n ),\n );\n });\n });\n });\n\n describe('addUploadSymbolsScript', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'add-upload-symbols-script'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('when target is not found', () => {\n it('should return early', () => {\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'NonExistentTarget',\n uploadSource: true,\n });\n\n // -- Assert --\n // Verify that no shell script build phases were added\n expect(xcodeProject.objects.PBXShellScriptBuildPhase).toBeUndefined();\n });\n });\n\n describe('when target has existing Sentry build phase', () => {\n beforeEach(() => {\n // Set up a target with an existing Sentry build phase\n xcodeProject.objects.PBXNativeTarget = {\n 'target-key': {\n isa: 'PBXNativeTarget',\n name: 'TestTarget',\n buildPhases: [\n {\n value: 'existing-sentry-phase',\n comment: 'Upload Debug Symbols to Sentry',\n },\n ],\n },\n };\n\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n 'existing-sentry-phase': {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo sentry-cli upload-dsym\"',\n buildActionMask: 2147483647,\n files: [],\n inputPaths: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n shellPath: '/bin/sh',\n },\n };\n });\n\n it('should update existing build phase instead of adding new one', () => {\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'TestTarget',\n uploadSource: true,\n });\n\n // -- Assert --\n // Should still have only one build phase (the updated one)\n const buildPhases = Object.keys(\n xcodeProject.objects.PBXShellScriptBuildPhase || {},\n );\n expect(\n buildPhases.filter((key) => !key.endsWith('_comment')),\n ).toHaveLength(1);\n\n // The existing phase should be updated with new script content\n const updatedPhase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[\n 'existing-sentry-phase'\n ];\n expect(updatedPhase).toBeDefined();\n expect(\n (updatedPhase as PBXShellScriptBuildPhase)?.shellScript,\n ).toContain('sentry-cli');\n });\n });\n\n describe('orphaned build phase cleanup', () => {\n beforeEach(() => {\n // Set up targets with orphaned build phase references\n xcodeProject.objects.PBXNativeTarget = {\n 'target-1': {\n isa: 'PBXNativeTarget',\n name: 'Target1',\n buildPhases: [\n {\n value: 'orphaned-phase-1',\n comment: 'Upload Debug Symbols to Sentry',\n },\n {\n value: 'valid-phase',\n comment: 'Sources',\n },\n ],\n },\n 'target-2': {\n isa: 'PBXNativeTarget',\n name: 'Target2',\n buildPhases: [\n {\n value: 'orphaned-phase-2',\n comment: 'Upload Debug Symbols to Sentry',\n },\n ],\n },\n };\n\n // PBXShellScriptBuildPhase doesn't have the orphaned phases\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n 'valid-phase': {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo valid\"',\n buildActionMask: 2147483647,\n files: [],\n inputPaths: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n shellPath: '/bin/sh',\n },\n };\n });\n\n it('should remove orphaned build phase references from all targets', () => {\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'Target1',\n uploadSource: true,\n });\n\n // -- Assert --\n const target1 = xcodeProject.objects.PBXNativeTarget?.[\n 'target-1'\n ] as PBXNativeTarget;\n const target2 = xcodeProject.objects.PBXNativeTarget?.[\n 'target-2'\n ] as PBXNativeTarget;\n\n // Target1 should only have the valid phase left, plus the new Sentry phase\n expect(target1?.buildPhases).not.toEqual(\n expect.arrayContaining([\n expect.objectContaining({ value: 'orphaned-phase-1' }),\n ]),\n );\n expect(target1?.buildPhases).toEqual(\n expect.arrayContaining([\n expect.objectContaining({ value: 'valid-phase' }),\n ]),\n );\n\n // Target2 should have orphaned phase removed and be empty\n expect(target2?.buildPhases).not.toEqual(\n expect.arrayContaining([\n expect.objectContaining({ value: 'orphaned-phase-2' }),\n ]),\n );\n });\n });\n });\n\n describe('addUploadSymbolsScript edge cases', () => {\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n xcodeProject = new XcodeProject(singleTargetProjectPath);\n });\n\n describe('when target is not found', () => {\n it('should handle gracefully without throwing', () => {\n // -- Act & Assert --\n expect(() => {\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'NonExistentTarget',\n uploadSource: true,\n });\n }).not.toThrow();\n });\n });\n });\n\n describe('addScriptBuildPhase method coverage', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'add-script-build-phase'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('when PBXShellScriptBuildPhase does not exist initially', () => {\n it('should initialize PBXShellScriptBuildPhase and add build phase', () => {\n // -- Arrange --\n // Set PBXShellScriptBuildPhase to empty to test initialization path\n delete xcodeProject.objects.PBXShellScriptBuildPhase;\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n\n // -- Act --\n const buildPhaseId = xcodeProject.addScriptBuildPhase(\n targetKey,\n 'Test Script',\n 'echo \"test\"',\n ['input.txt'],\n );\n\n // -- Assert --\n expect(xcodeProject.objects.PBXShellScriptBuildPhase).toBeDefined();\n expect(buildPhaseId).toMatch(/^[A-F0-9]{24}$/i);\n\n const buildPhase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[buildPhaseId];\n expect(buildPhase).toBeDefined();\n expect(typeof buildPhase).not.toBe('string');\n });\n });\n\n describe('when target does not exist', () => {\n it('should still create build phase but not add to target', () => {\n // -- Arrange --\n const invalidTargetKey = 'INVALID_TARGET_KEY';\n\n // -- Act --\n const buildPhaseId = xcodeProject.addScriptBuildPhase(\n invalidTargetKey,\n 'Test Script',\n 'echo \"test\"',\n [],\n );\n\n // -- Assert --\n expect(buildPhaseId).toMatch(/^[A-F0-9]{24}$/i);\n\n // Build phase should be created in PBXShellScriptBuildPhase\n const buildPhase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[buildPhaseId];\n expect(buildPhase).toBeDefined();\n\n // But target should not have the build phase added since target doesn't exist\n const target =\n xcodeProject.objects.PBXNativeTarget?.[invalidTargetKey];\n expect(target).toBeUndefined();\n });\n });\n\n describe('when target has no buildPhases array', () => {\n it('should not add build phase to target but should create build phase object', () => {\n // -- Arrange --\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n const target = xcodeProject.objects.PBXNativeTarget?.[targetKey];\n if (target && typeof target !== 'string') {\n // Remove buildPhases to test the undefined case\n const targetWithoutBuildPhases = target as unknown as {\n buildPhases: undefined;\n };\n delete targetWithoutBuildPhases.buildPhases;\n }\n\n // -- Act --\n const buildPhaseId = xcodeProject.addScriptBuildPhase(\n targetKey,\n 'Test Script',\n 'echo \"test\"',\n [],\n );\n\n // -- Assert --\n expect(buildPhaseId).toMatch(/^[A-F0-9]{24}$/i);\n\n // Build phase should be created\n const buildPhase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[buildPhaseId];\n expect(buildPhase).toBeDefined();\n\n // Target should exist but buildPhases should still be undefined\n const updatedTarget = xcodeProject.objects.PBXNativeTarget?.[\n targetKey\n ] as PBXNativeTarget | undefined;\n expect(updatedTarget).toBeDefined();\n expect(updatedTarget?.buildPhases).toBeUndefined();\n });\n });\n });\n\n describe('updateScriptBuildPhase method coverage', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'update-script-build-phase'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('when build phase does not exist', () => {\n it('should debug and return early', () => {\n // -- Act & Assert --\n expect(() => {\n xcodeProject.updateScriptBuildPhase(\n 'NONEXISTENT_BUILD_PHASE',\n 'echo \"updated\"',\n ['input.txt'],\n );\n }).not.toThrow();\n });\n });\n\n describe('when build phase is a string comment', () => {\n it('should debug and return early', () => {\n // -- Arrange --\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n 'test-id': 'This is a comment string',\n };\n\n // -- Act & Assert --\n expect(() => {\n xcodeProject.updateScriptBuildPhase('test-id', 'echo \"updated\"', [\n 'input.txt',\n ]);\n }).not.toThrow();\n });\n });\n\n describe('when build phase exists and is valid', () => {\n it('should update the build phase successfully', () => {\n // -- Arrange --\n const buildPhaseId = 'test-build-phase-id';\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n [buildPhaseId]: {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo \\\\\"old script\\\\\"\"',\n inputPaths: ['old-input.txt'],\n shellPath: '/bin/sh',\n buildActionMask: 2147483647,\n files: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n },\n };\n\n // -- Act --\n xcodeProject.updateScriptBuildPhase(\n buildPhaseId,\n 'echo \"new script\"',\n ['new-input.txt'],\n );\n\n // -- Assert --\n const buildPhase = xcodeProject.objects.PBXShellScriptBuildPhase?.[\n buildPhaseId\n ] as PBXShellScriptBuildPhase;\n expect(buildPhase).toBeDefined();\n expect(buildPhase?.shellScript).toBe('\"echo \\\\\"new script\\\\\"\"');\n expect(buildPhase?.inputPaths).toEqual(['new-input.txt']);\n expect(buildPhase?.shellPath).toBe('/bin/sh');\n });\n });\n });\n\n describe('addUploadSymbolsScript method comprehensive coverage', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'add-upload-symbols-comprehensive'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('when PBXShellScriptBuildPhase does not exist initially', () => {\n it('should initialize PBXShellScriptBuildPhase and add new build phase', () => {\n // -- Arrange --\n delete xcodeProject.objects.PBXShellScriptBuildPhase;\n\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'Project',\n uploadSource: true,\n });\n\n // -- Assert --\n expect(xcodeProject.objects.PBXShellScriptBuildPhase).toBeDefined();\n\n // Should have created a new build phase\n const buildPhases = Object.keys(\n xcodeProject.objects.PBXShellScriptBuildPhase || {},\n );\n const actualBuildPhases = buildPhases.filter(\n (key) => !key.endsWith('_comment'),\n );\n expect(actualBuildPhases.length).toBeGreaterThan(0);\n });\n });\n\n describe('when target has buildPhases but no existing Sentry script', () => {\n it('should iterate through buildPhases and add new script', () => {\n // -- Arrange --\n // Ensure target has buildPhases but none contain sentry-cli\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n const target = xcodeProject.objects.PBXNativeTarget?.[targetKey];\n if (target && typeof target !== 'string') {\n target.buildPhases = [\n { value: 'some-other-phase', comment: 'Sources' },\n { value: 'another-phase', comment: 'Frameworks' },\n ];\n }\n\n // Ensure PBXShellScriptBuildPhase exists but without sentry-cli scripts\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n 'some-other-phase': {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo \\\\\"other script\\\\\"\"',\n buildActionMask: 2147483647,\n files: [],\n inputPaths: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n shellPath: '/bin/sh',\n },\n 'another-phase': {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo \\\\\"another script\\\\\"\"',\n buildActionMask: 2147483647,\n files: [],\n inputPaths: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n shellPath: '/bin/sh',\n },\n };\n\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'Project',\n uploadSource: true,\n });\n\n // -- Assert --\n // Should have added a new Sentry build phase (calls addScriptBuildPhase path)\n const buildPhases = Object.keys(\n xcodeProject.objects.PBXShellScriptBuildPhase || {},\n );\n const actualBuildPhases = buildPhases.filter(\n (key) => !key.endsWith('_comment'),\n );\n expect(actualBuildPhases.length).toBeGreaterThan(2); // Should have more than the original 2\n\n // Find the new Sentry script\n const sentryPhase = actualBuildPhases.find((phaseId) => {\n const phase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[phaseId];\n return (\n phase &&\n typeof phase !== 'string' &&\n phase.shellScript?.includes('sentry-cli')\n );\n });\n expect(sentryPhase).toBeDefined();\n });\n });\n\n describe('when target has no buildPhases', () => {\n it('should skip the buildPhases iteration and add new script', () => {\n // -- Arrange --\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n const target = xcodeProject.objects.PBXNativeTarget?.[targetKey];\n if (target && typeof target !== 'string') {\n // Set buildPhases to undefined to test the skip path\n target.buildPhases = undefined;\n }\n\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'Project',\n uploadSource: true,\n });\n\n // -- Assert --\n // Should have added a new Sentry build phase via the else branch (addScriptBuildPhase)\n const buildPhases = Object.keys(\n xcodeProject.objects.PBXShellScriptBuildPhase || {},\n );\n const actualBuildPhases = buildPhases.filter(\n (key) => !key.endsWith('_comment'),\n );\n expect(actualBuildPhases.length).toBeGreaterThan(0);\n\n // Find the new Sentry script\n const sentryPhase = actualBuildPhases.find((phaseId) => {\n const phase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[phaseId];\n return (\n phase &&\n typeof phase !== 'string' &&\n phase.shellScript?.includes('sentry-cli')\n );\n });\n expect(sentryPhase).toBeDefined();\n });\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"xcode-manager.test.js","sourceRoot":"","sources":["../../../test/apple/xcode-manager.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,4CAA8B;AAC9B,gDAAkC;AAClC,gEAAmC;AACnC,mCAAyE;AAMzE,iIAG4E;AAC5E,+EAG8C;AAC9C,yDAAiE;AACjE,iEAGuC;AAEvC,uFAGgD;AAEhD,WAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC9B,UAAU,EAAE,IAAI;IAChB,GAAG,CAAC,MAAM,WAAE,CAAC,YAAY,CAAY,SAAS,CAAC,CAAC;CACjD,CAAC,CAAC,CAAC;AAEJ,WAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,GAAG,EAAE;QACH,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;QACb,OAAO,EAAE,WAAE,CAAC,EAAE,EAAE;QAChB,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;KACd;CACF,CAAC,CAAC,CAAC;AAEJ,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CACpC,SAAS,EACT,wCAAwC,CACzC,CAAC;AACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,iBAAiB,EACjB,sEAAsE,CACvE,CAAC;AACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CACpC,iBAAiB,EACjB,8CAA8C,CAC/C,CAAC;AACF,MAAM,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAC1C,iBAAiB,EACjB,sDAAsD,CACvD,CAAC;AACF,MAAM,8BAA8B,GAAG,IAAI,CAAC,IAAI,CAC9C,iBAAiB,EACjB,qEAAqE,CACtE,CAAC;AACF,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CACvC,iBAAiB,EACjB,6DAA6D,CAC9D,CAAC;AACF,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CACtC,iBAAiB,EACjB,6DAA6D,CAC9D,CAAC;AACF,MAAM,WAAW,GAAsB;IACrC,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,SAAS;IACf,YAAY,EAAE;QACZ,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;KACf;IACD,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,8BAA8B,EAAE,EAAE,CAAC;CAC5D,CAAC;AAEF,MAAM,yBAAyB,GAAG,0BAA0B,CAAC;AAC7D,MAAM,oCAAoC,GAAmC;IAC3E,OAAO,EAAE,oDAA6B;IACtC,wBAAwB,EAAE,kEAA2C;IACrE,cAAc,EAAE,6CAA6C;CAC9D,CAAC;AACF,MAAM,eAAe,GAAG,0BAA0B,CAAC;AACnD,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD,SAAS,yBAAyB,CAAC,MAAe;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC,CAAC,MAAM,CAClE,CAAC,GAAG,EAAE,EAAE;QACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,YAA0B,EAC1B,UAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,CAC3E,CAAC,SAAS,EAAE,EAAE;QACZ,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC;IACxE,CAAC,CAC6B,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;KACpD;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,IAAI,sBAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACjC,uDAAuD;YACvD,2FAA2F;YAE3F,2HAA2H;YAC3H,WAAE,CAAC,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpD,kBAAkB,EAAE;oBAClB,wBAAwB,EAAE,WAAE,CAAC,EAAE,CAC7B,GAAG,EAAE,CACH,gGAAgG,CACnG;oBACD,0BAA0B,EAAE,WAAE,CAAC,EAAE,CAC/B,GAAG,EAAE,CAAC,4CAA4C,CACnD;oBACD,sBAAsB,EAAE,WAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;wBACnC,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAChC,iBAAiB,EACjB,yDAAyD,CAC1D;qBACF,CAAC,CAAC;iBACJ;aACF,CAAC,CAAC,CAAC;SACL;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,WAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;YAC7B,IAAA,iBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;gBAC7B,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAE/D,YAAY;oBACZ,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;oBAE7C,eAAe;oBACf,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,kBAAkB,EAAE,GAAG,EAAE;gBAChC,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,sBAAsB,CAAC,CAAC;oBAE9D,YAAY;oBACZ,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;oBAE7C,eAAe;oBACf,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;gBACpD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;gBAC1B,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;oBACtC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,oBAAoB,CAAC,CAAC;oBAE5D,YAAY;oBACZ,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;oBAE7C,eAAe;oBACf,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,yCAAyC,EAAE,GAAG,EAAE;gBACvD,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;oBACtC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,kBAAkB,CAAC,CAAC;oBAE1D,YAAY;oBACZ,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;oBAE7C,eAAe;oBACf,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,uBAAuB,EAAE,GAAG,EAAE;YACrC,IAAA,WAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;gBACzD,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,IAAA,eAAM,EAAC,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC1D,IAAA,eAAM,EAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,4CAA4C,EAAE,GAAG,EAAE;gBACpD,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,IAAI,EAAE,cAAc;oBACpB,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBACH,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,IAAI,EAAE,sBAAsB;oBAC5B,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,IAAA,eAAM,EAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC;oBACpD,cAAc;oBACd,sBAAsB;iBACvB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,0DAA0D,EAAE,GAAG,EAAE;gBAClE,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,IAAI,EAAE,cAAc;oBACpB,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBACH,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,IAAI,EAAE,sBAAsB;oBAC5B,eAAe;oBACf,eAAe;oBACf,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,IAAA,eAAM,EAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC;oBACpD,cAAc;oBACd,sBAAsB;iBACvB,CAAC,CAAC;gBACH,IAAA,eAAM,EAAC,YAAY,CAAC,4BAA4B,EAAE,CAAC,CAAC,OAAO,CAAC;oBAC1D,cAAc;iBACf,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,0EAA0E,EAAE,GAAG,EAAE;gBAClF,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,IAAI,EAAE,cAAc;oBACpB,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBACH,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,eAAe;oBACrB,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,IAAA,eAAM,EACJ,YAAY,CAAC,gDAAgD,CAC3D,SAAS,CACV,CACF,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,sDAAsD,EAAE,GAAG,EAAE;gBAC9D,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,IAAI,EAAE,cAAc;oBACpB,eAAe;oBACf,eAAe;oBACf,QAAQ,EACN,8GAA8G;iBACjH,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,IAAA,eAAM,EACJ,YAAY,CAAC,gDAAgD,CAC3D,SAAS,CACV,CACF,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,uEAAuE,EAAE,GAAG,EAAE;gBAC/E,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,IAAI,EAAE,cAAc;oBACpB,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,IAAA,eAAM,EACJ,YAAY,CAAC,gDAAgD,CAC3D,YAAY,CACb,CACF,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,iCAAiC,EAAE,GAAG,EAAE;YAC/C,IAAI,YAA0B,CAAC;YAC/B,IAAI,mBAA+C,CAAC;YAEpD,IAAA,mBAAU,EAAC,GAAG,EAAE;gBACd,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBACzD,mBAAmB,GAAG,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBAC1D,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,2DAA2D,EAAE,GAAG,EAAE;gBACnE,YAAY;gBACZ,MAAM,MAAM,GAAG,YAAY,CAAC,+BAA+B,CACzD,cAAc,EACd,uEAA4B,CAC7B,CAAC;gBAEF,eAAe;gBACf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAElB,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBAC3D,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;gBACvE,IAAA,eAAM,EAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACzD,IAAA,eAAM,EAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;oBAC1D,eAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;iBAC1D,CAAC,CAAC;gBAEH,MAAM,uBAAuB,GAC3B,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAC5C,yBAAyB,CAC1B,CAAC;gBACJ,MAAM,wBAAwB,GAC5B,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAC5C,mBAAmB,CAAC,sBAAsB,CAC3C,CAAC;gBACJ,IAAA,eAAM,EACJ,OAAO,uBAAuB,KAAK,QAAQ;oBACzC,CAAC,CAAC,uBAAuB,EAAE,KAAK;oBAChC,CAAC,CAAC,SAAS,CACd,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACd,IAAA,eAAM,EACJ,OAAO,wBAAwB,KAAK,QAAQ;oBAC1C,CAAC,CAAC,wBAAwB,EAAE,KAAK;oBACjC,CAAC,CAAC,SAAS,CACd,CAAC,OAAO,CAAC;oBACR,eAAM,CAAC,gBAAgB,CAAC;wBACtB,OAAO,EAAE,iCAAiC;qBAC3C,CAAC;iBACH,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;gBAC5C,YAAY;gBACZ,MAAM,WAAW,GAAG,YAAY,CAAC,+BAA+B,CAC9D,cAAc,EACd,uEAA4B,CAC7B,CAAC;gBACF,MAAM,YAAY,GAAG,YAAY,CAAC,+BAA+B,CAC/D,cAAc,EACd,uEAA4B,CAC7B,CAAC;gBAEF,eAAe;gBACf,IAAA,eAAM,EAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,IAAA,eAAM,EAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/D,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAA,eAAM,EACJ,yBAAyB,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAC7D,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,kEAAkE,EAAE,GAAG,EAAE;gBAC1E,gBAAgB;gBAChB,MAAM,YAAY,GAAG,6BAA6B,CAAC;gBACnD,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;gBAC1D,YAAY,CAAC,OAAO,CAAC,6BAA6B,GAAG;oBACnD,CAAC,YAAY,CAAC,EAAE;wBACd,GAAG,EAAE,+BAA+B;wBACpC,aAAa,EAAE,IAAI,uEAA4B,CAAC,OAAO,CAAC,aAAa,GAAG;wBACxE,WAAW,EAAE,uEAA4B,CAAC,OAAO,CAAC,WAAW;qBAC9D;oBACD,CAAC,GAAG,YAAY,UAAU,CAAC,EACzB,kDAAkD;iBACrD,CAAC;gBACF,YAAY,CAAC,OAAO,CAAC,+BAA+B,GAAG;oBACrD,CAAC,mBAAmB,CAAC,EAAE;wBACrB,GAAG,EAAE,iCAAiC;wBACtC,OAAO,EAAE,YAAY;wBACrB,WAAW,EAAE,qBAAqB;qBACnC;oBACD,CAAC,GAAG,mBAAmB,UAAU,CAAC,EAAE,mBAAmB;iBACxD,CAAC;gBAEF,YAAY;gBACZ,MAAM,MAAM,GAAG,YAAY,CAAC,+BAA+B,CACzD,cAAc,EACd,uEAA4B,CAC7B,CAAC;gBAEF,eAAe;gBACf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CACF,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACjC,IAAA,eAAM,EAAC,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAC3D,eAAM,CAAC,gBAAgB,CAAC;oBACtB,0BAA0B,EAAE;wBAC1B,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;qBACxD;iBACF,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,uGAAuG,EAAE,GAAG,EAAE;gBAC/G,gBAAgB;gBAChB,YAAY,CAAC,OAAO,CAAC,6BAA6B,GAAG;oBACnD,2BAA2B,EAAE;wBAC3B,GAAG,EAAE,+BAA+B;wBACpC,aAAa,EAAE,IAAI,uEAA4B,CAAC,OAAO,CAAC,aAAa,IAAI;wBACzE,WAAW,EAAE;4BACX,IAAI,EAAE,sBAAsB;4BAC5B,cAAc,EAAE,OAAO;yBACxB;qBACF;oBACD,mCAAmC,EACjC,kDAAkD;iBACrD,CAAC;gBAEF,YAAY;gBACZ,MAAM,MAAM,GAAG,YAAY,CAAC,+BAA+B,CACzD,cAAc,EACd,uEAA4B,CAC7B,CAAC;gBAEF,eAAe;gBACf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CACF,CAAC,OAAO,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBAC3C,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAClD,6BAA6B,CAC9B,CACF,CAAC,OAAO,CACP,eAAM,CAAC,gBAAgB,CAAC;oBACtB,WAAW,EAAE,uEAA4B,CAAC,OAAO,CAAC,WAAW;iBAC9D,CAAC,CACH,CAAC;gBACF,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,+BAA+B,EAAE,CACpD,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CAAC,CAAC,CAAC,CACL,CACF,CAAC,OAAO,CACP,eAAM,CAAC,gBAAgB,CAAC;oBACtB,OAAO,EAAE,6BAA6B;oBACtC,WAAW,EAAE,mBAAmB;iBACjC,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,uFAAuF,EAAE,GAAG,EAAE;gBAC/F,gBAAgB;gBAChB,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;gBACvE,gBAAgB,CAAC,WAAW,GAAG,EAAE,CAAC;gBAElC,YAAY;gBACZ,MAAM,MAAM,GAAG,YAAY,CAAC,+BAA+B,CACzD,cAAc,EACd,uEAA4B,CAC7B,CAAC;gBAEF,eAAe;gBACf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1D,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CAAC,aAAa,EAAE,CAAC;gBAClB,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CAAC,aAAa,EAAE,CAAC;gBAClB,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;gBAC1D,IAAA,eAAM,EAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,uCAAuC,EAAE,GAAG,EAAE;YACrD,IAAA,WAAE,EAAC,4GAA4G,EAAE,GAAG,EAAE;gBACpH,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBAEH,YAAY;gBACZ,MAAM,MAAM,GAAG,IAAA,gFAAqC,EAAC;oBACnD,YAAY;oBACZ,oBAAoB,EAAE,cAAc;oBACpC,kBAAkB,EAAE,CAAC,SAAS,CAAC;iBAChC,CAAC,CAAC;gBAEH,eAAe;gBACf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC;oBACrB,OAAO,EAAE,IAAI;oBACb,oCAAoC,EAAE,EAAE;oBACxC,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBAC3D,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;gBACvE,IAAA,eAAM,EAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;oBACnD,eAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;iBAC5D,CAAC,CAAC;gBACH,IAAA,eAAM,EAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;oBAC1D,eAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;iBAC1D,CAAC,CAAC;gBACH,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,wEAAwE,EAAE,GAAG,EAAE;gBAChF,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBAEH,YAAY;gBACZ,IAAA,gFAAqC,EAAC;oBACpC,YAAY;oBACZ,oBAAoB,EAAE,cAAc;iBACrC,CAAC,CAAC;gBAEH,eAAe;gBACf,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBAC3D,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;gBACvE,IAAA,eAAM,EAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACzD,IAAA,eAAM,EAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;oBAC1D,eAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;iBAC1D,CAAC,CAAC;gBACH,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,yEAAyE,EAAE,GAAG,EAAE;gBACjF,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAC/D,IAAA,oDAAuB,EAAC,YAAY,EAAE;oBACpC,eAAe;oBACf,eAAe;iBAChB,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBAC3D,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;gBAE3B,YAAY;gBACZ,MAAM,MAAM,GAAG,IAAA,gFAAqC,EAAC;oBACnD,YAAY;oBACZ,oBAAoB,EAAE,cAAc;oBACpC,kBAAkB,EAAE,CAAC,SAAS,CAAC;iBAChC,CAAC,CAAC;gBAEH,eAAe;gBACf,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;gBACvE,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC;oBACrB,OAAO,EAAE,IAAI;oBACb,oCAAoC,EAAE,CAAC,SAAS,CAAC;oBACjD,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;gBACH,IAAA,eAAM,EAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACzD,IAAA,eAAM,EAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;oBAC1D,eAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;iBAC1D,CAAC,CAAC;gBACH,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,sEAAsE,EAAE,GAAG,EAAE;gBAC9E,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAE/D,YAAY;gBACZ,MAAM,MAAM,GAAG,IAAA,gFAAqC,EAAC;oBACnD,YAAY;oBACZ,oBAAoB,EAAE,cAAc;iBACrC,CAAC,CAAC;gBAEH,eAAe;gBACf,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC;oBACrB,OAAO,EAAE,KAAK;oBACd,oCAAoC,EAAE,EAAE;oBACxC,MAAM,EAAE,KAAK;iBACd,CAAC,CAAC;gBACH,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CAAC,aAAa,EAAE,CAAC;gBAClB,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CAAC,aAAa,EAAE,CAAC;gBAClB,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,0EAA0E,EAAE,GAAG,EAAE;gBAClF,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;gBAE/D,YAAY;gBACZ,MAAM,MAAM,GAAG,IAAA,gFAAqC,EAAC;oBACnD,YAAY;oBACZ,oBAAoB,EAAE,cAAc;oBACpC,kBAAkB,EAAE,CAAC,SAAS,CAAC;iBAChC,CAAC,CAAC;gBAEH,eAAe;gBACf,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;gBAC3D,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,OAAO,CAAC;oBACrB,OAAO,EAAE,KAAK;oBACd,oCAAoC,EAAE,EAAE;oBACxC,MAAM,EAAE,KAAK;iBACd,CAAC,CAAC;gBACH,IAAA,eAAM,EAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACzD,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CAAC,aAAa,EAAE,CAAC;gBAClB,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CAAC,aAAa,EAAE,CAAC;gBAClB,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;YAClC,IAAI,iBAAyB,CAAC;YAC9B,IAAI,eAAuB,CAAC;YAC5B,IAAI,YAA0B,CAAC;YAE/B,IAAA,mBAAU,EAAC,GAAG,EAAE;gBACd,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAC/C,CAAC;gBAEF,iBAAiB,GAAG,uBAAuB,CAAC;gBAC5C,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAE3D,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;gBACpD,YAAY,GAAG,IAAI,4BAAY,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,uBAAuB,EAAE,GAAG,EAAE;gBACrC,MAAM,cAAc,GAGd;oBACJ;wBACE,YAAY,EAAE,IAAI;wBAClB,mBAAmB,EAAE,IAAI;qBAC1B;oBACD;wBACE,YAAY,EAAE,IAAI;wBAClB,mBAAmB,EAAE,KAAK;qBAC3B;oBACD;wBACE,YAAY,EAAE,KAAK;wBACnB,mBAAmB,EAAE,IAAI;qBAC1B;oBACD;wBACE,YAAY,EAAE,KAAK;wBACnB,mBAAmB,EAAE,KAAK;qBAC3B;iBACF,CAAC;gBAEF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE;oBACpC,IAAA,iBAAQ,EAAC,mBAAmB,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,gCAAgC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE;wBACzI,IAAA,mBAAU,EAAC,GAAG,EAAE;4BACd,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,eAAe,CACxC,OAAO,CAAC,mBAAmB,CAC5B,CAAC;wBACJ,CAAC,CAAC,CAAC;wBAEH,IAAA,kBAAS,EAAC,GAAG,EAAE;4BACb,WAAE,CAAC,eAAe,EAAE,CAAC;wBACvB,CAAC,CAAC,CAAC;wBAEH,IAAA,WAAE,EAAC,oDAAoD,EAAE,GAAG,EAAE;4BAC5D,gBAAgB;4BAChB,MAAM,oBAAoB,GAAG,IAAA,gCAAoB,EAC/C,WAAW,CAAC,YAAY,CAAC,IAAI,EAC7B,WAAW,CAAC,IAAI,EAChB,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,mBAAmB,CAC5B,CAAC;4BACF,MAAM,mBAAmB,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAC1D,IAAI,EACJ,KAAK,CACN,GAAG,CAAC;4BAEL,YAAY;4BACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,SAAS,EAAE,uBAAuB;4BAClC,OAAO,CAAC,YAAY,CACrB,CAAC;4BAEF,eAAe;4BACf,MAAM,mBAAmB,GAAG,IAAI,4BAAY,CAAC,eAAe,CAAC,CAAC;4BAE9D,+CAA+C;4BAC/C,MAAM,aAAa,GACjB,mBAAmB,CAAC,OAAO,CAAC,wBAAwB,CAAC;4BACvD,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;4BACpC,IAAI,CAAC,aAAa,EAAE;gCAClB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;6BAC7C;4BACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BAC9C,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;4BAEnC,qBAAqB;4BACrB,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CACnC,CAAC;4BACF,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;4BAC/B,IAAI,CAAC,QAAQ,EAAE;gCACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;6BACxC;4BACD,IAAA,eAAM,EAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;4BAE5C,gCAAgC;4BAChC,MAAM,MAAM,GAAG,aAAa,CAC1B,QAAQ,CACmB,CAAC;4BAC9B,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;4BAC7B,IAAA,eAAM,EAAC,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;4BACzC,IAAA,eAAM,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;gCAChC,6FAA6F;6BAC9F,CAAC,CAAC;4BACH,IAAA,eAAM,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;4BACvC,IAAA,eAAM,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4BACzC,IAAA,eAAM,EAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;4BAExD,MAAM,UAAU,GAAG,GAAG,QAAQ,UAAU,CAAC;4BACzC,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;4BACzC,IAAA,eAAM,EAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACpC,gCAAgC,CACjC,CAAC;wBACJ,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,sCAAsC,EAAE,GAAG,EAAE;gBACpD,IAAA,iBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;oBACtC,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;wBAC7C,YAAY;wBACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,SAAS,EAAE,uBAAuB;wBAClC,KAAK,CACN,CAAC;wBAEF,eAAe;wBACf,MAAM,oBAAoB,GAAG,IAAI,4BAAY,CAAC,iBAAiB,CAAC,CAAC;wBACjE,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CACvD,oBAAoB,CAAC,OAAO,CAAC,oBAAoB,CAClD,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAA,iBAAQ,EAAC,uBAAuB,EAAE,GAAG,EAAE;oBACrC,MAAM,YAAY,GAAG,IAAI,CAAC;oBAE1B,IAAA,iBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;wBACtC,IAAA,WAAE,EAAC,kDAAkD,EAAE,GAAG,EAAE;4BAC1D,YAAY;4BACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,qBAAqB,EACrB,SAAS,EAAE,uBAAuB;4BAClC,YAAY,CACb,CAAC;4BAEF,eAAe;4BACf,MAAM,oBAAoB,GAAG,IAAI,4BAAY,CAAC,iBAAiB,CAAC,CAAC;4BACjE,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CACvD,oBAAoB,CAAC,OAAO,CAAC,oBAAoB,CAClD,CAAC;wBACJ,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;oBAEH,IAAA,iBAAQ,EAAC,oBAAoB,EAAE,GAAG,EAAE;wBAClC,IAAA,iBAAQ,EAAC,mCAAmC,EAAE,GAAG,EAAE;4BACjD,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;gCAC7C,YAAY;gCACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,qBAAqB,EACrB,SAAS,EAAE,uBAAuB;gCAClC,YAAY,CACb,CAAC;gCAEF,eAAe;gCACf,MAAM,oBAAoB,GAAG,IAAI,4BAAY,CAC3C,iBAAiB,CAClB,CAAC;gCACF,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CACvD,oBAAoB,CAAC,OAAO,CAAC,oBAAoB,CAClD,CAAC;4BACJ,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBAEH,IAAA,iBAAQ,EAAC,+BAA+B,EAAE,GAAG,EAAE;4BAC7C,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;gCAC7C,gBAAgB;gCAChB,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG,EAAE,CAAC;gCAE/C,YAAY;gCACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,qBAAqB,EACrB,SAAS,EAAE,uBAAuB;gCAClC,YAAY,CACb,CAAC;gCAEF,eAAe;gCACf,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;4BAChE,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;wBAEH,IAAA,iBAAQ,EAAC,4BAA4B,EAAE,GAAG,EAAE;4BAC1C,MAAM,oCAAoC,GACxC,0BAA0B,CAAC;4BAC7B,MAAM,sCAAsC,GAC1C,0BAA0B,CAAC;4BAC7B,MAAM,mCAAmC,GACvC,0BAA0B,CAAC;4BAC7B,MAAM,qCAAqC,GACzC,0BAA0B,CAAC;4BAE7B,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;gCACtD,YAAY;gCACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,SAAS,EAAE,uBAAuB;gCAClC,YAAY,CACb,CAAC;gCAEF,eAAe;gCACf,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC;gCAChE,gDAAgD;gCAChD,MAAM,kBAAkB,GAAG;oCACzB,mCAAmC;oCACnC,qCAAqC,EAAE,UAAU;iCAClD,CAAC;gCACF,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE;oCACpC,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO;yCAC5C,oBAAoB,EAAE,CAAC,GAAG,CAAyB,CAAC;oCACvD,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;oCACzC,IAAA,eAAM,EAAC,OAAO,kBAAkB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oCACrD,MAAM,aAAa,GAAG,kBAAkB,CAAC,aAAa,IAAI,EAAE,CAAC;oCAC7D,IAAA,eAAM,EAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,IAAI,CACjD,mBAAmB,CACpB,CAAC;oCACF,IAAA,eAAM,EAAC,aAAa,CAAC,6BAA6B,CAAC,CAAC,IAAI,CACtD,MAAM,CACP,CAAC;iCACH;4BACH,CAAC,CAAC,CAAC;4BAEH,IAAA,WAAE,EAAC,mDAAmD,EAAE,GAAG,EAAE;gCAC3D,YAAY;gCACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,SAAS,EAAE,uBAAuB;gCAClC,YAAY,CACb,CAAC;gCAEF,eAAe;gCACf,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,WAAW,EAAE,CAAC;gCAEhE,6CAA6C;gCAC7C,MAAM,uBAAuB,GAAG,YAAY,CAAC,OAAO;qCACjD,oBAAoB,EAAE,CACvB,oCAAoC,CACb,CAAC;gCAC1B,IAAA,eAAM,EAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;gCAC9C,IAAA,eAAM,EAAC,OAAO,uBAAuB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gCAC1D,IAAA,eAAM,EACJ,uBAAuB,CAAC,aAAa;oCACnC,EAAE,wBAAwB,CAC7B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gCAChB,IAAA,eAAM,EACJ,uBAAuB,CAAC,aAAa;oCACnC,EAAE,6BAA6B,CAClC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gCAEd,+CAA+C;gCAC/C,MAAM,yBAAyB,GAAG,YAAY,CAAC,OAAO;qCACnD,oBAAoB,EAAE,CACvB,sCAAsC,CACf,CAAC;gCAC1B,IAAA,eAAM,EAAC,yBAAyB,CAAC,CAAC,WAAW,EAAE,CAAC;gCAChD,IAAA,eAAM,EAAC,OAAO,yBAAyB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gCAC5D,IAAA,eAAM,EACJ,yBAAyB,CAAC,aAAa;oCACrC,EAAE,wBAAwB,CAC7B,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gCAC5B,IAAA,eAAM,EACJ,yBAAyB,CAAC,aAAa;oCACrC,EAAE,6BAA6B,CAClC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAChB,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;gBACjC,IAAA,WAAE,EAAC,+FAA+F,EAAE,GAAG,EAAE;oBACvG,gBAAgB;oBAChB,MAAM,oBAAoB,GACxB,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAC5C,yBAAyB,CAC1B,CAAC;oBACJ,IACE,CAAC,oBAAoB;wBACrB,OAAO,oBAAoB,KAAK,QAAQ,EACxC;wBACA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;qBACxD;oBACD,oBAAoB,CAAC,KAAK,GAAG;wBAC3B;4BACE,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,sBAAsB;yBAChC;qBACF,CAAC;oBAEF,YAAY;oBACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,oCAAoC,CACrC,CAAC;oBAEF,eAAe;oBACf,IAAA,eAAM,EAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;wBACzC;4BACE,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,sBAAsB;yBAChC;qBACF,CAAC,CAAC;oBACH,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CAAC,aAAa,EAAE,CAAC;oBAClB,IAAA,eAAM,EACJ,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CAAC,aAAa,EAAE,CAAC;gBACpB,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,mGAAmG,EAAE,GAAG,EAAE;oBAC3G,gBAAgB;oBAChB,MAAM,mBAAmB,GAAG,IAAA,oDAAuB,EAAC,YAAY,EAAE;wBAChE,eAAe;wBACf,eAAe;qBAChB,CAAC,CAAC;oBACH,MAAM,wBAAwB,GAC5B,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAC5C,mBAAmB,CAAC,sBAAsB,CAC3C,CAAC;oBACJ,IACE,CAAC,wBAAwB;wBACzB,OAAO,wBAAwB,KAAK,QAAQ,EAC5C;wBACA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;qBACxD;oBACD,wBAAwB,CAAC,KAAK,GAAG;wBAC/B;4BACE,KAAK,EAAE,KAAK;4BACZ,OAAO,EAAE,sBAAsB;yBAChC;qBACF,CAAC;oBAEF,YAAY;oBACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,oCAAoC,CACrC,CAAC;oBAEF,eAAe;oBACf,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAClB,MAAM,uBAAuB,GAC3B,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAC5C,yBAAyB,CAC1B,CAAC;oBACJ,IAAA,eAAM,EACJ,OAAO,uBAAuB,KAAK,QAAQ;wBACzC,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;4BAC9C,OAAO,IAAI,CAAC,OAAO,KAAK,sBAAsB,CAAC;wBACjD,CAAC,CAAC;wBACJ,CAAC,CAAC,EAAE,CACP,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,iEAAiE,EAAE,GAAG,EAAE;oBACzE,YAAY;oBACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,oCAAoC,CACrC,CAAC;oBACF,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,oCAAoC,CACrC,CAAC;oBAEF,eAAe;oBACf,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,6BAA6B,CACnD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAClB,IAAA,eAAM,EACJ,yBAAyB,CACvB,YAAY,CAAC,OAAO,CAAC,+BAA+B,CACrD,CACF,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAElB,MAAM,oBAAoB,GACxB,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAC5C,yBAAyB,CAC1B,CAAC;oBACJ,IAAA,eAAM,EACJ,OAAO,oBAAoB,KAAK,QAAQ;wBACtC,CAAC,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;4BAC3C,OAAO,IAAI,CAAC,OAAO,KAAK,sBAAsB,CAAC;wBACjD,CAAC,CAAC;wBACJ,CAAC,CAAC,EAAE,CACP,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,4CAA4C,EAAE,GAAG,EAAE;oBACpD,YAAY;oBACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,oCAAoC,CACrC,CAAC;oBAEF,eAAe;oBACf,iBAAiB;oBACjB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACnD,0BAA0B,CACR,CAAC;oBACrB,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC7B,IAAI,CAAC,MAAM,EAAE;wBACX,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;qBACxC;oBAED,kDAAkD;oBAClD,IAAA,eAAM,EAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;wBAChD,eAAM,CAAC,gBAAgB,CAAC;4BACtB,KAAK,EAAE,eAAM,CAAC,GAAG,CAAC,MAAM,CAAW;4BACnC,OAAO,EAAE,QAAQ;yBAClB,CAAC;qBACH,CAAC,CAAC;oBAEH,iEAAiE;oBACjE,MAAM,4BAA4B,GAChC,YAAY,CAAC,OAAO,CAAC,6BAA6B,CAAC;oBACrD,IAAA,eAAM,EAAC,4BAA4B,CAAC,CAAC,WAAW,EAAE,CAAC;oBACnD,IAAI,CAAC,4BAA4B,EAAE;wBACjC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;qBAC/D;oBACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;oBAC7D,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBACnC,oEAAoE;oBACpE,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;oBACjD,0FAA0F;oBAC1F,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;oBAEzD,IAAA,eAAM,EAAC,4BAA4B,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;wBAC5D,GAAG,EAAE,+BAA+B;wBACpC,aAAa,EAAE,8CAA8C;wBAC7D,WAAW,EAAE;4BACX,IAAI,EAAE,sBAAsB;4BAC5B,cAAc,EAAE,OAAO;yBACxB;qBACF,CAAC,CAAC;oBACH,IAAA,eAAM,EAAC,4BAA4B,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACxD,8CAA8C,CAC/C,CAAC;oBAEF,sDAAsD;oBACtD,MAAM,0BAA0B,GAC9B,YAAY,CAAC,OAAO,CAAC,+BAA+B,CAAC;oBACvD,IAAA,eAAM,EAAC,0BAA0B,CAAC,CAAC,WAAW,EAAE,CAAC;oBACjD,IAAI,CAAC,0BAA0B,EAAE;wBAC/B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;qBACjE;oBACD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;oBAC1D,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAClC,qEAAqE;oBACrE,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;oBAChD,2FAA2F;oBAC3F,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;oBACxD,IAAA,eAAM,EAAC,0BAA0B,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;wBACzD,GAAG,EAAE,iCAAiC;wBACtC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;wBACtB,eAAe,EAAE,8CAA8C;wBAC/D,WAAW,EAAE,QAAQ;qBACtB,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,gDAAgD,EAAE,GAAG,EAAE;oBACxD,gBAAgB;oBAChB,MAAM,mBAAmB,GAAG,IAAA,oDAAuB,EAAC,YAAY,EAAE;wBAChE,eAAe;wBACf,eAAe;qBAChB,CAAC,CAAC;oBAEH,YAAY;oBACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,oCAAoC,CACrC,CAAC;oBAEF,eAAe;oBACf,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;oBAC3D,MAAM,gBAAgB,GAAG,eAAe,CACtC,YAAY,EACZ,cAAc,CACf,CAAC;oBACF,IAAA,eAAM,EAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;wBACnD,eAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;qBAC/C,CAAC,CAAC;oBACH,IAAA,eAAM,EAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAEhE,MAAM,wBAAwB,GAC5B,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAC5C,mBAAmB,CAAC,sBAAsB,CAC3C,CAAC;oBACJ,IAAA,eAAM,EACJ,OAAO,wBAAwB,KAAK,QAAQ;wBAC1C,CAAC,CAAC,wBAAwB,EAAE,KAAK;wBACjC,CAAC,CAAC,SAAS,CACd,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,6DAA6D,EAAE,GAAG,EAAE;oBACrE,gBAAgB;oBAChB,2EAA2E;oBAC3E,MAAM,SAAS,GAAG,0BAA0B,CAAC;oBAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACnD,SAAS,CACS,CAAC;oBACrB,IAAI,MAAM,EAAE;wBACV,2DAA2D;wBAC3D,OAAO,MAAM,CAAC,0BAA0B,CAAC;qBAC1C;oBAED,YAAY;oBACZ,YAAY,CAAC,kBAAkB,CAC7B,WAAW,EACX,SAAS,EACT,oCAAoC,CACrC,CAAC;oBAEF,eAAe;oBACf,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAC1D,SAAS,CACS,CAAC;oBACrB,IAAA,eAAM,EAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC/D,IAAA,eAAM,EAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC;wBACvD,eAAM,CAAC,gBAAgB,CAAC;4BACtB,KAAK,EAAE,eAAM,CAAC,GAAG,CAAC,MAAM,CAAW;4BACnC,OAAO,EAAE,QAAQ;yBAClB,CAAC;qBACH,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,yBAAyB,EAAE,GAAG,EAAE;YACvC,IAAA,iBAAQ,EAAC,uBAAuB,EAAE,GAAG,EAAE;gBACrC,IAAA,WAAE,EAAC,yBAAyB,EAAE,GAAG,EAAE;oBACjC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;oBAEjD,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBAE9D,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;gBAChC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,kBAAkB,EAAE,GAAG,EAAE;gBAChC,IAAA,WAAE,EAAC,yBAAyB,EAAE,GAAG,EAAE;oBACjC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAE/D,YAAY;oBACZ,MAAM,KAAK,GACT,YAAY,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;oBAE5D,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;gBAChC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,mCAAmC,EAAE,GAAG,EAAE;gBACjD,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,OAAO,EAAE;4BACP,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE,SAAS;yBACvB;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBAE9D,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,4BAA4B,EAAE,GAAG,EAAE;gBAC1C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,OAAO,EAAE;4BACP,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE,SAAS;yBACvB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;oBAEtD,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBAE9D,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,qCAAqC,EAAE,GAAG,EAAE;gBACnD,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,OAAO,EAAE;4BACP,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE,oBAAoB;iCAC5B;6BACF;yBACF;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBAE9D,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,iCAAiC,EAAE,GAAG,EAAE;gBAC/C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,OAAO,EAAE;4BACP,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE,iBAAiB;iCACzB;6BACF;yBACF;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE;4BACjB,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE,SAAS;yBACjB;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBAE9D,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,0BAA0B,EAAE,GAAG,EAAE;gBACxC,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,0BAA0B,CAAC,CAAC;oBAElE,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBAE9D,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;gBACtC,IAAI,YAA0B,CAAC;gBAE/B,IAAA,mBAAU,EAAC,GAAG,EAAE;oBACd,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBACzD,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,aAAa,EAAE;4BACb,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE,iBAAiB;iCACzB;6BACF;yBACF;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE;4BACjB,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE;gCACL;oCACE,KAAK,EAAE,UAAU;iCAClB;6BACF;yBACF;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG;wBAClC,UAAU,EAAE;4BACV,GAAG,EAAE,cAAc;4BACnB,OAAO,EAAE,cAAc;yBACxB;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,IAAA,iBAAQ,EAAC,oCAAoC,EAAE,GAAG,EAAE;oBAClD,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;wBACnC,gBAAgB;wBAChB,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;wBAE9C,YAAY;wBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;wBAElE,eAAe;wBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5B,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAA,iBAAQ,EAAC,gCAAgC,EAAE,GAAG,EAAE;oBAC9C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;wBACnC,gBAAgB;wBAChB,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;wBAEvC,YAAY;wBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;wBAElE,eAAe;wBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5B,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAA,iBAAQ,EAAC,8BAA8B,EAAE,GAAG,EAAE;oBAC5C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;wBACnC,gBAAgB;wBAChB,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG;4BAClC,UAAU,EAAE,gBAAgB;yBAC7B,CAAC;wBAEF,YAAY;wBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;wBAElE,eAAe;wBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5B,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACzC,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;wBACnC,gBAAgB;wBAChB,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG;4BAClC,UAAU,EAAE;gCACV,GAAG,EAAE,cAAc;6BACpB;yBACF,CAAC;wBAEF,YAAY;wBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;wBAElE,eAAe;wBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5B,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAA,iBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACzC,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;wBACnC,gBAAgB;wBAChB,YAAY,CAAC,OAAO,CAAC,gBAAgB,GAAG;4BACtC,cAAc,EAAE,gBAAgB;yBACjC,CAAC;wBAEF,YAAY;wBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;wBAElE,eAAe;wBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5B,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAA,iBAAQ,EAAC,gCAAgC,EAAE,GAAG,EAAE;oBAC9C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;wBACnC,gBAAgB;wBAChB,YAAY,CAAC,OAAO,CAAC,gBAAgB,GAAG;4BACtC,cAAc,EAAE;gCACd,GAAG,EAAE,kBAAkB;gCACvB,IAAI,EAAE,SAA8B;gCACpC,UAAU,EAAE,aAAa;6BAC1B;yBACF,CAAC;wBAEF,YAAY;wBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;wBAElE,eAAe;wBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5B,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAA,iBAAQ,EAAC,sBAAsB,EAAE,GAAG,EAAE;oBACpC,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;wBAC5C,gBAAgB;wBAChB,YAAY,CAAC,OAAO,CAAC,gBAAgB,GAAG;4BACtC,cAAc,EAAE;gCACd,GAAG,EAAE,kBAAkB;gCACvB,IAAI,EAAE,YAAY;gCAClB,UAAU,EAAE,aAAa;6BAC1B;yBACF,CAAC;wBAEF,YAAY;wBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;wBAElE,eAAe;wBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC;4BACpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC;yBAC9C,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,0BAA0B,EAAE,GAAG,EAAE;gBACxC,IAAA,WAAE,EAAC,oDAAoD,EAAE,GAAG,EAAE;oBAC5D,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,aAAa,EAAE;4BACb,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,aAAa;yBACpB;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;oBAElE,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,GAAG,EAAE;oBAC1D,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,aAAa,EAAE;4BACb,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,aAAa;4BACnB,4BAA4B,EAAE,EAAE;yBACjC;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;oBAElE,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;oBACvD,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,aAAa,EAAE;4BACb,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,aAAa;4BACnB,4BAA4B,EAAE;gCAC5B;oCACE,KAAK,EAAE,eAAe;iCACvB;6BACF;yBACF;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;oBAElE,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,yDAAyD,EAAE,GAAG,EAAE;oBACjE,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,aAAa,EAAE;4BACb,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,aAAa;4BACnB,4BAA4B,EAAE;gCAC5B;oCACE,KAAK,EAAE,WAAW;iCACnB;6BACF;yBACF;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,kCAAkC,GAAG;wBACxD,WAAW,EAAE;4BACX,GAAG,EAAE,oCAAoC;4BACzC,IAAI,EAAE,SAA8B;4BACpC,UAAU,EAAE,aAAa;yBAC1B;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;oBAElE,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;oBACvD,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBAEtE,yEAAyE;oBACzE,uBAAuB;oBACvB,uBAAuB;oBACvB,EAAE;oBACF,iCAAiC;oBACjC,uBAAuB;oBACvB,EAAE;oBACF,iFAAiF;oBACjF,4CAA4C;oBAC5C,qFAAqF;oBAErF,2CAA2C;oBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,YAAY,CAAC,OAAO,EACpB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,oBAAoB,CACrB,CAAC;oBACF,IAAA,eAAM,EAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAE3C,2CAA2C;oBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CACxB,YAAY,CAAC,OAAO,EACpB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,oBAAoB,CACrB,CAAC;oBACF,IAAA,eAAM,EAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAE3C,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBAE9D,eAAe;oBACf,eAAe;oBACf,qGAAqG;oBACrG,EAAE;oBACF,+BAA+B;oBAC/B,+EAA+E;oBAC/E,EAAE;oBACF,oCAAoC;oBACpC,wBAAwB;oBACxB,oCAAoC;oBACpC,kDAAkD;oBAClD,iFAAiF;oBACjF,EAAE;oBACF,yHAAyH;oBACzH,8IAA8I;oBAE9I,qCAAqC;oBACrC,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,0DAA0D,EAAE,GAAG,EAAE;oBAClE,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBAEtE,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;oBAE9D,eAAe;oBACf,8EAA8E;oBAC9E,mEAAmE;oBACnE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBACjE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;oBACpE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;oBACpE,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CACpC,kBAAkB,EAClB,gBAAgB,CACjB,CAAC;oBAEF,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;oBACnE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;oBAEnE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAClC,YAAY,CAAC,OAAO,EACpB,qBAAqB,CACtB,CAAC;oBAEF,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAClD,CAAC;oBACF,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAClD,CAAC;oBACF,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CACP,kBAAkB,EAClB,qCAAqC,CACtC,CACF,CAAC;oBACF,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;oBACpE,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC;oBAEpE,gBAAgB;oBAChB,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,kDAAkD,CACnD,CAAC;oBACF,2BAA2B;oBAC3B,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,kHAAkH,CACnH,CAAC;oBACF,2CAA2C;oBAC3C,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,wDAAwD,CACzD,CAAC;oBACF,gDAAgD;oBAChD,oBAAoB;oBAEpB,+BAA+B;oBAC/B,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAClD,CAAC;oBACF,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAClD,CAAC;oBACF,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CACP,kBAAkB,EAClB,uCAAuC,CACxC,CACF,CAAC;oBACF,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,SAAS,CACrB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CACtD,CAAC;oBACF,eAAe;oBACf,qGAAqG;oBACrG,EAAE;oBACF,+BAA+B;oBAC/B,+EAA+E;oBAC/E,EAAE;oBACF,oCAAoC;oBACpC,wBAAwB;oBACxB,oCAAoC;oBACpC,kDAAkD;oBAClD,iFAAiF;oBACjF,EAAE;oBACF,yHAAyH;oBACzH,8IAA8I;oBAE9I,2BAA2B;oBAC3B,eAAe;oBACf,4BAA4B;oBAC5B,iBAAiB;oBACjB,sBAAsB;oBACtB,yBAAyB;oBACzB,4BAA4B;oBAC5B,OAAO;oBACP,KAAK;oBAEL,wDAAwD;oBACxD,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAG,EAAE;YAC3C,IAAA,iBAAQ,EAAC,+BAA+B,EAAE,GAAG,EAAE;gBAC7C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG,SAAS,CAAC;oBAErC,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;wBACrD,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,iCAAiC,EAAE,GAAG,EAAE;gBAC/C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG;wBACzB;4BACE,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE;4BACjB,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE,SAAS;yBACjB;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;wBACrD,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAG,EAAE;gBAC3C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG;wBACzB;4BACE,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE;4BACjB,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE,EAAE;yBACV;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;wBACrD,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,+BAA+B,EAAE,GAAG,EAAE;gBAC7C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG;wBACzB;4BACE,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE,mBAAmB;qBACvC,CAAC;oBAEF,gDAAgD;oBAChD,IAAA,eAAM,EAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;oBAEnC,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;wBACrD,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,+BAA+B,EAAE,GAAG,EAAE;gBAC7C,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG;wBACzB;4BACE,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE;4BACjB,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE,EAAE;yBACV;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;wBACrD,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,yCAAyC,EAAE,GAAG,EAAE;gBACvD,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG;wBACzB;4BACE,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE;4BACjB,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE;gCACL;oCACE,KAAK,EAAE,UAAU;iCAClB;6BACF;yBACF;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG;wBAClC,UAAU,EAAE;4BACV,GAAG,EAAE,cAAc;4BACnB,OAAO,EAAE,cAAc;yBACxB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,gBAAgB,GAAG;wBACtC,cAAc,EAAE,mBAAmB;qBACpC,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;wBACrD,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,wCAAwC,EAAE,GAAG,EAAE;gBACtD,IAAA,WAAE,EAAC,mBAAmB,EAAE,GAAG,EAAE;oBAC3B,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG;wBACzB;4BACE,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE;4BACjB,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE;gCACL;oCACE,KAAK,EAAE,UAAU;iCAClB;6BACF;yBACF;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG;wBAClC,UAAU,EAAE;4BACV,GAAG,EAAE,cAAc;4BACnB,OAAO,EAAE,cAAc;yBACxB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,gBAAgB,GAAG;wBACtC,cAAc,EAAE;4BACd,GAAG,EAAE,kBAAkB;4BACvB,IAAI,EAAE,SAA8B;4BACpC,UAAU,EAAE,aAAa;yBAC1B;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;wBACrD,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,gDAAgD,EAAE,GAAG,EAAE;gBAC9D,IAAA,WAAE,EAAC,mBAAmB,EAAE,GAAG,EAAE;oBAC3B,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG;wBACzB;4BACE,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG;wBAC1C,iBAAiB,EAAE;4BACjB,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE;gCACL;oCACE,KAAK,EAAE,UAAU;iCAClB;6BACF;yBACF;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,YAAY,GAAG;wBAClC,UAAU,EAAE;4BACV,GAAG,EAAE,cAAc;4BACnB,OAAO,EAAE,cAAc;yBACxB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,gBAAgB,GAAG;wBACtC,cAAc,EAAE;4BACd,GAAG,EAAE,kBAAkB;4BACvB,IAAI,EAAE,0BAA0B;4BAChC,UAAU,EAAE,aAAa;yBAC1B;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;wBACrD,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC;wBACpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,wBAAwB,CAAC;qBAC1D,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;gBAChD,gBAAgB;gBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;gBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;gBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;gBAErB,YAAY;gBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,CAAC;oBACrD,EAAE,EAAE,cAAc;oBAClB,GAAG,EAAE,YAAY;iBAClB,CAAC,CAAC;gBAEH,eAAe;gBACf,gHAAgH;gBAChH,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC;oBACpB,iBAAiB;oBACjB,kDAAkD;oBAElD,uCAAuC;oBACvC,oBAAoB;oBAEpB,2BAA2B;oBAC3B,kHAAkH;oBAElH,2CAA2C;oBAC3C,wDAAwD;oBAExD,IAAI,CAAC,IAAI,CACP,YAAY,CAAC,OAAO,EACpB,SAAS,EACT,cAAc,EACd,kBAAkB,CACnB;oBACD,IAAI,CAAC,IAAI,CACP,YAAY,CAAC,OAAO,EACpB,SAAS,EACT,cAAc,EACd,qCAAqC,CACtC;oBACD,IAAI,CAAC,IAAI,CACP,YAAY,CAAC,OAAO,EACpB,SAAS,EACT,cAAc,EACd,kBAAkB,CACnB;oBACD,IAAI,CAAC,IAAI,CACP,YAAY,CAAC,OAAO,EACpB,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,oBAAoB,CACrB;oBACD,IAAI,CAAC,IAAI,CACP,YAAY,CAAC,OAAO,EACpB,qBAAqB,EACrB,kBAAkB,CACnB;oBACD,IAAI,CAAC,IAAI,CACP,YAAY,CAAC,OAAO,EACpB,SAAS,EACT,cAAc,EACd,uCAAuC,CACxC;iBACF,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,8BAA8B,EAAE,GAAG,EAAE;YAC5C,IAAA,iBAAQ,EAAC,iCAAiC,EAAE,GAAG,EAAE;gBAC/C,IAAA,WAAE,EAAC,yBAAyB,EAAE,GAAG,EAAE;oBACjC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG,SAAS,CAAC;oBAErC,YAAY;oBACZ,MAAM,UAAU,GACd,YAAY,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;oBAE1D,eAAe;oBACf,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAG,EAAE;gBAC3C,IAAA,WAAE,EAAC,yBAAyB,EAAE,GAAG,EAAE;oBACjC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG,EAAE,CAAC;oBAE9B,YAAY;oBACZ,MAAM,UAAU,GACd,YAAY,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;oBAE1D,eAAe;oBACf,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,0CAA0C,EAAE,GAAG,EAAE;gBACxD,IAAA,WAAE,EAAC,kBAAkB,EAAE,GAAG,EAAE;oBAC1B,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,WAAW,GAAG;wBACzB;4BACE,KAAK,EAAE,iBAAiB;yBACzB;qBACF,CAAC;oBACF,YAAY,CAAC,OAAO,CAAC,oBAAoB,GAAG,EAAE,CAAC;oBAE/C,YAAY;oBACZ,MAAM,UAAU,GACd,YAAY,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;oBAE1D,eAAe;oBACf,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,sCAAsC,EAAE,GAAG,EAAE;gBACpD,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;oBACvC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBAErB,YAAY;oBACZ,MAAM,UAAU,GACd,YAAY,CAAC,4BAA4B,CAAC,YAAY,CAAC,CAAC;oBAE1D,eAAe;oBACf,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,OAAO,CAAC;wBACzB,EAAE,EAAE,0BAA0B;wBAC9B,GAAG,EAAE;4BACH,GAAG,EAAE,sBAAsB;4BAC3B,KAAK,EAAE,EAAE;4BACT,eAAe,EAAE,UAAU;4BAC3B,kCAAkC,EAAE,CAAC;yBACtC;qBACF,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,mCAAmC,EAAE,GAAG,EAAE;YACjD,IAAA,iBAAQ,EAAC,6CAA6C,EAAE,GAAG,EAAE;gBAC3D,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,4BAA4B,GAAG,SAAS,CAAC;oBAEtD,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,iCAAiC,CAAC;wBAC3D,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,yCAAyC,EAAE,GAAG,EAAE;gBACvD,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAG,EAAE;oBACnC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;oBAC/D,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBACrB,YAAY,CAAC,4BAA4B,GAAG,EAAE,CAAC;oBAE/C,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,iCAAiC,CAAC;wBAC3D,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,6CAA6C,EAAE,GAAG,EAAE;gBAC3D,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;oBACrC,gBAAgB;oBAChB,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,8BAA8B,CAAC,CAAC;oBACtE,MAAM,cAAc,GAAG,0BAA0B,CAAC;oBAClD,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACzD,cAAc,CACI,CAAC;oBAErB,sDAAsD;oBACtD,YAAY,CAAC,4BAA4B,GAAG;wBAC1C,GAAG,CAAC,YAAY,CAAC,4BAA4B,IAAI,EAAE,CAAC;wBACpD;4BACE,KAAK,EAAE,mBAAmB;yBAC3B;qBACF,CAAC;oBAEF,YAAY;oBACZ,MAAM,KAAK,GAAG,YAAY,CAAC,iCAAiC,CAAC;wBAC3D,EAAE,EAAE,cAAc;wBAClB,GAAG,EAAE,YAAY;qBAClB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CACzB,IAAI,CAAC,IAAI,CACP,YAAY,CAAC,OAAO,EACpB,SAAS,EACT,aAAa,EACb,qBAAqB,CACtB,CACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,wBAAwB,EAAE,GAAG,EAAE;YACtC,IAAI,iBAAyB,CAAC;YAC9B,IAAI,eAAuB,CAAC;YAC5B,IAAI,YAA0B,CAAC;YAE/B,IAAA,mBAAU,EAAC,GAAG,EAAE;gBACd,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CACpD,CAAC;gBAEF,iBAAiB,GAAG,uBAAuB,CAAC;gBAC5C,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAE3D,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;gBACpD,YAAY,GAAG,IAAI,4BAAY,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,0BAA0B,EAAE,GAAG,EAAE;gBACxC,IAAA,WAAE,EAAC,qBAAqB,EAAE,GAAG,EAAE;oBAC7B,YAAY;oBACZ,YAAY,CAAC,sBAAsB,CAAC;wBAClC,aAAa,EAAE,WAAW;wBAC1B,UAAU,EAAE,mBAAmB;wBAC/B,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;oBAEH,eAAe;oBACf,sDAAsD;oBACtD,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,aAAa,EAAE,CAAC;gBACxE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,6CAA6C,EAAE,GAAG,EAAE;gBAC3D,IAAA,mBAAU,EAAC,GAAG,EAAE;oBACd,sDAAsD;oBACtD,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,YAAY,EAAE;4BACZ,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,YAAY;4BAClB,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE,uBAAuB;oCAC9B,OAAO,EAAE,gCAAgC;iCAC1C;6BACF;yBACF;qBACF,CAAC;oBAEF,YAAY,CAAC,OAAO,CAAC,wBAAwB,GAAG;wBAC9C,uBAAuB,EAAE;4BACvB,GAAG,EAAE,0BAA0B;4BAC/B,WAAW,EAAE,+BAA+B;4BAC5C,eAAe,EAAE,UAAU;4BAC3B,KAAK,EAAE,EAAE;4BACT,UAAU,EAAE,EAAE;4BACd,WAAW,EAAE,EAAE;4BACf,kCAAkC,EAAE,CAAC;4BACrC,SAAS,EAAE,SAAS;yBACrB;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,8DAA8D,EAAE,GAAG,EAAE;oBACtE,YAAY;oBACZ,YAAY,CAAC,sBAAsB,CAAC;wBAClC,aAAa,EAAE,WAAW;wBAC1B,UAAU,EAAE,YAAY;wBACxB,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;oBAEH,eAAe;oBACf,2DAA2D;oBAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,YAAY,CAAC,OAAO,CAAC,wBAAwB,IAAI,EAAE,CACpD,CAAC;oBACF,IAAA,eAAM,EACJ,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CACvD,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAElB,+DAA+D;oBAC/D,MAAM,YAAY,GAChB,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAC7C,uBAAuB,CACxB,CAAC;oBACJ,IAAA,eAAM,EAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;oBACnC,IAAA,eAAM,EACH,YAAyC,EAAE,WAAW,CACxD,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,8BAA8B,EAAE,GAAG,EAAE;gBAC5C,IAAA,mBAAU,EAAC,GAAG,EAAE;oBACd,sDAAsD;oBACtD,YAAY,CAAC,OAAO,CAAC,eAAe,GAAG;wBACrC,UAAU,EAAE;4BACV,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE,kBAAkB;oCACzB,OAAO,EAAE,gCAAgC;iCAC1C;gCACD;oCACE,KAAK,EAAE,aAAa;oCACpB,OAAO,EAAE,SAAS;iCACnB;6BACF;yBACF;wBACD,UAAU,EAAE;4BACV,GAAG,EAAE,iBAAiB;4BACtB,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE;gCACX;oCACE,KAAK,EAAE,kBAAkB;oCACzB,OAAO,EAAE,gCAAgC;iCAC1C;6BACF;yBACF;qBACF,CAAC;oBAEF,4DAA4D;oBAC5D,YAAY,CAAC,OAAO,CAAC,wBAAwB,GAAG;wBAC9C,aAAa,EAAE;4BACb,GAAG,EAAE,0BAA0B;4BAC/B,WAAW,EAAE,cAAc;4BAC3B,eAAe,EAAE,UAAU;4BAC3B,KAAK,EAAE,EAAE;4BACT,UAAU,EAAE,EAAE;4BACd,WAAW,EAAE,EAAE;4BACf,kCAAkC,EAAE,CAAC;4BACrC,SAAS,EAAE,SAAS;yBACrB;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,IAAA,WAAE,EAAC,gEAAgE,EAAE,GAAG,EAAE;oBACxE,YAAY;oBACZ,YAAY,CAAC,sBAAsB,CAAC;wBAClC,aAAa,EAAE,WAAW;wBAC1B,UAAU,EAAE,SAAS;wBACrB,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;oBAEH,eAAe;oBACf,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACpD,UAAU,CACQ,CAAC;oBACrB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CACpD,UAAU,CACQ,CAAC;oBAErB,2EAA2E;oBAC3E,IAAA,eAAM,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,OAAO,CACtC,eAAM,CAAC,eAAe,CAAC;wBACrB,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;qBACvD,CAAC,CACH,CAAC;oBACF,IAAA,eAAM,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC,OAAO,CAClC,eAAM,CAAC,eAAe,CAAC;wBACrB,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;qBAClD,CAAC,CACH,CAAC;oBAEF,0DAA0D;oBAC1D,IAAA,eAAM,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,OAAO,CACtC,eAAM,CAAC,eAAe,CAAC;wBACrB,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;qBACvD,CAAC,CACH,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,mCAAmC,EAAE,GAAG,EAAE;YACjD,IAAI,YAA0B,CAAC;YAE/B,IAAA,mBAAU,EAAC,GAAG,EAAE;gBACd,YAAY,GAAG,IAAI,4BAAY,CAAC,uBAAuB,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,0BAA0B,EAAE,GAAG,EAAE;gBACxC,IAAA,WAAE,EAAC,2CAA2C,EAAE,GAAG,EAAE;oBACnD,qBAAqB;oBACrB,IAAA,eAAM,EAAC,GAAG,EAAE;wBACV,YAAY,CAAC,sBAAsB,CAAC;4BAClC,aAAa,EAAE,WAAW;4BAC1B,UAAU,EAAE,mBAAmB;4BAC/B,YAAY,EAAE,IAAI;yBACnB,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,qCAAqC,EAAE,GAAG,EAAE;YACnD,IAAI,iBAAyB,CAAC;YAC9B,IAAI,eAAuB,CAAC;YAC5B,IAAI,YAA0B,CAAC;YAE/B,IAAA,mBAAU,EAAC,GAAG,EAAE;gBACd,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CACjD,CAAC;gBAEF,iBAAiB,GAAG,uBAAuB,CAAC;gBAC5C,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAE3D,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;gBACpD,YAAY,GAAG,IAAI,4BAAY,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,wDAAwD,EAAE,GAAG,EAAE;gBACtE,IAAA,WAAE,EAAC,gEAAgE,EAAE,GAAG,EAAE;oBACxE,gBAAgB;oBAChB,oEAAoE;oBACpE,OAAO,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC;oBACrD,MAAM,SAAS,GAAG,0BAA0B,CAAC;oBAE7C,YAAY;oBACZ,MAAM,YAAY,GAAG,YAAY,CAAC,mBAAmB,CACnD,SAAS,EACT,aAAa,EACb,aAAa,EACb,CAAC,WAAW,CAAC,CACd,CAAC;oBAEF,eAAe;oBACf,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,WAAW,EAAE,CAAC;oBACpE,IAAA,eAAM,EAAC,YAAY,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;oBAEhD,MAAM,UAAU,GACd,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,YAAY,CAAC,CAAC;oBAChE,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;oBACjC,IAAA,eAAM,EAAC,OAAO,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,4BAA4B,EAAE,GAAG,EAAE;gBAC1C,IAAA,WAAE,EAAC,uDAAuD,EAAE,GAAG,EAAE;oBAC/D,gBAAgB;oBAChB,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;oBAE9C,YAAY;oBACZ,MAAM,YAAY,GAAG,YAAY,CAAC,mBAAmB,CACnD,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,EAAE,CACH,CAAC;oBAEF,eAAe;oBACf,IAAA,eAAM,EAAC,YAAY,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;oBAEhD,4DAA4D;oBAC5D,MAAM,UAAU,GACd,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,YAAY,CAAC,CAAC;oBAChE,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;oBAEjC,8EAA8E;oBAC9E,MAAM,MAAM,GACV,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,gBAAgB,CAAC,CAAC;oBAC3D,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,sCAAsC,EAAE,GAAG,EAAE;gBACpD,IAAA,WAAE,EAAC,2EAA2E,EAAE,GAAG,EAAE;oBACnF,gBAAgB;oBAChB,MAAM,SAAS,GAAG,0BAA0B,CAAC;oBAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC;oBACjE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;wBACxC,gDAAgD;wBAChD,MAAM,wBAAwB,GAAG,MAEhC,CAAC;wBACF,OAAO,wBAAwB,CAAC,WAAW,CAAC;qBAC7C;oBAED,YAAY;oBACZ,MAAM,YAAY,GAAG,YAAY,CAAC,mBAAmB,CACnD,SAAS,EACT,aAAa,EACb,aAAa,EACb,EAAE,CACH,CAAC;oBAEF,eAAe;oBACf,IAAA,eAAM,EAAC,YAAY,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;oBAEhD,gCAAgC;oBAChC,MAAM,UAAU,GACd,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,YAAY,CAAC,CAAC;oBAChE,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;oBAEjC,gEAAgE;oBAChE,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAC1D,SAAS,CACqB,CAAC;oBACjC,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;oBACpC,IAAA,eAAM,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;gBACrD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,wCAAwC,EAAE,GAAG,EAAE;YACtD,IAAI,iBAAyB,CAAC;YAC9B,IAAI,eAAuB,CAAC;YAC5B,IAAI,YAA0B,CAAC;YAE/B,IAAA,mBAAU,EAAC,GAAG,EAAE;gBACd,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,2BAA2B,CAAC,CACpD,CAAC;gBAEF,iBAAiB,GAAG,uBAAuB,CAAC;gBAC5C,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAE3D,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;gBACpD,YAAY,GAAG,IAAI,4BAAY,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,iCAAiC,EAAE,GAAG,EAAE;gBAC/C,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;oBACvC,qBAAqB;oBACrB,IAAA,eAAM,EAAC,GAAG,EAAE;wBACV,YAAY,CAAC,sBAAsB,CACjC,yBAAyB,EACzB,gBAAgB,EAChB,CAAC,WAAW,CAAC,CACd,CAAC;oBACJ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,sCAAsC,EAAE,GAAG,EAAE;gBACpD,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;oBACvC,gBAAgB;oBAChB,YAAY,CAAC,OAAO,CAAC,wBAAwB,GAAG;wBAC9C,SAAS,EAAE,0BAA0B;qBACtC,CAAC;oBAEF,qBAAqB;oBACrB,IAAA,eAAM,EAAC,GAAG,EAAE;wBACV,YAAY,CAAC,sBAAsB,CAAC,SAAS,EAAE,gBAAgB,EAAE;4BAC/D,WAAW;yBACZ,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,sCAAsC,EAAE,GAAG,EAAE;gBACpD,IAAA,WAAE,EAAC,4CAA4C,EAAE,GAAG,EAAE;oBACpD,gBAAgB;oBAChB,MAAM,YAAY,GAAG,qBAAqB,CAAC;oBAC3C,YAAY,CAAC,OAAO,CAAC,wBAAwB,GAAG;wBAC9C,CAAC,YAAY,CAAC,EAAE;4BACd,GAAG,EAAE,0BAA0B;4BAC/B,WAAW,EAAE,yBAAyB;4BACtC,UAAU,EAAE,CAAC,eAAe,CAAC;4BAC7B,SAAS,EAAE,SAAS;4BACpB,eAAe,EAAE,UAAU;4BAC3B,KAAK,EAAE,EAAE;4BACT,WAAW,EAAE,EAAE;4BACf,kCAAkC,EAAE,CAAC;yBACtC;qBACF,CAAC;oBAEF,YAAY;oBACZ,YAAY,CAAC,sBAAsB,CACjC,YAAY,EACZ,mBAAmB,EACnB,CAAC,eAAe,CAAC,CAClB,CAAC;oBAEF,eAAe;oBACf,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAChE,YAAY,CACe,CAAC;oBAC9B,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;oBACjC,IAAA,eAAM,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;oBAChE,IAAA,eAAM,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;oBAC1D,IAAA,eAAM,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,iBAAQ,EAAC,sDAAsD,EAAE,GAAG,EAAE;YACpE,IAAI,iBAAyB,CAAC;YAC9B,IAAI,eAAuB,CAAC;YAC5B,IAAI,YAA0B,CAAC;YAE/B,IAAA,mBAAU,EAAC,GAAG,EAAE;gBACd,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kCAAkC,CAAC,CAC3D,CAAC;gBAEF,iBAAiB,GAAG,uBAAuB,CAAC;gBAC5C,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;gBAE3D,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;gBACpD,YAAY,GAAG,IAAI,4BAAY,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,wDAAwD,EAAE,GAAG,EAAE;gBACtE,IAAA,WAAE,EAAC,oEAAoE,EAAE,GAAG,EAAE;oBAC5E,gBAAgB;oBAChB,OAAO,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC;oBAErD,YAAY;oBACZ,YAAY,CAAC,sBAAsB,CAAC;wBAClC,aAAa,EAAE,WAAW;wBAC1B,UAAU,EAAE,SAAS;wBACrB,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;oBAEH,eAAe;oBACf,IAAA,eAAM,EAAC,YAAY,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,WAAW,EAAE,CAAC;oBAEpE,wCAAwC;oBACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,YAAY,CAAC,OAAO,CAAC,wBAAwB,IAAI,EAAE,CACpD,CAAC;oBACF,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAC1C,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CACnC,CAAC;oBACF,IAAA,eAAM,EAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,2DAA2D,EAAE,GAAG,EAAE;gBACzE,IAAA,WAAE,EAAC,uDAAuD,EAAE,GAAG,EAAE;oBAC/D,gBAAgB;oBAChB,4DAA4D;oBAC5D,MAAM,SAAS,GAAG,0BAA0B,CAAC;oBAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC;oBACjE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;wBACxC,MAAM,CAAC,WAAW,GAAG;4BACnB,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE;4BACjD,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE;yBAClD,CAAC;qBACH;oBAED,wEAAwE;oBACxE,YAAY,CAAC,OAAO,CAAC,wBAAwB,GAAG;wBAC9C,kBAAkB,EAAE;4BAClB,GAAG,EAAE,0BAA0B;4BAC/B,WAAW,EAAE,2BAA2B;4BACxC,eAAe,EAAE,UAAU;4BAC3B,KAAK,EAAE,EAAE;4BACT,UAAU,EAAE,EAAE;4BACd,WAAW,EAAE,EAAE;4BACf,kCAAkC,EAAE,CAAC;4BACrC,SAAS,EAAE,SAAS;yBACrB;wBACD,eAAe,EAAE;4BACf,GAAG,EAAE,0BAA0B;4BAC/B,WAAW,EAAE,6BAA6B;4BAC1C,eAAe,EAAE,UAAU;4BAC3B,KAAK,EAAE,EAAE;4BACT,UAAU,EAAE,EAAE;4BACd,WAAW,EAAE,EAAE;4BACf,kCAAkC,EAAE,CAAC;4BACrC,SAAS,EAAE,SAAS;yBACrB;qBACF,CAAC;oBAEF,YAAY;oBACZ,YAAY,CAAC,sBAAsB,CAAC;wBAClC,aAAa,EAAE,WAAW;wBAC1B,UAAU,EAAE,SAAS;wBACrB,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;oBAEH,eAAe;oBACf,8EAA8E;oBAC9E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,YAAY,CAAC,OAAO,CAAC,wBAAwB,IAAI,EAAE,CACpD,CAAC;oBACF,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAC1C,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CACnC,CAAC;oBACF,IAAA,eAAM,EAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC;oBAE5F,6BAA6B;oBAC7B,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;wBACrD,MAAM,KAAK,GACT,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC,CAAC;wBAC3D,OAAO,CACL,KAAK;4BACL,OAAO,KAAK,KAAK,QAAQ;4BACzB,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAC1C,CAAC;oBACJ,CAAC,CAAC,CAAC;oBACH,IAAA,eAAM,EAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAA,iBAAQ,EAAC,gCAAgC,EAAE,GAAG,EAAE;gBAC9C,IAAA,WAAE,EAAC,0DAA0D,EAAE,GAAG,EAAE;oBAClE,gBAAgB;oBAChB,MAAM,SAAS,GAAG,0BAA0B,CAAC;oBAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,CAAC;oBACjE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;wBACxC,qDAAqD;wBACrD,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;qBAChC;oBAED,YAAY;oBACZ,YAAY,CAAC,sBAAsB,CAAC;wBAClC,aAAa,EAAE,WAAW;wBAC1B,UAAU,EAAE,SAAS;wBACrB,YAAY,EAAE,IAAI;qBACnB,CAAC,CAAC;oBAEH,eAAe;oBACf,uFAAuF;oBACvF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,YAAY,CAAC,OAAO,CAAC,wBAAwB,IAAI,EAAE,CACpD,CAAC;oBACF,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAC1C,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CACnC,CAAC;oBACF,IAAA,eAAM,EAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;oBAEpD,6BAA6B;oBAC7B,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;wBACrD,MAAM,KAAK,GACT,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC,CAAC;wBAC3D,OAAO,CACL,KAAK;4BACL,OAAO,KAAK,KAAK,QAAQ;4BACzB,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAC1C,CAAC;oBACJ,CAAC,CAAC,CAAC;oBACH,IAAA,eAAM,EAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport process from 'node:process';\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';\nimport type {\n PBXNativeTarget,\n PBXShellScriptBuildPhase,\n XCBuildConfiguration,\n} from 'xcode';\nimport {\n configureSnapshotPreviewsXcodeProject,\n snapshottingTestsProductSpec,\n} from '../../src/apple/snapshots/configure-snapshotpreviews-xcode-project';\nimport {\n SENTRY_SPM_ALREADY_LINKED_FRAMEWORK_COMMENT,\n sentrySwiftPackageProductSpec,\n} from '../../src/apple/sentry-swift-package';\nimport { getRunScriptTemplate } from '../../src/apple/templates';\nimport {\n SwiftPackageProductLinkOptions,\n XcodeProject,\n} from '../../src/apple/xcode-manager';\nimport type { SentryProjectData } from '../../src/utils/types';\nimport {\n addHostedUnitTestTarget,\n type HostedTestTargetFixtureIds,\n} from './snapshots/hosted-test-target-fixture';\n\nvi.mock('node:fs', async () => ({\n __esModule: true,\n ...(await vi.importActual<typeof fs>('node:fs')),\n}));\n\nvi.mock('@clack/prompts', () => ({\n log: {\n info: vi.fn(),\n success: vi.fn(),\n step: vi.fn(),\n },\n}));\n\nconst appleProjectsPath = path.resolve(\n __dirname,\n '../../fixtures/test-applications/apple',\n);\nconst damagedProjectPath = path.join(\n appleProjectsPath,\n 'damaged-missing-configuration-list/Project.xcodeproj/project.pbxproj',\n);\nconst noTargetsProjectPath = path.join(\n appleProjectsPath,\n 'no-targets/Project.xcodeproj/project.pbxproj',\n);\nconst noFilesInTargetProjectPath = path.join(\n appleProjectsPath,\n 'no-files-in-target/Project.xcodeproj/project.pbxproj',\n);\nconst projectWithSynchronizedFolders = path.join(\n appleProjectsPath,\n 'project-with-synchronized-folders/Project.xcodeproj/project.pbxproj',\n);\nconst singleTargetProjectPath = path.join(\n appleProjectsPath,\n 'spm-swiftui-single-target/Project.xcodeproj/project.pbxproj',\n);\nconst multiTargetProjectPath = path.join(\n appleProjectsPath,\n 'spm-swiftui-multi-targets/Project.xcodeproj/project.pbxproj',\n);\nconst projectData: SentryProjectData = {\n id: '1234567890',\n slug: 'project',\n organization: {\n id: '1234567890',\n name: 'Sentry',\n slug: 'sentry',\n },\n keys: [{ dsn: { public: 'https://sentry.io/1234567890' } }],\n};\n\nconst appFrameworksBuildPhaseId = 'D4E604CA2D50CEEC00CAB00F';\nconst sentrySwiftPackageProductLinkOptions: SwiftPackageProductLinkOptions = {\n product: sentrySwiftPackageProductSpec,\n existingFrameworkComment: SENTRY_SPM_ALREADY_LINKED_FRAMEWORK_COMMENT,\n successMessage: 'Added Sentry SPM dependency to your project',\n};\nconst projectObjectId = 'D4E604C52D50CEEC00CAB00F';\nconst productsGroupId = 'D4E604CE2D50CEEC00CAB00F';\n\nfunction objectKeysWithoutComments(object: unknown): string[] {\n return Object.keys((object ?? {}) as Record<string, unknown>).filter(\n (key) => {\n return !key.endsWith('_comment');\n },\n );\n}\n\nfunction getTargetByName(\n xcodeProject: XcodeProject,\n targetName: string,\n): PBXNativeTarget {\n const target = Object.values(xcodeProject.objects.PBXNativeTarget ?? {}).find(\n (candidate) => {\n return typeof candidate !== 'string' && candidate.name === targetName;\n },\n ) as PBXNativeTarget | undefined;\n if (!target) {\n throw new Error(`Target not found: ${targetName}`);\n }\n\n return target;\n}\n\ndescribe('XcodeManager', () => {\n beforeEach(() => {\n if (process.platform !== 'darwin') {\n // The macOS system helpers are only available on macOS\n // As the test suite is also run on non-macOS platforms, we need to mock the system helpers\n\n // The path to the Xcode.app can be different on different machines, so we allow overwriting it using environment variables\n vi.mock('../../src/apple/macos-system-helper', () => ({\n MacOSSystemHelpers: {\n findSDKRootDirectoryPath: vi.fn(\n () =>\n '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk',\n ),\n findDeveloperDirectoryPath: vi.fn(\n () => '/Applications/Xcode.app/Contents/Developer',\n ),\n readXcodeBuildSettings: vi.fn(() => ({\n CONFIGURATION_BUILD_DIR: path.join(\n appleProjectsPath,\n 'project-with-synchronized-folders/build/Release-unknown',\n ),\n })),\n },\n }));\n }\n });\n\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n describe('XcodeProject', () => {\n describe('getAllTargets', () => {\n describe('single target', () => {\n it('should return all targets', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n\n // -- Act --\n const targets = xcodeProject.getAllTargets();\n\n // -- Assert --\n expect(targets).toEqual(['Project']);\n });\n });\n\n describe('multiple targets', () => {\n it('should return all targets', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(multiTargetProjectPath);\n\n // -- Act --\n const targets = xcodeProject.getAllTargets();\n\n // -- Assert --\n expect(targets).toEqual(['Project1', 'Project2']);\n });\n });\n\n describe('no targets', () => {\n it('should return an empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(noTargetsProjectPath);\n\n // -- Act --\n const targets = xcodeProject.getAllTargets();\n\n // -- Assert --\n expect(targets).toEqual([]);\n });\n });\n\n describe('project with missing configuration list', () => {\n it('should return an empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(damagedProjectPath);\n\n // -- Act --\n const targets = xcodeProject.getAllTargets();\n\n // -- Assert --\n expect(targets).toEqual([]);\n });\n });\n });\n\n describe('target type detection', () => {\n it('lists application and unit-test targets by name', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n projectObjectId,\n productsGroupId,\n });\n\n // -- Act & Assert --\n expect(xcodeProject.getAllTargets()).toEqual(['Project']);\n expect(xcodeProject.getUnitTestTargetNames()).toEqual(['ProjectTests']);\n });\n\n it('returns multiple unit-test targets by name', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n name: 'ProjectTests',\n projectObjectId,\n productsGroupId,\n });\n addHostedUnitTestTarget(xcodeProject, {\n name: 'ProjectSnapshotTests',\n projectObjectId,\n productsGroupId,\n });\n\n // -- Act & Assert --\n expect(xcodeProject.getUnitTestTargetNames()).toEqual([\n 'ProjectTests',\n 'ProjectSnapshotTests',\n ]);\n });\n\n it('returns only unit-test targets with TEST_HOST configured', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n name: 'ProjectTests',\n projectObjectId,\n productsGroupId,\n });\n addHostedUnitTestTarget(xcodeProject, {\n name: 'UnhostedProjectTests',\n projectObjectId,\n productsGroupId,\n testHost: '\"\"',\n });\n\n // -- Act & Assert --\n expect(xcodeProject.getUnitTestTargetNames()).toEqual([\n 'ProjectTests',\n 'UnhostedProjectTests',\n ]);\n expect(xcodeProject.getHostedUnitTestTargetNames()).toEqual([\n 'ProjectTests',\n ]);\n });\n\n it('returns only unit-test targets hosted by the selected application target', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n name: 'ProjectTests',\n projectObjectId,\n productsGroupId,\n });\n addHostedUnitTestTarget(xcodeProject, {\n hostAppName: 'OtherApp',\n name: 'OtherAppTests',\n projectObjectId,\n productsGroupId,\n });\n\n // -- Act & Assert --\n expect(\n xcodeProject.getHostedUnitTestTargetNamesForApplicationTarget(\n 'Project',\n ),\n ).toEqual(['ProjectTests']);\n });\n\n it('matches hosted unit-test targets by app product name', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n name: 'ProjectTests',\n projectObjectId,\n productsGroupId,\n testHost:\n '\"$(BUILT_PRODUCTS_DIR)/SentryWizardSampleBlank.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/SentryWizardSampleBlank\"',\n });\n\n // -- Act & Assert --\n expect(\n xcodeProject.getHostedUnitTestTargetNamesForApplicationTarget(\n 'Project',\n ),\n ).toEqual(['ProjectTests']);\n });\n\n it('returns no hosted unit-test targets for an unknown application target', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n name: 'ProjectTests',\n projectObjectId,\n productsGroupId,\n });\n\n // -- Act & Assert --\n expect(\n xcodeProject.getHostedUnitTestTargetNamesForApplicationTarget(\n 'MissingApp',\n ),\n ).toEqual([]);\n });\n });\n\n describe('ensureSwiftPackageProductLinked', () => {\n let xcodeProject: XcodeProject;\n let hostedTestTargetIds: HostedTestTargetFixtureIds;\n\n beforeEach(() => {\n xcodeProject = new XcodeProject(singleTargetProjectPath);\n hostedTestTargetIds = addHostedUnitTestTarget(xcodeProject, {\n projectObjectId,\n productsGroupId,\n });\n });\n\n it('links a Swift package product only to the selected target', () => {\n // -- Act --\n const result = xcodeProject.ensureSwiftPackageProductLinked(\n 'ProjectTests',\n snapshottingTestsProductSpec,\n );\n\n // -- Assert --\n expect(result).toEqual({ changed: true, linked: true });\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ),\n ).toHaveLength(1);\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ),\n ).toHaveLength(1);\n\n const appTarget = getTargetByName(xcodeProject, 'Project');\n const hostedTestTarget = getTargetByName(xcodeProject, 'ProjectTests');\n expect(appTarget.packageProductDependencies).toEqual([]);\n expect(hostedTestTarget.packageProductDependencies).toEqual([\n expect.objectContaining({ comment: 'SnapshottingTests' }),\n ]);\n\n const appFrameworksBuildPhase =\n xcodeProject.objects.PBXFrameworksBuildPhase?.[\n appFrameworksBuildPhaseId\n ];\n const testFrameworksBuildPhase =\n xcodeProject.objects.PBXFrameworksBuildPhase?.[\n hostedTestTargetIds.frameworksBuildPhaseId\n ];\n expect(\n typeof appFrameworksBuildPhase !== 'string'\n ? appFrameworksBuildPhase?.files\n : undefined,\n ).toEqual([]);\n expect(\n typeof testFrameworksBuildPhase !== 'string'\n ? testFrameworksBuildPhase?.files\n : undefined,\n ).toEqual([\n expect.objectContaining({\n comment: 'SnapshottingTests in Frameworks',\n }),\n ]);\n });\n\n it('is idempotent across repeated runs', () => {\n // -- Act --\n const firstResult = xcodeProject.ensureSwiftPackageProductLinked(\n 'ProjectTests',\n snapshottingTestsProductSpec,\n );\n const secondResult = xcodeProject.ensureSwiftPackageProductLinked(\n 'ProjectTests',\n snapshottingTestsProductSpec,\n );\n\n // -- Assert --\n expect(firstResult).toEqual({ changed: true, linked: true });\n expect(secondResult).toEqual({ changed: false, linked: true });\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ),\n ).toHaveLength(1);\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ),\n ).toHaveLength(1);\n expect(\n objectKeysWithoutComments(xcodeProject.objects.PBXBuildFile),\n ).toHaveLength(1);\n });\n\n it('reuses an existing product dependency with a quoted product name', () => {\n // -- Arrange --\n const packageRefId = 'EXISTINGPACKAGE000000000001';\n const productDependencyId = 'EXISTINGPRODUCT000000000001';\n xcodeProject.objects.XCRemoteSwiftPackageReference = {\n [packageRefId]: {\n isa: 'XCRemoteSwiftPackageReference',\n repositoryURL: `\"${snapshottingTestsProductSpec.package.repositoryURL}\"`,\n requirement: snapshottingTestsProductSpec.package.requirement,\n },\n [`${packageRefId}_comment`]:\n 'XCRemoteSwiftPackageReference \"SnapshotPreviews\"',\n };\n xcodeProject.objects.XCSwiftPackageProductDependency = {\n [productDependencyId]: {\n isa: 'XCSwiftPackageProductDependency',\n package: packageRefId,\n productName: '\"SnapshottingTests\"',\n },\n [`${productDependencyId}_comment`]: 'SnapshottingTests',\n };\n\n // -- Act --\n const result = xcodeProject.ensureSwiftPackageProductLinked(\n 'ProjectTests',\n snapshottingTestsProductSpec,\n );\n\n // -- Assert --\n expect(result).toEqual({ changed: true, linked: true });\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ),\n ).toEqual([productDependencyId]);\n expect(getTargetByName(xcodeProject, 'ProjectTests')).toEqual(\n expect.objectContaining({\n packageProductDependencies: [\n expect.objectContaining({ value: productDependencyId }),\n ],\n }),\n );\n });\n\n it('reuses an existing package reference with the same repository URL and updates a lower minimum version', () => {\n // -- Arrange --\n xcodeProject.objects.XCRemoteSwiftPackageReference = {\n EXISTINGPACKAGE000000000001: {\n isa: 'XCRemoteSwiftPackageReference',\n repositoryURL: `\"${snapshottingTestsProductSpec.package.repositoryURL}/\"`,\n requirement: {\n kind: 'upToNextMajorVersion',\n minimumVersion: '0.8.0',\n },\n },\n EXISTINGPACKAGE000000000001_comment:\n 'XCRemoteSwiftPackageReference \"SnapshotPreviews\"',\n };\n\n // -- Act --\n const result = xcodeProject.ensureSwiftPackageProductLinked(\n 'ProjectTests',\n snapshottingTestsProductSpec,\n );\n\n // -- Assert --\n expect(result).toEqual({ changed: true, linked: true });\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ),\n ).toEqual(['EXISTINGPACKAGE000000000001']);\n expect(\n xcodeProject.objects.XCRemoteSwiftPackageReference?.[\n 'EXISTINGPACKAGE000000000001'\n ],\n ).toEqual(\n expect.objectContaining({\n requirement: snapshottingTestsProductSpec.package.requirement,\n }),\n );\n expect(\n xcodeProject.objects.XCSwiftPackageProductDependency?.[\n objectKeysWithoutComments(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n )[0]\n ],\n ).toEqual(\n expect.objectContaining({\n package: 'EXISTINGPACKAGE000000000001',\n productName: 'SnapshottingTests',\n }),\n );\n });\n\n it('does not partially mutate package state when the target has no Frameworks build phase', () => {\n // -- Arrange --\n const hostedTestTarget = getTargetByName(xcodeProject, 'ProjectTests');\n hostedTestTarget.buildPhases = [];\n\n // -- Act --\n const result = xcodeProject.ensureSwiftPackageProductLinked(\n 'ProjectTests',\n snapshottingTestsProductSpec,\n );\n\n // -- Assert --\n expect(result).toEqual({ changed: false, linked: false });\n expect(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ).toBeUndefined();\n expect(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ).toBeUndefined();\n expect(xcodeProject.objects.PBXBuildFile).toBeUndefined();\n expect(hostedTestTarget.packageProductDependencies).toEqual([]);\n });\n });\n\n describe('configureSnapshotPreviewsXcodeProject', () => {\n it('links SnapshottingTests to the hosted test target and SnapshotPreferences only to selected preview targets', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n projectObjectId,\n productsGroupId,\n });\n\n // -- Act --\n const result = configureSnapshotPreviewsXcodeProject({\n xcodeProject,\n hostedTestTargetName: 'ProjectTests',\n previewTargetNames: ['Project'],\n });\n\n // -- Assert --\n expect(result).toEqual({\n changed: true,\n failedSnapshotPreferencesTargetNames: [],\n linked: true,\n });\n const appTarget = getTargetByName(xcodeProject, 'Project');\n const hostedTestTarget = getTargetByName(xcodeProject, 'ProjectTests');\n expect(appTarget.packageProductDependencies).toEqual([\n expect.objectContaining({ comment: 'SnapshotPreferences' }),\n ]);\n expect(hostedTestTarget.packageProductDependencies).toEqual([\n expect.objectContaining({ comment: 'SnapshottingTests' }),\n ]);\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ),\n ).toHaveLength(2);\n });\n\n it('does not link SnapshotPreferences when no preview targets are selected', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n projectObjectId,\n productsGroupId,\n });\n\n // -- Act --\n configureSnapshotPreviewsXcodeProject({\n xcodeProject,\n hostedTestTargetName: 'ProjectTests',\n });\n\n // -- Assert --\n const appTarget = getTargetByName(xcodeProject, 'Project');\n const hostedTestTarget = getTargetByName(xcodeProject, 'ProjectTests');\n expect(appTarget.packageProductDependencies).toEqual([]);\n expect(hostedTestTarget.packageProductDependencies).toEqual([\n expect.objectContaining({ comment: 'SnapshottingTests' }),\n ]);\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ),\n ).toHaveLength(1);\n });\n\n it('continues when SnapshotPreferences cannot be linked to a preview target', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n addHostedUnitTestTarget(xcodeProject, {\n projectObjectId,\n productsGroupId,\n });\n const appTarget = getTargetByName(xcodeProject, 'Project');\n appTarget.buildPhases = [];\n\n // -- Act --\n const result = configureSnapshotPreviewsXcodeProject({\n xcodeProject,\n hostedTestTargetName: 'ProjectTests',\n previewTargetNames: ['Project'],\n });\n\n // -- Assert --\n const hostedTestTarget = getTargetByName(xcodeProject, 'ProjectTests');\n expect(result).toEqual({\n changed: true,\n failedSnapshotPreferencesTargetNames: ['Project'],\n linked: true,\n });\n expect(appTarget.packageProductDependencies).toEqual([]);\n expect(hostedTestTarget.packageProductDependencies).toEqual([\n expect.objectContaining({ comment: 'SnapshottingTests' }),\n ]);\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ),\n ).toHaveLength(1);\n });\n\n it('does not mutate package state when the hosted test target is missing', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n\n // -- Act --\n const result = configureSnapshotPreviewsXcodeProject({\n xcodeProject,\n hostedTestTargetName: 'MissingTests',\n });\n\n // -- Assert --\n expect(result).toEqual({\n changed: false,\n failedSnapshotPreferencesTargetNames: [],\n linked: false,\n });\n expect(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ).toBeUndefined();\n expect(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ).toBeUndefined();\n expect(xcodeProject.objects.PBXBuildFile).toBeUndefined();\n });\n\n it('does not link SnapshotPreferences when the hosted test target is missing', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n\n // -- Act --\n const result = configureSnapshotPreviewsXcodeProject({\n xcodeProject,\n hostedTestTargetName: 'MissingTests',\n previewTargetNames: ['Project'],\n });\n\n // -- Assert --\n const appTarget = getTargetByName(xcodeProject, 'Project');\n expect(result).toEqual({\n changed: false,\n failedSnapshotPreferencesTargetNames: [],\n linked: false,\n });\n expect(appTarget.packageProductDependencies).toEqual([]);\n expect(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ).toBeUndefined();\n expect(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ).toBeUndefined();\n expect(xcodeProject.objects.PBXBuildFile).toBeUndefined();\n });\n });\n\n describe('updateXcodeProject', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'update-xcode-project'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('upload symbols script', () => {\n const scriptVariants: {\n uploadSource: boolean;\n includeHomebrewPath: boolean;\n }[] = [\n {\n uploadSource: true,\n includeHomebrewPath: true,\n },\n {\n uploadSource: true,\n includeHomebrewPath: false,\n },\n {\n uploadSource: false,\n includeHomebrewPath: true,\n },\n {\n uploadSource: false,\n includeHomebrewPath: false,\n },\n ];\n\n for (const variant of scriptVariants) {\n describe(`upload source = ${variant.uploadSource?.toString()} and include homebrew path = ${variant.includeHomebrewPath.toString()}`, () => {\n beforeEach(() => {\n vi.spyOn(fs, 'existsSync').mockReturnValue(\n variant.includeHomebrewPath,\n );\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n it('should add the upload symbols script to the target', () => {\n // -- Arrange --\n const generatedShellScript = getRunScriptTemplate(\n projectData.organization.slug,\n projectData.slug,\n variant.uploadSource,\n variant.includeHomebrewPath,\n );\n const expectedShellScript = `\"${generatedShellScript.replace(\n /\"/g,\n '\\\\\"',\n )}\"`;\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n undefined, // Ignore SPM reference\n variant.uploadSource,\n );\n\n // -- Assert --\n const updatedXcodeProject = new XcodeProject(tempProjectPath);\n\n // Expect the upload symbols script to be added\n const scriptObjects =\n updatedXcodeProject.objects.PBXShellScriptBuildPhase;\n expect(scriptObjects).toBeDefined();\n if (!scriptObjects) {\n throw new Error('Script objects not found');\n }\n const scriptKeys = Object.keys(scriptObjects);\n expect(scriptKeys).toHaveLength(2);\n\n // Find the script ID\n const scriptId = scriptKeys.find(\n (key) => !key.endsWith('_comment'),\n );\n expect(scriptId).toBeDefined();\n if (!scriptId) {\n throw new Error('Script ID not found');\n }\n expect(scriptId).toMatch(/^[A-F0-9]{24}$/i);\n\n // Expect the script to be added\n const script = scriptObjects[\n scriptId\n ] as PBXShellScriptBuildPhase;\n expect(script).toBeDefined();\n expect(typeof script).not.toBe('string');\n expect(script.inputPaths).toEqual([\n '\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}\"',\n ]);\n expect(script.outputPaths).toEqual([]);\n expect(script.shellPath).toBe('/bin/sh');\n expect(script.shellScript).toEqual(expectedShellScript);\n\n const commentKey = `${scriptId}_comment`;\n expect(scriptKeys).toContain(commentKey);\n expect(scriptObjects[commentKey]).toBe(\n 'Upload Debug Symbols to Sentry',\n );\n });\n });\n }\n });\n\n describe('debug information format and sandbox', () => {\n describe('upload source is false', () => {\n it('should not update the Xcode project', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n undefined, // Ignore SPM reference\n false,\n );\n\n // -- Assert --\n const expectedXcodeProject = new XcodeProject(sourceProjectPath);\n expect(xcodeProject.objects.XCBuildConfiguration).toEqual(\n expectedXcodeProject.objects.XCBuildConfiguration,\n );\n });\n });\n\n describe('upload source is true', () => {\n const uploadSource = true;\n\n describe('named target not found', () => {\n it('should not update the flags in the Xcode project', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Invalid Target Name',\n undefined, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n const originalXcodeProject = new XcodeProject(sourceProjectPath);\n expect(xcodeProject.objects.XCBuildConfiguration).toEqual(\n originalXcodeProject.objects.XCBuildConfiguration,\n );\n });\n });\n\n describe('named target found', () => {\n describe('build configurations is undefined', () => {\n it('should not update the Xcode project', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Invalid Target Name',\n undefined, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n const originalXcodeProject = new XcodeProject(\n sourceProjectPath,\n );\n expect(xcodeProject.objects.XCBuildConfiguration).toEqual(\n originalXcodeProject.objects.XCBuildConfiguration,\n );\n });\n });\n\n describe('no build configurations found', () => {\n it('should not update the Xcode project', () => {\n // -- Arrange --\n xcodeProject.objects.XCBuildConfiguration = {};\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Invalid Target Name',\n undefined, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n expect(xcodeProject.objects.XCBuildConfiguration).toEqual({});\n });\n });\n\n describe('build configurations found', () => {\n const debugProjectBuildConfigurationListId =\n 'D4E604DA2D50CEEE00CAB00F';\n const releaseProjectBuildConfigurationListId =\n 'D4E604DB2D50CEEE00CAB00F';\n const debugTargetBuildConfigurationListId =\n 'D4E604DD2D50CEEE00CAB00F';\n const releaseTargetBuildConfigurationListId =\n 'D4E604DE2D50CEEE00CAB00F';\n\n it('should update the target configuration lists', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n undefined, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n expect(xcodeProject.objects.XCBuildConfiguration).toBeDefined();\n // Both Debug and Release are configured equally\n const expectedConfigKeys = [\n debugTargetBuildConfigurationListId, // Debug\n releaseTargetBuildConfigurationListId, // Release\n ];\n for (const key of expectedConfigKeys) {\n const buildConfiguration = xcodeProject.objects\n .XCBuildConfiguration?.[key] as XCBuildConfiguration;\n expect(buildConfiguration).toBeDefined();\n expect(typeof buildConfiguration).not.toBe('string');\n const buildSettings = buildConfiguration.buildSettings ?? {};\n expect(buildSettings.DEBUG_INFORMATION_FORMAT).toBe(\n '\"dwarf-with-dsym\"',\n );\n expect(buildSettings.ENABLE_USER_SCRIPT_SANDBOXING).toBe(\n '\"NO\"',\n );\n }\n });\n\n it('should not update the project configuration lists', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n undefined, // Ignore SPM reference\n uploadSource,\n );\n\n // -- Assert --\n expect(xcodeProject.objects.XCBuildConfiguration).toBeDefined();\n\n // Check project build configurations 'Debug'\n const debugBuildConfiguration = xcodeProject.objects\n .XCBuildConfiguration?.[\n debugProjectBuildConfigurationListId\n ] as XCBuildConfiguration;\n expect(debugBuildConfiguration).toBeDefined();\n expect(typeof debugBuildConfiguration).not.toBe('string');\n expect(\n debugBuildConfiguration.buildSettings\n ?.DEBUG_INFORMATION_FORMAT,\n ).toBe('dwarf');\n expect(\n debugBuildConfiguration.buildSettings\n ?.ENABLE_USER_SCRIPT_SANDBOXING,\n ).toBe('YES');\n\n // Check project build configurations 'Release'\n const releaseBuildConfiguration = xcodeProject.objects\n .XCBuildConfiguration?.[\n releaseProjectBuildConfigurationListId\n ] as XCBuildConfiguration;\n expect(releaseBuildConfiguration).toBeDefined();\n expect(typeof releaseBuildConfiguration).not.toBe('string');\n expect(\n releaseBuildConfiguration.buildSettings\n ?.DEBUG_INFORMATION_FORMAT,\n ).toBe('\"dwarf-with-dsym\"');\n expect(\n releaseBuildConfiguration.buildSettings\n ?.ENABLE_USER_SCRIPT_SANDBOXING,\n ).toBe('YES');\n });\n });\n });\n });\n });\n\n describe('add SPM reference', () => {\n it('should treat an existing Sentry framework comment on the selected target as already installed', () => {\n // -- Arrange --\n const frameworksBuildPhase =\n xcodeProject.objects.PBXFrameworksBuildPhase?.[\n appFrameworksBuildPhaseId\n ];\n if (\n !frameworksBuildPhase ||\n typeof frameworksBuildPhase === 'string'\n ) {\n throw new Error('Frameworks build phase is undefined');\n }\n frameworksBuildPhase.files = [\n {\n value: '123',\n comment: 'Sentry in Frameworks',\n },\n ];\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n sentrySwiftPackageProductLinkOptions,\n );\n\n // -- Assert --\n expect(frameworksBuildPhase.files).toEqual([\n {\n value: '123',\n comment: 'Sentry in Frameworks',\n },\n ]);\n expect(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ).toBeUndefined();\n expect(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ).toBeUndefined();\n });\n\n it('should not treat a Sentry framework comment on another target as installed on the selected target', () => {\n // -- Arrange --\n const hostedTestTargetIds = addHostedUnitTestTarget(xcodeProject, {\n projectObjectId,\n productsGroupId,\n });\n const testFrameworksBuildPhase =\n xcodeProject.objects.PBXFrameworksBuildPhase?.[\n hostedTestTargetIds.frameworksBuildPhaseId\n ];\n if (\n !testFrameworksBuildPhase ||\n typeof testFrameworksBuildPhase === 'string'\n ) {\n throw new Error('Frameworks build phase is undefined');\n }\n testFrameworksBuildPhase.files = [\n {\n value: '123',\n comment: 'Sentry in Frameworks',\n },\n ];\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n sentrySwiftPackageProductLinkOptions,\n );\n\n // -- Assert --\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ),\n ).toHaveLength(1);\n const appFrameworksBuildPhase =\n xcodeProject.objects.PBXFrameworksBuildPhase?.[\n appFrameworksBuildPhaseId\n ];\n expect(\n typeof appFrameworksBuildPhase !== 'string'\n ? appFrameworksBuildPhase?.files?.filter((file) => {\n return file.comment === 'Sentry in Frameworks';\n })\n : [],\n ).toHaveLength(1);\n });\n\n it('should not duplicate the Sentry SPM dependency on repeated runs', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n sentrySwiftPackageProductLinkOptions,\n );\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n sentrySwiftPackageProductLinkOptions,\n );\n\n // -- Assert --\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCRemoteSwiftPackageReference,\n ),\n ).toHaveLength(1);\n expect(\n objectKeysWithoutComments(\n xcodeProject.objects.XCSwiftPackageProductDependency,\n ),\n ).toHaveLength(1);\n\n const frameworksBuildPhase =\n xcodeProject.objects.PBXFrameworksBuildPhase?.[\n appFrameworksBuildPhaseId\n ];\n expect(\n typeof frameworksBuildPhase !== 'string'\n ? frameworksBuildPhase?.files?.filter((file) => {\n return file.comment === 'Sentry in Frameworks';\n })\n : [],\n ).toHaveLength(1);\n });\n\n it('should add the SPM reference to the target', () => {\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n sentrySwiftPackageProductLinkOptions,\n );\n\n // -- Assert --\n // Get the target\n const target = xcodeProject.objects.PBXNativeTarget?.[\n 'D4E604CC2D50CEEC00CAB00F'\n ] as PBXNativeTarget;\n expect(target).toBeDefined();\n if (!target) {\n throw new Error('Target is undefined');\n }\n\n // Check the SPM dependency is added to the target\n expect(target.packageProductDependencies).toEqual([\n expect.objectContaining({\n value: expect.any(String) as string,\n comment: 'Sentry',\n }),\n ]);\n\n // Check the SPM package reference object is added to the project\n const remoteSwiftPackageReferences =\n xcodeProject.objects.XCRemoteSwiftPackageReference;\n expect(remoteSwiftPackageReferences).toBeDefined();\n if (!remoteSwiftPackageReferences) {\n throw new Error('XCRemoteSwiftPackageReference is undefined');\n }\n const rspRefKeys = Object.keys(remoteSwiftPackageReferences);\n expect(rspRefKeys).toHaveLength(2);\n // First key is expected to be the UUID of the SPM package reference\n expect(rspRefKeys[0]).toMatch(/^[A-F0-9]{24}$/i);\n // Second key is expected to be the UUID of the SPM package reference with _comment suffix\n expect(rspRefKeys[1]).toMatch(/^[A-F0-9]{24}_comment$/i);\n\n expect(remoteSwiftPackageReferences?.[rspRefKeys[0]]).toEqual({\n isa: 'XCRemoteSwiftPackageReference',\n repositoryURL: '\"https://github.com/getsentry/sentry-cocoa/\"',\n requirement: {\n kind: 'upToNextMajorVersion',\n minimumVersion: '9.0.0',\n },\n });\n expect(remoteSwiftPackageReferences?.[rspRefKeys[1]]).toBe(\n 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n );\n\n // Check the SPM package is a dependency of the target\n const packageProductDependencies =\n xcodeProject.objects.XCSwiftPackageProductDependency;\n expect(packageProductDependencies).toBeDefined();\n if (!packageProductDependencies) {\n throw new Error('XCSwiftPackageProductDependency is undefined');\n }\n const ppDepKeys = Object.keys(packageProductDependencies);\n expect(ppDepKeys).toHaveLength(2);\n // First key is expected to be the UUID of the SPM package dependency\n expect(ppDepKeys[0]).toMatch(/^[A-F0-9]{24}$/i);\n // Second key is expected to be the UUID of the SPM package dependency with _comment suffix\n expect(ppDepKeys[1]).toMatch(/^[A-F0-9]{24}_comment$/i);\n expect(packageProductDependencies?.[ppDepKeys[0]]).toEqual({\n isa: 'XCSwiftPackageProductDependency',\n package: rspRefKeys[0],\n package_comment: 'XCRemoteSwiftPackageReference \"sentry-cocoa\"',\n productName: 'Sentry',\n });\n });\n\n it('should link Sentry only to the selected target', () => {\n // -- Arrange --\n const hostedTestTargetIds = addHostedUnitTestTarget(xcodeProject, {\n projectObjectId,\n productsGroupId,\n });\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n sentrySwiftPackageProductLinkOptions,\n );\n\n // -- Assert --\n const appTarget = getTargetByName(xcodeProject, 'Project');\n const hostedTestTarget = getTargetByName(\n xcodeProject,\n 'ProjectTests',\n );\n expect(appTarget.packageProductDependencies).toEqual([\n expect.objectContaining({ comment: 'Sentry' }),\n ]);\n expect(hostedTestTarget.packageProductDependencies).toEqual([]);\n\n const testFrameworksBuildPhase =\n xcodeProject.objects.PBXFrameworksBuildPhase?.[\n hostedTestTargetIds.frameworksBuildPhaseId\n ];\n expect(\n typeof testFrameworksBuildPhase !== 'string'\n ? testFrameworksBuildPhase?.files\n : undefined,\n ).toEqual([]);\n });\n\n it('should initialize packageProductDependencies if not present', () => {\n // -- Arrange --\n // Ensure the target exists but has no packageProductDependencies initially\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n const target = xcodeProject.objects.PBXNativeTarget?.[\n targetKey\n ] as PBXNativeTarget;\n if (target) {\n // Remove packageProductDependencies to test initialization\n delete target.packageProductDependencies;\n }\n\n // -- Act --\n xcodeProject.updateXcodeProject(\n projectData,\n 'Project',\n sentrySwiftPackageProductLinkOptions,\n );\n\n // -- Assert --\n const updatedTarget = xcodeProject.objects.PBXNativeTarget?.[\n targetKey\n ] as PBXNativeTarget;\n expect(updatedTarget.packageProductDependencies).toBeDefined();\n expect(updatedTarget.packageProductDependencies).toEqual([\n expect.objectContaining({\n value: expect.any(String) as string,\n comment: 'Sentry',\n }),\n ]);\n });\n });\n });\n\n describe('getSourceFilesForTarget', () => {\n describe('targets are undefined', () => {\n it('should return undefined', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = undefined;\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toBeUndefined();\n });\n });\n\n describe('target not found', () => {\n it('should return undefined', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n\n // -- Act --\n const files =\n xcodeProject.getSourceFilesForTarget('NonExistentTarget');\n\n // -- Assert --\n expect(files).toBeUndefined();\n });\n });\n\n describe('target build phases are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n Project: {\n isa: 'PBXNativeTarget',\n name: 'Project',\n buildPhases: undefined,\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phases are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n Project: {\n isa: 'PBXNativeTarget',\n name: 'Project',\n buildPhases: undefined,\n },\n };\n xcodeProject.objects.PBXSourcesBuildPhase = undefined;\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('referenced build phase is undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n Project: {\n isa: 'PBXNativeTarget',\n name: 'Project',\n buildPhases: [\n {\n value: 'random-build-phase',\n },\n ],\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase files are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n Project: {\n isa: 'PBXNativeTarget',\n name: 'Project',\n buildPhases: [\n {\n value: 'build-phase-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: undefined,\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase has no files', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(noFilesInTargetProjectPath);\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase with files', () => {\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n buildPhases: [\n {\n value: 'build-phase-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [\n {\n value: 'file-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n fileRef: 'file-ref-key',\n },\n };\n });\n\n describe('build file objects are not defined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXBuildFile = undefined;\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build file object is not found', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXBuildFile = {};\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build file object is invalid', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': 'invalid-object',\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('file reference is missing', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('file reference is invalid', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': 'invalid-object',\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('file reference path is missing', () => {\n it('should return empty array', () => {\n // -- Arrange --\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': {\n isa: 'PBXFileReference',\n path: undefined as unknown as string,\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('valid file reference', () => {\n it('should return array with file path', () => {\n // -- Arrange --\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': {\n isa: 'PBXFileReference',\n path: 'test.swift',\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([\n path.join(xcodeProject.baseDir, 'test.swift'),\n ]);\n });\n });\n });\n\n describe('synchronized root groups', () => {\n it('should handle missing fileSystemSynchronizedGroups', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n\n it('should handle empty fileSystemSynchronizedGroups', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n fileSystemSynchronizedGroups: [],\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n\n it('should handle invalid synchronized root group', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n fileSystemSynchronizedGroups: [\n {\n value: 'invalid-group',\n },\n ],\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n\n it('should handle synchronized root group with missing path', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n xcodeProject.objects.PBXNativeTarget = {\n 'some-target': {\n isa: 'PBXNativeTarget',\n name: 'some-target',\n fileSystemSynchronizedGroups: [\n {\n value: 'group-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXFileSystemSynchronizedRootGroup = {\n 'group-key': {\n isa: 'PBXFileSystemSynchronizedRootGroup',\n path: undefined as unknown as string,\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('some-target');\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n\n it('should exclude files in membership exceptions', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n\n // The subfolder 1-1-1 is a synchronized root group containing two files:\n // - File-1-1-1-1.swift\n // - File-1-1-1-2.swift\n //\n // The membership exceptions are:\n // - File-1-1-1-2.swift\n //\n // The expected result is that File-1-1-1-1.swift is excluded from the build, but\n // included due to the membership exception.\n // The File-1-1-1-2.swift is excluded from the build due to the membership exception.\n\n // Pre-condition: File-1-1-1-1.swift exists\n const file1111 = path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-1',\n 'Subfolder 1-1-1',\n 'File-1-1-1-1.swift',\n );\n expect(fs.existsSync(file1111)).toBe(true);\n\n // Pre-condition: File-1-1-1-2.swift exists\n const file1112 = path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-1',\n 'Subfolder 1-1-1',\n 'File-1-1-1-2.swift',\n );\n expect(fs.existsSync(file1112)).toBe(true);\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n // Known Issue:\n // The file `File-1-1-1-1.swift` is included in the source build phase, but not in the list of files.\n //\n // This is the group structure:\n // <main group> / Group 1 / Subgroup 1-1 / Subfolder 1-1-1 / File-1-1-1-1.swift\n //\n // - <main group> is the root group\n // - Group 1 is a group\n // - Subgroup 1-1 is a nested group\n // - Subfolder 1-1-1 is a synchronized root group\n // - File-1-1-1-1.swift is a file in the synchronized root group Subfolder 1-1-1\n //\n // For no apparent reason, Xcode is picking up the file, but Group 1 is not mentioned anywhere other then the main group.\n // This would require us to consider every root group as a potential source of files, which seems excessive if a project has multiple targets.\n\n // expect(files).toContain(file1111);\n expect(files).not.toContain(file1112);\n });\n\n it('should return synchronized files and files in main group', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n\n // -- Act --\n const files = xcodeProject.getSourceFilesForTarget('Project');\n\n // -- Assert --\n // The order is not guaranteed, so we need to check for each file individually\n // The order in this test case is the one displayed in the Xcode UI\n const group1DirPath = path.join(xcodeProject.baseDir, 'Group 1');\n const subgroup1_1DirPath = path.join(group1DirPath, 'Subgroup 1-1');\n const subgroup1_2DirPath = path.join(group1DirPath, 'Subgroup 1-2');\n const subgroup1_1_2DirPath = path.join(\n subgroup1_1DirPath,\n 'Subgroup 1-1-2',\n );\n\n const sourcesDirPath = path.join(xcodeProject.baseDir, 'Sources');\n const subfolder1DirPath = path.join(sourcesDirPath, 'Subfolder 1');\n const subfolder2DirPath = path.join(sourcesDirPath, 'Subfolder 2');\n\n const groupRef1_3DirPath = path.join(\n xcodeProject.baseDir,\n 'Group Reference 1-3',\n );\n\n expect(files).toContain(\n path.join(subgroup1_2DirPath, 'File-1-2-2.swift'),\n );\n expect(files).toContain(\n path.join(subfolder1DirPath, 'ContentView.swift'),\n );\n expect(files).toContain(\n path.join(\n subgroup1_2DirPath,\n 'File-1-2-3--relative-to-group.swift',\n ),\n );\n expect(files).toContain(path.join(sourcesDirPath, 'MainApp.swift'));\n expect(files).toContain(path.join(subfolder2DirPath, 'File.swift'));\n\n // Absolute path\n expect(files).toContain(\n '/System/Library/CoreServices/SystemVersion.plist',\n );\n // Path relative to the SDK\n expect(files).toContain(\n '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/SDKSettings.plist',\n );\n // Path relative to the developer directory\n expect(files).toContain(\n '/Applications/Xcode.app/Contents/Developer/usr/bin/git',\n );\n // Path relative to the build products directory\n // NOT SUPPORTED YET\n\n // Path relative to the project\n expect(files).toContain(\n path.join(subgroup1_2DirPath, 'File-1-2-1.swift'),\n );\n expect(files).toContain(\n path.join(groupRef1_3DirPath, 'File-1-3-1.swift'),\n );\n expect(files).toContain(\n path.join(\n subgroup1_2DirPath,\n 'File-1-2-3--relative-to-project.swift',\n ),\n );\n expect(files).toContain(\n path.join(subgroup1_1_2DirPath, 'File-1-1-2-1.swift'),\n );\n // Known Issue:\n // The file `File-1-1-1-1.swift` is included in the source build phase, but not in the list of files.\n //\n // This is the group structure:\n // <main group> / Group 1 / Subgroup 1-1 / Subfolder 1-1-1 / File-1-1-1-1.swift\n //\n // - <main group> is the root group\n // - Group 1 is a group\n // - Subgroup 1-1 is a nested group\n // - Subfolder 1-1-1 is a synchronized root group\n // - File-1-1-1-1.swift is a file in the synchronized root group Subfolder 1-1-1\n //\n // For no apparent reason, Xcode is picking up the file, but Group 1 is not mentioned anywhere other then the main group.\n // This would require us to consider every root group as a potential source of files, which seems excessive if a project has multiple targets.\n\n // expect(files).toContain(\n // path.join(\n // xcodeProject.baseDir,\n // 'Group 1',\n // 'Subgroup 1-1',\n // 'Subfolder 1-1-1',\n // 'File-1-1-1-1.swift',\n // ),\n // );\n\n // Assert that there are no other file paths in the list\n expect(files).toHaveLength(12);\n });\n });\n });\n\n describe('findFilesInSourceBuildPhase', () => {\n describe('when build phase is not found', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = undefined;\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase files are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: undefined,\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase files are empty', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [],\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase file is a comment', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': 'this is a comment',\n };\n\n // Smoke test to ensure native target is defined\n expect(nativeTarget).toBeDefined();\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase file is not found', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [],\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase file reference is a comment', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [\n {\n value: 'file-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n fileRef: 'file-ref-key',\n },\n };\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': 'this is a comment',\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('build phase file reference has no path', () => {\n it('should be ignored', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [\n {\n value: 'file-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n fileRef: 'file-ref-key',\n },\n };\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': {\n isa: 'PBXFileReference',\n path: undefined as unknown as string,\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('when file reference path contains doublequotes', () => {\n it('should be removed', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {\n 'build-phase-key': {\n isa: 'PBXSourcesBuildPhase',\n files: [\n {\n value: 'file-key',\n },\n ],\n },\n };\n xcodeProject.objects.PBXBuildFile = {\n 'file-key': {\n isa: 'PBXBuildFile',\n fileRef: 'file-ref-key',\n },\n };\n xcodeProject.objects.PBXFileReference = {\n 'file-ref-key': {\n isa: 'PBXFileReference',\n path: '\"path/with/quotes.swift\"',\n sourceTree: 'SOURCE_ROOT',\n },\n };\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([\n path.join(xcodeProject.baseDir, 'path/with/quotes.swift'),\n ]);\n });\n });\n\n it('should return all files in build phase', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n\n // -- Act --\n const files = xcodeProject.findFilesInSourceBuildPhase({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n // The list should reflect exactly the list of `files` in the `PBXSourcesBuildPhase` in the project.pbxproj file\n expect(files).toEqual([\n // Absolute paths\n '/System/Library/CoreServices/SystemVersion.plist',\n\n // Path relative to the build directory\n // NOT SUPPORTED YET\n\n // Path relative to the SDK\n '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/SDKSettings.plist',\n\n // Path relative to the developer directory\n '/Applications/Xcode.app/Contents/Developer/usr/bin/git',\n\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-2',\n 'File-1-2-2.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-2',\n 'File-1-2-3--relative-to-group.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-2',\n 'File-1-2-1.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-1',\n 'Subgroup 1-1-2',\n 'File-1-1-2-1.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group Reference 1-3',\n 'File-1-3-1.swift',\n ),\n path.join(\n xcodeProject.baseDir,\n 'Group 1',\n 'Subgroup 1-2',\n 'File-1-2-3--relative-to-project.swift',\n ),\n ]);\n });\n });\n\n describe('findSourceBuildPhaseInTarget', () => {\n describe('when build phases are undefined', () => {\n it('should return undefined', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = undefined;\n\n // -- Act --\n const buildPhase =\n xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);\n\n // -- Assert --\n expect(buildPhase).toBeUndefined();\n });\n });\n\n describe('when build phases are empty', () => {\n it('should return undefined', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [];\n\n // -- Act --\n const buildPhase =\n xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);\n\n // -- Assert --\n expect(buildPhase).toBeUndefined();\n });\n });\n\n describe('when referenced build phase is not found', () => {\n it('should ignore it', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.buildPhases = [\n {\n value: 'build-phase-key',\n },\n ];\n xcodeProject.objects.PBXSourcesBuildPhase = {};\n\n // -- Act --\n const buildPhase =\n xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);\n\n // -- Assert --\n expect(buildPhase).toBeUndefined();\n });\n });\n\n describe('when referenced build phase is found', () => {\n it('should return the build phase', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n\n // -- Act --\n const buildPhase =\n xcodeProject.findSourceBuildPhaseInTarget(nativeTarget);\n\n // -- Assert --\n expect(buildPhase).toEqual({\n id: 'D4E604C92D50CEEC00CAB00F',\n obj: {\n isa: 'PBXSourcesBuildPhase',\n files: [],\n buildActionMask: 2147483647,\n runOnlyForDeploymentPostprocessing: 0,\n },\n });\n });\n });\n });\n\n describe('findFilesInSynchronizedRootGroups', () => {\n describe('when synchronized root groups are undefined', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.fileSystemSynchronizedGroups = undefined;\n\n // -- Act --\n const files = xcodeProject.findFilesInSynchronizedRootGroups({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('when synchronized root groups are empty', () => {\n it('should return empty array', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(singleTargetProjectPath);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n nativeTarget.fileSystemSynchronizedGroups = [];\n\n // -- Act --\n const files = xcodeProject.findFilesInSynchronizedRootGroups({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).toEqual([]);\n });\n });\n\n describe('when synchronized root groups are not found', () => {\n it('should ignore files in them', () => {\n // -- Arrange --\n const xcodeProject = new XcodeProject(projectWithSynchronizedFolders);\n const nativeTargetId = 'D4E604CC2D50CEEC00CAB00F';\n const nativeTarget = xcodeProject.objects.PBXNativeTarget?.[\n nativeTargetId\n ] as PBXNativeTarget;\n\n // Add an invalid group reference to the native target\n nativeTarget.fileSystemSynchronizedGroups = [\n ...(nativeTarget.fileSystemSynchronizedGroups || []),\n {\n value: 'invalid-group-key',\n },\n ];\n\n // -- Act --\n const files = xcodeProject.findFilesInSynchronizedRootGroups({\n id: nativeTargetId,\n obj: nativeTarget,\n });\n\n // -- Assert --\n expect(files).not.toContain(\n path.join(\n xcodeProject.baseDir,\n 'Sources',\n 'Subfolder 1',\n 'Excluded-File.swift',\n ),\n );\n });\n });\n });\n\n describe('addUploadSymbolsScript', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'add-upload-symbols-script'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('when target is not found', () => {\n it('should return early', () => {\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'NonExistentTarget',\n uploadSource: true,\n });\n\n // -- Assert --\n // Verify that no shell script build phases were added\n expect(xcodeProject.objects.PBXShellScriptBuildPhase).toBeUndefined();\n });\n });\n\n describe('when target has existing Sentry build phase', () => {\n beforeEach(() => {\n // Set up a target with an existing Sentry build phase\n xcodeProject.objects.PBXNativeTarget = {\n 'target-key': {\n isa: 'PBXNativeTarget',\n name: 'TestTarget',\n buildPhases: [\n {\n value: 'existing-sentry-phase',\n comment: 'Upload Debug Symbols to Sentry',\n },\n ],\n },\n };\n\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n 'existing-sentry-phase': {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo sentry-cli upload-dsym\"',\n buildActionMask: 2147483647,\n files: [],\n inputPaths: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n shellPath: '/bin/sh',\n },\n };\n });\n\n it('should update existing build phase instead of adding new one', () => {\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'TestTarget',\n uploadSource: true,\n });\n\n // -- Assert --\n // Should still have only one build phase (the updated one)\n const buildPhases = Object.keys(\n xcodeProject.objects.PBXShellScriptBuildPhase || {},\n );\n expect(\n buildPhases.filter((key) => !key.endsWith('_comment')),\n ).toHaveLength(1);\n\n // The existing phase should be updated with new script content\n const updatedPhase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[\n 'existing-sentry-phase'\n ];\n expect(updatedPhase).toBeDefined();\n expect(\n (updatedPhase as PBXShellScriptBuildPhase)?.shellScript,\n ).toContain('sentry-cli');\n });\n });\n\n describe('orphaned build phase cleanup', () => {\n beforeEach(() => {\n // Set up targets with orphaned build phase references\n xcodeProject.objects.PBXNativeTarget = {\n 'target-1': {\n isa: 'PBXNativeTarget',\n name: 'Target1',\n buildPhases: [\n {\n value: 'orphaned-phase-1',\n comment: 'Upload Debug Symbols to Sentry',\n },\n {\n value: 'valid-phase',\n comment: 'Sources',\n },\n ],\n },\n 'target-2': {\n isa: 'PBXNativeTarget',\n name: 'Target2',\n buildPhases: [\n {\n value: 'orphaned-phase-2',\n comment: 'Upload Debug Symbols to Sentry',\n },\n ],\n },\n };\n\n // PBXShellScriptBuildPhase doesn't have the orphaned phases\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n 'valid-phase': {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo valid\"',\n buildActionMask: 2147483647,\n files: [],\n inputPaths: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n shellPath: '/bin/sh',\n },\n };\n });\n\n it('should remove orphaned build phase references from all targets', () => {\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'Target1',\n uploadSource: true,\n });\n\n // -- Assert --\n const target1 = xcodeProject.objects.PBXNativeTarget?.[\n 'target-1'\n ] as PBXNativeTarget;\n const target2 = xcodeProject.objects.PBXNativeTarget?.[\n 'target-2'\n ] as PBXNativeTarget;\n\n // Target1 should only have the valid phase left, plus the new Sentry phase\n expect(target1?.buildPhases).not.toEqual(\n expect.arrayContaining([\n expect.objectContaining({ value: 'orphaned-phase-1' }),\n ]),\n );\n expect(target1?.buildPhases).toEqual(\n expect.arrayContaining([\n expect.objectContaining({ value: 'valid-phase' }),\n ]),\n );\n\n // Target2 should have orphaned phase removed and be empty\n expect(target2?.buildPhases).not.toEqual(\n expect.arrayContaining([\n expect.objectContaining({ value: 'orphaned-phase-2' }),\n ]),\n );\n });\n });\n });\n\n describe('addUploadSymbolsScript edge cases', () => {\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n xcodeProject = new XcodeProject(singleTargetProjectPath);\n });\n\n describe('when target is not found', () => {\n it('should handle gracefully without throwing', () => {\n // -- Act & Assert --\n expect(() => {\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'NonExistentTarget',\n uploadSource: true,\n });\n }).not.toThrow();\n });\n });\n });\n\n describe('addScriptBuildPhase method coverage', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'add-script-build-phase'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('when PBXShellScriptBuildPhase does not exist initially', () => {\n it('should initialize PBXShellScriptBuildPhase and add build phase', () => {\n // -- Arrange --\n // Set PBXShellScriptBuildPhase to empty to test initialization path\n delete xcodeProject.objects.PBXShellScriptBuildPhase;\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n\n // -- Act --\n const buildPhaseId = xcodeProject.addScriptBuildPhase(\n targetKey,\n 'Test Script',\n 'echo \"test\"',\n ['input.txt'],\n );\n\n // -- Assert --\n expect(xcodeProject.objects.PBXShellScriptBuildPhase).toBeDefined();\n expect(buildPhaseId).toMatch(/^[A-F0-9]{24}$/i);\n\n const buildPhase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[buildPhaseId];\n expect(buildPhase).toBeDefined();\n expect(typeof buildPhase).not.toBe('string');\n });\n });\n\n describe('when target does not exist', () => {\n it('should still create build phase but not add to target', () => {\n // -- Arrange --\n const invalidTargetKey = 'INVALID_TARGET_KEY';\n\n // -- Act --\n const buildPhaseId = xcodeProject.addScriptBuildPhase(\n invalidTargetKey,\n 'Test Script',\n 'echo \"test\"',\n [],\n );\n\n // -- Assert --\n expect(buildPhaseId).toMatch(/^[A-F0-9]{24}$/i);\n\n // Build phase should be created in PBXShellScriptBuildPhase\n const buildPhase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[buildPhaseId];\n expect(buildPhase).toBeDefined();\n\n // But target should not have the build phase added since target doesn't exist\n const target =\n xcodeProject.objects.PBXNativeTarget?.[invalidTargetKey];\n expect(target).toBeUndefined();\n });\n });\n\n describe('when target has no buildPhases array', () => {\n it('should not add build phase to target but should create build phase object', () => {\n // -- Arrange --\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n const target = xcodeProject.objects.PBXNativeTarget?.[targetKey];\n if (target && typeof target !== 'string') {\n // Remove buildPhases to test the undefined case\n const targetWithoutBuildPhases = target as unknown as {\n buildPhases: undefined;\n };\n delete targetWithoutBuildPhases.buildPhases;\n }\n\n // -- Act --\n const buildPhaseId = xcodeProject.addScriptBuildPhase(\n targetKey,\n 'Test Script',\n 'echo \"test\"',\n [],\n );\n\n // -- Assert --\n expect(buildPhaseId).toMatch(/^[A-F0-9]{24}$/i);\n\n // Build phase should be created\n const buildPhase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[buildPhaseId];\n expect(buildPhase).toBeDefined();\n\n // Target should exist but buildPhases should still be undefined\n const updatedTarget = xcodeProject.objects.PBXNativeTarget?.[\n targetKey\n ] as PBXNativeTarget | undefined;\n expect(updatedTarget).toBeDefined();\n expect(updatedTarget?.buildPhases).toBeUndefined();\n });\n });\n });\n\n describe('updateScriptBuildPhase method coverage', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'update-script-build-phase'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('when build phase does not exist', () => {\n it('should debug and return early', () => {\n // -- Act & Assert --\n expect(() => {\n xcodeProject.updateScriptBuildPhase(\n 'NONEXISTENT_BUILD_PHASE',\n 'echo \"updated\"',\n ['input.txt'],\n );\n }).not.toThrow();\n });\n });\n\n describe('when build phase is a string comment', () => {\n it('should debug and return early', () => {\n // -- Arrange --\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n 'test-id': 'This is a comment string',\n };\n\n // -- Act & Assert --\n expect(() => {\n xcodeProject.updateScriptBuildPhase('test-id', 'echo \"updated\"', [\n 'input.txt',\n ]);\n }).not.toThrow();\n });\n });\n\n describe('when build phase exists and is valid', () => {\n it('should update the build phase successfully', () => {\n // -- Arrange --\n const buildPhaseId = 'test-build-phase-id';\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n [buildPhaseId]: {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo \\\\\"old script\\\\\"\"',\n inputPaths: ['old-input.txt'],\n shellPath: '/bin/sh',\n buildActionMask: 2147483647,\n files: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n },\n };\n\n // -- Act --\n xcodeProject.updateScriptBuildPhase(\n buildPhaseId,\n 'echo \"new script\"',\n ['new-input.txt'],\n );\n\n // -- Assert --\n const buildPhase = xcodeProject.objects.PBXShellScriptBuildPhase?.[\n buildPhaseId\n ] as PBXShellScriptBuildPhase;\n expect(buildPhase).toBeDefined();\n expect(buildPhase?.shellScript).toBe('\"echo \\\\\"new script\\\\\"\"');\n expect(buildPhase?.inputPaths).toEqual(['new-input.txt']);\n expect(buildPhase?.shellPath).toBe('/bin/sh');\n });\n });\n });\n\n describe('addUploadSymbolsScript method comprehensive coverage', () => {\n let sourceProjectPath: string;\n let tempProjectPath: string;\n let xcodeProject: XcodeProject;\n\n beforeEach(() => {\n const tempDir = fs.mkdtempSync(\n path.join(os.tmpdir(), 'add-upload-symbols-comprehensive'),\n );\n\n sourceProjectPath = singleTargetProjectPath;\n tempProjectPath = path.resolve(tempDir, 'project.pbxproj');\n\n fs.copyFileSync(sourceProjectPath, tempProjectPath);\n xcodeProject = new XcodeProject(tempProjectPath);\n });\n\n describe('when PBXShellScriptBuildPhase does not exist initially', () => {\n it('should initialize PBXShellScriptBuildPhase and add new build phase', () => {\n // -- Arrange --\n delete xcodeProject.objects.PBXShellScriptBuildPhase;\n\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'Project',\n uploadSource: true,\n });\n\n // -- Assert --\n expect(xcodeProject.objects.PBXShellScriptBuildPhase).toBeDefined();\n\n // Should have created a new build phase\n const buildPhases = Object.keys(\n xcodeProject.objects.PBXShellScriptBuildPhase || {},\n );\n const actualBuildPhases = buildPhases.filter(\n (key) => !key.endsWith('_comment'),\n );\n expect(actualBuildPhases.length).toBeGreaterThan(0);\n });\n });\n\n describe('when target has buildPhases but no existing Sentry script', () => {\n it('should iterate through buildPhases and add new script', () => {\n // -- Arrange --\n // Ensure target has buildPhases but none contain sentry-cli\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n const target = xcodeProject.objects.PBXNativeTarget?.[targetKey];\n if (target && typeof target !== 'string') {\n target.buildPhases = [\n { value: 'some-other-phase', comment: 'Sources' },\n { value: 'another-phase', comment: 'Frameworks' },\n ];\n }\n\n // Ensure PBXShellScriptBuildPhase exists but without sentry-cli scripts\n xcodeProject.objects.PBXShellScriptBuildPhase = {\n 'some-other-phase': {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo \\\\\"other script\\\\\"\"',\n buildActionMask: 2147483647,\n files: [],\n inputPaths: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n shellPath: '/bin/sh',\n },\n 'another-phase': {\n isa: 'PBXShellScriptBuildPhase',\n shellScript: '\"echo \\\\\"another script\\\\\"\"',\n buildActionMask: 2147483647,\n files: [],\n inputPaths: [],\n outputPaths: [],\n runOnlyForDeploymentPostprocessing: 0,\n shellPath: '/bin/sh',\n },\n };\n\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'Project',\n uploadSource: true,\n });\n\n // -- Assert --\n // Should have added a new Sentry build phase (calls addScriptBuildPhase path)\n const buildPhases = Object.keys(\n xcodeProject.objects.PBXShellScriptBuildPhase || {},\n );\n const actualBuildPhases = buildPhases.filter(\n (key) => !key.endsWith('_comment'),\n );\n expect(actualBuildPhases.length).toBeGreaterThan(2); // Should have more than the original 2\n\n // Find the new Sentry script\n const sentryPhase = actualBuildPhases.find((phaseId) => {\n const phase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[phaseId];\n return (\n phase &&\n typeof phase !== 'string' &&\n phase.shellScript?.includes('sentry-cli')\n );\n });\n expect(sentryPhase).toBeDefined();\n });\n });\n\n describe('when target has no buildPhases', () => {\n it('should skip the buildPhases iteration and add new script', () => {\n // -- Arrange --\n const targetKey = 'D4E604CC2D50CEEC00CAB00F';\n const target = xcodeProject.objects.PBXNativeTarget?.[targetKey];\n if (target && typeof target !== 'string') {\n // Set buildPhases to undefined to test the skip path\n target.buildPhases = undefined;\n }\n\n // -- Act --\n xcodeProject.addUploadSymbolsScript({\n sentryProject: projectData,\n targetName: 'Project',\n uploadSource: true,\n });\n\n // -- Assert --\n // Should have added a new Sentry build phase via the else branch (addScriptBuildPhase)\n const buildPhases = Object.keys(\n xcodeProject.objects.PBXShellScriptBuildPhase || {},\n );\n const actualBuildPhases = buildPhases.filter(\n (key) => !key.endsWith('_comment'),\n );\n expect(actualBuildPhases.length).toBeGreaterThan(0);\n\n // Find the new Sentry script\n const sentryPhase = actualBuildPhases.find((phaseId) => {\n const phase =\n xcodeProject.objects.PBXShellScriptBuildPhase?.[phaseId];\n return (\n phase &&\n typeof phase !== 'string' &&\n phase.shellScript?.includes('sentry-cli')\n );\n });\n expect(sentryPhase).toBeDefined();\n });\n });\n });\n });\n});\n"]}